Name: series-workflowp4vhn Phase: Succeeded StartedAt: 2026-09-06 17:48:10 +0000 UTC FinishedAt: 2026-09-06 19:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[0] Phase: Succeeded StartedAt: 2026-09-06 17:48:10 +0000 UTC FinishedAt: 2026-09-06 18:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 17:48:10 +0000 UTC FinishedAt: 2026-09-06 18:06:25 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "c21706d6-91b0-4aba-a039-998cbffdd382" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete", "usbnet_start_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgb25seSBJUlEtc2FmZXR5IGFuZCBwZXItQ1BVIHBvaW50ZXIgc3luY2hyb25pemF0aW9uIGZvciBzdGF0cyB1cGRhdGVzOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXG4zLiBObyBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVkMDMyYzM4OGFlMjk5YzY5MDM3MWE1NTE2NDE0ZTIyMTQ4MzNlNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjA1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludFx0c3RhdHVzO1xuIFxuQEAgLTMzOCwxMCAmIzQzOzMzOCwxMyBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbi1cdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7XHUwMDNjIHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXhcXG5cJiMzNDssXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyAmIzQzOzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuIFxuIFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuLVx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiAgKi8KIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludAlzdGF0dXM7CiAKQEAgLTMzOCwxMCAmIzQzOzMzOCwxMyBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSAwKQogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtJmd0O25ldCk7CiAKLQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCXU2NF9zdGF0c19pbmMoJmFtcDtzdGF0czY0LSZndDtyeF9wYWNrZXRzKTsKIAl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKLQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LSZndDtuZXQsICYjMzQ7Jmx0OyByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4mIzM0OywKIAkJICBza2ItJmd0O2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTI5OCwxMyAmIzQzOzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0mZ3Q7ZGV2OwogCiAJaWYgKHVyYi0mZ3Q7c3RhdHVzID09IDApIHsKLQkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCXN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfcGFja2V0cywgZW50cnktJmd0O3BhY2tldHMpOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfYnl0ZXMsIGVudHJ5LSZndDtsZW5ndGgpOwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWRldi0mZ3Q7bmV0LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gVGhlIGNydWNpYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgc3RhdGlzdGljcyB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgLgoKQWgsIEkgc2VlIGl0LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVjYXVzZSBpdCB3YXMgdXNpbmcgYHRoaXNfY3B1X3B0cmAgd2l0aG91dCBwcm9wZXIgaW50ZXJydXB0L3ByZWVtcHRpb24gcHJvdGVjdGlvbi4gVGhhdCBjb3VsZCBsZWFkIHRvIGEgQ1BVIG1pZ3JhdGlvbiBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHN0YXRzIHVwZGF0ZSwgb3IgZXZlbiBhbiBpbnRlcnJ1cHQganVtcGluZyBpbiBiZXR3ZWVuLCBjYXVzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IENQVSB0byBiZSBhY2Nlc3NlZCBhbmQvb3IgbG9ja2VkLiAgVGhlIHVwZGF0ZWQgY29kZSBub3cgY29ycmVjdGx5IHNhdmVzIGludGVycnVwdHMsIGdldHMgdGhlIGB0aGlzX2NwdV9wdHJgLCAqdGhlbiogc3RhcnRzIHRoZSBzdGF0cyB1cGRhdGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGVuc3VyaW5nIGF0b21pY2l0eSB3aGVuIGFjY2Vzc2luZyBwZXItQ1BVIGRhdGEgaXMgY3JpdGljYWwsIGFuZCB0aGlzIGlzIHRoZSByaWdodCB3YXkgdG8gZG8gaXQuIFRoZSBsb2NhbCBpbnRlcnJ1cHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWtlIGl0IHNhZmUuCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyBgdXNibmV0YCBldmVuIHJlbGV2YW50IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBMZXQmIzM5O3Mgc2VlLi4uICBZZXMsIFVTQiBnYWRnZXQgZW11bGF0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCBpbiBzeXprYWxsZXIvUUVNVSwgd2l0aCBVU0IgZGV2aWNlcyBhbmQgbmV0d29yayBkcml2ZXJzIGJlaW5nIHN0YW5kYXJkIGVtdWxhdGVkIGRldmljZXMuICBTcGVjaWZpY2FsbHksIHdlIGhhdmUgdGhlICYjMzQ7VVNCIFJhdyBHYWRnZXQmIzM0OyBhbmQgZnVsbCBVU0IgZnV6emluZyB2aWEgZHVtbXlfaGNkIG9yIHJhd19nYWRnZXQuICBgdXNibmV0YCBpdHNlbGYgaXMgYSBjZW50cmFsIGRyaXZlciBtb2R1bGUsIHVzZWQgYnkgbWFueSBVU0IgbmV0d29yayBkZXZpY2VzIGxpa2UgY2RjX2V0aGVyLCBhc2l4LCBheDg4MTc5XzE3OGEsIGFuZCwgb2YgY291cnNlLCBjYW4gYmUgYm91bmQgaXRzZWxmLiAgU28sIHRoaXMgaXMgYSByZWxldmFudCBhcmVhIGZvciB1cyB0byBhbmFseXplLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gY29uZmlybSBub3RoaW5nIHVudXN1YWwgaXMgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjctXHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjktXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xOTg9Y29uZmlnIFVTQl9ORVRfQVg4ODE3OV8xNzhBXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODgxNzkvMTc4QSBVU0IgMy4wLzIuMCB0byBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyMDA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxOS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI0ND1jb25maWcgVVNCX05FVF9DRENfRUVNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtDREMgRUVNIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI1OD1jb25maWcgVVNCX05FVF9DRENfTkNNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtDREMgTkNNIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI2MDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI3OS1cdHRyaXN0YXRlIFwmIzM0O0h1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyODA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI4MS1cdHNlbGVjdCBVU0JfV0RNXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjkzPWNvbmZpZyBVU0JfTkVUX0NEQ19NQklNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yOTQtXHR0cmlzdGF0ZSBcJiMzNDtDREMgTUJJTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5Ni1cdHNlbGVjdCBVU0JfV0RNXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzExPWNvbmZpZyBVU0JfTkVUX0RNOTYwMVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7RGF2aWNvbSBETTk2eHggYmFzZWQgVVNCIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozMTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyMC1cdHRyaXN0YXRlIFwmIzM0O0NvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozMjE6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMjY9Y29uZmlnIFVTQl9ORVRfU1I5ODAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjctXHR0cmlzdGF0ZSBcJiMzNDtDb3JlQ2hpcC1zeiBTUjk4MDAgYmFzZWQgVVNCIDIuMCAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjktXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgTEFONzVYWCBiYXNlZCBVU0IgMi4wIGdpZ2FiaXQgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzQzOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXHRzZWxlY3QgQklUUkVWRVJTRVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUyLVx0dHJpc3RhdGUgXCYjMzQ7U01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM1MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzU0LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM2ND1jb25maWcgVVNCX05FVF9HTDYyMEFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM2NS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVTeXMgR0w2MjBVU0ItQSBiYXNlZCBjYWJsZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM3Mz1jb25maWcgVVNCX05FVF9ORVQxMDgwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc1LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zODI9Y29uZmlnIFVTQl9ORVRfUExVU0Jcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zODUtXHQjIGFyZSBldmVyIHJlc29sdmVkIC4uLiB0aGVuIHJlbW92ZSBcJiMzNDtleHBlcmltZW50YWxcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM4NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM5MT1jb25maWcgVVNCX05FVF9NQ1M3ODMwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtNb3NDaGlwIE1DUzc4MzAgYmFzZWQgRXRoZXJuZXQgYWRhcHRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzk0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM5OT1jb25maWcgVVNCX05FVF9STkRJU19IT1NUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGZvciBSTkRJUyBhbmQgQWN0aXZlU3luYyBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo0MDE6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjQyMDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDIxLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDk0PWNvbmZpZyBVU0JfTkVUX1pBVVJVU1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDk1LVx0dHJpc3RhdGUgXCYjMzQ7U2hhcnAgWmF1cnVzIChzdG9jayBST01zKSBhbmQgY29tcGF0aWJsZVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTctXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUxMj1jb25maWcgVVNCX05FVF9DWDgyMzEwX0VUSFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQ1g4MjMxMCBVU0IgZXRoZXJuZXQgcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTE0Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7U2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTIyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTMwPWNvbmZpZyBVU0JfTkVUX1FNSV9XV0FOXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MzEtXHR0cmlzdGF0ZSBcJiMzNDtRTUkgV1dBTiBkcml2ZXIgZm9yIFF1YWxjb21tIE1TTSBiYXNlZCAzRyBhbmQgTFRFIG1vZGVtc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MzMtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU2Mz1jb25maWcgVVNCX05FVF9JTlQ1MVgxXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbGxvbiBQTEMgYmFzZWQgdXNiIGFkYXB0ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU2NTpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtDREMgUGhvbmV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU3NDpcdGRlcGVuZHMgb24gUEhPTkVUIFx1MDAyNlx1MDAyNiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTkxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1OTI6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MTQ9Y29uZmlnIFVTQl9ORVRfQ0g5MjAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTUtXHR0cmlzdGF0ZSBcJiMzNDtRaW5nSGVuZyBDSDkyMDAgVVNCIGV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE3LVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTYyNT1jb25maWcgVVNCX05FVF9BUUMxMTFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cdHRyaXN0YXRlIFwmIzM0O0FxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjI3Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcdCYjNDM7PSBtY3M3ODMwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfVVNCX1VTQk5FVClcdCYjNDM7PSB1c2JuZXQub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19VU0JfTkVUX0lOVDUxWDEpXHQmIzQzOz0gaW50NTF4MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFVTQl9VU0JORVRgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBpZiBgVVNCX1VTQk5FVGAgaXMgc2VsZWN0ZWQuIFRoaXMgaXMgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZml0cyBpbnRvIHRoZSBicm9hZGVyIFVTQiBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBhbnkgY3JpdGljYWwgcHJlY29uZGl0aW9ucyBvciBoYXJkd2FyZSBzcGVjaWZpYyBlbGVtZW50cywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0ICBMQU43ODAxIDogVVNCIDMgdG8gMTAvMTAwLzEwMDAgRXRoZXJuZXQgYWRhcHRlciAoTUFDIG9ubHkpXG4gMTI2Olx0XG4gMTI3Olx0XHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIFVTQl9VU0JORVRcbiAxMzM6XHRcdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gMTM0Olx0XHRzZWxlY3QgTUlJXG4gMTM1Olx0XHRoZWxwXG4gMTM2Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcbiAxMzc6XHRcdCAgd2l0aCBcJiMzNDttaW5pZHJpdmVyc1wmIzM0OyBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxuIDEzODpcdFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcbiAxMzk6XHRcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuIDE0MjpcdFxuIDE0MzpcdFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFwmIzM0O25ldHdvcmtcJiMzNDsgb3IgXCYjMzQ7ZGF0YSB0cmFuc2ZlclwmIzM0O1xuIDE0NDpcdFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcbiAxNDU6XHRcdCAgICBcJiMzNDtMYXBsaW5rXCYjMzQ7IHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcbiAxNDY6XHRcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxuIDE0OTpcdFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIFVTQiBuZXR3b3JrIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzZWN0aW9uIGlzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGBtZW51Y29uZmlnYCBvciBvdGhlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBsb29rIGZvciBrZXkgaW5kaWNhdG9yczogQXJlIHRoZXJlIGFueSB0b3AtbGV2ZWwgZGVwZW5kZW5jaWVzLCBsaWtlIGEgZGlyZWN0IGBtZW51Y29uZmlnYCBibG9jaywgb3IgcGVyaGFwcyBhbiBgaWYgTkVUX0VUSEVSTkVUYCBndWFyZD8gTWF5YmUgaXQmIzM5O3MgZGlyZWN0bHkgY29udHJvbGxlZCBieSBgVVNCX05FVF9EUklWRVJTYD8gSWRlbnRpZnlpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hlbiB0aGVzZSBVU0IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyBiZWNvbWUgdmlzaWJsZSBhbmQgY29uZmlndXJhYmxlIGluIHRoZSBidWlsZCBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCBjb2RlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0czoKCioqVVNCIE5ldHdvcmsgRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBVU0IgbmV0d29yayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gQ2xlYXJseSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzeXN0ZW0gdGhhdCYjMzk7cyBlbmFibGVkIGZvciBVU0IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IGF0IGEgYmFzZSBsZXZlbC4gVGhlIGBVU0JfTkVUX0RSSVZFUlNgIHNwZWNpZmljYWxseSBoaW50cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2R1bGUgZm9yIGhhbmRsaW5nIGEgcmFuZ2Ugb2YgVVNCLWJhc2VkIG5ldHdvcmsgYWRhcHRlcnMuIGBVU0JgIGlzIHRoZSBvYnZpb3VzIGNvbm5lY3Rpb24gaGVyZSwgdGhpcyBpcyBhIGNvcmUgcmVxdWlyZW1lbnQsIGFzIGlzIGBORVRgLCBzaW5jZSB0aGlzIGlzIG9idmlvdXNseSByZWxhdGVkIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4KCk15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBpcyBvbiB0aGUgYWN0dWFsIGRhdGEgZmxvdyBhbmQgY29tcGxldGlvbiBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIG5ldHdvcmsgcGFja2V0cyBvdmVyIHRoZSBVU0IgYnVzLiBTbywgSSBuZWVkIHRvIGNoZWNrIG91dCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gVGhvc2UgZnVuY3Rpb25zIHdpbGwgdW5kb3VidGVkbHkgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgcGFja2V0cyBhcmUgcXVldWVkLCB0cmFuc21pdHRlZCwgYW5kIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggdGhlIGNvbXBsZXRpb24gb2YgdGhvc2UgdHJhbnNtaXNzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgYHVzYm5ldF9za2JfcmV0dXJuYCBiZWNhdXNlIHRoYXQsIGZyb20gdGhlIG5hbWUgYWxvbmUsIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgcmV0dXJuaW5nIFNLQnMgLSBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIGRlYWxsb2NhdGlvbiBvZiBuZXR3b3JrIGJ1ZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0LyogUGFzc2VzIHRoaXMgcGFja2V0IHVwIHRoZSBzdGFjaywgdXBkYXRpbmcgaXRzIGFjY291bnRpbmcuXG4gMzIzOlx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xuIDMyNDpcdCAqIGNhbiByZXR1cm4gY2xvbmVzIGFzIHdlbGwgYXMganVzdCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYi5cbiAzMjU6XHQgKi9cbiAzMjY6XHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMjc6XHR7XG4gMzI4Olx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiAzMjk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzMwOlx0XHRpbnRcdHN0YXR1cztcbiAzMzE6XHRcbiAzMzI6XHRcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbiAzMzM6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcbiAzMzQ6XHRcdFx0cmV0dXJuO1xuIDMzNTpcdFx0fVxuIDMzNjpcdFxuIDMzNzpcdFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xuIDMzODpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIDMzOTpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIDM0MDpcdFxuIDM0MTpcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIDM0MjpcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQzOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NDpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0NTpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDY6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NzpcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIDM0ODpcdFxuIDM0OTpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNTA6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNTE6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTI6XHRcbiAzNTM6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzU0Olx0XHRcdHJldHVybjtcbiAzNTU6XHRcbiAzNTY6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NzpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTg6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1OTpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQ29tcHJlaGVuc2l2ZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIFtpbXBsaWVkIHByaW9yIGZvY3VzIC0gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciB0YXNrXS4gSXQmIzM5O3MgY3J1Y2lhbCwgb2J2aW91c2x5LCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIEkgY2FuJiMzOTt0IGJlICp0b28qIGdyYW51bGFyLiBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyBhaGVhZCB0byB0aGUgcGxhY2VzIHdoZXJlIGVycm9ycyBtYXkgYmUuIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBteSBoaWdoLWxldmVsIHByb2Nlc3MgLSB0aGUgZW50aXJlIHRyYW5zYWN0aW9uIGZyb20gc3RhcnQgdG8gZmluaXNoIC0gaGFzIGJlZW4gYWNjb3VudGVkIGZvci4gQW5kIGluIHRoaXMgY2FzZSB0aGF0IG1lYW5zLCBiZXlvbmQgbXkgaW5pdGlhbCBjaGVja2xpc3QsIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYW5kIGRvdWJsZS1jaGVjayBgdHhfY29tcGxldGVgLiBUaGlzIGtleSB2YXJpYWJsZSwgcHJvY2VzcywgY29uZGl0aW9uLCB3aGF0ZXZlciB0aGUgY29udGV4dCwgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGEgY29tcGxldGUgdHJhbnNhY3Rpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiwgYW5kIGl0JiMzOTtzIGltcGVyYXRpdmUgdGhhdCAqaXRzKiBzdGF0ZSBpcyBjb3JyZWN0LiBBIGZ1bGx5IGNvbXBsZXRlZCwgZXJyb3IgZnJlZSwgdmFsaWRhdGVkIGB0eF9jb21wbGV0ZWAgaXMgbm93IHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzKVxuMTI5MjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MzpcdH1cbjEyOTQ6XHRcbjEyOTU6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NjpcdFxuMTI5NzpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTg6XHR7XG4xMjk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTMwMDpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTMwMTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwNDpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjEzMDY6XHRcbjEzMDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuMTMwODpcdFx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDk6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMTA6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMxMTpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzEyOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMxMzpcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4xMzE0Olx0XHR9IGVsc2Uge1xuMTMxNTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzE2Olx0XG4xMzE3Olx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxODpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTk6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzIwOlx0XHRcdFx0YnJlYWs7XG4xMzIxOlx0XG4xMzIyOlx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMjM6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzI0Olx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyNTpcdFx0XHRcdGJyZWFrO1xuMTMyNjpcdFxuMTMyNzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI4Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IHVzYm5ldC5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBpcyB0aGlzIGB1c2JuZXQuY2AgY29kZSBldmVuIHJlYWNoYWJsZT8gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIGl0IGlzLiBJdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBVU0IgbmV0d29yayBkcml2ZXIgc3RhY2ssIHNvIHdpdGggVVNCIGVtdWxhdGlvbiwgZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gcmF3IGdhZGdldCBzZXR1cHMgaW4gc3l6a2FsbGVyLCB3ZSYjMzk7cmUgbGlrZWx5IGhpdHRpbmcgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aGVuIHBhY2tldHMgYXJlIG1vdmluZyBvdmVyIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuIEdvb2QsIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzdGFydC4KCk5leHQsIGRvIHRoZSBjb2RlIGNoYW5nZXMgYWN0dWFsbHkgYWx0ZXIgZXhlY3V0YWJsZSBsb2dpYz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY3JpdGljYWwgY2hhbmdlIGludm9sdmVzIGhhbmRsaW5nIHBlci1DUFUgcG9pbnRlciBhY2Nlc3MgdG8gbmV0d29yayBzdGF0aXN0aWNzLiBCeSBtb3ZpbmcgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbiwgdGhleSYjMzk7cmUgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gcHJlZW1wdGlvbiBvciBDUFUgbWlncmF0aW9uIHdoZW4gcmVhZGluZyB0aG9zZSBwZXItQ1BVIHN0YXRzLiBUaGlzIGlzIGEgc29saWQsIHRhcmdldGVkIGZpeC4KClRoZXJlZm9yZSwgaXMgdGhpcyBwYXRjaCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7PyBEZWZpbml0ZWx5LiBJdCYjMzk7cyBhIGNsZWFyICYjMzQ7dHJ1ZSYjMzQ7IGJhc2VkIG9uIHRoZSBhbmFseXNpcy4gTm93LCBmb3IgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdoaWxlIHRoZSBlbnRpcmUgbmV0d29yayBkcml2ZXIgY29kZSBpcyBpbnRlcmVzdGluZywgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXRjaCBhcmUgc3BlY2lmaWM6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlcy4gSXQgYWxzbyBtaWdodCBiZSB1c2VmdWwgdG8gY2hlY2sgb3RoZXIgY2FsbGVycyBsaWtlIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGB1c2JuZXRfYmhgLCBhbmQgYHJ4X2NvbXBsZXRlYCwgYnV0IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLgoKSSBzZWUgdGhhdCBgdHhfY29tcGxldGVgIGlzIHN0YXRpYyBpbiBgdXNibmV0LmNgLCBidXQgdGhhdCBzaG91bGRuJiMzOTt0IHN0b3AgdXMuIFN5emthbGxlci9rY292IGlzIGFibGUgdG8gdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyB3aGVuIHRoZXkgYXBwZWFyIGluIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHVzYm5ldF9za2JfcmV0dXJuYCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIHN5bWJvbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucywgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGJvdGggYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aXRoaW4gYHVzYm5ldC5jYCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHVzYm5ldF9za2JfcmV0dXJufHR4X2NvbXBsZXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzEyPXN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzI1LSAqL1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjMyNjp2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjM2MTpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzYyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz01NzI9c3RhdGljIGlubGluZSBpbnQgcnhfcHJvY2VzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTU5My1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo1OTQ6XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTk1LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTcwMD12b2lkIHVzYm5ldF9yZXN1bWVfcngoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MDgtXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UpKSAhPSBOVUxMKSB7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NzA5Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzEwLVx0XHRudW0mIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg2PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTc6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNDA0PW5ldGRldl90eF90IHVzYm5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDAtXHR1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi1cdTAwM2V1ZGV2LCBkZXYtXHUwMDNlb3V0LFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE0NDE6XHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiwgdHhfY29tcGxldGUsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQ0Mi1cdGlmIChkZXYtXHUwMDNlY2FuX2RtYV9zZykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBVU0IgRXRoZXJuZXQ6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIGZ1enppbmcgYFVTQl9VU0JORVRgLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgIGluIG15IHNpZ2h0cy4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSBjb3ZlciBldmVyeXRoaW5nLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlnIG5lZWRlZCDigJMgSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQsIGJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSB0d28sIGluIHBhcnRpY3VsYXI6IGBVU0JfVVNCTkVUYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBgdXNibmV0X3NrYl9yZXR1cm5gLCBgdHhfY29tcGxldGVgLCBhbmQgYHVzYm5ldF9zdGFydF94bWl0YC4gWWVwLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBob25lIGluIG9uLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIHRoZSByaWdodCBhcmVhcyBmb3IgZnV6emluZy4KCkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZXF1aXJlbWVudHMsIGFuZCBpdCBhbGwgY2hlY2tzIG91dC4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyB0cnVlLCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzcGVjaWZpYywgYW5kIHRoZSBFbmFibGVDb25maWdzIGFyZSBwcm9wZXJseSBkZWZpbmVkIHdpdGhvdXQgdGhlIENPTkZJR18gcHJlZml4LiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBDb25maWRlbnQgd2UmIzM5O3ZlIGdvdCB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7dXNibmV0X3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgb25seSBJUlEtc2FmZXR5IGFuZCBwZXItQ1BVIHBvaW50ZXIgc3luY2hyb25pemF0aW9uIGZvciBzdGF0cyB1cGRhdGVzOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXG4zLiBObyBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkMDMyYzM4OGFlMjk5YzY5MDM3MWE1NTE2NDE0ZTIyMTQ4MzNlNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE4OjA1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQm5ldCBTdGF0aXN0aWNzIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBjZW50cmFsIG1vZGlmaWNhdGlvbiBpcyB0aGUgcmVsb2NhdGlvbiBvZiB0aGUgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCAvIGBsb2NhbF9pcnFfcmVzdG9yZShmbGFncylgIGNyaXRpY2FsIHNlY3Rpb24uCgpCZWZvcmUsIHdlIGhhZCB0aGUgZm9sbG93aW5nOgoKYGBgYwpzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKLy8gLi4uc3RhdHMgdXBkYXRlLi4uCmBgYApBZnRlcjoKYGBgYwpsb2NhbF9pcnFfc2F2ZShmbGFncyk7CnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7Ci8vIC4uLnN0YXRzIHVwZGF0ZS4uLgpsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmBgYAoKVGhlIG1vdGl2YXRpb24gaXMgZmFpcmx5IG9idmlvdXM6IGB0aGlzX2NwdV9wdHIoKWAgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbi9pbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBkb2VzbiYjMzk7dCBtaWdyYXRlIENQVXMgaW4gdGhlIG1pZGRsZSBvZiBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgZGF0YSwgYXZvaWRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBlc3BlY2lhbGx5IGlmIHByZWVtcHRpb24gaXMgZW5hYmxlZCwgd2hpY2ggd291bGQgdHJpZ2dlciBhIGBERUJVR19QUkVFTVBUYCB3YXJuaW5nLiBCeSB3cmFwcGluZyB0aGUgYHRoaXNfY3B1X3B0cmAgY2FsbCB3aXRoaW4gdGhlIElSUS1kaXNhYmxlZCByZWdpb24sIHdlIGd1YXJhbnRlZSB0aGlzIGNydWNpYWwgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBzYWZldHkgaW1wbGljYXRpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGlzc3Vlcywgb3IgcG90ZW50aWFsIGRhdGEgcmFjZXMuIEkgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMsIGFuZCBubyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEkmIzM5O3ZlIGFsc28gY2hlY2tlZCBmb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGJ5IGBsb2NhbF9pcnFfc2F2ZWAsIGFuZCB0aGUgYHN0YXRzNjRgIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBkYXRhIHBhcnNpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucy4KClNvLCBpbiB0aGlzIGNhc2UsIGEgZGVlcCBkaXZlIHdpdGggS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgY2hlY2tzLiBXZSYjMzk7cmUgcHVyZWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFyb3VuZCBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIERFQlVHX1BSRUVNUFQgd2lsbCB0YWtlIGNhcmUgb2YgZGV0ZWN0aW5nIGNvbmN1cnJlbmN5LCBib3VuZHMsIGFuZCBVQUYgaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gd2lsbCBub3QgYmUgbmVlZGVkIGhlcmUuIEkmIzM5O2xsIHN0aWxsIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHVzaW5nIHRvb2xzIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFzIGEgZmluYWwgbWVhc3VyZSwgYnV0IEkgZG9uJiMzOTt0IGFudGljaXBhdGUgYW55IGlzc3Vlcy4KCkxldCBtZSBzdW1tYXJpemUgdGhpcyBjb25jaXNlbHk6CgoqICAgKipUaGUgUGF0Y2gmIzM5O3MgUHVycG9zZToqKiBUaGUgcGF0Y2ggY29ycmVjdHMgYSBwb3RlbnRpYWwgcHJlZW1wdGlvbiBpc3N1ZSBpbiBVU0JuZXQgYnkgbW92aW5nIHRoZSBgdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpYCBjYWxsIGluc2lkZSBhbiBJUlEtZGlzYWJsZWQgcmVnaW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmVzIHRoZSBpbnRlZ3JpdHkgb2YgcGVyLUNQVSBzdGF0aXN0aWNzIHVwZGF0ZXMuCiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIGFueSB1c2VyLXNwYWNlIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCiogICAqKlNhZmV0eSBBc3N1cmFuY2U6KiogS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmZWF0dXJlcyAoZS5nLiBgREVCVUdfUFJFRU1QVGAsIExPQ0tERVApIGFkZXF1YXRlbHkgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCB1bnRpbCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB2aWEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHBlci1DUFUgcG9pbnRlciByZXNvbHV0aW9uIG9jY3VycyBpbiBhbiBhdG9taWMsIG5vbi1wcmVlbXB0aWJsZSBjb250ZXh0LlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCB1bnRpbCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB2aWEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHBlci1DUFUgcG9pbnRlciByZXNvbHV0aW9uIG9jY3VycyBpbiBhbiBhdG9taWMsIG5vbi1wcmVlbXB0aWJsZSBjb250ZXh0LlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA1OjM5LjgwMjQwODkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjYwNzIxOTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIixcbiAgICBcInVzYm5ldF9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6MzkuODAyNDEzMjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAxMTcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZDAzMmMzODhhZTI5OWM2OTAzNzFhNTUxNjQxNGUyMjE0ODMzZTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gXFxuLVxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiBcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NDAuMjczMTg0Mjg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzQ5OTgyNDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCIsXG4gICAgXCJ1c2JuZXRfc3RhcnRfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgbmV0d29yayBkcml2ZXIgY29kZSBpbiB1c2JuZXQuYyBieSBtb3ZpbmcgdGhpc19jcHVfcHRyIHJldHJpZXZhbCBpbnNpZGUgbG9jYWxfaXJxX3NhdmUgY3JpdGljYWwgc2VjdGlvbnMgZHVyaW5nIHBhY2tldCByeCBhbmQgdHggc3RhdHMgdXBkYXRlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo0MC4yNzMxODY5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM5ODM3NDM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQm5ldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gVGhlIGNydWNpYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhleSdyZSBoYW5kbGluZyBzdGF0aXN0aWNzIHVwZGF0ZXMsIHNwZWNpZmljYWxseSBhcm91bmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAuXG5cbkFoLCBJIHNlZSBpdC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlY2F1c2UgaXQgd2FzIHVzaW5nIGB0aGlzX2NwdV9wdHJgIHdpdGhvdXQgcHJvcGVyIGludGVycnVwdC9wcmVlbXB0aW9uIHByb3RlY3Rpb24uIFRoYXQgY291bGQgbGVhZCB0byBhIENQVSBtaWdyYXRpb24gaGFwcGVuaW5nICpiZWZvcmUqIHRoZSBzdGF0cyB1cGRhdGUsIG9yIGV2ZW4gYW4gaW50ZXJydXB0IGp1bXBpbmcgaW4gYmV0d2VlbiwgY2F1c2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIGluY29ycmVjdCBDUFUgdG8gYmUgYWNjZXNzZWQgYW5kL29yIGxvY2tlZC4gIFRoZSB1cGRhdGVkIGNvZGUgbm93IGNvcnJlY3RseSBzYXZlcyBpbnRlcnJ1cHRzLCBnZXRzIHRoZSBgdGhpc19jcHVfcHRyYCwgKnRoZW4qIHN0YXJ0cyB0aGUgc3RhdHMgdXBkYXRlLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBlbnN1cmluZyBhdG9taWNpdHkgd2hlbiBhY2Nlc3NpbmcgcGVyLUNQVSBkYXRhIGlzIGNyaXRpY2FsLCBhbmQgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IHRvIGRvIGl0LiBUaGUgbG9jYWwgaW50ZXJydXB0IHNhdmUgYW5kIHJlc3RvcmUgbWFrZSBpdCBzYWZlLlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyBgdXNibmV0YCBldmVuIHJlbGV2YW50IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBMZXQncyBzZWUuLi4gIFllcywgVVNCIGdhZGdldCBlbXVsYXRpb24gaXMgZnVsbHkgc3VwcG9ydGVkIGluIHN5emthbGxlci9RRU1VLCB3aXRoIFVTQiBkZXZpY2VzIGFuZCBuZXR3b3JrIGRyaXZlcnMgYmVpbmcgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlcy4gIFNwZWNpZmljYWxseSwgd2UgaGF2ZSB0aGUgXCJVU0IgUmF3IEdhZGdldFwiIGFuZCBmdWxsIFVTQiBmdXp6aW5nIHZpYSBkdW1teV9oY2Qgb3IgcmF3X2dhZGdldC4gIGB1c2JuZXRgIGl0c2VsZiBpcyBhIGNlbnRyYWwgZHJpdmVyIG1vZHVsZSwgdXNlZCBieSBtYW55IFVTQiBuZXR3b3JrIGRldmljZXMgbGlrZSBjZGNfZXRoZXIsIGFzaXgsIGF4ODgxNzlfMTc4YSwgYW5kLCBvZiBjb3Vyc2UsIGNhbiBiZSBib3VuZCBpdHNlbGYuICBTbywgdGhpcyBpcyBhIHJlbGV2YW50IGFyZWEgZm9yIHVzIHRvIGFuYWx5emUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gY29uZmlybSBub3RoaW5nIHVudXN1YWwgaXMgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1MC42NzE1NjQzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzcyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX1VTQk5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2OS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE5OD1jb25maWcgVVNCX05FVF9BWDg4MTc5XzE3OEFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEVFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjU4PWNvbmZpZyBVU0JfTkVUX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkNEQyBOQ00gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI4MDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXFx0c2VsZWN0IFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5NC1cXHR0cmlzdGF0ZSBcXFwiQ0RDIE1CSU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk2LVxcdHNlbGVjdCBVU0JfV0RNXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTE9Y29uZmlnIFVTQl9ORVRfRE05NjAxXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJEYXZpY29tIERNOTZ4eCBiYXNlZCBVU0IgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXFx0dHJpc3RhdGUgXFxcIkNvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyMTpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyNy1cXHR0cmlzdGF0ZSBcXFwiQ29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyOS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU43NVhYIGJhc2VkIFVTQiAyLjAgZ2lnYWJpdCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzczPWNvbmZpZyBVU0JfTkVUX05FVDEwODBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM4Mj1jb25maWcgVVNCX05FVF9QTFVTQlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVxcdCMgYXJlIGV2ZXIgcmVzb2x2ZWQgLi4uIHRoZW4gcmVtb3ZlIFxcXCJleHBlcmltZW50YWxcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzg2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiTW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mzk5PWNvbmZpZyBVU0JfTkVUX1JORElTX0hPU1RcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIkhvc3QgZm9yIFJORElTIGFuZCBBY3RpdmVTeW5jIGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIlNpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDIwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlNoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTEyPWNvbmZpZyBVU0JfTkVUX0NYODIzMTBfRVRIXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVxcdHRyaXN0YXRlIFxcXCJDb25leGFudCBDWDgyMzEwIFVTQiBldGhlcm5ldCBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1MjI6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMS1cXHR0cmlzdGF0ZSBcXFwiUU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMy1cXHRzZWxlY3QgVVNCX1dETVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTYzPWNvbmZpZyBVU0JfTkVUX0lOVDUxWDFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXFx0dHJpc3RhdGUgXFxcIkludGVsbG9uIFBMQyBiYXNlZCB1c2IgYWRhcHRlclxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTc0OlxcdGRlcGVuZHMgb24gUEhPTkVUIFxcdTAwMjZcXHUwMDI2IFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cXHR0cmlzdGF0ZSBcXFwiVVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU5MjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTctXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjI1PWNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcXHQrPSBtY3M3ODMwLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXFx0Kz0gdXNibmV0Lm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTAuNzIyODE5NTYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNzY4NDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgVVNCX1VTQk5FVGAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgaWYgYFVTQl9VU0JORVRgIGlzIHNlbGVjdGVkLiBUaGlzIGlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgbmV0d29ya2luZyBmcmFtZXdvcmsuIEknbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBhbnkgY3JpdGljYWwgcHJlY29uZGl0aW9ucyBvciBoYXJkd2FyZSBzcGVjaWZpYyBlbGVtZW50cywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTIuNzQwNTA3MTAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0Y29uZmlnIFVTQl9VU0JORVRcXG4gMTMzOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG4gMTM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTM1OlxcdFxcdGhlbHBcXG4gMTM2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxcbiAxMzc6XFx0XFx0ICB3aXRoIFxcXCJtaW5pZHJpdmVyc1xcXCIgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcXG4gMTM4OlxcdFxcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXFxuIDEzOTpcXHRcXHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcXFwidXNibmV0XFxcIiwgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcXFwibmV0d29ya1xcXCIgb3IgXFxcImRhdGEgdHJhbnNmZXJcXFwiXFxuIDE0NDpcXHRcXHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxcbiAxNDU6XFx0XFx0ICAgIFxcXCJMYXBsaW5rXFxcIiBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XFxuIDE0NjpcXHRcXHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxcbiAxNDk6XFx0XFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1Mi43NDA1OTEzMjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NDg4MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIFVTQiBuZXR3b3JrIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzZWN0aW9uIGlzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGBtZW51Y29uZmlnYCBvciBvdGhlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhhdCBLY29uZmlnIGZpbGUgYW5kIGxvb2sgZm9yIGtleSBpbmRpY2F0b3JzOiBBcmUgdGhlcmUgYW55IHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGxpa2UgYSBkaXJlY3QgYG1lbnVjb25maWdgIGJsb2NrLCBvciBwZXJoYXBzIGFuIGBpZiBORVRfRVRIRVJORVRgIGd1YXJkPyBNYXliZSBpdCdzIGRpcmVjdGx5IGNvbnRyb2xsZWQgYnkgYFVTQl9ORVRfRFJJVkVSU2A/IElkZW50aWZ5aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHdoZW4gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVyIG9wdGlvbnMgYmVjb21lIHZpc2libGUgYW5kIGNvbmZpZ3VyYWJsZSBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTUuNjgwMDgxNjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTUuNjgwMTYxMjA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNzcyMDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIGNvZGUsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKlVTQiBOZXR3b3JrIERyaXZlciBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgLiBDbGVhcmx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgc3lzdGVtIHRoYXQncyBlbmFibGVkIGZvciBVU0IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IGF0IGEgYmFzZSBsZXZlbC4gVGhlIGBVU0JfTkVUX0RSSVZFUlNgIHNwZWNpZmljYWxseSBoaW50cyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZHVsZSBmb3IgaGFuZGxpbmcgYSByYW5nZSBvZiBVU0ItYmFzZWQgbmV0d29yayBhZGFwdGVycy4gYFVTQmAgaXMgdGhlIG9idmlvdXMgY29ubmVjdGlvbiBoZXJlLCB0aGlzIGlzIGEgY29yZSByZXF1aXJlbWVudCwgYXMgaXMgYE5FVGAsIHNpbmNlIHRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gbmV0d29yayBmdW5jdGlvbmFsaXR5LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIHRob3VnaCwgaXMgb24gdGhlIGFjdHVhbCBkYXRhIGZsb3cgYW5kIGNvbXBsZXRpb24gbWVjaGFuaXNtcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBuZXR3b3JrIHBhY2tldHMgb3ZlciB0aGUgVVNCIGJ1cy4gU28sIEkgbmVlZCB0byBjaGVjayBvdXQgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIHVuZG91YnRlZGx5IGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHBhY2tldHMgYXJlIHF1ZXVlZCwgdHJhbnNtaXR0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHRoZSBjb21wbGV0aW9uIG9mIHRob3NlIHRyYW5zbWlzc2lvbnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgYHVzYm5ldF9za2JfcmV0dXJuYCBiZWNhdXNlIHRoYXQsIGZyb20gdGhlIG5hbWUgYWxvbmUsIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgcmV0dXJuaW5nIFNLQnMgLSBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIGRlYWxsb2NhdGlvbiBvZiBuZXR3b3JrIGJ1ZmZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA1OjU4LjM4Nzg4NTU4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzMwOlxcdFxcdGludFxcdHN0YXR1cztcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfcGF1c2UsIHNrYik7XFxuIDMzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDMzNTpcXHRcXHR9XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cXG4gMzM4OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIDMzOTpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQyOlxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuIDM0NDpcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gMzQ1OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuIDM0NjpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDc6XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM1MTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU3OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1ODpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTk6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1OC4zODgwMDk5MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NTAyNDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29tcHJlaGVuc2l2ZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkndmUgYmVlbiBmb2N1c2luZyBvbiBbaW1wbGllZCBwcmlvciBmb2N1cyAtIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgdGFza10uIEl0J3MgY3J1Y2lhbCwgb2J2aW91c2x5LCBidXQgbm93IEknbSB0aGlua2luZywgSSBjYW4ndCBiZSAqdG9vKiBncmFudWxhci4gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgYWhlYWQgdG8gdGhlIHBsYWNlcyB3aGVyZSBlcnJvcnMgbWF5IGJlLiBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIHRoYXQgbXkgaGlnaC1sZXZlbCBwcm9jZXNzIC0gdGhlIGVudGlyZSB0cmFuc2FjdGlvbiBmcm9tIHN0YXJ0IHRvIGZpbmlzaCAtIGhhcyBiZWVuIGFjY291bnRlZCBmb3IuIEFuZCBpbiB0aGlzIGNhc2UgdGhhdCBtZWFucywgYmV5b25kIG15IGluaXRpYWwgY2hlY2tsaXN0LCBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGNhbGwgb3V0IGFuZCBkb3VibGUtY2hlY2sgYHR4X2NvbXBsZXRlYC4gVGhpcyBrZXkgdmFyaWFibGUsIHByb2Nlc3MsIGNvbmRpdGlvbiwgd2hhdGV2ZXIgdGhlIGNvbnRleHQsIGlzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uLiBJdCdzIHRoZSBseW5jaHBpbiwgYW5kIGl0J3MgaW1wZXJhdGl2ZSB0aGF0ICppdHMqIHN0YXRlIGlzIGNvcnJlY3QuIEEgZnVsbHkgY29tcGxldGVkLCBlcnJvciBmcmVlLCB2YWxpZGF0ZWQgYHR4X2NvbXBsZXRlYCBpcyBub3cgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDY6MDAuODQzMDM3MTA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXG4xMjkxOlxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzKVxcbjEyOTI6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImtldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxcXG5cXFwiLCBkZXYtXFx1MDAzZWZsYWdzKTtcXG4xMjkzOlxcdH1cXG4xMjk0OlxcdFxcbjEyOTU6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4xMjk2OlxcdFxcbjEyOTc6XFx0c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbjEyOTg6XFx0e1xcbjEyOTk6XFx0XFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cXHUwMDNlY29udGV4dDtcXG4xMzAwOlxcdFxcdHN0cnVjdCBza2JfZGF0YVxcdFxcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVxcdTAwM2VjYjtcXG4xMzAxOlxcdFxcdHN0cnVjdCB1c2JuZXRcXHRcXHQqZGV2ID0gZW50cnktXFx1MDAzZWRldjtcXG4xMzAyOlxcdFxcbjEzMDM6XFx0XFx0aWYgKHVyYi1cXHUwMDNlc3RhdHVzID09IDApIHtcXG4xMzA0OlxcdFxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbjEzMDU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xMzA2OlxcdFxcbjEzMDc6XFx0XFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbjEzMDg6XFx0XFx0XFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzA5OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzEwOlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVxcdTAwM2VwYWNrZXRzKTtcXG4xMzExOlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4xMzEyOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMxMzpcXHRcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuMTMxNDpcXHRcXHR9IGVsc2Uge1xcbjEzMTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRcXHRcXHRzd2l0Y2ggKHVyYi1cXHUwMDNlc3RhdHVzKSB7XFxuMTMxODpcXHRcXHRcXHRjYXNlIC1FUElQRTpcXG4xMzE5OlxcdFxcdFxcdFxcdHVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9UWF9IQUxUKTtcXG4xMzIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzMjE6XFx0XFxuMTMyMjpcXHRcXHRcXHQvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovXFxuMTMyMzpcXHRcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcdFxcdC8vIGFzeW5jIHVubGlua1xcbjEzMjQ6XFx0XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcdFxcdC8vIGhhcmR3YXJlIGdvbmVcXG4xMzI1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRcXHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXFxuMTMyODpcXHRcXHRcXHQgKiBkZWxheXMgYW5kIHNvIGl0IHVzZXMgdGhlIHNhbWUgdGhyb3R0bGluZyBtZWNoYW5pc20uXFxuMTMyOTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDY6MDAuODQzMTY0NTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDIzNzgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogdXNibmV0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBpcyB0aGlzIGB1c2JuZXQuY2AgY29kZSBldmVuIHJlYWNoYWJsZT8gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIGl0IGlzLiBJdCdzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFVTQiBuZXR3b3JrIGRyaXZlciBzdGFjaywgc28gd2l0aCBVU0IgZW11bGF0aW9uLCBnYWRnZXQgbW9kZSwgb3IgZXZlbiByYXcgZ2FkZ2V0IHNldHVwcyBpbiBzeXprYWxsZXIsIHdlJ3JlIGxpa2VseSBoaXR0aW5nIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgd2hlbiBwYWNrZXRzIGFyZSBtb3Zpbmcgb3ZlciBlbXVsYXRlZCBVU0IgbmV0d29yayBkZXZpY2VzLiBHb29kLCB0aGF0J3MgYSBwb3NpdGl2ZSBzdGFydC5cblxuTmV4dCwgZG8gdGhlIGNvZGUgY2hhbmdlcyBhY3R1YWxseSBhbHRlciBleGVjdXRhYmxlIGxvZ2ljPyBZZXMsIGFic29sdXRlbHkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaW52b2x2ZXMgaGFuZGxpbmcgcGVyLUNQVSBwb2ludGVyIGFjY2VzcyB0byBuZXR3b3JrIHN0YXRpc3RpY3MuIEJ5IG1vdmluZyBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbiwgdGhleSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBwcmVlbXB0aW9uIG9yIENQVSBtaWdyYXRpb24gd2hlbiByZWFkaW5nIHRob3NlIHBlci1DUFUgc3RhdHMuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgZml4LlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgcGF0Y2ggXCJXb3J0aEZ1enppbmdcIj8gRGVmaW5pdGVseS4gSXQncyBhIGNsZWFyIFwidHJ1ZVwiIGJhc2VkIG9uIHRoZSBhbmFseXNpcy4gTm93LCBmb3IgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdoaWxlIHRoZSBlbnRpcmUgbmV0d29yayBkcml2ZXIgY29kZSBpcyBpbnRlcmVzdGluZywgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXRjaCBhcmUgc3BlY2lmaWM6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlcy4gSXQgYWxzbyBtaWdodCBiZSB1c2VmdWwgdG8gY2hlY2sgb3RoZXIgY2FsbGVycyBsaWtlIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGB1c2JuZXRfYmhgLCBhbmQgYHJ4X2NvbXBsZXRlYCwgYnV0IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLlxuXG5JIHNlZSB0aGF0IGB0eF9jb21wbGV0ZWAgaXMgc3RhdGljIGluIGB1c2JuZXQuY2AsIGJ1dCB0aGF0IHNob3VsZG4ndCBzdG9wIHVzLiBTeXprYWxsZXIva2NvdiBpcyBhYmxlIHRvIHRyYWNrIHN0YXRpYyBmdW5jdGlvbnMgd2hlbiB0aGV5IGFwcGVhciBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZS4gT24gdGhlIG90aGVyIGhhbmQsIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBzeW1ib2wuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBhbmQgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYm90aCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHdpdGhpbiBgdXNibmV0LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA2OjA0LjU0NTU0NTE1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih1c2JuZXRfc2tiX3JldHVybnx0eF9jb21wbGV0ZSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMTI9c3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTMyNS0gKi9cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzI2OnZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM2MC19XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjM2MTpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz01NzI9c3RhdGljIGlubGluZSBpbnQgcnhfcHJvY2VzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo1OTQ6XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy01OTUtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9NzAwPXZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzA4LVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhxX3BhdXNlKSkgIT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo3MDk6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MTAtXFx0XFx0bnVtKys7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTE4Nj11c2JuZXRfZGVmZXJyZWRfa2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxMjk3OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5OC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTQwND1uZXRkZXZfdHhfdCB1c2JuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDAtXFx0dXNiX2ZpbGxfYnVsa191cmIodXJiLCBkZXYtXFx1MDAzZXVkZXYsIGRldi1cXHUwMDNlb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxNDQxOlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbiwgdHhfY29tcGxldGUsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDItXFx0aWYgKGRldi1cXHUwMDNlY2FuX2RtYV9zZykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNC43MTQ1OTM2NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3NzYwNjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFVTQiBFdGhlcm5ldDogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIGZ1enppbmcgYFVTQl9VU0JORVRgLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkndmUgZ290IGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAgaW4gbXkgc2lnaHRzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGNvdmVyIGV2ZXJ5dGhpbmcsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZyBuZWVkZWQg4oCTIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQsIGJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gTGV0J3MgbWFrZSBzdXJlIHRoZXNlIHR3bywgaW4gcGFydGljdWxhcjogYFVTQl9VU0JORVRgIGFuZCBgVVNCX05FVF9EUklWRVJTYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBcIkZvY3VzU3ltYm9sc1wiOiBgdXNibmV0X3NrYl9yZXR1cm5gLCBgdHhfY29tcGxldGVgLCBhbmQgYHVzYm5ldF9zdGFydF94bWl0YC4gWWVwLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBob25lIGluIG9uLiBMb29rcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGFyZWFzIGZvciBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgcmVxdWlyZW1lbnRzLCBhbmQgaXQgYWxsIGNoZWNrcyBvdXQuIFwiV29ydGhGdXp6aW5nXCIgaXMgdHJ1ZSwgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgc3BlY2lmaWMsIGFuZCB0aGUgRW5hYmxlQ29uZmlncyBhcmUgcHJvcGVybHkgZGVmaW5lZCB3aXRob3V0IHRoZSBDT05GSUdfIHByZWZpeC4gRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIG1vdmUgb24gYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gQ29uZmlkZW50IHdlJ3ZlIGdvdCB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDYsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA2OjA3LjY5MjIwMjI0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODA0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCIsXG4gICAgXCJ1c2JuZXRfc3RhcnRfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgbmV0d29yayBkcml2ZXIgY29kZSBpbiB1c2JuZXQuYyBieSBtb3ZpbmcgdGhpc19jcHVfcHRyIHJldHJpZXZhbCBpbnNpZGUgbG9jYWxfaXJxX3NhdmUgY3JpdGljYWwgc2VjdGlvbnMgZHVyaW5nIHBhY2tldCByeCBhbmQgdHggc3RhdHMgdXBkYXRlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYm5ldF9za2JfcmV0dXJuXCIsXG4gICAgXCJ0eF9jb21wbGV0ZVwiLFxuICAgIFwidXNibmV0X3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzMwMTMzNTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTAxMDcxODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzM1MTg0MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjg5NTk3NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzM1MTkzNzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4OTU3OTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNlbnRyYWwgbW9kaWZpY2F0aW9uIGlzIHRoZSByZWxvY2F0aW9uIG9mIHRoZSBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGJlZW4gbW92ZWQgKmluc2lkZSogdGhlIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgIC8gYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbi5cblxuQmVmb3JlLCB3ZSBoYWQgdGhlIGZvbGxvd2luZzpcblxuYGBgY1xuc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuLy8gLi4uc3RhdHMgdXBkYXRlLi4uXG5gYGBcbkFmdGVyOlxuYGBgY1xubG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4vLyAuLi5zdGF0cyB1cGRhdGUuLi5cbmxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbmBgYFxuXG5UaGUgbW90aXZhdGlvbiBpcyBmYWlybHkgb2J2aW91czogYHRoaXNfY3B1X3B0cigpYCBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uL2ludGVycnVwdHMgZGlzYWJsZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgbWlncmF0ZSBDUFVzIGluIHRoZSBtaWRkbGUgb2YgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIGRhdGEsIGF2b2lkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZXNwZWNpYWxseSBpZiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIHdvdWxkIHRyaWdnZXIgYSBgREVCVUdfUFJFRU1QVGAgd2FybmluZy4gQnkgd3JhcHBpbmcgdGhlIGB0aGlzX2NwdV9wdHJgIGNhbGwgd2l0aGluIHRoZSBJUlEtZGlzYWJsZWQgcmVnaW9uLCB3ZSBndWFyYW50ZWUgdGhpcyBjcnVjaWFsIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIHNhZmV0eSBpbXBsaWNhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gaXNzdWVzLCBvciBwb3RlbnRpYWwgZGF0YSByYWNlcy4gSSBjYW4gc2VlIHRoYXQgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycywgYW5kIG5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZS4gSSd2ZSBhbHNvIGNoZWNrZWQgZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGJ5IGBsb2NhbF9pcnFfc2F2ZWAsIGFuZCB0aGUgYHN0YXRzNjRgIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBkYXRhIHBhcnNpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucy5cblxuU28sIGluIHRoaXMgY2FzZSwgYSBkZWVwIGRpdmUgd2l0aCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgaXRzIGNoZWNrcy4gV2UncmUgcHVyZWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFyb3VuZCBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIERFQlVHX1BSRUVNUFQgd2lsbCB0YWtlIGNhcmUgb2YgZGV0ZWN0aW5nIGNvbmN1cnJlbmN5LCBib3VuZHMsIGFuZCBVQUYgaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gd2lsbCBub3QgYmUgbmVlZGVkIGhlcmUuIEknbGwgc3RpbGwgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdXNpbmcgdG9vbHMgbGlrZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYXMgYSBmaW5hbCBtZWFzdXJlLCBidXQgSSBkb24ndCBhbnRpY2lwYXRlIGFueSBpc3N1ZXMuXG5cbkxldCBtZSBzdW1tYXJpemUgdGhpcyBjb25jaXNlbHk6XG5cbiogICAqKlRoZSBQYXRjaCdzIFB1cnBvc2U6KiogVGhlIHBhdGNoIGNvcnJlY3RzIGEgcG90ZW50aWFsIHByZWVtcHRpb24gaXNzdWUgaW4gVVNCbmV0IGJ5IG1vdmluZyB0aGUgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIGNhbGwgaW5zaWRlIGFuIElSUS1kaXNhYmxlZCByZWdpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyZXMgdGhlIGludGVncml0eSBvZiBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy5cbiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcywgb3IgYW55IHVzZXItc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC5cbiogICAqKlNhZmV0eSBBc3N1cmFuY2U6KiogS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmZWF0dXJlcyAoZS5nLiBgREVCVUdfUFJFRU1QVGAsIExPQ0tERVApIGFkZXF1YXRlbHkgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE3LCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjoxNS4wNjMxMDE1OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgdW50aWwgYWZ0ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdmlhIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgLiBUaGlzIGVuc3VyZXMgdGhhdCBwZXItQ1BVIHBvaW50ZXIgcmVzb2x1dGlvbiBvY2N1cnMgaW4gYW4gYXRvbWljLCBub24tcHJlZW1wdGlibGUgY29udGV4dC5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXFxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 17:48:10 +0000 UTC FinishedAt: 2026-09-06 18:06:15 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "c21706d6-91b0-4aba-a039-998cbffdd382" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete", "usbnet_start_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgb25seSBJUlEtc2FmZXR5IGFuZCBwZXItQ1BVIHBvaW50ZXIgc3luY2hyb25pemF0aW9uIGZvciBzdGF0cyB1cGRhdGVzOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXG4zLiBObyBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVkMDMyYzM4OGFlMjk5YzY5MDM3MWE1NTE2NDE0ZTIyMTQ4MzNlNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjA1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludFx0c3RhdHVzO1xuIFxuQEAgLTMzOCwxMCAmIzQzOzMzOCwxMyBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbi1cdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7XHUwMDNjIHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXhcXG5cJiMzNDssXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyAmIzQzOzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuIFxuIFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuLVx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuJiM0MztcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMzI1LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiAgKi8KIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludAlzdGF0dXM7CiAKQEAgLTMzOCwxMCAmIzQzOzMzOCwxMyBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSAwKQogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtJmd0O25ldCk7CiAKLQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCXU2NF9zdGF0c19pbmMoJmFtcDtzdGF0czY0LSZndDtyeF9wYWNrZXRzKTsKIAl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKLQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LSZndDtuZXQsICYjMzQ7Jmx0OyByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4mIzM0OywKIAkJICBza2ItJmd0O2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTI5OCwxMyAmIzQzOzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0mZ3Q7ZGV2OwogCiAJaWYgKHVyYi0mZ3Q7c3RhdHVzID09IDApIHsKLQkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCXN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfcGFja2V0cywgZW50cnktJmd0O3BhY2tldHMpOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfYnl0ZXMsIGVudHJ5LSZndDtsZW5ndGgpOwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWRldi0mZ3Q7bmV0LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0JuZXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gVGhlIGNydWNpYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgc3RhdGlzdGljcyB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmVgLgoKQWgsIEkgc2VlIGl0LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVjYXVzZSBpdCB3YXMgdXNpbmcgYHRoaXNfY3B1X3B0cmAgd2l0aG91dCBwcm9wZXIgaW50ZXJydXB0L3ByZWVtcHRpb24gcHJvdGVjdGlvbi4gVGhhdCBjb3VsZCBsZWFkIHRvIGEgQ1BVIG1pZ3JhdGlvbiBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHN0YXRzIHVwZGF0ZSwgb3IgZXZlbiBhbiBpbnRlcnJ1cHQganVtcGluZyBpbiBiZXR3ZWVuLCBjYXVzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IENQVSB0byBiZSBhY2Nlc3NlZCBhbmQvb3IgbG9ja2VkLiAgVGhlIHVwZGF0ZWQgY29kZSBub3cgY29ycmVjdGx5IHNhdmVzIGludGVycnVwdHMsIGdldHMgdGhlIGB0aGlzX2NwdV9wdHJgLCAqdGhlbiogc3RhcnRzIHRoZSBzdGF0cyB1cGRhdGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGVuc3VyaW5nIGF0b21pY2l0eSB3aGVuIGFjY2Vzc2luZyBwZXItQ1BVIGRhdGEgaXMgY3JpdGljYWwsIGFuZCB0aGlzIGlzIHRoZSByaWdodCB3YXkgdG8gZG8gaXQuIFRoZSBsb2NhbCBpbnRlcnJ1cHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWtlIGl0IHNhZmUuCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyBgdXNibmV0YCBldmVuIHJlbGV2YW50IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBMZXQmIzM5O3Mgc2VlLi4uICBZZXMsIFVTQiBnYWRnZXQgZW11bGF0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCBpbiBzeXprYWxsZXIvUUVNVSwgd2l0aCBVU0IgZGV2aWNlcyBhbmQgbmV0d29yayBkcml2ZXJzIGJlaW5nIHN0YW5kYXJkIGVtdWxhdGVkIGRldmljZXMuICBTcGVjaWZpY2FsbHksIHdlIGhhdmUgdGhlICYjMzQ7VVNCIFJhdyBHYWRnZXQmIzM0OyBhbmQgZnVsbCBVU0IgZnV6emluZyB2aWEgZHVtbXlfaGNkIG9yIHJhd19nYWRnZXQuICBgdXNibmV0YCBpdHNlbGYgaXMgYSBjZW50cmFsIGRyaXZlciBtb2R1bGUsIHVzZWQgYnkgbWFueSBVU0IgbmV0d29yayBkZXZpY2VzIGxpa2UgY2RjX2V0aGVyLCBhc2l4LCBheDg4MTc5XzE3OGEsIGFuZCwgb2YgY291cnNlLCBjYW4gYmUgYm91bmQgaXRzZWxmLiAgU28sIHRoaXMgaXMgYSByZWxldmFudCBhcmVhIGZvciB1cyB0byBhbmFseXplLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gY29uZmlybSBub3RoaW5nIHVudXN1YWwgaXMgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjctXHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODh4eHggQmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xNjktXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xOTg9Y29uZmlnIFVTQl9ORVRfQVg4ODE3OV8xNzhBXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODgxNzkvMTc4QSBVU0IgMy4wLzIuMCB0byBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyMDA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxOS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI0ND1jb25maWcgVVNCX05FVF9DRENfRUVNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtDREMgRUVNIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI1OD1jb25maWcgVVNCX05FVF9DRENfTkNNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtDREMgTkNNIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI2MDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI3OS1cdHRyaXN0YXRlIFwmIzM0O0h1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyODA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI4MS1cdHNlbGVjdCBVU0JfV0RNXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjkzPWNvbmZpZyBVU0JfTkVUX0NEQ19NQklNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yOTQtXHR0cmlzdGF0ZSBcJiMzNDtDREMgTUJJTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5Ni1cdHNlbGVjdCBVU0JfV0RNXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzExPWNvbmZpZyBVU0JfTkVUX0RNOTYwMVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7RGF2aWNvbSBETTk2eHggYmFzZWQgVVNCIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozMTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyMC1cdHRyaXN0YXRlIFwmIzM0O0NvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozMjE6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMjY9Y29uZmlnIFVTQl9ORVRfU1I5ODAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjctXHR0cmlzdGF0ZSBcJiMzNDtDb3JlQ2hpcC1zeiBTUjk4MDAgYmFzZWQgVVNCIDIuMCAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjktXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgTEFONzVYWCBiYXNlZCBVU0IgMi4wIGdpZ2FiaXQgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzQzOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXHRzZWxlY3QgQklUUkVWRVJTRVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUyLVx0dHJpc3RhdGUgXCYjMzQ7U01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM1MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzU0LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM2ND1jb25maWcgVVNCX05FVF9HTDYyMEFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM2NS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVTeXMgR0w2MjBVU0ItQSBiYXNlZCBjYWJsZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM3Mz1jb25maWcgVVNCX05FVF9ORVQxMDgwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc1LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zODI9Y29uZmlnIFVTQl9ORVRfUExVU0Jcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zODUtXHQjIGFyZSBldmVyIHJlc29sdmVkIC4uLiB0aGVuIHJlbW92ZSBcJiMzNDtleHBlcmltZW50YWxcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM4NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM5MT1jb25maWcgVVNCX05FVF9NQ1M3ODMwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtNb3NDaGlwIE1DUzc4MzAgYmFzZWQgRXRoZXJuZXQgYWRhcHRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzk0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM5OT1jb25maWcgVVNCX05FVF9STkRJU19IT1NUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGZvciBSTkRJUyBhbmQgQWN0aXZlU3luYyBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo0MDE6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQxOS1cdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjQyMDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDIxLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDk0PWNvbmZpZyBVU0JfTkVUX1pBVVJVU1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDk1LVx0dHJpc3RhdGUgXCYjMzQ7U2hhcnAgWmF1cnVzIChzdG9jayBST01zKSBhbmQgY29tcGF0aWJsZVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTctXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUxMj1jb25maWcgVVNCX05FVF9DWDgyMzEwX0VUSFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQ1g4MjMxMCBVU0IgZXRoZXJuZXQgcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTE0Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7U2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTIyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTMwPWNvbmZpZyBVU0JfTkVUX1FNSV9XV0FOXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MzEtXHR0cmlzdGF0ZSBcJiMzNDtRTUkgV1dBTiBkcml2ZXIgZm9yIFF1YWxjb21tIE1TTSBiYXNlZCAzRyBhbmQgTFRFIG1vZGVtc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MzMtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU2Mz1jb25maWcgVVNCX05FVF9JTlQ1MVgxXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbGxvbiBQTEMgYmFzZWQgdXNiIGFkYXB0ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU2NTpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtDREMgUGhvbmV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU3NDpcdGRlcGVuZHMgb24gUEhPTkVUIFx1MDAyNlx1MDAyNiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTkxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1OTI6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MTQ9Y29uZmlnIFVTQl9ORVRfQ0g5MjAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTUtXHR0cmlzdGF0ZSBcJiMzNDtRaW5nSGVuZyBDSDkyMDAgVVNCIGV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE3LVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTYyNT1jb25maWcgVVNCX05FVF9BUUMxMTFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cdHRyaXN0YXRlIFwmIzM0O0FxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjI3Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcdCYjNDM7PSBtY3M3ODMwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfVVNCX1VTQk5FVClcdCYjNDM7PSB1c2JuZXQub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTMxLW9iai0kKENPTkZJR19VU0JfTkVUX0lOVDUxWDEpXHQmIzQzOz0gaW50NTF4MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFVTQl9VU0JORVRgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgYFVTQl9VU0JORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBpZiBgVVNCX1VTQk5FVGAgaXMgc2VsZWN0ZWQuIFRoaXMgaXMgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZml0cyBpbnRvIHRoZSBicm9hZGVyIFVTQiBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBhbnkgY3JpdGljYWwgcHJlY29uZGl0aW9ucyBvciBoYXJkd2FyZSBzcGVjaWZpYyBlbGVtZW50cywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0ICBMQU43ODAxIDogVVNCIDMgdG8gMTAvMTAwLzEwMDAgRXRoZXJuZXQgYWRhcHRlciAoTUFDIG9ubHkpXG4gMTI2Olx0XG4gMTI3Olx0XHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIFVTQl9VU0JORVRcbiAxMzM6XHRcdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gMTM0Olx0XHRzZWxlY3QgTUlJXG4gMTM1Olx0XHRoZWxwXG4gMTM2Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcbiAxMzc6XHRcdCAgd2l0aCBcJiMzNDttaW5pZHJpdmVyc1wmIzM0OyBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxuIDEzODpcdFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcbiAxMzk6XHRcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuIDE0MjpcdFxuIDE0MzpcdFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFwmIzM0O25ldHdvcmtcJiMzNDsgb3IgXCYjMzQ7ZGF0YSB0cmFuc2ZlclwmIzM0O1xuIDE0NDpcdFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcbiAxNDU6XHRcdCAgICBcJiMzNDtMYXBsaW5rXCYjMzQ7IHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcbiAxNDY6XHRcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxuIDE0OTpcdFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIFVTQiBuZXR3b3JrIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzZWN0aW9uIGlzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGBtZW51Y29uZmlnYCBvciBvdGhlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBsb29rIGZvciBrZXkgaW5kaWNhdG9yczogQXJlIHRoZXJlIGFueSB0b3AtbGV2ZWwgZGVwZW5kZW5jaWVzLCBsaWtlIGEgZGlyZWN0IGBtZW51Y29uZmlnYCBibG9jaywgb3IgcGVyaGFwcyBhbiBgaWYgTkVUX0VUSEVSTkVUYCBndWFyZD8gTWF5YmUgaXQmIzM5O3MgZGlyZWN0bHkgY29udHJvbGxlZCBieSBgVVNCX05FVF9EUklWRVJTYD8gSWRlbnRpZnlpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hlbiB0aGVzZSBVU0IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyBiZWNvbWUgdmlzaWJsZSBhbmQgY29uZmlndXJhYmxlIGluIHRoZSBidWlsZCBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCBjb2RlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0czoKCioqVVNCIE5ldHdvcmsgRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBVU0IgbmV0d29yayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFVTQl9VU0JORVRgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gQ2xlYXJseSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzeXN0ZW0gdGhhdCYjMzk7cyBlbmFibGVkIGZvciBVU0IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IGF0IGEgYmFzZSBsZXZlbC4gVGhlIGBVU0JfTkVUX0RSSVZFUlNgIHNwZWNpZmljYWxseSBoaW50cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2R1bGUgZm9yIGhhbmRsaW5nIGEgcmFuZ2Ugb2YgVVNCLWJhc2VkIG5ldHdvcmsgYWRhcHRlcnMuIGBVU0JgIGlzIHRoZSBvYnZpb3VzIGNvbm5lY3Rpb24gaGVyZSwgdGhpcyBpcyBhIGNvcmUgcmVxdWlyZW1lbnQsIGFzIGlzIGBORVRgLCBzaW5jZSB0aGlzIGlzIG9idmlvdXNseSByZWxhdGVkIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4KCk15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBpcyBvbiB0aGUgYWN0dWFsIGRhdGEgZmxvdyBhbmQgY29tcGxldGlvbiBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIG5ldHdvcmsgcGFja2V0cyBvdmVyIHRoZSBVU0IgYnVzLiBTbywgSSBuZWVkIHRvIGNoZWNrIG91dCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gVGhvc2UgZnVuY3Rpb25zIHdpbGwgdW5kb3VidGVkbHkgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgcGFja2V0cyBhcmUgcXVldWVkLCB0cmFuc21pdHRlZCwgYW5kIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggdGhlIGNvbXBsZXRpb24gb2YgdGhvc2UgdHJhbnNtaXNzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgYHVzYm5ldF9za2JfcmV0dXJuYCBiZWNhdXNlIHRoYXQsIGZyb20gdGhlIG5hbWUgYWxvbmUsIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgcmV0dXJuaW5nIFNLQnMgLSBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIGRlYWxsb2NhdGlvbiBvZiBuZXR3b3JrIGJ1ZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0LyogUGFzc2VzIHRoaXMgcGFja2V0IHVwIHRoZSBzdGFjaywgdXBkYXRpbmcgaXRzIGFjY291bnRpbmcuXG4gMzIzOlx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xuIDMyNDpcdCAqIGNhbiByZXR1cm4gY2xvbmVzIGFzIHdlbGwgYXMganVzdCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYi5cbiAzMjU6XHQgKi9cbiAzMjY6XHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMjc6XHR7XG4gMzI4Olx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiAzMjk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMzMwOlx0XHRpbnRcdHN0YXR1cztcbiAzMzE6XHRcbiAzMzI6XHRcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbiAzMzM6XHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcbiAzMzQ6XHRcdFx0cmV0dXJuO1xuIDMzNTpcdFx0fVxuIDMzNjpcdFxuIDMzNzpcdFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xuIDMzODpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSAwKVxuIDMzOTpcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cdTAwM2VuZXQpO1xuIDM0MDpcdFxuIDM0MTpcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIDM0MjpcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQzOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NDpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0NTpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDY6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NzpcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIDM0ODpcdFxuIDM0OTpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNTA6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNTE6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTI6XHRcbiAzNTM6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzU0Olx0XHRcdHJldHVybjtcbiAzNTU6XHRcbiAzNTY6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NzpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTg6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1OTpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQ29tcHJlaGVuc2l2ZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIFtpbXBsaWVkIHByaW9yIGZvY3VzIC0gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciB0YXNrXS4gSXQmIzM5O3MgY3J1Y2lhbCwgb2J2aW91c2x5LCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIEkgY2FuJiMzOTt0IGJlICp0b28qIGdyYW51bGFyLiBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyBhaGVhZCB0byB0aGUgcGxhY2VzIHdoZXJlIGVycm9ycyBtYXkgYmUuIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBteSBoaWdoLWxldmVsIHByb2Nlc3MgLSB0aGUgZW50aXJlIHRyYW5zYWN0aW9uIGZyb20gc3RhcnQgdG8gZmluaXNoIC0gaGFzIGJlZW4gYWNjb3VudGVkIGZvci4gQW5kIGluIHRoaXMgY2FzZSB0aGF0IG1lYW5zLCBiZXlvbmQgbXkgaW5pdGlhbCBjaGVja2xpc3QsIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgYW5kIGRvdWJsZS1jaGVjayBgdHhfY29tcGxldGVgLiBUaGlzIGtleSB2YXJpYWJsZSwgcHJvY2VzcywgY29uZGl0aW9uLCB3aGF0ZXZlciB0aGUgY29udGV4dCwgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGEgY29tcGxldGUgdHJhbnNhY3Rpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiwgYW5kIGl0JiMzOTtzIGltcGVyYXRpdmUgdGhhdCAqaXRzKiBzdGF0ZSBpcyBjb3JyZWN0LiBBIGZ1bGx5IGNvbXBsZXRlZCwgZXJyb3IgZnJlZSwgdmFsaWRhdGVkIGB0eF9jb21wbGV0ZWAgaXMgbm93IHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzKVxuMTI5MjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MzpcdH1cbjEyOTQ6XHRcbjEyOTU6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NjpcdFxuMTI5NzpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTg6XHR7XG4xMjk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTMwMDpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTMwMTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwNDpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjEzMDY6XHRcbjEzMDc6XHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuMTMwODpcdFx0XHRzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDk6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMTA6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMxMTpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzEyOlx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMxMzpcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4xMzE0Olx0XHR9IGVsc2Uge1xuMTMxNTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzE2Olx0XG4xMzE3Olx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxODpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTk6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzIwOlx0XHRcdFx0YnJlYWs7XG4xMzIxOlx0XG4xMzIyOlx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMjM6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzI0Olx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyNTpcdFx0XHRcdGJyZWFrO1xuMTMyNjpcdFxuMTMyNzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI4Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IHVzYm5ldC5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBpcyB0aGlzIGB1c2JuZXQuY2AgY29kZSBldmVuIHJlYWNoYWJsZT8gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIGl0IGlzLiBJdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBVU0IgbmV0d29yayBkcml2ZXIgc3RhY2ssIHNvIHdpdGggVVNCIGVtdWxhdGlvbiwgZ2FkZ2V0IG1vZGUsIG9yIGV2ZW4gcmF3IGdhZGdldCBzZXR1cHMgaW4gc3l6a2FsbGVyLCB3ZSYjMzk7cmUgbGlrZWx5IGhpdHRpbmcgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aGVuIHBhY2tldHMgYXJlIG1vdmluZyBvdmVyIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuIEdvb2QsIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzdGFydC4KCk5leHQsIGRvIHRoZSBjb2RlIGNoYW5nZXMgYWN0dWFsbHkgYWx0ZXIgZXhlY3V0YWJsZSBsb2dpYz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY3JpdGljYWwgY2hhbmdlIGludm9sdmVzIGhhbmRsaW5nIHBlci1DUFUgcG9pbnRlciBhY2Nlc3MgdG8gbmV0d29yayBzdGF0aXN0aWNzLiBCeSBtb3ZpbmcgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbiwgdGhleSYjMzk7cmUgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gcHJlZW1wdGlvbiBvciBDUFUgbWlncmF0aW9uIHdoZW4gcmVhZGluZyB0aG9zZSBwZXItQ1BVIHN0YXRzLiBUaGlzIGlzIGEgc29saWQsIHRhcmdldGVkIGZpeC4KClRoZXJlZm9yZSwgaXMgdGhpcyBwYXRjaCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7PyBEZWZpbml0ZWx5LiBJdCYjMzk7cyBhIGNsZWFyICYjMzQ7dHJ1ZSYjMzQ7IGJhc2VkIG9uIHRoZSBhbmFseXNpcy4gTm93LCBmb3IgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdoaWxlIHRoZSBlbnRpcmUgbmV0d29yayBkcml2ZXIgY29kZSBpcyBpbnRlcmVzdGluZywgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXRjaCBhcmUgc3BlY2lmaWM6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlcy4gSXQgYWxzbyBtaWdodCBiZSB1c2VmdWwgdG8gY2hlY2sgb3RoZXIgY2FsbGVycyBsaWtlIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGB1c2JuZXRfYmhgLCBhbmQgYHJ4X2NvbXBsZXRlYCwgYnV0IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLgoKSSBzZWUgdGhhdCBgdHhfY29tcGxldGVgIGlzIHN0YXRpYyBpbiBgdXNibmV0LmNgLCBidXQgdGhhdCBzaG91bGRuJiMzOTt0IHN0b3AgdXMuIFN5emthbGxlci9rY292IGlzIGFibGUgdG8gdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyB3aGVuIHRoZXkgYXBwZWFyIGluIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHVzYm5ldF9za2JfcmV0dXJuYCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIHN5bWJvbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucywgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGJvdGggYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aXRoaW4gYHVzYm5ldC5jYCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHVzYm5ldF9za2JfcmV0dXJufHR4X2NvbXBsZXRlKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzEyPXN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzI1LSAqL1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjMyNjp2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjcte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjM2MTpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzYyLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz01NzI9c3RhdGljIGlubGluZSBpbnQgcnhfcHJvY2VzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTU5My1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo1OTQ6XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTk1LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTcwMD12b2lkIHVzYm5ldF9yZXN1bWVfcngoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MDgtXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UpKSAhPSBOVUxMKSB7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NzA5Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzEwLVx0XHRudW0mIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg2PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTc6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNDA0PW5ldGRldl90eF90IHVzYm5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDAtXHR1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi1cdTAwM2V1ZGV2LCBkZXYtXHUwMDNlb3V0LFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE0NDE6XHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbiwgdHhfY29tcGxldGUsIHNrYik7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQ0Mi1cdGlmIChkZXYtXHUwMDNlY2FuX2RtYV9zZykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBVU0IgRXRoZXJuZXQ6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIGZ1enppbmcgYFVTQl9VU0JORVRgLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgIGluIG15IHNpZ2h0cy4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGVzZSBjb3ZlciBldmVyeXRoaW5nLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlnIG5lZWRlZCDigJMgSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQsIGJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSB0d28sIGluIHBhcnRpY3VsYXI6IGBVU0JfVVNCTkVUYCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBgdXNibmV0X3NrYl9yZXR1cm5gLCBgdHhfY29tcGxldGVgLCBhbmQgYHVzYm5ldF9zdGFydF94bWl0YC4gWWVwLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBob25lIGluIG9uLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIHRoZSByaWdodCBhcmVhcyBmb3IgZnV6emluZy4KCkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZXF1aXJlbWVudHMsIGFuZCBpdCBhbGwgY2hlY2tzIG91dC4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyB0cnVlLCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzcGVjaWZpYywgYW5kIHRoZSBFbmFibGVDb25maWdzIGFyZSBwcm9wZXJseSBkZWZpbmVkIHdpdGhvdXQgdGhlIENPTkZJR18gcHJlZml4LiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBDb25maWRlbnQgd2UmIzM5O3ZlIGdvdCB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JuZXRfc2tiX3JldHVybiYjMzQ7LAogICAgJiMzNDt0eF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt1c2JuZXRfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAgICYjMzQ7dXNibmV0X3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgb25seSBJUlEtc2FmZXR5IGFuZCBwZXItQ1BVIHBvaW50ZXIgc3luY2hyb25pemF0aW9uIGZvciBzdGF0cyB1cGRhdGVzOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXG4zLiBObyBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIGRhdGEgY29weWluZyBtZWNoYW5pc21zIGFyZSBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkMDMyYzM4OGFlMjk5YzY5MDM3MWE1NTE2NDE0ZTIyMTQ4MzNlNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE4OjA1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw3ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCkBAIC0zMzgsMTAgJiM0MzszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CQlzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X3BhY2tldHMsIGVudHJ5LSZndDtwYWNrZXRzKTsKIAkJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3R4X2J5dGVzLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQm5ldCBTdGF0aXN0aWNzIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBjZW50cmFsIG1vZGlmaWNhdGlvbiBpcyB0aGUgcmVsb2NhdGlvbiBvZiB0aGUgYHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYCAvIGBsb2NhbF9pcnFfcmVzdG9yZShmbGFncylgIGNyaXRpY2FsIHNlY3Rpb24uCgpCZWZvcmUsIHdlIGhhZCB0aGUgZm9sbG93aW5nOgoKYGBgYwpzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKLy8gLi4uc3RhdHMgdXBkYXRlLi4uCmBgYApBZnRlcjoKYGBgYwpsb2NhbF9pcnFfc2F2ZShmbGFncyk7CnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7Ci8vIC4uLnN0YXRzIHVwZGF0ZS4uLgpsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmBgYAoKVGhlIG1vdGl2YXRpb24gaXMgZmFpcmx5IG9idmlvdXM6IGB0aGlzX2NwdV9wdHIoKWAgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbi9pbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY29kZSBkb2VzbiYjMzk7dCBtaWdyYXRlIENQVXMgaW4gdGhlIG1pZGRsZSBvZiBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgZGF0YSwgYXZvaWRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBlc3BlY2lhbGx5IGlmIHByZWVtcHRpb24gaXMgZW5hYmxlZCwgd2hpY2ggd291bGQgdHJpZ2dlciBhIGBERUJVR19QUkVFTVBUYCB3YXJuaW5nLiBCeSB3cmFwcGluZyB0aGUgYHRoaXNfY3B1X3B0cmAgY2FsbCB3aXRoaW4gdGhlIElSUS1kaXNhYmxlZCByZWdpb24sIHdlIGd1YXJhbnRlZSB0aGlzIGNydWNpYWwgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBzYWZldHkgaW1wbGljYXRpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGlzc3Vlcywgb3IgcG90ZW50aWFsIGRhdGEgcmFjZXMuIEkgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMsIGFuZCBubyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEkmIzM5O3ZlIGFsc28gY2hlY2tlZCBmb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGJ5IGBsb2NhbF9pcnFfc2F2ZWAsIGFuZCB0aGUgYHN0YXRzNjRgIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBkYXRhIHBhcnNpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucy4KClNvLCBpbiB0aGlzIGNhc2UsIGEgZGVlcCBkaXZlIHdpdGggS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgY2hlY2tzLiBXZSYjMzk7cmUgcHVyZWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFyb3VuZCBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIERFQlVHX1BSRUVNUFQgd2lsbCB0YWtlIGNhcmUgb2YgZGV0ZWN0aW5nIGNvbmN1cnJlbmN5LCBib3VuZHMsIGFuZCBVQUYgaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gd2lsbCBub3QgYmUgbmVlZGVkIGhlcmUuIEkmIzM5O2xsIHN0aWxsIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHVzaW5nIHRvb2xzIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFzIGEgZmluYWwgbWVhc3VyZSwgYnV0IEkgZG9uJiMzOTt0IGFudGljaXBhdGUgYW55IGlzc3Vlcy4KCkxldCBtZSBzdW1tYXJpemUgdGhpcyBjb25jaXNlbHk6CgoqICAgKipUaGUgUGF0Y2gmIzM5O3MgUHVycG9zZToqKiBUaGUgcGF0Y2ggY29ycmVjdHMgYSBwb3RlbnRpYWwgcHJlZW1wdGlvbiBpc3N1ZSBpbiBVU0JuZXQgYnkgbW92aW5nIHRoZSBgdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpYCBjYWxsIGluc2lkZSBhbiBJUlEtZGlzYWJsZWQgcmVnaW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmVzIHRoZSBpbnRlZ3JpdHkgb2YgcGVyLUNQVSBzdGF0aXN0aWNzIHVwZGF0ZXMuCiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIGFueSB1c2VyLXNwYWNlIGxlYWtzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCiogICAqKlNhZmV0eSBBc3N1cmFuY2U6KiogS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmZWF0dXJlcyAoZS5nLiBgREVCVUdfUFJFRU1QVGAsIExPQ0tERVApIGFkZXF1YXRlbHkgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCB1bnRpbCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB2aWEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHBlci1DUFUgcG9pbnRlciByZXNvbHV0aW9uIG9jY3VycyBpbiBhbiBhdG9taWMsIG5vbi1wcmVlbXB0aWJsZSBjb250ZXh0LlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpYCB1bnRpbCBhZnRlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB2aWEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHBlci1DUFUgcG9pbnRlciByZXNvbHV0aW9uIG9jY3VycyBpbiBhbiBhdG9taWMsIG5vbi1wcmVlbXB0aWJsZSBjb250ZXh0LlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA1OjM5LjgwMjQwODkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjYwNzIxOTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9VU0JORVRcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIixcbiAgICBcInVzYm5ldF9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBuZXR3b3JrIGRyaXZlciBjb2RlIGluIHVzYm5ldC5jIGJ5IG1vdmluZyB0aGlzX2NwdV9wdHIgcmV0cmlldmFsIGluc2lkZSBsb2NhbF9pcnFfc2F2ZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcgcGFja2V0IHJ4IGFuZCB0eCBzdGF0cyB1cGRhdGVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgbmV0d29yayBkcml2ZXJzIGFuZCBlbXVsYXRlZCBVU0IgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6MzkuODAyNDEzMjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAxMTcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZDAzMmMzODhhZTI5OWM2OTAzNzFhNTUxNjQxNGUyMjE0ODMzZTU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uNmE0OGYzOGUxMDVkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gXFxuLVxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiBcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gXFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEzMDEsMTYgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NDAuMjczMTg0Mjg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzQ5OTgyNDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCIsXG4gICAgXCJ1c2JuZXRfc3RhcnRfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgbmV0d29yayBkcml2ZXIgY29kZSBpbiB1c2JuZXQuYyBieSBtb3ZpbmcgdGhpc19jcHVfcHRyIHJldHJpZXZhbCBpbnNpZGUgbG9jYWxfaXJxX3NhdmUgY3JpdGljYWwgc2VjdGlvbnMgZHVyaW5nIHBhY2tldCByeCBhbmQgdHggc3RhdHMgdXBkYXRlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo0MC4yNzMxODY5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM5ODM3NDM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQm5ldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLCBzcGVjaWZpY2FsbHkgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gVGhlIGNydWNpYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhleSdyZSBoYW5kbGluZyBzdGF0aXN0aWNzIHVwZGF0ZXMsIHNwZWNpZmljYWxseSBhcm91bmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAuXG5cbkFoLCBJIHNlZSBpdC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlY2F1c2UgaXQgd2FzIHVzaW5nIGB0aGlzX2NwdV9wdHJgIHdpdGhvdXQgcHJvcGVyIGludGVycnVwdC9wcmVlbXB0aW9uIHByb3RlY3Rpb24uIFRoYXQgY291bGQgbGVhZCB0byBhIENQVSBtaWdyYXRpb24gaGFwcGVuaW5nICpiZWZvcmUqIHRoZSBzdGF0cyB1cGRhdGUsIG9yIGV2ZW4gYW4gaW50ZXJydXB0IGp1bXBpbmcgaW4gYmV0d2VlbiwgY2F1c2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIGluY29ycmVjdCBDUFUgdG8gYmUgYWNjZXNzZWQgYW5kL29yIGxvY2tlZC4gIFRoZSB1cGRhdGVkIGNvZGUgbm93IGNvcnJlY3RseSBzYXZlcyBpbnRlcnJ1cHRzLCBnZXRzIHRoZSBgdGhpc19jcHVfcHRyYCwgKnRoZW4qIHN0YXJ0cyB0aGUgc3RhdHMgdXBkYXRlLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBlbnN1cmluZyBhdG9taWNpdHkgd2hlbiBhY2Nlc3NpbmcgcGVyLUNQVSBkYXRhIGlzIGNyaXRpY2FsLCBhbmQgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IHRvIGRvIGl0LiBUaGUgbG9jYWwgaW50ZXJydXB0IHNhdmUgYW5kIHJlc3RvcmUgbWFrZSBpdCBzYWZlLlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyBgdXNibmV0YCBldmVuIHJlbGV2YW50IGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBMZXQncyBzZWUuLi4gIFllcywgVVNCIGdhZGdldCBlbXVsYXRpb24gaXMgZnVsbHkgc3VwcG9ydGVkIGluIHN5emthbGxlci9RRU1VLCB3aXRoIFVTQiBkZXZpY2VzIGFuZCBuZXR3b3JrIGRyaXZlcnMgYmVpbmcgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlcy4gIFNwZWNpZmljYWxseSwgd2UgaGF2ZSB0aGUgXCJVU0IgUmF3IEdhZGdldFwiIGFuZCBmdWxsIFVTQiBmdXp6aW5nIHZpYSBkdW1teV9oY2Qgb3IgcmF3X2dhZGdldC4gIGB1c2JuZXRgIGl0c2VsZiBpcyBhIGNlbnRyYWwgZHJpdmVyIG1vZHVsZSwgdXNlZCBieSBtYW55IFVTQiBuZXR3b3JrIGRldmljZXMgbGlrZSBjZGNfZXRoZXIsIGFzaXgsIGF4ODgxNzlfMTc4YSwgYW5kLCBvZiBjb3Vyc2UsIGNhbiBiZSBib3VuZCBpdHNlbGYuICBTbywgdGhpcyBpcyBhIHJlbGV2YW50IGFyZWEgZm9yIHVzIHRvIGFuYWx5emUuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gY29uZmlybSBub3RoaW5nIHVudXN1YWwgaXMgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1MC42NzE1NjQzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzcyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX1VTQk5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2OS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE5OD1jb25maWcgVVNCX05FVF9BWDg4MTc5XzE3OEFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEVFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjU4PWNvbmZpZyBVU0JfTkVUX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkNEQyBOQ00gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI4MDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXFx0c2VsZWN0IFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5NC1cXHR0cmlzdGF0ZSBcXFwiQ0RDIE1CSU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk2LVxcdHNlbGVjdCBVU0JfV0RNXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTE9Y29uZmlnIFVTQl9ORVRfRE05NjAxXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJEYXZpY29tIERNOTZ4eCBiYXNlZCBVU0IgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXFx0dHJpc3RhdGUgXFxcIkNvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyMTpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyNy1cXHR0cmlzdGF0ZSBcXFwiQ29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyOS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU43NVhYIGJhc2VkIFVTQiAyLjAgZ2lnYWJpdCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzczPWNvbmZpZyBVU0JfTkVUX05FVDEwODBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM4Mj1jb25maWcgVVNCX05FVF9QTFVTQlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVxcdCMgYXJlIGV2ZXIgcmVzb2x2ZWQgLi4uIHRoZW4gcmVtb3ZlIFxcXCJleHBlcmltZW50YWxcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzg2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiTW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mzk5PWNvbmZpZyBVU0JfTkVUX1JORElTX0hPU1RcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIkhvc3QgZm9yIFJORElTIGFuZCBBY3RpdmVTeW5jIGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIlNpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDIwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlNoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTEyPWNvbmZpZyBVU0JfTkVUX0NYODIzMTBfRVRIXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVxcdHRyaXN0YXRlIFxcXCJDb25leGFudCBDWDgyMzEwIFVTQiBldGhlcm5ldCBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1MjI6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMS1cXHR0cmlzdGF0ZSBcXFwiUU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMy1cXHRzZWxlY3QgVVNCX1dETVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTYzPWNvbmZpZyBVU0JfTkVUX0lOVDUxWDFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXFx0dHJpc3RhdGUgXFxcIkludGVsbG9uIFBMQyBiYXNlZCB1c2IgYWRhcHRlclxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTc0OlxcdGRlcGVuZHMgb24gUEhPTkVUIFxcdTAwMjZcXHUwMDI2IFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cXHR0cmlzdGF0ZSBcXFwiVVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU5MjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTctXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjI1PWNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX1VTQl9ORVRfTUNTNzgzMClcXHQrPSBtY3M3ODMwLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXFx0Kz0gdXNibmV0Lm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTAuNzIyODE5NTYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNzY4NDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgVVNCX1VTQk5FVGAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIGBVU0JfVVNCTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgaWYgYFVTQl9VU0JORVRgIGlzIHNlbGVjdGVkLiBUaGlzIGlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgbmV0d29ya2luZyBmcmFtZXdvcmsuIEknbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBhbnkgY3JpdGljYWwgcHJlY29uZGl0aW9ucyBvciBoYXJkd2FyZSBzcGVjaWZpYyBlbGVtZW50cywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTIuNzQwNTA3MTAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0Y29uZmlnIFVTQl9VU0JORVRcXG4gMTMzOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG4gMTM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTM1OlxcdFxcdGhlbHBcXG4gMTM2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxcbiAxMzc6XFx0XFx0ICB3aXRoIFxcXCJtaW5pZHJpdmVyc1xcXCIgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcXG4gMTM4OlxcdFxcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXFxuIDEzOTpcXHRcXHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcXFwidXNibmV0XFxcIiwgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcXFwibmV0d29ya1xcXCIgb3IgXFxcImRhdGEgdHJhbnNmZXJcXFwiXFxuIDE0NDpcXHRcXHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxcbiAxNDU6XFx0XFx0ICAgIFxcXCJMYXBsaW5rXFxcIiBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XFxuIDE0NjpcXHRcXHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxcbiAxNDk6XFx0XFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1Mi43NDA1OTEzMjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NDg4MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIFVTQiBuZXR3b3JrIGRyaXZlcnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzZWN0aW9uIGlzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIGBtZW51Y29uZmlnYCBvciBvdGhlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhhdCBLY29uZmlnIGZpbGUgYW5kIGxvb2sgZm9yIGtleSBpbmRpY2F0b3JzOiBBcmUgdGhlcmUgYW55IHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGxpa2UgYSBkaXJlY3QgYG1lbnVjb25maWdgIGJsb2NrLCBvciBwZXJoYXBzIGFuIGBpZiBORVRfRVRIRVJORVRgIGd1YXJkPyBNYXliZSBpdCdzIGRpcmVjdGx5IGNvbnRyb2xsZWQgYnkgYFVTQl9ORVRfRFJJVkVSU2A/IElkZW50aWZ5aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHdoZW4gdGhlc2UgVVNCIG5ldHdvcmsgZHJpdmVyIG9wdGlvbnMgYmVjb21lIHZpc2libGUgYW5kIGNvbmZpZ3VyYWJsZSBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTUuNjgwMDgxNjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIE5ldHdvcmsgZGV2aWNlcyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb21tZW50IFxcXCJIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uICFVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IFVTQiBpZiBVU0JcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBVU0JfTkVUX0RSSVZFUlNcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIFVTQl9DQVRDXFxuICAxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxcbiAgMjA6XFx0XFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxcbiAgMjE6XFx0XFx0ICBCZWxraW4gRjVVMDExXFxuICAyMjpcXHRcXHQgIEJlbGtpbiBGNVUxMTFcXG4gIDIzOlxcdFxcdCAgQ0FUQyBOZXRNYXRlXFxuICAyNDpcXHRcXHQgIENBVEMgTmV0TWF0ZSBJSVxcbiAgMjU6XFx0XFx0ICBzbWFydEJyaWRnZXMgc21hcnROSUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDU6NTUuNjgwMTYxMjA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNzcyMDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIGNvZGUsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKlVTQiBOZXR3b3JrIERyaXZlciBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgVVNCX1VTQk5FVGAsIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCYCwgYW5kIGBORVRgLiBDbGVhcmx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgc3lzdGVtIHRoYXQncyBlbmFibGVkIGZvciBVU0IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IGF0IGEgYmFzZSBsZXZlbC4gVGhlIGBVU0JfTkVUX0RSSVZFUlNgIHNwZWNpZmljYWxseSBoaW50cyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZHVsZSBmb3IgaGFuZGxpbmcgYSByYW5nZSBvZiBVU0ItYmFzZWQgbmV0d29yayBhZGFwdGVycy4gYFVTQmAgaXMgdGhlIG9idmlvdXMgY29ubmVjdGlvbiBoZXJlLCB0aGlzIGlzIGEgY29yZSByZXF1aXJlbWVudCwgYXMgaXMgYE5FVGAsIHNpbmNlIHRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gbmV0d29yayBmdW5jdGlvbmFsaXR5LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMsIHRob3VnaCwgaXMgb24gdGhlIGFjdHVhbCBkYXRhIGZsb3cgYW5kIGNvbXBsZXRpb24gbWVjaGFuaXNtcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBuZXR3b3JrIHBhY2tldHMgb3ZlciB0aGUgVVNCIGJ1cy4gU28sIEkgbmVlZCB0byBjaGVjayBvdXQgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuIFRob3NlIGZ1bmN0aW9ucyB3aWxsIHVuZG91YnRlZGx5IGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHBhY2tldHMgYXJlIHF1ZXVlZCwgdHJhbnNtaXR0ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBkZWFscyB3aXRoIHRoZSBjb21wbGV0aW9uIG9mIHRob3NlIHRyYW5zbWlzc2lvbnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgYHVzYm5ldF9za2JfcmV0dXJuYCBiZWNhdXNlIHRoYXQsIGZyb20gdGhlIG5hbWUgYWxvbmUsIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgcmV0dXJuaW5nIFNLQnMgLSBtZWFuaW5nIHRoaXMgaXMgYSBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIGRlYWxsb2NhdGlvbiBvZiBuZXR3b3JrIGJ1ZmZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA1OjU4LjM4Nzg4NTU4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMzMwOlxcdFxcdGludFxcdHN0YXR1cztcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VyeHFfcGF1c2UsIHNrYik7XFxuIDMzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDMzNTpcXHRcXHR9XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cXG4gMzM4OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IDApXFxuIDMzOTpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gMzQyOlxcdFxcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuIDM0NDpcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4gMzQ1OlxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuIDM0NjpcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDc6XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM1MTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU3OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1ODpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTk6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNTo1OC4zODgwMDk5MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NTAyNDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29tcHJlaGVuc2l2ZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEkndmUgYmVlbiBmb2N1c2luZyBvbiBbaW1wbGllZCBwcmlvciBmb2N1cyAtIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgdGFza10uIEl0J3MgY3J1Y2lhbCwgb2J2aW91c2x5LCBidXQgbm93IEknbSB0aGlua2luZywgSSBjYW4ndCBiZSAqdG9vKiBncmFudWxhci4gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgYWhlYWQgdG8gdGhlIHBsYWNlcyB3aGVyZSBlcnJvcnMgbWF5IGJlLiBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIHRoYXQgbXkgaGlnaC1sZXZlbCBwcm9jZXNzIC0gdGhlIGVudGlyZSB0cmFuc2FjdGlvbiBmcm9tIHN0YXJ0IHRvIGZpbmlzaCAtIGhhcyBiZWVuIGFjY291bnRlZCBmb3IuIEFuZCBpbiB0aGlzIGNhc2UgdGhhdCBtZWFucywgYmV5b25kIG15IGluaXRpYWwgY2hlY2tsaXN0LCBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGNhbGwgb3V0IGFuZCBkb3VibGUtY2hlY2sgYHR4X2NvbXBsZXRlYC4gVGhpcyBrZXkgdmFyaWFibGUsIHByb2Nlc3MsIGNvbmRpdGlvbiwgd2hhdGV2ZXIgdGhlIGNvbnRleHQsIGlzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uLiBJdCdzIHRoZSBseW5jaHBpbiwgYW5kIGl0J3MgaW1wZXJhdGl2ZSB0aGF0ICppdHMqIHN0YXRlIGlzIGNvcnJlY3QuIEEgZnVsbHkgY29tcGxldGVkLCBlcnJvciBmcmVlLCB2YWxpZGF0ZWQgYHR4X2NvbXBsZXRlYCBpcyBub3cgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDY6MDAuODQzMDM3MTA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXG4xMjkxOlxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzKVxcbjEyOTI6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImtldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxcXG5cXFwiLCBkZXYtXFx1MDAzZWZsYWdzKTtcXG4xMjkzOlxcdH1cXG4xMjk0OlxcdFxcbjEyOTU6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4xMjk2OlxcdFxcbjEyOTc6XFx0c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbjEyOTg6XFx0e1xcbjEyOTk6XFx0XFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cXHUwMDNlY29udGV4dDtcXG4xMzAwOlxcdFxcdHN0cnVjdCBza2JfZGF0YVxcdFxcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVxcdTAwM2VjYjtcXG4xMzAxOlxcdFxcdHN0cnVjdCB1c2JuZXRcXHRcXHQqZGV2ID0gZW50cnktXFx1MDAzZWRldjtcXG4xMzAyOlxcdFxcbjEzMDM6XFx0XFx0aWYgKHVyYi1cXHUwMDNlc3RhdHVzID09IDApIHtcXG4xMzA0OlxcdFxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbjEzMDU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xMzA2OlxcdFxcbjEzMDc6XFx0XFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbjEzMDg6XFx0XFx0XFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzA5OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzEwOlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVxcdTAwM2VwYWNrZXRzKTtcXG4xMzExOlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4xMzEyOlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMxMzpcXHRcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuMTMxNDpcXHRcXHR9IGVsc2Uge1xcbjEzMTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRcXHRcXHRzd2l0Y2ggKHVyYi1cXHUwMDNlc3RhdHVzKSB7XFxuMTMxODpcXHRcXHRcXHRjYXNlIC1FUElQRTpcXG4xMzE5OlxcdFxcdFxcdFxcdHVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9UWF9IQUxUKTtcXG4xMzIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzMjE6XFx0XFxuMTMyMjpcXHRcXHRcXHQvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovXFxuMTMyMzpcXHRcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcdFxcdC8vIGFzeW5jIHVubGlua1xcbjEzMjQ6XFx0XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcdFxcdC8vIGhhcmR3YXJlIGdvbmVcXG4xMzI1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzMjY6XFx0XFxuMTMyNzpcXHRcXHRcXHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXFxuMTMyODpcXHRcXHRcXHQgKiBkZWxheXMgYW5kIHNvIGl0IHVzZXMgdGhlIHNhbWUgdGhyb3R0bGluZyBtZWNoYW5pc20uXFxuMTMyOTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MDY6MDAuODQzMTY0NTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDIzNzgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogdXNibmV0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBpcyB0aGlzIGB1c2JuZXQuY2AgY29kZSBldmVuIHJlYWNoYWJsZT8gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIGl0IGlzLiBJdCdzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFVTQiBuZXR3b3JrIGRyaXZlciBzdGFjaywgc28gd2l0aCBVU0IgZW11bGF0aW9uLCBnYWRnZXQgbW9kZSwgb3IgZXZlbiByYXcgZ2FkZ2V0IHNldHVwcyBpbiBzeXprYWxsZXIsIHdlJ3JlIGxpa2VseSBoaXR0aW5nIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgd2hlbiBwYWNrZXRzIGFyZSBtb3Zpbmcgb3ZlciBlbXVsYXRlZCBVU0IgbmV0d29yayBkZXZpY2VzLiBHb29kLCB0aGF0J3MgYSBwb3NpdGl2ZSBzdGFydC5cblxuTmV4dCwgZG8gdGhlIGNvZGUgY2hhbmdlcyBhY3R1YWxseSBhbHRlciBleGVjdXRhYmxlIGxvZ2ljPyBZZXMsIGFic29sdXRlbHkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaW52b2x2ZXMgaGFuZGxpbmcgcGVyLUNQVSBwb2ludGVyIGFjY2VzcyB0byBuZXR3b3JrIHN0YXRpc3RpY3MuIEJ5IG1vdmluZyBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgaW5zaWRlIGEgYGxvY2FsX2lycV9zYXZlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbiwgdGhleSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBwcmVlbXB0aW9uIG9yIENQVSBtaWdyYXRpb24gd2hlbiByZWFkaW5nIHRob3NlIHBlci1DUFUgc3RhdHMuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgZml4LlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgcGF0Y2ggXCJXb3J0aEZ1enppbmdcIj8gRGVmaW5pdGVseS4gSXQncyBhIGNsZWFyIFwidHJ1ZVwiIGJhc2VkIG9uIHRoZSBhbmFseXNpcy4gTm93LCBmb3IgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdoaWxlIHRoZSBlbnRpcmUgbmV0d29yayBkcml2ZXIgY29kZSBpcyBpbnRlcmVzdGluZywgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXRjaCBhcmUgc3BlY2lmaWM6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIGhpZ2gtcHJpb3JpdHkgY2FuZGlkYXRlcy4gSXQgYWxzbyBtaWdodCBiZSB1c2VmdWwgdG8gY2hlY2sgb3RoZXIgY2FsbGVycyBsaWtlIGB1c2JuZXRfc3RhcnRfeG1pdGAsIGB1c2JuZXRfYmhgLCBhbmQgYHJ4X2NvbXBsZXRlYCwgYnV0IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLlxuXG5JIHNlZSB0aGF0IGB0eF9jb21wbGV0ZWAgaXMgc3RhdGljIGluIGB1c2JuZXQuY2AsIGJ1dCB0aGF0IHNob3VsZG4ndCBzdG9wIHVzLiBTeXprYWxsZXIva2NvdiBpcyBhYmxlIHRvIHRyYWNrIHN0YXRpYyBmdW5jdGlvbnMgd2hlbiB0aGV5IGFwcGVhciBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZS4gT24gdGhlIG90aGVyIGhhbmQsIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBzeW1ib2wuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBhbmQgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYm90aCBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIHdpdGhpbiBgdXNibmV0LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA2OjA0LjU0NTU0NTE1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih1c2JuZXRfc2tiX3JldHVybnx0eF9jb21wbGV0ZSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMTI9c3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTMyNS0gKi9cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzI2OnZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjcte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM2MC19XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjM2MTpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz01NzI9c3RhdGljIGlubGluZSBpbnQgcnhfcHJvY2VzcyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo1OTQ6XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy01OTUtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9NzAwPXZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzA4LVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhxX3BhdXNlKSkgIT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo3MDk6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MTAtXFx0XFx0bnVtKys7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTE4Nj11c2JuZXRfZGVmZXJyZWRfa2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxMjk3OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5OC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTQwND1uZXRkZXZfdHhfdCB1c2JuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDAtXFx0dXNiX2ZpbGxfYnVsa191cmIodXJiLCBkZXYtXFx1MDAzZXVkZXYsIGRldi1cXHUwMDNlb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxNDQxOlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbiwgdHhfY29tcGxldGUsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE0NDItXFx0aWYgKGRldi1cXHUwMDNlY2FuX2RtYV9zZykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNC43MTQ1OTM2NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3NzYwNjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFVTQiBFdGhlcm5ldDogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIGZ1enppbmcgYFVTQl9VU0JORVRgLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkndmUgZ290IGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAgaW4gbXkgc2lnaHRzLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGNvdmVyIGV2ZXJ5dGhpbmcsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZyBuZWVkZWQg4oCTIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQsIGJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gTGV0J3MgbWFrZSBzdXJlIHRoZXNlIHR3bywgaW4gcGFydGljdWxhcjogYFVTQl9VU0JORVRgIGFuZCBgVVNCX05FVF9EUklWRVJTYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBcIkZvY3VzU3ltYm9sc1wiOiBgdXNibmV0X3NrYl9yZXR1cm5gLCBgdHhfY29tcGxldGVgLCBhbmQgYHVzYm5ldF9zdGFydF94bWl0YC4gWWVwLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBob25lIGluIG9uLiBMb29rcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGFyZWFzIGZvciBmdXp6aW5nLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgcmVxdWlyZW1lbnRzLCBhbmQgaXQgYWxsIGNoZWNrcyBvdXQuIFwiV29ydGhGdXp6aW5nXCIgaXMgdHJ1ZSwgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgc3BlY2lmaWMsIGFuZCB0aGUgRW5hYmxlQ29uZmlncyBhcmUgcHJvcGVybHkgZGVmaW5lZCB3aXRob3V0IHRoZSBDT05GSUdfIHByZWZpeC4gRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIG1vdmUgb24gYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gQ29uZmlkZW50IHdlJ3ZlIGdvdCB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDYsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjA2OjA3LjY5MjIwMjI0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODA0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCIsXG4gICAgXCJ1c2JuZXRfc3RhcnRfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgbmV0d29yayBkcml2ZXIgY29kZSBpbiB1c2JuZXQuYyBieSBtb3ZpbmcgdGhpc19jcHVfcHRyIHJldHJpZXZhbCBpbnNpZGUgbG9jYWxfaXJxX3NhdmUgY3JpdGljYWwgc2VjdGlvbnMgZHVyaW5nIHBhY2tldCByeCBhbmQgdHggc3RhdHMgdXBkYXRlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYm5ldF9za2JfcmV0dXJuXCIsXG4gICAgXCJ0eF9jb21wbGV0ZVwiLFxuICAgIFwidXNibmV0X3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaW4gdXNibmV0LmMgYnkgbW92aW5nIHRoaXNfY3B1X3B0ciByZXRyaWV2YWwgaW5zaWRlIGxvY2FsX2lycV9zYXZlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZyBwYWNrZXQgcnggYW5kIHR4IHN0YXRzIHVwZGF0ZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBuZXR3b3JrIGRyaXZlcnMgYW5kIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzMwMTMzNTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTAxMDcxODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzM1MTg0MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Mjg5NTk3NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQwMzJjMzg4YWUyOTljNjkwMzcxYTU1MTY0MTRlMjIxNDgzM2U1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjZhNDhmMzhlMTA1ZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gICovXG4gdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50XHRzdGF0dXM7XG4gXG5AQCAtMzM4LDEwICszMzgsMTMgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdHN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiBcdHU2NF9zdGF0c19pbmMoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9wYWNrZXRzKTtcbiBcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2VyeF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4tXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcIlx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxuXCIsXG4gXHRcdCAgc2tiLVx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICsxMzAxLDE2IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdHN0cnVjdCB1c2JuZXRcdFx0KmRldiA9IGVudHJ5LVx1MDAzZWRldjtcbiBcbiBcdGlmICh1cmItXHUwMDNlc3RhdHVzID09IDApIHtcbi1cdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0c3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9wYWNrZXRzLCBlbnRyeS1cdTAwM2VwYWNrZXRzKTtcbiBcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuLVx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4rXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjowNy43NzM1MTkzNzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4OTU3OTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBVU0JuZXQgU3RhdGlzdGljcyBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNlbnRyYWwgbW9kaWZpY2F0aW9uIGlzIHRoZSByZWxvY2F0aW9uIG9mIHRoZSBgdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKWAgY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGJlZW4gbW92ZWQgKmluc2lkZSogdGhlIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgIC8gYGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKWAgY3JpdGljYWwgc2VjdGlvbi5cblxuQmVmb3JlLCB3ZSBoYWQgdGhlIGZvbGxvd2luZzpcblxuYGBgY1xuc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuLy8gLi4uc3RhdHMgdXBkYXRlLi4uXG5gYGBcbkFmdGVyOlxuYGBgY1xubG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4vLyAuLi5zdGF0cyB1cGRhdGUuLi5cbmxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbmBgYFxuXG5UaGUgbW90aXZhdGlvbiBpcyBmYWlybHkgb2J2aW91czogYHRoaXNfY3B1X3B0cigpYCBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uL2ludGVycnVwdHMgZGlzYWJsZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgbWlncmF0ZSBDUFVzIGluIHRoZSBtaWRkbGUgb2YgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIGRhdGEsIGF2b2lkaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZXNwZWNpYWxseSBpZiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIHdvdWxkIHRyaWdnZXIgYSBgREVCVUdfUFJFRU1QVGAgd2FybmluZy4gQnkgd3JhcHBpbmcgdGhlIGB0aGlzX2NwdV9wdHJgIGNhbGwgd2l0aGluIHRoZSBJUlEtZGlzYWJsZWQgcmVnaW9uLCB3ZSBndWFyYW50ZWUgdGhpcyBjcnVjaWFsIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIHNhZmV0eSBpbXBsaWNhdGlvbnMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gaXNzdWVzLCBvciBwb3RlbnRpYWwgZGF0YSByYWNlcy4gSSBjYW4gc2VlIHRoYXQgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycywgYW5kIG5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZS4gSSd2ZSBhbHNvIGNoZWNrZWQgZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmxhZ3NgIHZhcmlhYmxlIGlzIGJlaW5nIGluaXRpYWxpemVkIGJ5IGBsb2NhbF9pcnFfc2F2ZWAsIGFuZCB0aGUgYHN0YXRzNjRgIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBkYXRhIHBhcnNpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucy5cblxuU28sIGluIHRoaXMgY2FzZSwgYSBkZWVwIGRpdmUgd2l0aCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgaXRzIGNoZWNrcy4gV2UncmUgcHVyZWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFyb3VuZCBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIERFQlVHX1BSRUVNUFQgd2lsbCB0YWtlIGNhcmUgb2YgZGV0ZWN0aW5nIGNvbmN1cnJlbmN5LCBib3VuZHMsIGFuZCBVQUYgaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gd2lsbCBub3QgYmUgbmVlZGVkIGhlcmUuIEknbGwgc3RpbGwgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdXNpbmcgdG9vbHMgbGlrZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYXMgYSBmaW5hbCBtZWFzdXJlLCBidXQgSSBkb24ndCBhbnRpY2lwYXRlIGFueSBpc3N1ZXMuXG5cbkxldCBtZSBzdW1tYXJpemUgdGhpcyBjb25jaXNlbHk6XG5cbiogICAqKlRoZSBQYXRjaCdzIFB1cnBvc2U6KiogVGhlIHBhdGNoIGNvcnJlY3RzIGEgcG90ZW50aWFsIHByZWVtcHRpb24gaXNzdWUgaW4gVVNCbmV0IGJ5IG1vdmluZyB0aGUgYHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cylgIGNhbGwgaW5zaWRlIGFuIElSUS1kaXNhYmxlZCByZWdpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyZXMgdGhlIGludGVncml0eSBvZiBwZXItQ1BVIHN0YXRpc3RpY3MgdXBkYXRlcy5cbiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcywgb3IgYW55IHVzZXItc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC5cbiogICAqKlNhZmV0eSBBc3N1cmFuY2U6KiogS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmZWF0dXJlcyAoZS5nLiBgREVCVUdfUFJFRU1QVGAsIExPQ0tERVApIGFkZXF1YXRlbHkgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE3LCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODowNjoxNS4wNjMxMDE1OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gZGVmZXIgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIgYHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKWAgdW50aWwgYWZ0ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdmlhIGBsb2NhbF9pcnFfc2F2ZShmbGFncylgLiBUaGlzIGVuc3VyZXMgdGhhdCBwZXItQ1BVIHBvaW50ZXIgcmVzb2x1dGlvbiBvY2N1cnMgaW4gYW4gYXRvbWljLCBub24tcHJlZW1wdGlibGUgY29udGV4dC5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIG9ubHkgSVJRLXNhZmV0eSBhbmQgcGVyLUNQVSBwb2ludGVyIHN5bmNocm9uaXphdGlvbiBmb3Igc3RhdHMgdXBkYXRlczpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjIuIGBmbGFnc2AgaXMgcG9wdWxhdGVkIGJ5IHRoZSBgbG9jYWxfaXJxX3NhdmUoKWAgbWFjcm8gYW5kIGBzdGF0czY0YCBpcyBhc3NpZ25lZCBiZWZvcmUgZGVyZWZlcmVuY2UuXFxuMy4gTm8gYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBkYXRhIGNvcHlpbmcgbWVjaGFuaXNtcyBhcmUgYWx0ZXJlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIC8gS0FTQU4gaXMgc3VmZmljaWVudCB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgIGluIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgIHRvIGRlZmVyIG9idGFpbmluZyB0aGUgcGVyLUNQVSBwb2ludGVyIGB0aGlzX2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cylgIHVudGlsIGFmdGVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHZpYSBgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcGVyLUNQVSBwb2ludGVyIHJlc29sdXRpb24gb2NjdXJzIGluIGFuIGF0b21pYywgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBvbmx5IElSUS1zYWZldHkgYW5kIHBlci1DUFUgcG9pbnRlciBzeW5jaHJvbml6YXRpb24gZm9yIHN0YXRzIHVwZGF0ZXM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4yLiBgZmxhZ3NgIGlzIHBvcHVsYXRlZCBieSB0aGUgYGxvY2FsX2lycV9zYXZlKClgIG1hY3JvIGFuZCBgc3RhdHM2NGAgaXMgYXNzaWduZWQgYmVmb3JlIGRlcmVmZXJlbmNlLlxcbjMuIE5vIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgZGF0YSBjb3B5aW5nIG1lY2hhbmlzbXMgYXJlIGFsdGVyZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgc3RhbmRhcmQgdGVzdGluZyAvIEtBU0FOIGlzIHN1ZmZpY2llbnQgd2l0aG91dCByZXF1aXJpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[1] Phase: Succeeded StartedAt: 2026-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 18:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 18:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2] Phase: Succeeded StartedAt: 2026-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 19:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 19:40:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 18:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:25 +0000 UTC FinishedAt: 2026-09-06 18:06:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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-workflowp4vhn/series-workflowp4vhn-convert-artifact-2254709683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:36 +0000 UTC FinishedAt: 2026-09-06 18:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:36 +0000 UTC FinishedAt: 2026-09-06 18:22:46 +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:*1cbc55e0-ce7a-406f-94d6-d4c391db6847,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-workflowp4vhn/series-workflowp4vhn-convert-artifact-2254709683/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": "f052c86a-8f3e-4cfb-8440-b263c069032f", "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-workflowp4vhn/series-workflowp4vhn-build-action-1103777377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:06:36 +0000 UTC FinishedAt: 2026-09-06 18:22:36 +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:*1cbc55e0-ce7a-406f-94d6-d4c391db6847,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-workflowp4vhn/series-workflowp4vhn-convert-artifact-2254709683/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": "f052c86a-8f3e-4cfb-8440-b263c069032f", "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-workflowp4vhn/series-workflowp4vhn-build-action-1103777377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:46 +0000 UTC FinishedAt: 2026-09-06 18:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:46 +0000 UTC FinishedAt: 2026-09-06 18:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:46 +0000 UTC FinishedAt: 2026-09-06 18:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:46 +0000 UTC FinishedAt: 2026-09-06 18:22:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-workflowp4vhn/series-workflowp4vhn-convert-artifact-4229756842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:56 +0000 UTC FinishedAt: 2026-09-06 18:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:22:56 +0000 UTC FinishedAt: 2026-09-06 18:24:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f052c86a-8f3e-4cfb-8440-b263c069032f,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-workflowp4vhn/series-workflowp4vhn-build-action-1103777377/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-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:25:06 +0000 UTC FinishedAt: 2026-09-06 18:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:25:06 +0000 UTC FinishedAt: 2026-09-06 18:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:25:06 +0000 UTC FinishedAt: 2026-09-06 18:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:25:06 +0000 UTC FinishedAt: 2026-09-06 18:41:23 +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:*1cbc55e0-ce7a-406f-94d6-d4c391db6847,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-workflowp4vhn/series-workflowp4vhn-convert-artifact-4229756842/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": "b79e3d1d-d198-4855-b2de-d429a5269385", "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-workflowp4vhn/series-workflowp4vhn-build-action-2250378958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:25:06 +0000 UTC FinishedAt: 2026-09-06 18:41:13 +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:*1cbc55e0-ce7a-406f-94d6-d4c391db6847,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-workflowp4vhn/series-workflowp4vhn-convert-artifact-4229756842/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": "b79e3d1d-d198-4855-b2de-d429a5269385", "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-workflowp4vhn/series-workflowp4vhn-build-action-2250378958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:41:23 +0000 UTC FinishedAt: 2026-09-06 18:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:41:23 +0000 UTC FinishedAt: 2026-09-06 18:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:41:23 +0000 UTC FinishedAt: 2026-09-06 18:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:41:23 +0000 UTC FinishedAt: 2026-09-06 18:42:57 +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:*b79e3d1d-d198-4855-b2de-d429a5269385,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-workflowp4vhn/series-workflowp4vhn-build-action-2250378958/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-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 19:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 19:40: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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"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:*f052c86a-8f3e-4cfb-8440-b263c069032f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b79e3d1d-d198-4855-b2de-d429a5269385,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-workflowp4vhn/series-workflowp4vhn-build-action-1103777377/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-workflowp4vhn/series-workflowp4vhn-build-action-2250378958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 18:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 18:43:14 +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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"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-workflowp4vhn/series-workflowp4vhn-convert-artifact-910627135/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 18:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 18:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:09 +0000 UTC FinishedAt: 2026-09-06 18:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:19 +0000 UTC FinishedAt: 2026-09-06 19:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"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":["usbnet_skb_return","tx_complete","usbnet_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS","USB","NET"],"series_id":"c21706d6-91b0-4aba-a039-998cbffdd382","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-09-06 18:43:19 +0000 UTC FinishedAt: 2026-09-06 19:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f052c86a-8f3e-4cfb-8440-b263c069032f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b79e3d1d-d198-4855-b2de-d429a5269385,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-workflowp4vhn/series-workflowp4vhn-build-action-1103777377/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-workflowp4vhn/series-workflowp4vhn-build-action-2250378958/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-workflowp4vhn/series-workflowp4vhn-convert-artifact-910627135/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,}