Name: series-workflowvj7w2 Phase: Succeeded StartedAt: 2026-09-02 13:48:29 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[0] Phase: Succeeded StartedAt: 2026-09-02 13:48:29 +0000 UTC FinishedAt: 2026-09-02 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 13:48:29 +0000 UTC FinishedAt: 2026-09-02 14:11:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c29b37ed7a4d9856ed758a82282456d69cee2ed1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS", "SMP", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c29b37ed7a4d9856ed758a82282456d69cee2ed1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS", "SMP", "SYSFS" ], "series_id": "4d57ad63-dadf-4697-947b-6df9aca89ce6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rps_llc_check", "sock_rps_record_flow", "sock_rps_record_flow_hash" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJlOWI5Zjk0YzNjNDQwMTM2MmM4YTQ0ZTc3ZmQ5MDU0OTNiZTg2MjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDE0OjA1OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkO1xuJiM0MztleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuJiM0MztcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyAmIzQzOzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXG4gXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cbiBcdCAqL1xuLVx0aWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpXG4mIzQzO1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbiYjNDM7XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4tI2VuZGlmXG4tfVxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICYjNDM7NTA1Miw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiAmIzQzOzUyNjUsNDggQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNwdTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbiYjNDM7e1xuJiM0MztcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuJiM0MztcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbiYjNDM7XHQgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuJiM0MztcdCAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudFxuJiM0MztcdCAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDXG4mIzQzO1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuJiM0MztcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuJiM0MztcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG4mIzQzO1x0XHRpZiAob2xkX2NwdSBcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbiYjNDM7XHRcdCAqIGV4cGVuc2l2ZSByZW1vdGUgbWVtb3J5IGFjY2Vzc2VzIGFuZCBjYWNoZSBtaXNzZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcbiAvKipcbkBAIC01MzE4LDYgJiM0Mzs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1JQU1xuJiM0MztcdGlmICghcmZzX2lzX25lZWRlZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKTtcbiYjNDM7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUlBTXG4mIzQzO1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuJiM0MztcbiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi9cbiBzdGF0aWMgdm9pZCB0cmlnZ2VyX3J4X3NvZnRpcnEodm9pZCAqZGF0YSlcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuaW5kZXggZWIzNWRhMzU1NmY0YS4uOWI2NzAyZjVlYWIxOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgc3RhdGljIGludCBycHNfc29ja19mbG93X3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgJiM0Mzs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIFx0XHQucHJvY19oYW5kbGVyXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHJwc19mZWF0X2xsY19hZmZpbml0eS5rZXkpLFxuJiM0MztcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuJiM0MztcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbiYjNDM7XHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSUFMmIzM0OywKICAgICYjMzQ7U01QJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvdyYjMzQ7LAogICAgJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU5YjlmOTRjM2M0NDAxMzYyYzhhNDRlNzdmZDkwNTQ5M2JlODYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTQ6MDU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ycHMuaCBiL2luY2x1ZGUvbmV0L3Jwcy5oCmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3Jwcy5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDsKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkOwomIzQzO2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7CiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGUKQEAgLTU1LDExICYjNDM7NTYsMTQgQEAgc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgewogCiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmCiAKJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoICZhbXA7IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTsKIAl1MzIgdmFsID0gaGFzaCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwogCXN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTsKJiM0MzsJdTMyIG9sZF92YWw7CiAKIAkvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovCiAJdmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC02OCw3ICYjNDM7NzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpCiAJLyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpCiAJICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuCiAJICovCi0JaWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpCiYjNDM7CW9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7CiYjNDM7CWlmIChvbGRfdmFsICE9IHZhbCAmYW1wOyZhbXA7IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSkKIAkJV1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpOwogfQogCkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotI2lmZGVmIENPTkZJR19SUFMKLQlpZiAoIXJmc19pc19uZWVkZWQoKSkKLQkJcmV0dXJuOwotCi0JX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKLSNlbmRpZgotfQomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTsKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLmIyNzgzOWViNTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC01MDUyLDYgJiM0Mzs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTsKIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7CiYjNDM7c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7CiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpOwogCiBzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKQogewpAQCAtNTI2Myw2ICYjNDM7NTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGNwdTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuCiYjNDM7ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLgomIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKQomIzQzO3sKJiM0MzsJdTMyIG9sZF9jcHUgPSBvbGRfdmFsICZhbXA7IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzazsKJiM0MzsJdTMyIG5ld19jcHUgPSBuZXdfdmFsICZhbXA7IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzazsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUlBTIExMQyBBZmZpbml0eSBGZWF0dXJlOgomIzQzOwkgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS4KJiM0MzsJICoKJiM0MzsJICogRnJlcXVlbnQgZmxvdyB0YWJsZSB1cGRhdGVzIGNhbiB0cmlnZ2VyIGNvbnN0YW50IGhhcmR3YXJlIHN0ZWVyaW5nCiYjNDM7CSAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudAomIzQzOwkgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1JiMzOTtzIGFyZnNfbG9jaykuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDCiYjNDM7CSAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmcKJiM0MzsJICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkgewomIzQzOwkJLyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovCiYjNDM7CQlpZiAob2xkX2NwdSAmZ3Q7PSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudAomIzQzOwkJICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMCiAKIC8qKgpAQCAtNTMxOCw2ICYjNDM7NTM2MiwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpCiAKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19SUFMKJiM0MzsJaWYgKCFyZnNfaXNfbmVlZGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpOwomIzQzOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7CiYjNDM7CiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi8KIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJa3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVQKQEAgLTU1NCw2ICYjNDM7NTU1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBycHNfc29ja19mbG93X3N5c2N0bAogCX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5JiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eS5rZXksCiYjNDM7CQkubWF4bGVuCQk9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSwKJiM0MzsJCS5tb2RlCQk9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb19zdGF0aWNfa2V5CiYjNDM7CX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVQKIAl7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDMKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUlBTIGFuZCBMTEMgQWZmaW5pdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSByZWZpbmVtZW50cyB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBwb2ludCB1cyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uOiB3ZSYjMzk7cmUgdG91Y2hpbmcgYHJwcy5oYCwgYGRldi5jYCwgYW5kIGBzeXNjdGxfbmV0X2NvcmUuY2AuIFRoaXMgaXMgYWxsIGNsYXNzaWMgUlBTIHRlcnJpdG9yeS4KClNvLCB0aGUgbWVhdCBvZiBpdDogd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIHdoaWNoIGlzIGtleS4gVGhpcyBsaWtlbHkgYWxsb3dzIHVzIHRvIGR5bmFtaWNhbGx5IGNvbnRyb2wgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHN0YXRpYyBrZXksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGdpdmluZyB1cyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGhvdyBSUFMgaW50ZXJhY3RzIHdpdGggdGhlIENQVSBjYWNoZS4gVGhlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgZnVuY3Rpb24gbm93IGNhbGxzIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgc21hcnQ7IGl0IHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGF0dGVtcHRpbmcgdG8gb3B0aW1pemUgY2FjaGUgbG9jYWxpdHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcnBzX2xsY19jaGVja2AgaW4gYGRldi5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhlIG1vdmVtZW50IG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBmcm9tIGlubGluZXMgaW4gYHJwcy5oYCB0byBleHBvcnRlZCBzeW1ib2xzIGluIGBkZXYuY2AgYWxzbyBjYXRjaGVzIG15IGV5ZS4gVGhpcyBoaW50cyBhdCBzb21lIHNvcnQgb2YgaW50ZXJuYWwgcmVzdHJ1Y3R1cmluZywgcG90ZW50aWFsbHkgZm9yIGNvZGUgcmV1c2Ugb3IgbW9yZSByb2J1c3QgbW9kdWxlIGludGVncmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyAqdXNpbmcqIHRoZXNlIGV4cG9ydGVkIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBDT05GSUdgIG9wdGlvbnMuIFRoaXMgcGF0Y2ggY2xlYXJseSBhZmZlY3RzIFJQUyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBzZXR0aW5ncy4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTM9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDQtXG5uZXQvS2NvbmZpZzozMDU6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA2LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMDUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbiwgcHJlc3VtYWJseSBmb3IgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSBvciBtb2R1bGUuIFRoZSBLY29uZmlnIHN5bnRheCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgYSBxdWljayBzY2FuIHdpbGwgaGVscCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgcXVpY2tseSB6ZXJvIGluIG9uIGFueSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25zdHJhaW50cy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gcHJvdmlkZXMgdGhlIGNsdWVzIEkgbmVlZCB0byBkZWJ1ZyBvciB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGJlaGF2aW9yLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0ICBsZWdhY3kgZHJpdmVycy5cbiAzMDE6XHRcdCAgVGhpcyBhbHNvIGluY3JlYXNlcyBtZW1vcnkgb3ZlcmhlYWQgb2Ygc21hbGwgcGFja2V0cyxcbiAzMDI6XHRcdCAgYW5kIGluIGRyaXZlcnMgdXNpbmcgYnVpbGRfc2tiKCkuXG4gMzAzOlx0XHQgIElmIHVuc3VyZSwgc2F5IDE3LlxuIDMwNDpcdFxuIDMwNTpcdGNvbmZpZyBSUFNcbiAzMDY6XHRcdGJvb2wgXCYjMzQ7UmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcJiMzNDtcbiAzMDc6XHRcdGRlcGVuZHMgb24gU01QIFx1MDAyNlx1MDAyNiBTWVNGU1xuIDMwODpcdFx0ZGVmYXVsdCB5XG4gMzA5Olx0XHRoZWxwXG4gMzEwOlx0XHQgIFNvZnR3YXJlIHJlY2VpdmUgc2lkZSBwYWNrZXQgc3RlZXJpbmcgKFJQUykgZGlzdHJpYnV0ZXMgdGhlXG4gMzExOlx0XHQgIGxvYWQgb2YgcmVjZWl2ZWQgcGFja2V0IHByb2Nlc3NpbmcgYWNyb3NzIG11bHRpcGxlIENQVXMuXG4gMzEyOlx0XG4gMzEzOlx0Y29uZmlnIFJGU19BQ0NFTFxuIDMxNDpcdFx0Ym9vbCBcJiMzNDtIYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgUkZTXCYjMzQ7XG4gMzE1Olx0XHRkZXBlbmRzIG9uIFJQU1xuIDMxNjpcdFx0c2VsZWN0IENQVV9STUFQXG4gMzE3Olx0XHRkZWZhdWx0IHlcbiAzMTg6XHRcdGhlbHBcbiAzMTk6XHRcdCAgQWxsb3dpbmcgZHJpdmVycyBmb3IgbXVsdGlxdWV1ZSBoYXJkd2FyZSB3aXRoIGZsb3cgZmlsdGVyIHRhYmxlcyB0b1xuIDMyMDpcdFx0ICBhY2NlbGVyYXRlIFJGUy5cbiAzMjE6XHRcbiAzMjI6XHRjb25maWcgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gMzIzOlx0XHRib29sXG4gMzI0Olx0XG4gMzI1Olx0Y29uZmlnIFhQU1xuIDMyNjpcdFx0Ym9vbFxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBTTVBcbiAzMjg6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAzMjk6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJQUyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgKFJQUykgaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBjaGVjay4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgY29yZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgYG5ldC9jb3JlL2Rldi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBhcm91bmQgYHJwc19sbGNfY2hlY2tgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBkZWNpc2lvbnMgYWJvdXQgd2hlcmUgdG8gc3RlZXIgaW5jb21pbmcgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBMTEMgaW5mb3JtYXRpb24gc2hvdWxkIGJlIG1hZGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBpdHMgY29udHJvbCBmbG93IGlzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJQUyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBFdGhlcm5ldCBoZWFkZXIgcHJvY2Vzc2luZyBhdCB0aGlzIHN0YWdlLCBhbmQgd2hhdCB0aGUgY3JpdGVyaWEgYXJlIGZvciBkaXJlY3RpbmcgcGFja2V0cyB0byBzcGVjaWZpYyBDUFVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRyYWZmaWMgaXMgYmVpbmcgZGlzdHJpYnV0ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhlIExMQyBjaGVjayBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI2MDpcdFx0XHRcdGdvdG8gZG9uZTtcbjUyNjE6XHRcdFx0fVxuNTI2MjpcdFx0fVxuNTI2MzpcdFxuNTI2NDpcdGRvbmU6XG41MjY1Olx0XHRyZXR1cm4gY3B1O1xuNTI2NjpcdH1cbjUyNjc6XHRcbjUyNjg6XHQvKipcbjUyNjk6XHQgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuNTI3MDpcdCAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbjUyNzE6XHQgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuNTI3MjpcdCAqXG41MjczOlx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG41Mjc0Olx0ICovXG41Mjc1Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbjUyNzY6XHR7XG41Mjc3Olx0XHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbjUyNzg6XHRcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuNTI3OTpcdFxuNTI4MDpcdFx0LypcbjUyODE6XHRcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbjUyODI6XHRcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuNTI4MzpcdFx0ICpcbjUyODQ6XHRcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuNTI4NTpcdFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG41Mjg2Olx0XHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1JiMzOTtzIGFyZnNfbG9jaykuXG41Mjg3Olx0XHQgKlxuNTI4ODpcdFx0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbjUyODk6XHRcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcbjUyOTA6XHRcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG41MjkxOlx0XHQgKi9cbjUyOTI6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcbjUyOTM6XHRcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG41Mjk0Olx0XHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbjUyOTU6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjUyOTY6XHRcbjUyOTc6XHRcdFx0LypcbjUyOTg6XHRcdFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XG41Mjk5Olx0XHRcdCAqIGV4cGVuc2l2ZSByZW1vdGUgbWVtb3J5IGFjY2Vzc2VzIGFuZCBjYWNoZSBtaXNzZXMuXG41MzAwOlx0XHRcdCAqL1xuNTMwMTpcdFx0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG41MzAyOlx0XHRcdFx0cmV0dXJuIHRydWU7XG41MzAzOlx0XG41MzA0Olx0XHRcdHJldHVybiBmYWxzZTtcbjUzMDU6XHRcdH1cbjUzMDY6XHRcbjUzMDc6XHRcdHJldHVybiB0cnVlO1xuNTMwODpcdH1cbjUzMDk6XHRcbjUzMTA6XHQjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuNTMxMTpcdFxuNTMxMjpcdC8qKlxuNTMxMzpcdCAqIHJwc19tYXlfZXhwaXJlX2Zsb3cgLSBjaGVjayB3aGV0aGVyIGFuIFJGUyBoYXJkd2FyZSBmaWx0ZXIgbWF5IGJlIHJlbW92ZWRcbjUzMTQ6XHQgKiBAZGV2OiBEZXZpY2Ugb24gd2hpY2ggdGhlIGZpbHRlciB3YXMgc2V0XG41MzE1Olx0ICogQHJ4cV9pbmRleDogUlggcXVldWUgaW5kZXhcbjUzMTY6XHQgKiBAZmxvd19pZDogRmxvdyBJRCBwYXNzZWQgdG8gbmRvX3J4X2Zsb3dfc3RlZXIoKVxuNTMxNzpcdCAqIEBmaWx0ZXJfaWQ6IEZpbHRlciBJRCByZXR1cm5lZCBieSBuZG9fcnhfZmxvd19zdGVlcigpXG41MzE4Olx0ICpcbjUzMTk6XHQgKiBEcml2ZXJzIHRoYXQgaW1wbGVtZW50IG5kb19yeF9mbG93X3N0ZWVyKCkgc2hvdWxkIHBlcmlvZGljYWxseSBjYWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIFJQUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHJwc19sbGNfY2hlY2tgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBhIHN1YnRsZSBidWcgaW4gb3VyIG5ldHdvcmsgc3RhY2sgY2FuIGNhdXNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHByb2JsZW1zLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9kZXYuY2AgZmlsZSwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgZm9yIFJQUyBhbmQgUkZTIGxvZ2ljLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGEgYCNpZmRlZiBDT05GSUdfUlBTYCBibG9jayBpbiB0aGF0IGFyZWEsIGFuZCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbCwgYHJwc19sbGNfY2hlY2tgLCBpcyBlbmNsb3NlZCB3aXRoaW4gaXQuIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZXMgNTA0MC01MDYwIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY29uZmlybS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwNDA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX2xpc3QsIFx1MDAyNnNkLVx1MDAzZXBvbGxfbGlzdCk7XG41MDQxOlx0XHRXUklURV9PTkNFKG5hcGktXHUwMDNlbGlzdF9vd25lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbjUwNDI6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKClcbjUwNDM6XHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG41MDQ0Olx0XHQgKi9cbjUwNDU6XHRcdGlmICghc2QtXHUwMDNlaW5fbmV0X3J4X2FjdGlvbilcbjUwNDY6XHRcdFx0cmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuNTA0NzpcdH1cbjUwNDg6XHRcbjUwNDk6XHQjaWZkZWYgQ09ORklHX1JQU1xuNTA1MDpcdFxuNTA1MTpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbjUwNTI6XHRFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuNTA1MzpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbjUwNTQ6XHRFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuNTA1NTpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eSBfX3JlYWRfbW9zdGx5O1xuNTA1NjpcdEVYUE9SVF9TWU1CT0wocnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcbjUwNTc6XHRcbjUwNTg6XHRzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKVxuNTA1OTpcdHtcbjUwNjA6XHRcdHJldHVybiBoYXNoXzMyKGhhc2gsIHJwc190YWdfdG9fbG9nKHRhZ19wdHIpKTtcbjUwNjE6XHR9XG41MDYyOlx0XG41MDYzOlx0I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbjUwNjQ6XHQvKipcbjUwNjU6XHQgKiBycHNfZmxvd19pc19hY3RpdmUgLSBjaGVjayB3aGV0aGVyIHRoZSBmbG93IGlzIHJlY2VudGx5IGFjdGl2ZS5cbjUwNjY6XHQgKiBAcmZsb3c6IFNwZWNpZmljIGZsb3cgdG8gY2hlY2sgYWN0aXZpdHkuXG41MDY3Olx0ICogQGxvZzogaWxvZzIoaGFzaHNpemUpLlxuNTA2ODpcdCAqIEBjcHU6IENQVSBzYXZlZCBpbiBAcmZsb3cuXG41MDY5Olx0ICpcbjUwNzA6XHQgKiBJZiB0aGUgQ1BVIGhhcyBwcm9jZXNzZWQgbWFueSBwYWNrZXRzIHNpbmNlIHRoZSBmbG93JiMzOTtzIGxhc3QgYWN0aXZpdHlcbjUwNzE6XHQgKiAoYmV5b25kIDEwIHRpbWVzIHRoZSB0YWJsZSBzaXplKSwgdGhlIGZsb3cgaXMgY29uc2lkZXJlZCBzdGFsZS5cbjUwNzI6XHQgKlxuNTA3MzpcdCAqIFJldHVybjogdHJ1ZSBpZiBmbG93IHdhcyByZWNlbnRseSBhY3RpdmUuXG41MDc0Olx0ICovXG41MDc1Olx0c3RhdGljIGJvb2wgcnBzX2Zsb3dfaXNfYWN0aXZlKHN0cnVjdCBycHNfZGV2X2Zsb3cgKnJmbG93LFxuNTA3NjpcdFx0XHRcdCAgICAgICB1OCBsb2csXG41MDc3Olx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBjcHUpXG41MDc4Olx0e1xuNTA3OTpcdFx0dW5zaWduZWQgaW50IGZsb3dfbGFzdF9hY3RpdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKlJQUyBEaXNhYmxlbWVudCBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgUlBTIGFuZCBob3cgaXQgYmVoYXZlcyB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aG91dCBgQ09ORklHX1JQU2AgZW5hYmxlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBldmVuIHdoZW4gUlBTIGlzIG9mZiwgdGhlcmUgbWlnaHQgc3RpbGwgYmUgc29tZSBjb2RlIHBhdGhzIG9yIGRlZmluaXRpb25zIHRoYXQgdG91Y2ggdXBvbiBSUFMtcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gU28sIGxldCYjMzk7cyBtYWtlIHN1cmUgd2Ugc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvcnBzLmhgIGhlYWRlciBmaWxlIGV2ZW4gaW4gdGhpcyBkaXNhYmxlZCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGtleSBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBwb3RlbnRpYWwgcmVtbmFudHMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zLiBHb3R0YSBiZSBleHRyYSBjYXJlZnVsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuICAgMjpcdCNpZm5kZWYgX05FVF9SUFNfSFxuICAgMzpcdCNkZWZpbmUgX05FVF9SUFNfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2hvdGRhdGEuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpZmRlZiBDT05GSUdfUlBTXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3Jwcy10eXBlcy5oXHUwMDNlXG4gIDEyOlx0XG4gIDEzOlx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gIDE0Olx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4gIDE1Olx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuICAxOTpcdCAqIG1hcCBpcyBhbiBhcnJheSBvZiBDUFVzLlxuICAyMDpcdCAqL1xuICAyMTpcdHN0cnVjdCBycHNfbWFwIHtcbiAgMjI6XHRcdHVuc2lnbmVkIGludFx0bGVuO1xuICAyMzpcdFx0c3RydWN0IHJjdV9oZWFkXHRyY3U7XG4gIDI0Olx0XHR1MTZcdFx0Y3B1c1tdO1xuICAyNTpcdH07XG4gIDI2Olx0I2RlZmluZSBSUFNfTUFQX1NJWkUoX251bSkgKHNpemVvZihzdHJ1Y3QgcnBzX21hcCkgJiM0MzsgKChfbnVtKSAqIHNpemVvZih1MTYpKSlcbiAgMjc6XHRcbiAgMjg6XHQvKlxuICAyOTpcdCAqIFRoZSBycHNfZGV2X2Zsb3cgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGEgZmxvdyB0byBhIENQVSwgdGhlXG4gIDMwOlx0ICogdGFpbCBwb2ludGVyIGZvciB0aGF0IENQVSYjMzk7cyBpbnB1dCBxdWV1ZSBhdCB0aGUgdGltZSBvZiBsYXN0IGVucXVldWUsIGFcbiAgMzE6XHQgKiBoYXJkd2FyZSBmaWx0ZXIgaW5kZXgsIGFuZCB0aGUgaGFzaCBvZiB0aGUgZmxvdyBpZiBhUkZTIGlzIGVuYWJsZWQuXG4gIDMyOlx0ICovXG4gIDMzOlx0c3RydWN0IHJwc19kZXZfZmxvdyB7XG4gIDM0Olx0XHR1MTZcdFx0Y3B1O1xuICAzNTpcdFx0dTE2XHRcdGZpbHRlcjtcbiAgMzY6XHRcdHVuc2lnbmVkIGludFx0bGFzdF9xdGFpbDtcbiAgMzc6XHQjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuICAzODpcdFx0dTMyXHRcdGhhc2g7XG4gIDM5Olx0I2VuZGlmXG4gIDQwOlx0fTtcbiAgNDE6XHQjZGVmaW5lIFJQU19OT19GSUxURVIgMHhmZmZmXG4gIDQyOlx0XG4gIDQzOlx0LypcbiAgNDQ6XHQgKiBUaGUgcnBzX3NvY2tfZmxvd190YWJsZSBjb250YWlucyBtYXBwaW5ncyBvZiBmbG93cyB0byB0aGUgbGFzdCBDUFVcbiAgNDU6XHQgKiBvbiB3aGljaCB0aGV5IHdlcmUgcHJvY2Vzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiAoc2V0IGluIHJlY3Ztc2cpLlxuICA0NjpcdCAqIEVhY2ggZW50cnkgaXMgYSAzMmJpdCB2YWx1ZS4gVXBwZXIgcGFydCBpcyB0aGUgaGlnaC1vcmRlciBiaXRzXG4gIDQ3Olx0ICogb2YgZmxvdyBoYXNoLCBsb3dlciBwYXJ0IGlzIENQVSBudW1iZXIuXG4gIDQ4Olx0ICogcnBzX2NwdV9tYXNrIGlzIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBzcGFjZSwgZGVwZW5kaW5nIG9uIG51bWJlciBvZlxuICA0OTpcdCAqIHBvc3NpYmxlIENQVXMgOiBycHNfY3B1X21hc2sgPSByb3VuZHVwX3Bvd19vZl90d28obnJfY3B1X2lkcykgLSAxXG4gIDUwOlx0ICogRm9yIGV4YW1wbGUsIGlmIDY0IENQVXMgYXJlIHBvc3NpYmxlLCBycHNfY3B1X21hc2sgPSAweDNmLFxuICA1MTpcdCAqIG1lYW5pbmcgd2UgdXNlIDMyLTY9MjYgYml0cyBmb3IgdGhlIGhhc2guXG4gIDUyOlx0ICovXG4gIDUzOlx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUge1xuICA1NDpcdFx0dTMyXHRlbnQ7XG4gIDU1Olx0fTtcbiAgNTY6XHRcbiAgNTc6XHQjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gIDU4Olx0XG4gIDU5Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuICA2MjpcdHtcbiAgNjM6XHRcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAgNjQ6XHRcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuICA2NTpcdFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuICA2NjpcdFx0dTMyIG9sZF92YWw7XG4gIDY3Olx0XG4gIDY4Olx0XHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gIDY5Olx0XHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAgNzA6XHRcbiAgNzE6XHRcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcbiAgNzI6XHRcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuICA3MzpcdFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gIDc0Olx0XHQgKi9cbiAgNzU6XHRcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4gIDc2Olx0XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiAgNzc6XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbmNsdWRlL25ldC9ycHMuaGAgaGVhZGVyLCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBkaXZlIGludG8gbmV0d29ya2luZyBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIHRoZSBgcnBzLmhgIEhlYWRlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgYSBzaWduaWZpY2FudCBwYXJ0IG9mIGl0LCBpbiB0ZXJtcyBvZiBzdGVlcmluZyBwYWNrZXRzIHRvIHRoZSByaWdodCBDUFUgY29yZSBmb3IgcHJvY2Vzc2luZy4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgYW5kIGxpa2VseSBzb21lIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBrZXkgdG8gbWFraW5nIHRoaXMgaGFwcGVuIGVmZmljaWVudGx5LiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgZGlzcGF0Y2ggYW5kIHdoYXQgbWVjaGFuaXNtcyBpdCB1c2VzIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24gQ1BVLCBpZGVhbGx5LCB3aXRob3V0IHRvbyBtdWNoIG92ZXJoZWFkIG9yIGxvY2tpbmcgY29udGVudGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgbGlrZSB0aGUgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBOSUMmIzM5O3Mgb3duIFJTUyAoUmVjZWl2ZSBTaWRlIFNjYWxpbmcpIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgdHVuaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0e1xuICA4MjpcdFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcbiAgODM6XHRcbiAgODQ6XHRcdGlmICghaGFzaClcbiAgODU6XHRcdFx0cmV0dXJuO1xuICA4NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA4NzpcdFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcbiAgODg6XHRcdGlmICh0YWdfcHRyKVxuICA4OTpcdFx0XHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcbiAgOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA5MTpcdH1cbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiAgOTQ6XHR7XG4gIDk1Olx0XHQvKiBSZWFkaW5nIHNrLVx1MDAzZXNrX3J4aGFzaCBtaWdodCBpbmN1ciBhbiBleHBlbnNpdmUgY2FjaGUgbGluZVxuICA5NjpcdFx0ICogbWlzcy5cbiAgOTc6XHRcdCAqXG4gIDk4Olx0XHQgKiBUQ1BfRVNUQUJMSVNIRUQgZG9lcyBjb3ZlciBhbG1vc3QgYWxsIHN0YXRlcyB3aGVyZSBSRlNcbiAgOTk6XHRcdCAqIG1pZ2h0IGJlIHVzZWZ1bCwgYW5kIGlzIGNoZWFwZXIgWzFdIHRoYW4gdGVzdGluZyA6XG4gMTAwOlx0XHQgKlx0SVB2NDogaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkclxuIDEwMTpcdFx0ICpcdElQdjY6IGlwdjZfYWRkcl9hbnkoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIpXG4gMTAyOlx0XHQgKiBPUlx0YW4gYWRkaXRpb25hbCBzb2NrZXQgZmxhZ1xuIDEwMzpcdFx0ICogWzFdIDogc2tfc3RhdGUgYW5kIHNrX3Byb3QgYXJlIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuXG4gMTA0Olx0XHQgKi9cbiAxMDU6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiAxMDY6XHRcdFx0LyogVGhpcyBSRUFEX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgV1JJVEVfT05DRSgpXG4gMTA3Olx0XHRcdCAqIGZyb20gc29ja19ycHNfc2F2ZV9yeGhhc2goKSBhbmQgc29ja19ycHNfcmVzZXRfcnhoYXNoKCkuXG4gMTA4Olx0XHRcdCAqL1xuIDEwOTpcdFx0XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcnhoYXNoKSk7XG4gMTEwOlx0XHR9XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDExNDpcdHtcbiAxMTU6XHRcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbiAxMTY6XHRcdHJwc190YWdfcHRyIHRhZ19wdHI7XG4gMTE3Olx0XHR1MzIgaGFzaCwgaW5kZXg7XG4gMTE4Olx0XG4gMTE5Olx0XHRoYXNoID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCk7XG4gMTIwOlx0XHRpZiAoIWhhc2gpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjQ6XHRcdHRhZ19wdHIgPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEucnBzX3NvY2tfZmxvd190YWJsZSk7XG4gMTI1Olx0XHRpZiAodGFnX3B0cikge1xuIDEyNjpcdFx0XHRpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAxMjc6XHRcdFx0dGFibGUgPSBycHNfdGFnX3RvX3RhYmxlKHRhZ19wdHIpO1xuIDEyODpcdFx0XHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IFJQU19OT19DUFUpXG4gMTI5Olx0XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCBSUFNfTk9fQ1BVKTtcbiAxMzA6XHRcdH1cbiAxMzE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEzMjpcdH1cbiAxMzM6XHQjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIDEzNDpcdFxuIDEzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gMTM2Olx0e1xuIDEzNzpcdCNpZmRlZiBDT05GSUdfUlBTXG4gMTM4Olx0XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZyZnNfbmVlZGVkKTtcbiAxMzk6XHQjZWxzZVxuIDE0MDpcdFx0cmV0dXJuIGZhbHNlO1xuIDE0MTpcdCNlbmRpZlxuIDE0MjpcdH1cbiAxNDM6XHRcbiAxNDQ6XHR2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4gMTQ1Olx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuIDE0NjpcdFxuIDE0NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gMTQ4Olx0e1xuIDE0OTpcdCNpZmRlZiBDT05GSUdfUlBTXG4gMTUwOlx0XHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbiAxNTE6XHRcdFx0cmV0dXJuO1xuIDE1MjpcdFxuIDE1MzpcdFx0X3NvY2tfcnBzX2RlbGV0ZV9mbG93KHNrKTtcbiAxNTQ6XHQjZW5kaWZcbiAxNTU6XHR9XG4gMTU2Olx0XG4gMTU3Olx0c3RhdGljIGlubGluZSB1MzIgcnBzX2lucHV0X3F1ZXVlX3RhaWxfaW5jcihzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbiAxNTg6XHR7XG4gMTU5Olx0I2lmZGVmIENPTkZJR19SUFNcbiAxNjA6XHRcdHJldHVybiAmIzQzOyYjNDM7c2QtXHUwMDNlaW5wdXRfcXVldWVfdGFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3QgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBSUFMvUkZTIGFyZSBhY3RpdmUgYW5kIHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcnBzX2xsY19jaGVja2AgaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGZsb3cgdXBkYXRlcywgQ1BVIGFmZmluaXR5LCBhbmQgc3RlZXJpbmcgd2l0aGluIHRoZSBSUFMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoZWNraW5nIGBvbGRfY3B1YCBhbmQgYG5ld19jcHVgIGFnYWluc3QgYG5ldF9ob3RkYXRhLnJwc19jcHVfbWFza2AsIGFuZCBjb25kaXRpb25hbGx5IGNhbGxpbmcgYGNwdV9hY3RpdmVgIGFuZCBgY3B1c19zaGFyZV9jYWNoZWAgYmFzZWQgb24gdGhlIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBjb25kaXRpb24uCgpOb3csIGFyZSB0aGVzZSBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEkgbmVlZCB0byBhcHBseSB0aGUgY3JpdGVyaWEuIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbW1lbnQgY2hhbmdlLCBhIGxvZ2dpbmcgdXBkYXRlLCBvciBhIHB1cmVseSBjb3NtZXRpYyBudW1lcmljIGNoYW5nZS4gVGhlcmUmIzM5O3MgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGluIGBuZXQvY29yZS9kZXYuY2AsIGBpbmNsdWRlL25ldC9ycHMuaGAsIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiBUaGlzIGlzbiYjMzk7dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGNvZGUgb3IgaG90LXVucGx1ZyByZWxhdGVkIGNvZGUuIENyaXRpY2FsbHksIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd291bGQgYmUgZmluZS4gVGhlcmVmb3JlLCAqKldvcnRoRnV6emluZz10cnVlKiouCgpOZXh0LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gQ2xlYXJseSwgYHJwc19sbGNfY2hlY2tgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIHRhcmdldC4gSXQmIzM5O3MgYSBub24tc3RhdGljIGJvb2xlYW4gZnVuY3Rpb24gaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHdpdGggdGhlIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBhbmQgdGhlIGBjcHVzX3NoYXJlX2NhY2hlYCBjaGVjay4gVGhpcyBpcyBuZXcgYW5kIHdhcnJhbnRzIGF0dGVudGlvbi4gQWxzbywgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCB3aGljaCBhcmUgbm93IGV4cG9ydGVkIGZ1bmN0aW9ucywgYXJlIGFsc28gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIGZ1enppbmcuIFRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLgoKQXJlIHRoZXkgaG90LXBhdGg/IEkgc2hvdWxkIGJlIGNhcmVmdWwgdG8gb25seSBmbGFnIGZ1bmN0aW9ucyB0byBmdXp6IHRoYXQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBycHNfbGxjX2NoZWNrYCB0aGF0IGNoZWNrcyBjYWNoZSBhZmZpbml0eSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGhpdC4gVGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHNvY2tldCBvcHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBleGFjdGx5IHdoZXJlIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgaXMgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBnb29kIHRhcmdldHMsIGJ1dCBmb3Igbm93IHRoZXkgc2VlbSBva2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz00MTQ9c3RhdGljIHZvaWQgdHVuX2Zsb3dfdXBkYXRlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUzMiByeGhhc2gsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNDMyLVx0XHRcdGUtXHUwMDNldXBkYXRlZCA9IGppZmZpZXM7XG5kcml2ZXJzL25ldC90dW4uYzo0MzM6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goZS1cdTAwM2VycHNfcnhoYXNoKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTQzNC1cdH0gZWxzZSB7XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9NjE9c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxuaW5jbHVkZS9uZXQvcnBzLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG5pbmNsdWRlL25ldC9ycHMuaC04MS17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtOTItXG5pbmNsdWRlL25ldC9ycHMuaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC0xMDgtXHRcdCAqL1xuaW5jbHVkZS9uZXQvcnBzLmg6MTA5Olx0XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcnhoYXNoKSk7XG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXHR9XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtMTQzLVxuaW5jbHVkZS9uZXQvcnBzLmg6MTQ0OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcbmluY2x1ZGUvbmV0L3Jwcy5oOjE0NTp2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9ycHMuaC0xNDYtXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTEyMDU9c3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3NhdmVfcnhoYXNoKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIwOS1cdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuaW5jbHVkZS9uZXQvc29jay5oOjEyMTA6XHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKS5cbmluY2x1ZGUvbmV0L3NvY2suaC0xMjExLVx0ICovXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTEyMTc9c3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3Jlc2V0X3J4aGFzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTEyMTktI2lmZGVmIENPTkZJR19SUFNcbmluY2x1ZGUvbmV0L3NvY2suaDoxMjIwOlx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKSAqL1xuaW5jbHVkZS9uZXQvc29jay5oLTEyMjEtXHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCwgMCk7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTE5NTM9aW50IGlvX3pjcnhfcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE5NjItXG5pb191cmluZy96Y3J4LmM6MTk2MzpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbmlvX3VyaW5nL3pjcnguYy0xOTY0LVx0cmV0dXJuIGlvX3pjcnhfdGNwX3JlY3Ztc2cocmVxLCBpZnEsIHNrLCBmbGFncywgaXNzdWVfZmxhZ3MsIGxlbik7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTM1ND1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM2NC1cbm5ldC9jb3JlL2Rldi5jOjUzNjU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG5uZXQvY29yZS9kZXYuYy01MzY2LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01MzcwLVxubmV0L2NvcmUvZGV2LmM6NTM3MTpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xubmV0L2NvcmUvZGV2LmMtNTM3Mi0jZW5kaWZcbm5ldC9jb3JlL2Rldi5jLTUzNzMtfVxubmV0L2NvcmUvZGV2LmM6NTM3NDpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xubmV0L2NvcmUvZGV2LmMtNTM3NS1cbm5ldC9jb3JlL2Rldi5jOjUzNzY6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9kZXYuYy01Mzc3LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01MzgxLVxubmV0L2NvcmUvZGV2LmM6NTM4MjpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvY29yZS9kZXYuYy01MzgzLSNlbmRpZlxubmV0L2NvcmUvZGV2LmMtNTM4NC19XG5uZXQvY29yZS9kZXYuYzo1Mzg1OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xubmV0L2NvcmUvZGV2LmMtNTM4Ni1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9NzYxPXZvaWQgX19pbmV0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTc2Ny1cbm5ldC9pcHY0L2FmX2luZXQuYzo3Njg6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhuZXdzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY5LVx0V0FSTl9PTighKCgxIFx1MDAzY1x1MDAzYyBuZXdzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTg0ND1pbnQgaW5ldF9zZW5kX3ByZXBhcmUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvYWZfaW5ldC5jLTg0NS17XG5uZXQvaXB2NC9hZl9pbmV0LmM6ODQ2Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTg0Ny1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9ODg0PWludCBpbmV0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtODkwLVx0aWYgKGxpa2VseSghKGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKSlcbm5ldC9pcHY0L2FmX2luZXQuYzo4OTE6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY0L2FmX2luZXQuYy04OTItXG4tLVxubmV0L2lwdjQvdGNwLmM9ODExPXNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbi0tXG5uZXQvaXB2NC90Y3AuYy04MjQtXG5uZXQvaXB2NC90Y3AuYzo4MjU6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC90Y3AuYy04MjYtXHQvKlxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjIyMy1cbm5ldC9pcHY0L3RjcC5jOjIyMjQ6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC90Y3AuYy0yMjI1LVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjQ1PWludCBpbmV0Nl9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTEtXHRpZiAobGlrZWx5KCEoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTI6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5ODA9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5ODktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTkwOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5MS1cdH1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz04NzEyPV9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy04NzE5LVxubmV0L3NjdHAvc29ja2V0LmM6ODcyMDpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9zY3RwL3NvY2tldC5jLTg3MjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcnBzX2xsY19jaGVja2AgRnVuY3Rpb24mIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiwgc2VlaW5nIGFzIGl0JiMzOTtzIHRoZSB0YXJnZXQuIEkga25vdyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZHVyaW5nIHRoZSBzb2NrIGZsb3cgcmVjb3JkaW5nIHByb2Nlc3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IEtjb25maWcgb3B0aW9ucy4gV2hhdCBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBnb2luZyB0byBiZSByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGJ1aWx0IGFuZCB3b3JrIGNvcnJlY3RseT8KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlOiBgbmV0L0tjb25maWdgLiBJIHNlZSBgQ09ORklHX1JQU2AgZGVmaW5lZCB0aGVyZToKCmBgYApjb25maWcgUlBTCglib29sICYjMzQ7UmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmcmIzM0OwoJZGVwZW5kcyBvbiBTTVAgJmFtcDsmYW1wOyBTWVNGUwoJZGVmYXVsdCB5CmBgYAoKQWxyaWdodCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFdlIG5lZWQgYFJQU2AgKHRoZSBjb3JlIGZlYXR1cmUgaXRzZWxmKSwgYFNNUGAgKHN5bW1ldHJpYyBtdWx0aXByb2Nlc3NpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwYWNrZXQgc3RlZXJpbmcgYWNyb3NzIG11bHRpcGxlIENQVXMpLCBhbmQgYFNZU0ZTYCAoZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UpLiBTZWVtcyBsb2dpY2FsLgoKQnV0LCBJJiMzOTttIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgSSBhbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycHNfbGxjX2NoZWNrYCBpc24mIzM5O3QgaW5kaXJlY3RseSBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZSB2aWEgb3RoZXIga2VybmVsIGZ1bmN0aW9ucyBvciBjb25maWd1cmF0aW9ucy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY2hlY2sgdGhlIGBjcHVzX3NoYXJlX2NhY2hlYCBkZWZpbml0aW9uIGluIHRoZSBrZXJuZWwgdHJlZSBhbmQgd29yayBiYWNrIHRvIGRldGVybWluZSBob3cgYHJwc19sbGNfY2hlY2tgIGlzIGludm9sdmVkLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwdXNfc2hhcmVfY2FjaGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmM9MTI0MT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX2NvbXBsZXRlX25lZWRfaXBpKHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMjU5LVx0ICAgICghdGVzdF9iaXQoUVVFVUVfRkxBR19TQU1FX0ZPUkNFLCBcdTAwMjZycS1cdTAwM2VxLVx1MDAzZXF1ZXVlX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay1tcS5jOjEyNjA6XHQgICAgIGNwdXNfc2hhcmVfY2FjaGUoY3B1LCBycS1cdTAwM2VtcV9jdHgtXHUwMDNlY3B1KSBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay1tcS5jLTEyNjEtXHQgICAgIGNwdXNfZXF1YWxfY2FwYWNpdHkoY3B1LCBycS1cdTAwM2VtcV9jdHgtXHUwMDNlY3B1KSkpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTIwMj1ib29sIGNwdXNfZXF1YWxfY2FwYWNpdHkoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjIwMzpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTIwNC1ib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM5ODQ9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzk5NC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mzk5NTpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTYte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDAxNT1zdGF0aWMgaW5saW5lIGJvb2wgdHR3dV9xdWV1ZV9jb25kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQwNDItXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDA0MzpcdGlmICghY3B1c19zaGFyZV9jYWNoZSh0aGlzX2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0NC1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9NDU4PXMzMiBzY3hfc2VsZWN0X2NwdV9kZmwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzMzIgcHJldl9jcHUsIHU2NCB3YWtlX2ZsYWdzLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzMy1cdFx0Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6NTM0Olx0XHRpZiAoaXNfcHJldl9hbGxvd2VkIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcHJldl9jcHUpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTM1LVx0XHQgICAgc2N4X2lkbGVfdGVzdF9hbmRfY2xlYXJfY3B1KHByZXZfY3B1KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODM1MD13YWtlX2FmZmluZV9pZGxlKGludCB0aGlzX2NwdSwgaW50IHByZXZfY3B1LCBpbnQgc3luYylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjMtXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODM2NDpcdGlmIChhdmFpbGFibGVfaWRsZV9jcHUodGhpc19jcHUpIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBwcmV2X2NwdSkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjUtXHRcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUocHJldl9jcHUpID8gcHJldl9jcHUgOiB0aGlzX2NwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTg5NDk9c3RhdGljIGludCBzZWxlY3RfaWRsZV9zaWJsaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXYsIGludCB0YXJnZXQpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTc4LVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg5Nzk6XHRpZiAocHJldiAhPSB0YXJnZXQgXHUwMDI2XHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk4MC1cdCAgICBjaG9vc2VfaWRsZV9jcHUocHJldiwgcCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEwLVx0ICAgIHJlY2VudF91c2VkX2NwdSAhPSB0YXJnZXQgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jOjkwMTE6XHQgICAgY3B1c19zaGFyZV9jYWNoZShyZWNlbnRfdXNlZF9jcHUsIHRhcmdldCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTItXHQgICAgY2hvb3NlX2lkbGVfY3B1KHJlY2VudF91c2VkX2NwdSwgcCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUwLVxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDUxOlx0XHRpZiAoIWhhc19pZGxlX2NvcmUgXHUwMDI2XHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUyLVx0XHRcdGkgPSBzZWxlY3RfaWRsZV9zbXQocCwgc2QsIHByZXYpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA2OTg9c3RhdGljIGVudW0gbGxjX21pZyBjYW5fbWlncmF0ZV9sbGNfdGFzayhpbnQgc3JjX2NwdSwgaW50IGRzdF9jcHUsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcwOS1cdGNwdSA9IFJFQURfT05DRShtbS1cdTAwM2VzY19zdGF0LmNwdSk7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzEwOlx0aWYgKGNwdSBcdTAwM2MgMCB8fCBjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGRzdF9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcxMS1cdFx0cmV0dXJuIG1pZ191bnJlc3RyaWN0ZWQ7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyMC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjE6XHRpZiAoY3B1c19zaGFyZV9jYWNoZShkc3RfY3B1LCBjcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyMi1cdFx0dG9fcHJlZiA9IHRydWU7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzIzOlx0ZWxzZSBpZiAoY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBjcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyNC1cdFx0dG9fcHJlZiA9IGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NDE9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0NS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3NDY6XHRpZiAoY3B1c19zaGFyZV9jYWNoZShlbnYtXHUwMDNlc3JjX2NwdSwgZW52LVx1MDAzZWRzdF9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTY2MD1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbnMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjcyLSAqIG9mIHRoZSBkb21haW4pLCB0aGlzIGFsbG93cyB1cyB0byBxdWlja2x5IHRlbGwgaWYgdHdvIENQVXMgYXJlIGluIHRoZSBzYW1lXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NzM6ICogY2FjaGUgZG9tYWluLCBzZWUgY3B1c19zaGFyZV9jYWNoZSgpLlxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjc0LSAqL1xuLS1cbmtlcm5lbC93b3JrcXVldWUuYz04NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVjb21wdXRlX2NhY2hlX3NoYXJkX2lkcyh2b2lkKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy04NTYxLS8qXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2MjogKiBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkIC0gdGVzdCB3aGV0aGVyIHR3byBDUFVzIGJlbG9uZyB0byB0aGUgc2FtZSBjYWNoZSBzaGFyZFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjMtICpcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2Ni0gKi9cbmtlcm5lbC93b3JrcXVldWUuYzo4NTY3OnN0YXRpYyBib29sIF9faW5pdCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKGludCBjcHUwLCBpbnQgY3B1MSlcbmtlcm5lbC93b3JrcXVldWUuYy04NTY4LXtcbmtlcm5lbC93b3JrcXVldWUuYzo4NTY5Olx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKGNwdTAsIGNwdTEpKVxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODU4Mj12b2lkIF9faW5pdCB3b3JrcXVldWVfaW5pdF90b3BvbG9neSh2b2lkKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy04NTg4LVx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9TTVRdLCBjcHVzX3NoYXJlX3NtdCk7XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU4OTpcdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVdLCBjcHVzX3NoYXJlX2NhY2hlKTtcbmtlcm5lbC93b3JrcXVldWUuYy04NTkwLVx0cHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHMoKTtcbmtlcm5lbC93b3JrcXVldWUuYzo4NTkxOlx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV9TSEFSRF0sIGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQpO1xua2VybmVsL3dvcmtxdWV1ZS5jLTg1OTItXHRpbml0X3BvZF90eXBlKFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX05VTUFdLCBjcHVzX3NoYXJlX251bWEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUyNzU9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbi0tXG5uZXQvY29yZS9kZXYuYy01MzAwLVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzMDE6XHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbm5ldC9jb3JlL2Rldi5jLTUzMDItXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjY0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxlciBDb3JlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQ1BVIGNhY2hlIHNoYXJpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzY2hlZHVsZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgbG9vayBhdCBga2VybmVsL3NjaGVkL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB3aXRoIGBjcHVzX3NoYXJlX2NhY2hlYC4gVGhpcyBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGNvbnRyb2wuIEkga25vdyB0aGlzIGFyZWEgZmFpcmx5IHdlbGwsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byBOVU1BIG5vZGUgYXdhcmVuZXNzIGFuZCBob3cgd2UgaGFuZGxlIGNvcmUtc2hhcmluZyBhZmZpbml0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5OTA6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTkxOlx0XG4zOTkyOlx0XHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcbjM5OTM6XHR9XG4zOTk0Olx0XG4zOTk1Olx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuMzk5NjpcdHtcbjM5OTc6XHRcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcbjM5OTg6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTk5Olx0XG40MDAwOlx0XHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xuNDAwMTpcdH1cbjQwMDI6XHRcbjQwMDM6XHQvKlxuNDAwNDpcdCAqIFdoZXRoZXIgQ1BVcyBhcmUgc2hhcmUgY2FjaGUgcmVzb3VyY2VzLCB3aGljaCBtZWFucyBMTEMgb24gbm9uLWNsdXN0ZXJcbjQwMDU6XHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxuNDAwNjpcdCAqL1xuNDAwNzpcdGJvb2wgY3B1c19zaGFyZV9yZXNvdXJjZXMoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG40MDA4Olx0e1xuNDAwOTpcdFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxuNDAxMDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQwMTE6XHRcbjQwMTI6XHRcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xuNDAxMzpcdH1cbjQwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgUlBTIEZlYXR1cmUgQWZmaW5pdHkgaW4gTmV0L0NvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBoYW5kbGVzIExMQyAoTGluayBMYXllciBDb250cm9sKSBhZmZpbml0eS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIHVzdWFsLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdCDigJMgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IGZpbGUgZm9yIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvbnRyb2wgbWVjaGFuaXNtcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFJQUyBmZWF0dXJlIGFyZSBkZWZpbmVkLCByaWdodD8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgY29uZmlndXJlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgUlBTIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lc3NhZ2VfYnVyc3RcJiMzNDssXG4gNTQ2Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2bmV0X3JhdGVsaW1pdF9zdGF0ZS5idXJzdCxcbiA1NDc6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuIDU0ODpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gNTQ5Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlYyxcbiA1NTA6XHRcdH0sXG4gNTUxOlx0I2lmZGVmIENPTkZJR19SUFNcbiA1NTI6XHRcdHtcbiA1NTM6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3Jwc19zb2NrX2Zsb3dfZW50cmllc1wmIzM0OyxcbiA1NTQ6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuIDU1NTpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gNTU2Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiA1NTc6XHRcdH0sXG4gNTU4Olx0XHR7XG4gNTU5Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlcJiMzNDssXG4gNTYwOlx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSxcbiA1NjE6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSxcbiA1NjI6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIDU2MzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleVxuIDU2NDpcdFx0fSxcbiA1NjU6XHQjZW5kaWZcbiA1NjY6XHQjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG4gNTY3Olx0XHR7XG4gNTY4Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtmbG93X2xpbWl0X2NwdV9iaXRtYXBcJiMzNDssXG4gNTY5Olx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiA1NzA6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBmbG93X2xpbWl0X2NwdV9zeXNjdGxcbiA1NzE6XHRcdH0sXG4gNTcyOlx0XHR7XG4gNTczOlx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtmbG93X2xpbWl0X3RhYmxlX2xlblwmIzM0OyxcbiA1NzQ6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZXRkZXZfZmxvd19saW1pdF90YWJsZV9sZW4sXG4gNTc1Olx0XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiA1NzY6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIDU3NzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IGZsb3dfbGltaXRfdGFibGVfbGVuX3N5c2N0bFxuIDU3ODpcdFx0fSxcbiA1Nzk6XHQjZW5kaWYgLyogQ09ORklHX05FVF9GTE9XX0xJTUlUICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU1CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUlBTIEZ1enppbmcgU2NlbmFyaW8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBzeXNjdGxgIGludGVyZmFjZS4gV2hpbGUgdXN1YWxseSBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgIGhhbmRsZSB0aGVzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgaGVyZS4KCk5leHQsIEkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYFJQU2AgcmVsaWVzIG9uIGJvdGggYFNNUGAgKHN5bW1ldHJpYyBtdWx0aXByb2Nlc3NpbmcpIGFuZCBgU1lTRlNgIChzeXNmcyBmaWxlIHN5c3RlbSkuIFNvIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3M7IHRoZXJlZm9yZSwgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7UlBTJiMzNDssICYjMzQ7U01QJiMzNDssICYjMzQ7U1lTRlMmIzM0O11gLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogdGhlIGZvY3VzZWQgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IG5ld2x5IGFkZGVkIG9yIG1vZGlmaWVkIHN5bWJvbHMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBycHNfbGxjX2NoZWNrYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIGJvdGggYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFyZSBleHBvcnRlZCBmdW5jdGlvbnMsIGFsc28gaW4gdGhhdCBmaWxlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGEgc2lnbmlmaWNhbnQgY2hhbmdlIG9yIGFkZGl0aW9uIHRvIHRoZSBjb2RlLgoKR2l2ZW4gdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHJlbWVtYmVyaW5nIHRoZSBpbnN0cnVjdGlvbnMgSSByZWNlaXZlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgWyYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LCAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssICYjMzQ7c29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCYjMzQ7XWAuIEkga25vdyB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYDogYFsmIzM0O1JQUyYjMzQ7LCAmIzM0O1NNUCYjMzQ7LCAmIzM0O1NZU0ZTJiMzNDtdYC4gTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSByYXRpb25hbGUsIGV4cGxhaW4gd2hhdCB0aGVzZSBzeW1ib2xzIGRvLCBhbmQgY29ubmVjdCB0aGVtIHRvIHRoZSByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5IGNoZWNrIGZvciBSUFMvUkZTIGZsb3cgdXBkYXRlcyBjb250cm9sbGVkIHZpYSBhIG5ldyBzeXNjdGwgKG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSkuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0L3NvY2tldCByZWNlaXZlIHN0ZWVyaW5nIGxvZ2ljIGluIG5ldC9jb3JlL2Rldi5jIGFuZCBtb3ZlcyBzb2NrX3Jwc19yZWNvcmRfZmxvdy9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoIHRvIG5vbi1pbmxpbmUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5IGNoZWNrIGZvciBSUFMvUkZTIGZsb3cgdXBkYXRlcyBjb250cm9sbGVkIHZpYSBhIG5ldyBzeXNjdGwgKG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSkuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0L3NvY2tldCByZWNlaXZlIHN0ZWVyaW5nIGxvZ2ljIGluIG5ldC9jb3JlL2Rldi5jIGFuZCBtb3ZlcyBzb2NrX3Jwc19yZWNvcmRfZmxvdy9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoIHRvIG5vbi1pbmxpbmUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmgKaW5kZXggZTMzYzZhMmZhOGJiYy4uNmRhY2YwODg4YTZjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkOwogZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTsKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZQpAQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7CiAKICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmYKIAomIzQzO2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpOwomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKQogewogCXVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggJmFtcDsgcnBzX3RhZ190b19tYXNrKHRhZ19wdHIpOwogCXUzMiB2YWwgPSBoYXNoICZhbXA7IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7CiAJc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlOwomIzQzOwl1MzIgb2xkX3ZhbDsKIAogCS8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi8KIAl2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTY4LDcgJiM0Mzs3Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIAkvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKCkKIAkgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS4KIAkgKi8KLQlpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbCkKJiM0MzsJb2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTsKJiM0MzsJaWYgKG9sZF92YWwgIT0gdmFsICZhbXA7JmFtcDsgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKQogCQlXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7CiB9CiAKQEAgLTEzNiwyNSAmIzQzOzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKLXsKLSNpZmRlZiBDT05GSUdfUlBTCi0JaWYgKCFyZnNfaXNfbmVlZGVkKCkpCi0JCXJldHVybjsKLQotCV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spOwotI2VuZGlmCi19CiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMzgzMzY4NThjMTY4Zi4uYjI3ODM5ZWI1OTRkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTUwNTIsNiAmIzQzOzUwNTIsOCBAQCBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpOwogc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChyZnNfbmVlZGVkKTsKJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTsKJiM0MztFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7CiAKIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpCiB7CkBAIC01MjYzLDYgJiM0Mzs1MjY1LDQ4IEBAIHN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY3B1OwogfQogCiYjNDM7LyoqCiYjNDM7ICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC4KJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICogQG5ld192YWw6IHRhcmdldCBmbG93IHJlY29yZCB2YWx1ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpCiYjNDM7ewomIzQzOwl1MzIgb2xkX2NwdSA9IG9sZF92YWwgJmFtcDsgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwl1MzIgbmV3X2NwdSA9IG5ld192YWwgJmFtcDsgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6CiYjNDM7CSAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LgomIzQzOwkgKgomIzQzOwkgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmcKJiM0MzsJICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50CiYjNDM7CSAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTEMKJiM0MzsJICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZwomIzQzOwkgKiBjYWNoZSBsb2NhbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7CiYjNDM7CQkvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi8KJiM0MzsJCWlmIChvbGRfY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50CiYjNDM7CQkgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwKIAogLyoqCkBAIC01MzE4LDYgJiM0Mzs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSkKIAogI2VuZGlmIC8qIENPTkZJR19SUFMgKi8KIAomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7CiYjNDM7CiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUlBTCiYjNDM7CWlmICghcmZzX2lzX25lZWRlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTsKJiM0MzsKIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqLwogc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IGViMzVkYTM1NTZmNGEuLjliNjcwMmY1ZWFiMTkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC0yMTAsNiAmIzQzOzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlrdmZyZWVfcmN1X21pZ2h0c2xlZXAodG9mcmVlKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwogI2VuZGlmIC8qIENPTkZJR19SUFMgKi8KIAogI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVApAQCAtNTU0LDYgJiM0Mzs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHJwc19zb2NrX2Zsb3dfc3lzY3RsCiAJfSwKJiM0MzsJewomIzQzOwkJLnByb2NuYW1lCT0gJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHkmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHJwc19mZWF0X2xsY19hZmZpbml0eS5rZXkpLAomIzQzOwkJLm1vZGUJCT0gMDY0NCwKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvX3N0YXRpY19rZXkKJiM0MzsJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVAogCXsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBSUFMgTExDIEFmZmluaXR5IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGZsYWcuIEZpcnN0LCBJJiMzOTtsbCBtZXRpY3Vsb3VzbHkgZ28gb3ZlciB0aGUgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLgoKTG9va2luZyBhdCBgaW5jbHVkZS9uZXQvcnBzLmhgLCBpdCBpbnRyb2R1Y2VzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIGFuZCB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb2xkX3ZhbGAgaW4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyByZWFkIHVzaW5nIGBSRUFEX09OQ0VgLCBhbmQgdGhlbiBwYXNzZWQgdG8gYHJwc19sbGNfY2hlY2tgIGJlZm9yZSBhbnkgd3JpdGVzLiBHb29kLCBzZWVtcyBzYWZlIG9uIHRoZSBzdXJmYWNlLiBBbHNvLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2VyZSBtb3ZlZCBmcm9tIHRoZSBoZWFkZXIgZmlsZSB0byBgbmV0L2NvcmUvZGV2LmNgLgoKTW92aW5nIG9uIHRvIGBuZXQvY29yZS9kZXYuY2AsIHdlIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBycHNfbGxjX2NoZWNrYC4gVGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGUgY2hlY2sgZXh0cmFjdHMgQ1BVIGFmZmluaXR5IGluZm9ybWF0aW9uIGJhc2VkIG9uIGEgQ1BVIG1hc2suIFRoZSB1c2Ugb2YgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2xkIENQVSBpcyBpbnZhbGlkIG9yIHRoZSBDUFVzIGRvbiYjMzk7dCBzaGFyZSB0aGUgc2FtZSBjYWNoZS4gVGhlIGBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2tgIGlzIGFsc28gd29ydGggYSBjbG9zZXIgbG9vayBpbiBvdGhlciBhcmVhcy4gVGhlIGZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYXJlIG5vdyBleHBvcnRlZC4KCkZpbmFsbHksIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AsIHRoZSBwYXRjaCBhZGRzIGEgc3lzY3RsIGVudHJ5IGZvciBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB1c2luZyBgcHJvY19kb19zdGF0aWNfa2V5YC4gVGhpcyBpcyB3aGVyZSBteSBmb2N1cyBzaGFycGVucy4gVGhlIGJpZ2dlc3QgcmlzayBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJvY19kb19zdGF0aWNfa2V5YCBoYW5kbGVyIGlzIHNhZmUuIExldCBtZSBjaGVjayB0aGUgb3RoZXIgdXNhZ2VzIG9mIGBwcm9jX2RvX3N0YXRpY19rZXlgIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN0YW5kYXJkIHByYWN0aWNlcyBvciBwb3RlbnRpYWwgcmlza3MuCgpOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBmb3IgYW55IHJpc2tzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZT8gYHByb2NfZG9fc3RhdGljX2tleWAgcmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIGBycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5YC4gSXMgdGhpcyBhIHN0YW5kYXJkL3NhZmUgcHJhY3RpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19kb19zdGF0aWNfa2V5YCBpbml0aWFsaXplcyB0aGlzIGNvcnJlY3RseS4gSSB3aWxsIGRvIGEgcXVpY2sgZ3JlcCBvbiB0aGUgY29kZWJhc2UgZm9yIGBwcm9jX2RvX3N0YXRpY19rZXlgIHRvIGJlIGV4dHJhIHN1cmUuCgpBcyBmb3Igb3RoZXIgcG90ZW50aWFsIEtNU0FOIGZsYWdzIC0gYXJlIHRoZXJlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHJlYWRzPyBgcnBzX2xsY19jaGVja2Agb3BlcmF0ZXMgb24gc2NhbGFyIGB1MzJgIGFyZ3VtZW50cyB3aGljaCBhcmUgaW5pdGlhbGl6ZWQsIHNvIHRoYXQgaXMgbm90IGEgY29uY2Vybi4gVGhlIGBvbGRfdmFsYCBpcyBpbml0aWFsaXplZCBieSBgUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpYCBhbmQgYHZhbGAgaXMgaW5pdGlhbGl6ZWQgYnkgYml0d2lzZSBvcGVyYXRpb25zIHNvIHRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIHJlYWRzIG9uIHRoaXMgZnJvbnQuIEZ1cnRoZXJtb3JlLCB0aGUgZnVuY3Rpb25zIGRvbiYjMzk7dCBjb3B5IGhlYXAvc3RhY2sgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzIGVpdGhlci4gT3ZlcmFsbCwgaXQgKmFwcGVhcnMqIHNhZmUsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYHByb2NfZG9fc3RhdGljX2tleWAgdXNhZ2VzIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZG9fc3RhdGljX2tleSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2N0bC5oPTk3PWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtOTgtXHRcdFx0IHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTtcbmluY2x1ZGUvbGludXgvc3lzY3RsLmg6OTk6aW50IHByb2NfZG9fc3RhdGljX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTAwLVx0XHQgICAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMzYxPWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTM2OS0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKVxua2VybmVsL3N5c2N0bC5jOjEzNzA6aW50IHByb2NfZG9fc3RhdGljX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy0xMzcxLVx0XHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5saWIvYWxsb2NfdGFnLmM9OTM1PUVYUE9SVF9TWU1CT0wocGFnZV9hbGxvY190YWdnaW5nX29wcyk7XG4tLVxubGliL2FsbG9jX3RhZy5jLTkzOC0vKlxubGliL2FsbG9jX3RhZy5jOjkzOTogKiBOb3QgdXNpbmcgcHJvY19kb19zdGF0aWNfa2V5KCkgZGlyZWN0bHkgdG8gcHJldmVudCBlbmFibGluZyBwcm9maWxpbmdcbmxpYi9hbGxvY190YWcuYy05NDAtICogYWZ0ZXIgaXQgd2FzIHNodXQgZG93bi5cbi0tXG5saWIvYWxsb2NfdGFnLmM9OTQyPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5saWIvYWxsb2NfdGFnLmMtOTYxLVxubGliL2FsbG9jX3RhZy5jOjk2MjpcdHJldHVybiBwcm9jX2RvX3N0YXRpY19rZXkodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubGliL2FsbG9jX3RhZy5jLTk2My19XG4tLVxubW0vYWxsb2NfdGFnLmM9MTI2OD1FWFBPUlRfU1lNQk9MKHBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTEyNzEtLypcbm1tL2FsbG9jX3RhZy5jOjEyNzI6ICogTm90IHVzaW5nIHByb2NfZG9fc3RhdGljX2tleSgpIGRpcmVjdGx5IHRvIHByZXZlbnQgZW5hYmxpbmcgcHJvZmlsaW5nXG5tbS9hbGxvY190YWcuYy0xMjczLSAqIGFmdGVyIGl0IHdhcyBzaHV0IGRvd24uXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI3NT1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI5NC1cbm1tL2FsbG9jX3RhZy5jOjEyOTU6XHRyZXR1cm4gcHJvY19kb19zdGF0aWNfa2V5KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbm1tL2FsbG9jX3RhZy5jLTEyOTYtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTEyOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2FsbG9jYXRpb25fcHJvZmlsaW5nX3N5c2N0bHNbXSA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy0xMzA5LVx0XHQubW9kZVx0XHQ9IDA0NDQsXG5tbS9hbGxvY190YWcuYzoxMzEwOlx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcbm1tL2FsbG9jX3RhZy5jLTEzMTEtXHR9LFxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTQzMT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU2Mi1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTYzOlx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTY0LVx0fSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NTktXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY2MDpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXksXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NjEtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENQVSBDYWNoZSBTaGFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KWAuIEkmIzM5O3ZlIGdvdCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY2FjaGUgdG9wb2xvZ3kgaGVyZS4gV2hhdCBhbSBJIHJlYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dD8gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgbW92aW5nIGZyb20gYG9sZF9jcHVgIHRvIGBuZXdfY3B1YCBoYXMgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSByYW1pZmljYXRpb25zIHN0ZW1taW5nIGZyb20gY2FjaGUgY29udGVudGlvbiwgb3IgY2FjaGUgYWZmaW5pdHkgaXNzdWVzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gaXMgaXQgYXMgc2ltcGxlIGFzIGNoZWNraW5nIHdoZXRoZXIgdGhleSYjMzk7cmUgb24gdGhlIHNhbWUgTlVNQSBub2RlIGFuZCBzaGFyZSB0aGUgc2FtZSBsZXZlbHMgb2YgY2FjaGU/IE9yIGlzIGl0IG1vcmUgY29tcGxleCwgaW52b2x2aW5nIHNvbWUga2luZCBvZiBudWFuY2VkIGFuYWx5c2lzIG9mIGNhY2hlIGhpZXJhcmNoeSBhbmQgY29oZXJlbmNlIGRvbWFpbnM/IEkmIzM5O3ZlIGdvdCB0byByZW1lbWJlciB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIGh5cGVydGhyZWFkaW5nIHRvby4gRG9lcyB0aGlzIGZ1bmN0aW9uIGFjY291bnQgZm9yIHRoYXQsIG9yIGlzIGl0IGFic3RyYWN0ZWQgYXdheSBhdCBhIGxvd2VyIGxldmVsPyBBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gc2VlIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkgc3VzcGVjdCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21ldGhpbmcgbGlrZSBDUFUgaG90cGx1Z2dpbmcsIG9yIG1heWJlIGV2ZW4gdGFzayBtaWdyYXRpb24uIEtub3dpbmcgdGhhdCBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgc2V2ZXJpdHkgb2YgYW55IHBvdGVudGlhbCBjYWNoZS1yZWxhdGVkIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcHVzX3NoYXJlX2NhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTEyNDE9c3RhdGljIGlubGluZSBib29sIGJsa19tcV9jb21wbGV0ZV9uZWVkX2lwaShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTI1OS1cdCAgICAoIXRlc3RfYml0KFFVRVVFX0ZMQUdfU0FNRV9GT1JDRSwgXHUwMDI2cnEtXHUwMDNlcS1cdTAwM2VxdWV1ZV9mbGFncykgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstbXEuYzoxMjYwOlx0ICAgICBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcnEtXHUwMDNlbXFfY3R4LVx1MDAzZWNwdSkgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstbXEuYy0xMjYxLVx0ICAgICBjcHVzX2VxdWFsX2NhcGFjaXR5KGNwdSwgcnEtXHUwMDNlbXFfY3R4LVx1MDAzZWNwdSkpKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yMDI9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDoyMDM6Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yMDQtYm9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0zOTg0PWJvb2wgY3B1c19lcXVhbF9jYXBhY2l0eShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTQtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5OTU6Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk2LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQwMTU9c3RhdGljIGlubGluZSBib29sIHR0d3VfcXVldWVfY29uZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQyLVx0ICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQwNDM6XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIGNwdSkpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQwNDQtXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTQ1OD1zMzIgc2N4X3NlbGVjdF9jcHVfZGZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgczMyIHByZXZfY3B1LCB1NjQgd2FrZV9mbGFncyxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy01MzMtXHRcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jOjUzNDpcdFx0aWYgKGlzX3ByZXZfYWxsb3dlZCBcdTAwMjZcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShjcHUsIHByZXZfY3B1KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzNS1cdFx0ICAgIHNjeF9pZGxlX3Rlc3RfYW5kX2NsZWFyX2NwdShwcmV2X2NwdSkpIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgzNTA9d2FrZV9hZmZpbmVfaWRsZShpbnQgdGhpc19jcHUsIGludCBwcmV2X2NwdSwgaW50IHN5bmMpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzYzLVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjgzNjQ6XHRpZiAoYXZhaWxhYmxlX2lkbGVfY3B1KHRoaXNfY3B1KSBcdTAwMjZcdTAwMjYgY3B1c19zaGFyZV9jYWNoZSh0aGlzX2NwdSwgcHJldl9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzY1LVx0XHRyZXR1cm4gYXZhaWxhYmxlX2lkbGVfY3B1KHByZXZfY3B1KSA/IHByZXZfY3B1IDogdGhpc19jcHU7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz04OTQ5PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfc2libGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2LCBpbnQgdGFyZ2V0KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk3OC1cdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4OTc5Olx0aWYgKHByZXYgIT0gdGFyZ2V0IFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTg5ODAtXHQgICAgY2hvb3NlX2lkbGVfY3B1KHByZXYsIHApIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTAxMC1cdCAgICByZWNlbnRfdXNlZF9jcHUgIT0gdGFyZ2V0IFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDExOlx0ICAgIGNwdXNfc2hhcmVfY2FjaGUocmVjZW50X3VzZWRfY3B1LCB0YXJnZXQpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEyLVx0ICAgIGNob29zZV9pZGxlX2NwdShyZWNlbnRfdXNlZF9jcHUsIHApIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTA1MC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTA1MTpcdFx0aWYgKCFoYXNfaWRsZV9jb3JlIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTA1Mi1cdFx0XHRpID0gc2VsZWN0X2lkbGVfc210KHAsIHNkLCBwcmV2KTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNjk4PXN0YXRpYyBlbnVtIGxsY19taWcgY2FuX21pZ3JhdGVfbGxjX3Rhc2soaW50IHNyY19jcHUsIGludCBkc3RfY3B1LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MDktXHRjcHUgPSBSRUFEX09OQ0UobW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcxMDpcdGlmIChjcHUgXHUwMDNjIDAgfHwgY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBkc3RfY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MTEtXHRcdHJldHVybiBtaWdfdW5yZXN0cmljdGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjAtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzIxOlx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZHN0X2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjItXHRcdHRvX3ByZWYgPSB0cnVlO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMzpcdGVsc2UgaWYgKGNwdXNfc2hhcmVfY2FjaGUoc3JjX2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjQtXHRcdHRvX3ByZWYgPSBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzQxPWFsYl9icmVha19sbGMoc3RydWN0IGxiX2VudiAqZW52KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDUtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzQ2Olx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZW52LVx1MDAzZXNyY19jcHUsIGVudi1cdTAwM2Vkc3RfY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02NjA9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW5zKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3Mi0gKiBvZiB0aGUgZG9tYWluKSwgdGhpcyBhbGxvd3MgdXMgdG8gcXVpY2tseSB0ZWxsIGlmIHR3byBDUFVzIGFyZSBpbiB0aGUgc2FtZVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjczOiAqIGNhY2hlIGRvbWFpbiwgc2VlIGNwdXNfc2hhcmVfY2FjaGUoKS5cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3NC0gKi9cbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODUzOT1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHModm9pZClcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2MS0vKlxua2VybmVsL3dvcmtxdWV1ZS5jOjg1NjI6ICogY3B1c19zaGFyZV9jYWNoZV9zaGFyZCAtIHRlc3Qgd2hldGhlciB0d28gQ1BVcyBiZWxvbmcgdG8gdGhlIHNhbWUgY2FjaGUgc2hhcmRcbmtlcm5lbC93b3JrcXVldWUuYy04NTYzLSAqXG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjYtICovXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2NzpzdGF0aWMgYm9vbCBfX2luaXQgY3B1c19zaGFyZV9jYWNoZV9zaGFyZChpbnQgY3B1MCwgaW50IGNwdTEpXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2OC17XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2OTpcdGlmICghY3B1c19zaGFyZV9jYWNoZShjcHUwLCBjcHUxKSlcbmtlcm5lbC93b3JrcXVldWUuYy04NTcwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTg1ODI9dm9pZCBfX2luaXQgd29ya3F1ZXVlX2luaXRfdG9wb2xvZ3kodm9pZClcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU4OC1cdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fU01UXSwgY3B1c19zaGFyZV9zbXQpO1xua2VybmVsL3dvcmtxdWV1ZS5jOjg1ODk6XHRpbml0X3BvZF90eXBlKFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX0NBQ0hFXSwgY3B1c19zaGFyZV9jYWNoZSk7XG5rZXJuZWwvd29ya3F1ZXVlLmMtODU5MC1cdHByZWNvbXB1dGVfY2FjaGVfc2hhcmRfaWRzKCk7XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU5MTpcdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVfU0hBUkRdLCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKTtcbmtlcm5lbC93b3JrcXVldWUuYy04NTkyLVx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9OVU1BXSwgY3B1c19zaGFyZV9udW1hKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01Mjc1PWJvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMwMC1cdFx0ICovXG5uZXQvY29yZS9kZXYuYzo1MzAxOlx0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG5uZXQvY29yZS9kZXYuYy01MzAyLVx0XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBDUFUgY2FjaGUgc2hhcmluZywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYGtlcm5lbC9zY2hlZC9jb3JlLmNgIGlzIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYGNwdXNfc2hhcmVfY2FjaGVgLiBUaGF0IG5hbWUgaXMgcHJldHR5IGluZGljYXRpdmUgb2Ygd2hhdCB3ZSYjMzk7cmUgYWZ0ZXIsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGVyZSB0ZWxscyB1cyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcmVsYXRpb25zaGlwIGJldHdlZW4gQ1BVcyBhbmQgdGhlaXIgY2FjaGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIHZpZXdzIGFuZCBtYW5hZ2VzIGNhY2hlIHNoYXJpbmcgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIG1vZGVybiBtdWx0aS1jb3JlIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgdGhlIGtlcm5lbCByZWFzb25zIGFib3V0IGl0IHdoZW4gbWFraW5nIHNjaGVkdWxpbmcgZGVjaXNpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkYXRhIHN0cnVjdHVyZXMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgbG9naWMgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IENQVXMgYXJlIHNoYXJpbmcgYSBjYWNoZSBhdCBhbnkgZ2l2ZW4gbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5OTA6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTkxOlx0XG4zOTkyOlx0XHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcbjM5OTM6XHR9XG4zOTk0Olx0XG4zOTk1Olx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuMzk5NjpcdHtcbjM5OTc6XHRcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcbjM5OTg6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTk5Olx0XG40MDAwOlx0XHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xuNDAwMTpcdH1cbjQwMDI6XHRcbjQwMDM6XHQvKlxuNDAwNDpcdCAqIFdoZXRoZXIgQ1BVcyBhcmUgc2hhcmUgY2FjaGUgcmVzb3VyY2VzLCB3aGljaCBtZWFucyBMTEMgb24gbm9uLWNsdXN0ZXJcbjQwMDU6XHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxuNDAwNjpcdCAqL1xuNDAwNzpcdGJvb2wgY3B1c19zaGFyZV9yZXNvdXJjZXMoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG40MDA4Olx0e1xuNDAwOTpcdFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxuNDAxMDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQwMTE6XHRcbjQwMTI6XHRcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xuNDAxMzpcdH1cbjQwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFJQUyBGbG93IFJlY29yZGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFJQUyBmbG93IHJlY29yZGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5LCB0aGUgYHJwc19yZWNvcmRfc29ja19mbG93YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBMZXQmIzM5O3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGFyZ3VtZW50cywgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIGdpdmVuIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIGZsb3cgY29udGV4dHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJQUyBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvciByZWxhdGVkIHRvIGZsb3cgYWZmaW5pdHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBzb2NrZXRzIGFuZCB3aGV0aGVyIGl0IGNvcnJlY3RseSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIG9mZmxvYWQgY29uZmlndXJhdGlvbnMuIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIHByb3Blcmx5IGFjY291bnRlZCBmb3IgZnJvbSBhIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IHBlcnNwZWN0aXZlIHRvby4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0fTtcbiAgNTY6XHRcbiAgNTc6XHQjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gIDU4Olx0XG4gIDU5Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuICA2MjpcdHtcbiAgNjM6XHRcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAgNjQ6XHRcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuICA2NTpcdFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuICA2NjpcdFx0dTMyIG9sZF92YWw7XG4gIDY3Olx0XG4gIDY4Olx0XHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gIDY5Olx0XHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAgNzA6XHRcbiAgNzE6XHRcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcbiAgNzI6XHRcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuICA3MzpcdFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gIDc0Olx0XHQgKi9cbiAgNzU6XHRcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4gIDc2Olx0XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiAgNzc6XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiAgODE6XHR7XG4gIDgyOlx0XHRycHNfdGFnX3B0ciB0YWdfcHRyO1xuICA4MzpcdFxuICA4NDpcdFx0aWYgKCFoYXNoKVxuICA4NTpcdFx0XHRyZXR1cm47XG4gIDg2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDg3Olx0XHR0YWdfcHRyID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnJwc19zb2NrX2Zsb3dfdGFibGUpO1xuICA4ODpcdFx0aWYgKHRhZ19wdHIpXG4gIDg5Olx0XHRcdHJwc19yZWNvcmRfc29ja19mbG93KHRhZ19wdHIsIGhhc2gpO1xuICA5MDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gIDkxOlx0fVxuICA5MjpcdFxuICA5MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuICA5NDpcdHtcbiAgOTU6XHRcdC8qIFJlYWRpbmcgc2stXHUwMDNlc2tfcnhoYXNoIG1pZ2h0IGluY3VyIGFuIGV4cGVuc2l2ZSBjYWNoZSBsaW5lXG4gIDk2Olx0XHQgKiBtaXNzLlxuICA5NzpcdFx0ICpcbiAgOTg6XHRcdCAqIFRDUF9FU1RBQkxJU0hFRCBkb2VzIGNvdmVyIGFsbW9zdCBhbGwgc3RhdGVzIHdoZXJlIFJGU1xuICA5OTpcdFx0ICogbWlnaHQgYmUgdXNlZnVsLCBhbmQgaXMgY2hlYXBlciBbMV0gdGhhbiB0ZXN0aW5nIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTMKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gb3B0aW1pemluZyBSRlMvQVJGUyBmbG93IHVwZGF0ZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYSBjaGVjayBmb3IgTExDIGFmZmluaXR5IChgcnBzX2xsY19jaGVja2ApLiBUaGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIHdoaWNoIGlzIGdvb2QuIFdlIGFsc28gc2VlIGEgbmV3IHN5c2N0bCBib29sZWFuIGtub2IgYmVpbmcgaW50cm9kdWNlZCwgYHJwc19mZWF0X2xsY19hZmZpbml0eWAuIEludGVyZXN0aW5nLgoKTm93LCBJIHNlZSB0aGUgaW5saW5lZCBmdW5jdGlvbnMgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFyZSBiZWluZyBtb3ZlZC4gVGhpcyBpcyB1c3VhbGx5IHRvIG1ha2UgdGhlbSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE5vdGhpbmcgaW5oZXJlbnRseSBkYW5nZXJvdXMsIGJ1dCB3ZSBhbHdheXMgaGF2ZSB0byBiZSBjYXJlZnVsIGFib3V0IHdoZXJlIHRoZXkgYXJlIG1vdmVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uczogVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE5vcGUsIHRoYW5rZnVsbHkuIFBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSBvciBhY3Jvc3Mga2VybmVsIGJvdW5kYXJpZXM/IE5vIGlzc3VlcyB0aGVyZSBlaXRoZXIuIEJ1ZmZlciBzaXplcywgYWxsb2NhdGlvbnMsIHN0cnVjdCBsYXlvdXRzPyBObyBjaGFuZ2VzLCB3aGljaCBpcyBhIHJlbGllZi4gTm8gbmV3IHN0YWNrIGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHN0YW5kYXJkIG1lbW9yeSBzYW5pdGl6ZXJzIOKAkyBLQVNBTiwgTE9DS0RFUCwgVUJTQU4g4oCTIHBsdXMgdGhlIHN0YW5kYXJkIHRlc3RpbmcgcmVnaW1lIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlIGFyZSBubyBvYnZpb3VzIHJlZCBmbGFncyB0aGF0IHdvdWxkIGp1c3RpZnkgaW52b2tpbmcgS01TQU4gZm9yIHRoaXMuIFdlIGFyZW4mIzM5O3QgZGVhbGluZyB3aXRoIGFueSBvZiB0aGUgc3VidGxlLCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHVuY292ZXIuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gc2FmZWx5IG1vdmUgZm9yd2FyZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBLTVNBTiBzY2FuIGZvciB0aGlzIHBhdGNoLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGlzIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZCwgZXhwbGFpbmluZyBleGFjdGx5IHdoeSB3ZSBhcmUgY29uZmlkZW50IGluIHJlbHlpbmcgb24gZXhpc3RpbmcgdG9vbHMgYW5kIHRlc3RpbmcuIFRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxuXG5BbGwgb3BlcmF0aW9ucyBpbiB0aGlzIHBhdGNoIHdvcmsgd2l0aCBzY2FsYXIgdmFsdWVzICh1MzIgaGFzaC9jcHUgSURzKSBhbmQgc3RhdGljIGtleXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNTo1MC42NDYyNjEwMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM2MzQ5MDM5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUlBTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnBzX2xsY19jaGVja1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgICBcInNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDU6NTAuNjQ2MjY2NDYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY1MTA1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTQ6MDU6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuK2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7XFxuIFxcbiAvKlxcbiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGVcXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gXFxuICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gXFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbitcXHR1MzIgb2xkX3ZhbDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi9cXG4gXFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuQEAgLTY4LDcgKzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG4gXFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcXG4rXFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4rXFx0aWYgKG9sZF92YWwgIT0gdmFsIFxcdTAwMjZcXHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcXG4gXFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiB9XFxuIFxcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi17XFxuLSNpZmRlZiBDT05GSUdfUlBTXFxuLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLXtcXG4tI2lmZGVmIENPTkZJR19SUFNcXG4tXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuLSNlbmRpZlxcbi19XFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggMzgzMzY4NThjMTY4Zi4uYjI3ODM5ZWI1OTRkNiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTUwNTIsNiArNTA1Miw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcXG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbiBcXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcXG4ge1xcbkBAIC01MjYzLDYgKzUyNjUsNDggQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gY3B1O1xcbiB9XFxuIFxcbisvKipcXG4rICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC5cXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXFxuK3tcXG4rXFx0dTMyIG9sZF9jcHUgPSBvbGRfdmFsIFxcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xcbitcXHR1MzIgbmV3X2NwdSA9IG5ld192YWwgXFx1MDAyNiBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6XFxuK1xcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxcbitcXHQgKlxcbitcXHQgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmdcXG4rXFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XFxuK1xcdCAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUncyBhcmZzX2xvY2spLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xcbitcXHQgKiBib3VuZGFyaWVzLiBUaGlzIG1pbmltaXplcyBleHBlbnNpdmUgaGFyZHdhcmUgdXBkYXRlcyB3aGlsZSBwcmVzZXJ2aW5nXFxuK1xcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xcbitcXHRcXHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cXG4rXFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbiBcXG4gLyoqXFxuQEAgLTUzMTgsNiArNTM2MiwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbisjZW5kaWZcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbitcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbitcXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXFxuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gXFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuICNlbmRpZiAvKiBDT05GSUdfUlBTICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXFxuQEAgLTU1NCw2ICs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4gXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicnBzX2ZlYXRfbGxjX2FmZmluaXR5XFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5LFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvX3N0YXRpY19rZXlcXG4rXFx0fSxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcXG4gXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNTo1MS4xNDM0Nzc4MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMTU4OTI3MDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4rZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiBcbiAvKlxuICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuQEAgLTU1LDExICs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoIFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XG4gXHR1MzIgdmFsID0gaGFzaCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiBcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbitcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyArNzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4gXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcbiBcdCAqIGhlcmUsIGFuZCBhbm90aGVyIG9uZSBpbiBnZXRfcnBzX2NwdSgpLlxuIFx0ICovXG4tXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcbitcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4rXHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbi0jZW5kaWZcbi19XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7XG4rc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiArNTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY3B1O1xuIH1cbiBcbisvKipcbisgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuKyAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbit7XG4rXHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuK1xuK1x0LypcbitcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbitcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuK1x0ICpcbitcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuK1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4rXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cbitcdCAqXG4rXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xuK1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuK1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuK1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbitcdFx0aWYgKG9sZF9jcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbitcdFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cbitcdFx0ICovXG4rXHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTMxOCw2ICs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xuK1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuK1xuIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqL1xuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgKzU1NSwxMyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiBcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbitcdH0sXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxuIFx0e1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDU6NTEuMTQzNDc5Mjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyMjM5ODk4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUlBTIGFuZCBMTEMgQWZmaW5pdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSByZWZpbmVtZW50cyB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBwb2ludCB1cyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uOiB3ZSdyZSB0b3VjaGluZyBgcnBzLmhgLCBgZGV2LmNgLCBhbmQgYHN5c2N0bF9uZXRfY29yZS5jYC4gVGhpcyBpcyBhbGwgY2xhc3NpYyBSUFMgdGVycml0b3J5LlxuXG5TbywgdGhlIG1lYXQgb2YgaXQ6IHdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIHdoaWNoIGlzIGtleS4gVGhpcyBsaWtlbHkgYWxsb3dzIHVzIHRvIGR5bmFtaWNhbGx5IGNvbnRyb2wgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHN0YXRpYyBrZXksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGdpdmluZyB1cyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGhvdyBSUFMgaW50ZXJhY3RzIHdpdGggdGhlIENQVSBjYWNoZS4gVGhlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgZnVuY3Rpb24gbm93IGNhbGxzIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgc21hcnQ7IGl0IHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGF0dGVtcHRpbmcgdG8gb3B0aW1pemUgY2FjaGUgbG9jYWxpdHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBycHNfbGxjX2NoZWNrYCBpbiBgZGV2LmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZy5cblxuVGhlIG1vdmVtZW50IG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBmcm9tIGlubGluZXMgaW4gYHJwcy5oYCB0byBleHBvcnRlZCBzeW1ib2xzIGluIGBkZXYuY2AgYWxzbyBjYXRjaGVzIG15IGV5ZS4gVGhpcyBoaW50cyBhdCBzb21lIHNvcnQgb2YgaW50ZXJuYWwgcmVzdHJ1Y3R1cmluZywgcG90ZW50aWFsbHkgZm9yIGNvZGUgcmV1c2Ugb3IgbW9yZSByb2J1c3QgbW9kdWxlIGludGVncmF0aW9uLiBUaGF0J3MgZ29vZCBwcmFjdGljZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgKnVzaW5nKiB0aGVzZSBleHBvcnRlZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBDT05GSUdgIG9wdGlvbnMuIFRoaXMgcGF0Y2ggY2xlYXJseSBhZmZlY3RzIFJQUyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBzZXR0aW5ncy4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDMsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjoyNy4zNjc0NzExOTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2Mjk5Nzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI5Mz1jb25maWcgTUFYX1NLQl9GUkFHU1xcbi0tXFxubmV0L0tjb25maWctMzA0LVxcbm5ldC9LY29uZmlnOjMwNTpjb25maWcgUlBTXFxubmV0L0tjb25maWctMzA2LVxcdGJvb2wgXFxcIlJlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjoyOS4yMzA0NzYzNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc1NzA3NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCB0aGF0IHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uLCBwcmVzdW1hYmx5IGZvciBhIG5ldHdvcmstcmVsYXRlZCBmZWF0dXJlIG9yIG1vZHVsZS4gVGhlIEtjb25maWcgc3ludGF4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBhIHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFuZCBxdWlja2x5IHplcm8gaW4gb24gYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbnN0cmFpbnRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBwcm92aWRlcyB0aGUgY2x1ZXMgSSBuZWVkIHRvIGRlYnVnIG9yIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYmVoYXZpb3IuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA2OjQ1Ljk4NzU1NDAyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHQgIGxlZ2FjeSBkcml2ZXJzLlxcbiAzMDE6XFx0XFx0ICBUaGlzIGFsc28gaW5jcmVhc2VzIG1lbW9yeSBvdmVyaGVhZCBvZiBzbWFsbCBwYWNrZXRzLFxcbiAzMDI6XFx0XFx0ICBhbmQgaW4gZHJpdmVycyB1c2luZyBidWlsZF9za2IoKS5cXG4gMzAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgMTcuXFxuIDMwNDpcXHRcXG4gMzA1OlxcdGNvbmZpZyBSUFNcXG4gMzA2OlxcdFxcdGJvb2wgXFxcIlJlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXFxcIlxcbiAzMDc6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gMzA4OlxcdFxcdGRlZmF1bHQgeVxcbiAzMDk6XFx0XFx0aGVscFxcbiAzMTA6XFx0XFx0ICBTb2Z0d2FyZSByZWNlaXZlIHNpZGUgcGFja2V0IHN0ZWVyaW5nIChSUFMpIGRpc3RyaWJ1dGVzIHRoZVxcbiAzMTE6XFx0XFx0ICBsb2FkIG9mIHJlY2VpdmVkIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcyBtdWx0aXBsZSBDUFVzLlxcbiAzMTI6XFx0XFxuIDMxMzpcXHRjb25maWcgUkZTX0FDQ0VMXFxuIDMxNDpcXHRcXHRib29sIFxcXCJIYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgUkZTXFxcIlxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzE2OlxcdFxcdHNlbGVjdCBDUFVfUk1BUFxcbiAzMTc6XFx0XFx0ZGVmYXVsdCB5XFxuIDMxODpcXHRcXHRoZWxwXFxuIDMxOTpcXHRcXHQgIEFsbG93aW5nIGRyaXZlcnMgZm9yIG11bHRpcXVldWUgaGFyZHdhcmUgd2l0aCBmbG93IGZpbHRlciB0YWJsZXMgdG9cXG4gMzIwOlxcdFxcdCAgYWNjZWxlcmF0ZSBSRlMuXFxuIDMyMTpcXHRcXG4gMzIyOlxcdGNvbmZpZyBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gMzIzOlxcdFxcdGJvb2xcXG4gMzI0OlxcdFxcbiAzMjU6XFx0Y29uZmlnIFhQU1xcbiAzMjY6XFx0XFx0Ym9vbFxcbiAzMjc6XFx0XFx0ZGVwZW5kcyBvbiBTTVBcXG4gMzI4OlxcdFxcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gMzI5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjo0NS45ODc2NDc2OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTA2NTQ0MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJQUyBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSBpcyBiZWluZyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGNoZWNrLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIOKAkyBgbmV0L2NvcmUvZGV2LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBgcnBzX2xsY19jaGVja2AuIFRoaXMgaXMgd2hlcmUgdGhlIGxvd2VyLWxldmVsIGRlY2lzaW9ucyBhYm91dCB3aGVyZSB0byBzdGVlciBpbmNvbWluZyBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIExMQyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgbWFkZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoYXQgaXRzIGNvbnRyb2wgZmxvdyBpcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJQUyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBFdGhlcm5ldCBoZWFkZXIgcHJvY2Vzc2luZyBhdCB0aGlzIHN0YWdlLCBhbmQgd2hhdCB0aGUgY3JpdGVyaWEgYXJlIGZvciBkaXJlY3RpbmcgcGFja2V0cyB0byBzcGVjaWZpYyBDUFVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdHJhZmZpYyBpcyBiZWluZyBkaXN0cmlidXRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGUgTExDIGNoZWNrIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDc6MjcuMDUzMDkzNTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjUyNjE6XFx0XFx0XFx0fVxcbjUyNjI6XFx0XFx0fVxcbjUyNjM6XFx0XFxuNTI2NDpcXHRkb25lOlxcbjUyNjU6XFx0XFx0cmV0dXJuIGNwdTtcXG41MjY2OlxcdH1cXG41MjY3OlxcdFxcbjUyNjg6XFx0LyoqXFxuNTI2OTpcXHQgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxcbjUyNzA6XFx0ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbjUyNzE6XFx0ICogQG5ld192YWw6IHRhcmdldCBmbG93IHJlY29yZCB2YWx1ZS5cXG41MjcyOlxcdCAqXFxuNTI3MzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG41Mjc0OlxcdCAqL1xcbjUyNzU6XFx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG41Mjc2OlxcdHtcXG41Mjc3OlxcdFxcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG41Mjc4OlxcdFxcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG41Mjc5OlxcdFxcbjUyODA6XFx0XFx0LypcXG41MjgxOlxcdFxcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcXG41MjgyOlxcdFxcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxcbjUyODM6XFx0XFx0ICpcXG41Mjg0OlxcdFxcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xcbjUyODU6XFx0XFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XFxuNTI4NjpcXHRcXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cXG41Mjg3OlxcdFxcdCAqXFxuNTI4ODpcXHRcXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xcbjUyODk6XFx0XFx0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xcbjUyOTA6XFx0XFx0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cXG41MjkxOlxcdFxcdCAqL1xcbjUyOTI6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcXG41MjkzOlxcdFxcdFxcdC8qIEZvcmNlIHVwZGF0ZSBpZiB0aGUgcmVjb3JkZWQgQ1BVIGlzIGludmFsaWQgb3IgaGFzIGdvbmUgb2ZmbGluZSAqL1xcbjUyOTQ6XFx0XFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcXG41Mjk1OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjUyOTY6XFx0XFxuNTI5NzpcXHRcXHRcXHQvKlxcbjUyOTg6XFx0XFx0XFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XFxuNTI5OTpcXHRcXHRcXHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxcbjUzMDA6XFx0XFx0XFx0ICovXFxuNTMwMTpcXHRcXHRcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXFxuNTMwMjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzMDU6XFx0XFx0fVxcbjUzMDY6XFx0XFxuNTMwNzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzA4OlxcdH1cXG41MzA5OlxcdFxcbjUzMTA6XFx0I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG41MzExOlxcdFxcbjUzMTI6XFx0LyoqXFxuNTMxMzpcXHQgKiBycHNfbWF5X2V4cGlyZV9mbG93IC0gY2hlY2sgd2hldGhlciBhbiBSRlMgaGFyZHdhcmUgZmlsdGVyIG1heSBiZSByZW1vdmVkXFxuNTMxNDpcXHQgKiBAZGV2OiBEZXZpY2Ugb24gd2hpY2ggdGhlIGZpbHRlciB3YXMgc2V0XFxuNTMxNTpcXHQgKiBAcnhxX2luZGV4OiBSWCBxdWV1ZSBpbmRleFxcbjUzMTY6XFx0ICogQGZsb3dfaWQ6IEZsb3cgSUQgcGFzc2VkIHRvIG5kb19yeF9mbG93X3N0ZWVyKClcXG41MzE3OlxcdCAqIEBmaWx0ZXJfaWQ6IEZpbHRlciBJRCByZXR1cm5lZCBieSBuZG9fcnhfZmxvd19zdGVlcigpXFxuNTMxODpcXHQgKlxcbjUzMTk6XFx0ICogRHJpdmVycyB0aGF0IGltcGxlbWVudCBuZG9fcnhfZmxvd19zdGVlcigpIHNob3VsZCBwZXJpb2RpY2FsbHkgY2FsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNzoyNy4wNTM1MjU5ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY0MTM4MTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBSUFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgcnBzX2xsY19jaGVja2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19SUFNgIGlzIGVuYWJsZWQuIEl0J3MgYSBjb21tb24gb3ZlcnNpZ2h0LCBhbmQgYSBzdWJ0bGUgYnVnIGluIG91ciBuZXR3b3JrIHN0YWNrIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGZpbGUsIHNpbmNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgZm9yIFJQUyBhbmQgUkZTIGxvZ2ljLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgZXhwZWN0IHRvIGZpbmQgYSBgI2lmZGVmIENPTkZJR19SUFNgIGJsb2NrIGluIHRoYXQgYXJlYSwgYW5kIEknbSBiZXR0aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGwsIGBycHNfbGxjX2NoZWNrYCwgaXMgZW5jbG9zZWQgd2l0aGluIGl0LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDUwNDAtNTA2MCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNvbmZpcm0uIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjQyLjY5NDkxMTExMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA0MDpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuYXBpLVxcdTAwM2Vwb2xsX2xpc3QsIFxcdTAwMjZzZC1cXHUwMDNlcG9sbF9saXN0KTtcXG41MDQxOlxcdFxcdFdSSVRFX09OQ0UobmFwaS1cXHUwMDNlbGlzdF9vd25lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG41MDQyOlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKClcXG41MDQzOlxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxuNTA0NDpcXHRcXHQgKi9cXG41MDQ1OlxcdFxcdGlmICghc2QtXFx1MDAzZWluX25ldF9yeF9hY3Rpb24pXFxuNTA0NjpcXHRcXHRcXHRyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuNTA0NzpcXHR9XFxuNTA0ODpcXHRcXG41MDQ5OlxcdCNpZmRlZiBDT05GSUdfUlBTXFxuNTA1MDpcXHRcXG41MDUxOlxcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG41MDUyOlxcdEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XFxuNTA1MzpcXHRzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XFxuNTA1NDpcXHRFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbjUwNTU6XFx0c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XFxuNTA1NjpcXHRFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7XFxuNTA1NzpcXHRcXG41MDU4OlxcdHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXFxuNTA1OTpcXHR7XFxuNTA2MDpcXHRcXHRyZXR1cm4gaGFzaF8zMihoYXNoLCBycHNfdGFnX3RvX2xvZyh0YWdfcHRyKSk7XFxuNTA2MTpcXHR9XFxuNTA2MjpcXHRcXG41MDYzOlxcdCNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuNTA2NDpcXHQvKipcXG41MDY1OlxcdCAqIHJwc19mbG93X2lzX2FjdGl2ZSAtIGNoZWNrIHdoZXRoZXIgdGhlIGZsb3cgaXMgcmVjZW50bHkgYWN0aXZlLlxcbjUwNjY6XFx0ICogQHJmbG93OiBTcGVjaWZpYyBmbG93IHRvIGNoZWNrIGFjdGl2aXR5LlxcbjUwNjc6XFx0ICogQGxvZzogaWxvZzIoaGFzaHNpemUpLlxcbjUwNjg6XFx0ICogQGNwdTogQ1BVIHNhdmVkIGluIEByZmxvdy5cXG41MDY5OlxcdCAqXFxuNTA3MDpcXHQgKiBJZiB0aGUgQ1BVIGhhcyBwcm9jZXNzZWQgbWFueSBwYWNrZXRzIHNpbmNlIHRoZSBmbG93J3MgbGFzdCBhY3Rpdml0eVxcbjUwNzE6XFx0ICogKGJleW9uZCAxMCB0aW1lcyB0aGUgdGFibGUgc2l6ZSksIHRoZSBmbG93IGlzIGNvbnNpZGVyZWQgc3RhbGUuXFxuNTA3MjpcXHQgKlxcbjUwNzM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGZsb3cgd2FzIHJlY2VudGx5IGFjdGl2ZS5cXG41MDc0OlxcdCAqL1xcbjUwNzU6XFx0c3RhdGljIGJvb2wgcnBzX2Zsb3dfaXNfYWN0aXZlKHN0cnVjdCBycHNfZGV2X2Zsb3cgKnJmbG93LFxcbjUwNzY6XFx0XFx0XFx0XFx0ICAgICAgIHU4IGxvZyxcXG41MDc3OlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY3B1KVxcbjUwNzg6XFx0e1xcbjUwNzk6XFx0XFx0dW5zaWduZWQgaW50IGZsb3dfbGFzdF9hY3RpdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjQyLjY5NTM0NzcwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU5Nzk5MjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipSUFMgRGlzYWJsZW1lbnQgRGVlcCBEaXZlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBSUFMgYW5kIGhvdyBpdCBiZWhhdmVzIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfUlBTYCBlbmFibGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGV2ZW4gd2hlbiBSUFMgaXMgb2ZmLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIGNvZGUgcGF0aHMgb3IgZGVmaW5pdGlvbnMgdGhhdCB0b3VjaCB1cG9uIFJQUy1yZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCB0aGluZ3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBTbywgbGV0J3MgbWFrZSBzdXJlIHdlIHNwZWNpZmljYWxseSBjaGVjayB0aGUgYGluY2x1ZGUvbmV0L3Jwcy5oYCBoZWFkZXIgZmlsZSBldmVuIGluIHRoaXMgZGlzYWJsZWQgY29uZmlndXJhdGlvbi4gSXQncyBhIGtleSBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBwb3RlbnRpYWwgcmVtbmFudHMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zLiBHb3R0YSBiZSBleHRyYSBjYXJlZnVsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjUzLjI5MzM0NTExNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcnBzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfTkVUX1JQU19IXFxuICAgMzpcXHQjZGVmaW5lIF9ORVRfUlBTX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnBzLXR5cGVzLmhcXHUwMDNlXFxuICAxMjpcXHRcXG4gIDEzOlxcdGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xcbiAgMTQ6XFx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuICAxNTpcXHRleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xcbiAgMTY6XFx0XFxuICAxNzpcXHQvKlxcbiAgMTg6XFx0ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXFxuICAxOTpcXHQgKiBtYXAgaXMgYW4gYXJyYXkgb2YgQ1BVcy5cXG4gIDIwOlxcdCAqL1xcbiAgMjE6XFx0c3RydWN0IHJwc19tYXAge1xcbiAgMjI6XFx0XFx0dW5zaWduZWQgaW50XFx0bGVuO1xcbiAgMjM6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcbiAgMjQ6XFx0XFx0dTE2XFx0XFx0Y3B1c1tdO1xcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdCNkZWZpbmUgUlBTX01BUF9TSVpFKF9udW0pIChzaXplb2Yoc3RydWN0IHJwc19tYXApICsgKChfbnVtKSAqIHNpemVvZih1MTYpKSlcXG4gIDI3OlxcdFxcbiAgMjg6XFx0LypcXG4gIDI5OlxcdCAqIFRoZSBycHNfZGV2X2Zsb3cgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGEgZmxvdyB0byBhIENQVSwgdGhlXFxuICAzMDpcXHQgKiB0YWlsIHBvaW50ZXIgZm9yIHRoYXQgQ1BVJ3MgaW5wdXQgcXVldWUgYXQgdGhlIHRpbWUgb2YgbGFzdCBlbnF1ZXVlLCBhXFxuICAzMTpcXHQgKiBoYXJkd2FyZSBmaWx0ZXIgaW5kZXgsIGFuZCB0aGUgaGFzaCBvZiB0aGUgZmxvdyBpZiBhUkZTIGlzIGVuYWJsZWQuXFxuICAzMjpcXHQgKi9cXG4gIDMzOlxcdHN0cnVjdCBycHNfZGV2X2Zsb3cge1xcbiAgMzQ6XFx0XFx0dTE2XFx0XFx0Y3B1O1xcbiAgMzU6XFx0XFx0dTE2XFx0XFx0ZmlsdGVyO1xcbiAgMzY6XFx0XFx0dW5zaWduZWQgaW50XFx0bGFzdF9xdGFpbDtcXG4gIDM3OlxcdCNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuICAzODpcXHRcXHR1MzJcXHRcXHRoYXNoO1xcbiAgMzk6XFx0I2VuZGlmXFxuICA0MDpcXHR9O1xcbiAgNDE6XFx0I2RlZmluZSBSUFNfTk9fRklMVEVSIDB4ZmZmZlxcbiAgNDI6XFx0XFxuICA0MzpcXHQvKlxcbiAgNDQ6XFx0ICogVGhlIHJwc19zb2NrX2Zsb3dfdGFibGUgY29udGFpbnMgbWFwcGluZ3Mgb2YgZmxvd3MgdG8gdGhlIGxhc3QgQ1BVXFxuICA0NTpcXHQgKiBvbiB3aGljaCB0aGV5IHdlcmUgcHJvY2Vzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiAoc2V0IGluIHJlY3Ztc2cpLlxcbiAgNDY6XFx0ICogRWFjaCBlbnRyeSBpcyBhIDMyYml0IHZhbHVlLiBVcHBlciBwYXJ0IGlzIHRoZSBoaWdoLW9yZGVyIGJpdHNcXG4gIDQ3OlxcdCAqIG9mIGZsb3cgaGFzaCwgbG93ZXIgcGFydCBpcyBDUFUgbnVtYmVyLlxcbiAgNDg6XFx0ICogcnBzX2NwdV9tYXNrIGlzIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBzcGFjZSwgZGVwZW5kaW5nIG9uIG51bWJlciBvZlxcbiAgNDk6XFx0ICogcG9zc2libGUgQ1BVcyA6IHJwc19jcHVfbWFzayA9IHJvdW5kdXBfcG93X29mX3R3byhucl9jcHVfaWRzKSAtIDFcXG4gIDUwOlxcdCAqIEZvciBleGFtcGxlLCBpZiA2NCBDUFVzIGFyZSBwb3NzaWJsZSwgcnBzX2NwdV9tYXNrID0gMHgzZixcXG4gIDUxOlxcdCAqIG1lYW5pbmcgd2UgdXNlIDMyLTY9MjYgYml0cyBmb3IgdGhlIGhhc2guXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gIDU0OlxcdFxcdHUzMlxcdGVudDtcXG4gIDU1OlxcdH07XFxuICA1NjpcXHRcXG4gIDU3OlxcdCNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gIDU4OlxcdFxcbiAgNTk6XFx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuICA2NDpcXHRcXHR1MzIgdmFsID0gaGFzaCBcXHUwMDI2IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XFxuICA2NTpcXHRcXHRzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSAqdGFibGU7XFxuICA2NjpcXHRcXHR1MzIgb2xkX3ZhbDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xcbiAgNjk6XFx0XFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcXG4gIDcyOlxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxcbiAgNzM6XFx0XFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuICA3NDpcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XFxuICA3NjpcXHRcXHRpZiAob2xkX3ZhbCAhPSB2YWwgXFx1MDAyNlxcdTAwMjYgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKVxcbiAgNzc6XFx0XFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiAgNzg6XFx0fVxcbiAgNzk6XFx0XFxuICA4MDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDc6NTMuMjkzNDU0ODE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzgwNDE5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGluY2x1ZGUvbmV0L3Jwcy5oYCBoZWFkZXIsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGRpdmUgaW50byBuZXR3b3JraW5nIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgYHJwcy5oYCBIZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBpbmNsdWRlL25ldC9ycHMuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBhIHNpZ25pZmljYW50IHBhcnQgb2YgaXQsIGluIHRlcm1zIG9mIHN0ZWVyaW5nIHBhY2tldHMgdG8gdGhlIHJpZ2h0IENQVSBjb3JlIGZvciBwcm9jZXNzaW5nLlwiIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgKFJQUyksIGFuZCBsaWtlbHkgc29tZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUga2V5IHRvIG1ha2luZyB0aGlzIGhhcHBlbiBlZmZpY2llbnRseS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgZGlzcGF0Y2ggYW5kIHdoYXQgbWVjaGFuaXNtcyBpdCB1c2VzIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24gQ1BVLCBpZGVhbGx5LCB3aXRob3V0IHRvbyBtdWNoIG92ZXJoZWFkIG9yIGxvY2tpbmcgY29udGVudGlvbi4gSSdtIGhvcGluZyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBsaWtlIHRoZSBuZXR3b3JrIGRyaXZlciBhbmQgdGhlIE5JQydzIG93biBSU1MgKFJlY2VpdmUgU2lkZSBTY2FsaW5nKSBjYXBhYmlsaXRpZXMuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgdHVuaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA4OjA2LjA3Mzg3ODkyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHR7XFxuICA4MjpcXHRcXHRycHNfdGFnX3B0ciB0YWdfcHRyO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRpZiAoIWhhc2gpXFxuICA4NTpcXHRcXHRcXHRyZXR1cm47XFxuICA4NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA4NzpcXHRcXHR0YWdfcHRyID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnJwc19zb2NrX2Zsb3dfdGFibGUpO1xcbiAgODg6XFx0XFx0aWYgKHRhZ19wdHIpXFxuICA4OTpcXHRcXHRcXHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcXG4gIDkwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdC8qIFJlYWRpbmcgc2stXFx1MDAzZXNrX3J4aGFzaCBtaWdodCBpbmN1ciBhbiBleHBlbnNpdmUgY2FjaGUgbGluZVxcbiAgOTY6XFx0XFx0ICogbWlzcy5cXG4gIDk3OlxcdFxcdCAqXFxuICA5ODpcXHRcXHQgKiBUQ1BfRVNUQUJMSVNIRUQgZG9lcyBjb3ZlciBhbG1vc3QgYWxsIHN0YXRlcyB3aGVyZSBSRlNcXG4gIDk5OlxcdFxcdCAqIG1pZ2h0IGJlIHVzZWZ1bCwgYW5kIGlzIGNoZWFwZXIgWzFdIHRoYW4gdGVzdGluZyA6XFxuIDEwMDpcXHRcXHQgKlxcdElQdjQ6IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2RhZGRyXFxuIDEwMTpcXHRcXHQgKlxcdElQdjY6IGlwdjZfYWRkcl9hbnkoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcilcXG4gMTAyOlxcdFxcdCAqIE9SXFx0YW4gYWRkaXRpb25hbCBzb2NrZXQgZmxhZ1xcbiAxMDM6XFx0XFx0ICogWzFdIDogc2tfc3RhdGUgYW5kIHNrX3Byb3QgYXJlIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuXFxuIDEwNDpcXHRcXHQgKi9cXG4gMTA1OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKSB7XFxuIDEwNjpcXHRcXHRcXHQvKiBUaGlzIFJFQURfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBXUklURV9PTkNFKClcXG4gMTA3OlxcdFxcdFxcdCAqIGZyb20gc29ja19ycHNfc2F2ZV9yeGhhc2goKSBhbmQgc29ja19ycHNfcmVzZXRfcnhoYXNoKCkuXFxuIDEwODpcXHRcXHRcXHQgKi9cXG4gMTA5OlxcdFxcdFxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKSk7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiAxMTQ6XFx0e1xcbiAxMTU6XFx0XFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbiAxMTY6XFx0XFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4gMTE3OlxcdFxcdHUzMiBoYXNoLCBpbmRleDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aGFzaCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKTtcXG4gMTIwOlxcdFxcdGlmICghaGFzaClcXG4gMTIxOlxcdFxcdFxcdHJldHVybjtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjQ6XFx0XFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcXG4gMTI1OlxcdFxcdGlmICh0YWdfcHRyKSB7XFxuIDEyNjpcXHRcXHRcXHRpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIDEyNzpcXHRcXHRcXHR0YWJsZSA9IHJwc190YWdfdG9fdGFibGUodGFnX3B0cik7XFxuIDEyODpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IFJQU19OT19DUFUpXFxuIDEyOTpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIFJQU19OT19DUFUpO1xcbiAxMzA6XFx0XFx0fVxcbiAxMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHQjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxcbiAxMzY6XFx0e1xcbiAxMzc6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gMTM4OlxcdFxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZyZnNfbmVlZGVkKTtcXG4gMTM5OlxcdCNlbHNlXFxuIDE0MDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0MTpcXHQjZW5kaWZcXG4gMTQyOlxcdH1cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xcbiAxNDU6XFx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiAxNDg6XFx0e1xcbiAxNDk6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gMTUwOlxcdFxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRfc29ja19ycHNfZGVsZXRlX2Zsb3coc2spO1xcbiAxNTQ6XFx0I2VuZGlmXFxuIDE1NTpcXHR9XFxuIDE1NjpcXHRcXG4gMTU3OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHJwc19pbnB1dF9xdWV1ZV90YWlsX2luY3Ioc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHQjaWZkZWYgQ09ORklHX1JQU1xcbiAxNjA6XFx0XFx0cmV0dXJuICsrc2QtXFx1MDAzZWlucHV0X3F1ZXVlX3RhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA4OjA2LjA3Mzk3MzgyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4NzYwMTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBhbmQgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBSUFMvUkZTIGFyZSBhY3RpdmUgYW5kIHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcnBzX2xsY19jaGVja2AgaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGZsb3cgdXBkYXRlcywgQ1BVIGFmZmluaXR5LCBhbmQgc3RlZXJpbmcgd2l0aGluIHRoZSBSUFMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgYG9sZF9jcHVgIGFuZCBgbmV3X2NwdWAgYWdhaW5zdCBgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrYCwgYW5kIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgY3B1X2FjdGl2ZWAgYW5kIGBjcHVzX3NoYXJlX2NhY2hlYCBiYXNlZCBvbiB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgIGNvbmRpdGlvbi5cblxuTm93LCBhcmUgdGhlc2UgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nPyBJIG5lZWQgdG8gYXBwbHkgdGhlIGNyaXRlcmlhLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbW1lbnQgY2hhbmdlLCBhIGxvZ2dpbmcgdXBkYXRlLCBvciBhIHB1cmVseSBjb3NtZXRpYyBudW1lcmljIGNoYW5nZS4gVGhlcmUncyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYmVpbmcgbW9kaWZpZWQgaW4gYG5ldC9jb3JlL2Rldi5jYCwgYGluY2x1ZGUvbmV0L3Jwcy5oYCwgYW5kIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AuIFRoaXMgaXNuJ3QgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIG9yIGhvdC11bnBsdWcgcmVsYXRlZCBjb2RlLiBDcml0aWNhbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgYSBzdGFuZGFyZCBRRU1VIHNldHVwIHdvdWxkIGJlIGZpbmUuIFRoZXJlZm9yZSwgKipXb3J0aEZ1enppbmc9dHJ1ZSoqLlxuXG5OZXh0LCBsZXQncyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBDbGVhcmx5LCBgcnBzX2xsY19jaGVja2AgaXMgYSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0LiBJdCdzIGEgbm9uLXN0YXRpYyBib29sZWFuIGZ1bmN0aW9uIGludHJvZHVjaW5nIG5ldyBsb2dpYyB3aXRoIHRoZSBgc3RhdGljX2JyYW5jaF91bmxpa2VseWAgYW5kIHRoZSBgY3B1c19zaGFyZV9jYWNoZWAgY2hlY2suIFRoaXMgaXMgbmV3IGFuZCB3YXJyYW50cyBhdHRlbnRpb24uIEFsc28sIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCwgd2hpY2ggYXJlIG5vdyBleHBvcnRlZCBmdW5jdGlvbnMsIGFyZSBhbHNvIGdvb2QgY2FuZGlkYXRlcyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC5cblxuQXJlIHRoZXkgaG90LXBhdGg/IEkgc2hvdWxkIGJlIGNhcmVmdWwgdG8gb25seSBmbGFnIGZ1bmN0aW9ucyB0byBmdXp6IHRoYXQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBycHNfbGxjX2NoZWNrYCB0aGF0IGNoZWNrcyBjYWNoZSBhZmZpbml0eSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGhpdC4gVGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHNvY2tldCBvcHMuIEknbGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgd2hlcmUgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBpcyBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGdvb2QgdGFyZ2V0cywgYnV0IGZvciBub3cgdGhleSBzZWVtIG9rYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6MjUuMzYxNTc3NzcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0MDAyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfcnBzX3JlY29yZF9mbG93XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTQxND1zdGF0aWMgdm9pZCB0dW5fZmxvd191cGRhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdTMyIHJ4aGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQzMi1cXHRcXHRcXHRlLVxcdTAwM2V1cGRhdGVkID0gamlmZmllcztcXG5kcml2ZXJzL25ldC90dW4uYzo0MzM6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChlLVxcdTAwM2VycHNfcnhoYXNoKTtcXG5kcml2ZXJzL25ldC90dW4uYy00MzQtXFx0fSBlbHNlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cXHRcXHQgKi9cXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XFx0XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yeGhhc2gpKTtcXG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXFx0fVxcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC0xNDMtXFxuaW5jbHVkZS9uZXQvcnBzLmg6MTQ0OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG5pbmNsdWRlL25ldC9ycHMuaDoxNDU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3Jwcy5oLTE0Ni1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19zYXZlX3J4aGFzaChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIwOS1cXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTIxMDpcXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKS5cXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIxMS1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjE3PXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZXNldF9yeGhhc2goc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTEyMTktI2lmZGVmIENPTkZJR19SUFNcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTIyMDpcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiBzb2NrX3Jwc19yZWNvcmRfZmxvdygpICovXFxuaW5jbHVkZS9uZXQvc29jay5oLTEyMjEtXFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoLCAwKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xOTUzPWludCBpb196Y3J4X3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTE5NjItXFxuaW9fdXJpbmcvemNyeC5jOjE5NjM6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbmlvX3VyaW5nL3pjcnguYy0xOTY0LVxcdHJldHVybiBpb196Y3J4X3RjcF9yZWN2bXNnKHJlcSwgaWZxLCBzaywgZmxhZ3MsIGlzc3VlX2ZsYWdzLCBsZW4pO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM1ND1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzY0LVxcbm5ldC9jb3JlL2Rldi5jOjUzNjU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxubmV0L2NvcmUvZGV2LmMtNTM2Ni17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzcwLVxcbm5ldC9jb3JlL2Rldi5jOjUzNzE6XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XFxubmV0L2NvcmUvZGV2LmMtNTM3Mi0jZW5kaWZcXG5uZXQvY29yZS9kZXYuYy01MzczLX1cXG5uZXQvY29yZS9kZXYuYzo1Mzc0OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XFxubmV0L2NvcmUvZGV2LmMtNTM3NS1cXG5uZXQvY29yZS9kZXYuYzo1Mzc2OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2Rldi5jLTUzNzcte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTM4MS1cXG5uZXQvY29yZS9kZXYuYzo1MzgyOlxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2NvcmUvZGV2LmMtNTM4My0jZW5kaWZcXG5uZXQvY29yZS9kZXYuYy01Mzg0LX1cXG5uZXQvY29yZS9kZXYuYzo1Mzg1OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbm5ldC9jb3JlL2Rldi5jLTUzODYtXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9NzYxPXZvaWQgX19pbmV0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY3LVxcbm5ldC9pcHY0L2FmX2luZXQuYzo3Njg6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3cobmV3c2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy03NjktXFx0V0FSTl9PTighKCgxIFxcdTAwM2NcXHUwMDNjIG5ld3NrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTg0ND1pbnQgaW5ldF9zZW5kX3ByZXBhcmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2FmX2luZXQuYy04NDUte1xcbm5ldC9pcHY0L2FmX2luZXQuYzo4NDY6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy04NDctXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9ODg0PWludCBpbmV0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy04OTAtXFx0aWYgKGxpa2VseSghKGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXFxubmV0L2lwdjQvYWZfaW5ldC5jOjg5MTpcXHRcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTg5Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04MjQtXFxubmV0L2lwdjQvdGNwLmM6ODI1OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC90Y3AuYy04MjYtXFx0LypcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjIzLVxcbm5ldC9pcHY0L3RjcC5jOjIyMjQ6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L3RjcC5jLTIyMjUtXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTEtXFx0aWYgKGxpa2VseSghKGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTI6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk4MD1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg5LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5OTA6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTkxLVxcdH1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTg3MTI9X19wb2xsX3Qgc2N0cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODcxOS1cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NzIwOlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy04NzIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowODoyNy4xNTU1ODcxNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4ODYyNTUxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBycHNfbGxjX2NoZWNrYCBGdW5jdGlvbidzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQncyB0aGUgdGFyZ2V0LiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZHVyaW5nIHRoZSBzb2NrIGZsb3cgcmVjb3JkaW5nIHByb2Nlc3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IEtjb25maWcgb3B0aW9ucy4gV2hhdCBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBnb2luZyB0byBiZSByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGJ1aWx0IGFuZCB3b3JrIGNvcnJlY3RseT9cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZTogYG5ldC9LY29uZmlnYC4gSSBzZWUgYENPTkZJR19SUFNgIGRlZmluZWQgdGhlcmU6XG5cbmBgYFxuY29uZmlnIFJQU1xuXHRib29sIFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcIlxuXHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgU1lTRlNcblx0ZGVmYXVsdCB5XG5gYGBcblxuQWxyaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gV2UgbmVlZCBgUlBTYCAodGhlIGNvcmUgZmVhdHVyZSBpdHNlbGYpLCBgU01QYCAoc3ltbWV0cmljIG11bHRpcHJvY2Vzc2luZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBhY2tldCBzdGVlcmluZyBhY3Jvc3MgbXVsdGlwbGUgQ1BVcyksIGFuZCBgU1lTRlNgIChmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSkuIFNlZW1zIGxvZ2ljYWwuXG5cbkJ1dCwgSSdtIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgSSBhbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycHNfbGxjX2NoZWNrYCBpc24ndCBpbmRpcmVjdGx5IGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHZpYSBvdGhlciBrZXJuZWwgZnVuY3Rpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBjaGVjayB0aGUgYGNwdXNfc2hhcmVfY2FjaGVgIGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCB0cmVlIGFuZCB3b3JrIGJhY2sgdG8gZGV0ZXJtaW5lIGhvdyBgcnBzX2xsY19jaGVja2AgaXMgaW52b2x2ZWQsIGlmIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6NTYuMDQxODQ2MDIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyOTg0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNwdXNfc2hhcmVfY2FjaGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9MTI0MT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX2NvbXBsZXRlX25lZWRfaXBpKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTEyNTktXFx0ICAgICghdGVzdF9iaXQoUVVFVUVfRkxBR19TQU1FX0ZPUkNFLCBcXHUwMDI2cnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2Jsay1tcS5jOjEyNjA6XFx0ICAgICBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcnEtXFx1MDAzZW1xX2N0eC1cXHUwMDNlY3B1KSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2Jsay1tcS5jLTEyNjEtXFx0ICAgICBjcHVzX2VxdWFsX2NhcGFjaXR5KGNwdSwgcnEtXFx1MDAzZW1xX2N0eC1cXHUwMDNlY3B1KSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9MjAyPWJvb2wgY3B1c19lcXVhbF9jYXBhY2l0eShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjIwMzpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yMDQtYm9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM5ODQ9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk0LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mzk5NTpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk2LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDAxNT1zdGF0aWMgaW5saW5lIGJvb2wgdHR3dV9xdWV1ZV9jb25kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0Mi1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQwNDM6XFx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTQ1OD1zMzIgc2N4X3NlbGVjdF9jcHVfZGZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgczMyIHByZXZfY3B1LCB1NjQgd2FrZV9mbGFncyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzMy1cXHRcXHRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6NTM0OlxcdFxcdGlmIChpc19wcmV2X2FsbG93ZWQgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShjcHUsIHByZXZfY3B1KSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzNS1cXHRcXHQgICAgc2N4X2lkbGVfdGVzdF9hbmRfY2xlYXJfY3B1KHByZXZfY3B1KSkge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz04MzUwPXdha2VfYWZmaW5lX2lkbGUoaW50IHRoaXNfY3B1LCBpbnQgcHJldl9jcHUsIGludCBzeW5jKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzYzLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODM2NDpcXHRpZiAoYXZhaWxhYmxlX2lkbGVfY3B1KHRoaXNfY3B1KSBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBwcmV2X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzY1LVxcdFxcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUocHJldl9jcHUpID8gcHJldl9jcHUgOiB0aGlzX2NwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODk0OT1zdGF0aWMgaW50IHNlbGVjdF9pZGxlX3NpYmxpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcHJldiwgaW50IHRhcmdldClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk3OC1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg5Nzk6XFx0aWYgKHByZXYgIT0gdGFyZ2V0IFxcdTAwMjZcXHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk4MC1cXHQgICAgY2hvb3NlX2lkbGVfY3B1KHByZXYsIHApIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTAtXFx0ICAgIHJlY2VudF91c2VkX2NwdSAhPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjkwMTE6XFx0ICAgIGNwdXNfc2hhcmVfY2FjaGUocmVjZW50X3VzZWRfY3B1LCB0YXJnZXQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEyLVxcdCAgICBjaG9vc2VfaWRsZV9jcHUocmVjZW50X3VzZWRfY3B1LCBwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTA1MTpcXHRcXHRpZiAoIWhhc19pZGxlX2NvcmUgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShwcmV2LCB0YXJnZXQpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUyLVxcdFxcdFxcdGkgPSBzZWxlY3RfaWRsZV9zbXQocCwgc2QsIHByZXYpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDY5OD1zdGF0aWMgZW51bSBsbGNfbWlnIGNhbl9taWdyYXRlX2xsY190YXNrKGludCBzcmNfY3B1LCBpbnQgZHN0X2NwdSxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MDktXFx0Y3B1ID0gUkVBRF9PTkNFKG1tLVxcdTAwM2VzY19zdGF0LmNwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcxMDpcXHRpZiAoY3B1IFxcdTAwM2MgMCB8fCBjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGRzdF9jcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MTEtXFx0XFx0cmV0dXJuIG1pZ191bnJlc3RyaWN0ZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzIwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjE6XFx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZHN0X2NwdSwgY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzIyLVxcdFxcdHRvX3ByZWYgPSB0cnVlO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjM6XFx0ZWxzZSBpZiAoY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjQtXFx0XFx0dG9fcHJlZiA9IGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDc0MT1hbGJfYnJlYWtfbGxjKHN0cnVjdCBsYl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDUtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc0NjpcXHRpZiAoY3B1c19zaGFyZV9jYWNoZShlbnYtXFx1MDAzZXNyY19jcHUsIGVudi1cXHUwMDNlZHN0X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02NjA9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW5zKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjcyLSAqIG9mIHRoZSBkb21haW4pLCB0aGlzIGFsbG93cyB1cyB0byBxdWlja2x5IHRlbGwgaWYgdHdvIENQVXMgYXJlIGluIHRoZSBzYW1lXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjczOiAqIGNhY2hlIGRvbWFpbiwgc2VlIGNwdXNfc2hhcmVfY2FjaGUoKS5cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy02NzQtICovXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODUzOT1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHModm9pZClcXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTYxLS8qXFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1NjI6ICogY3B1c19zaGFyZV9jYWNoZV9zaGFyZCAtIHRlc3Qgd2hldGhlciB0d28gQ1BVcyBiZWxvbmcgdG8gdGhlIHNhbWUgY2FjaGUgc2hhcmRcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2My0gKlxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjYtICovXFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1Njc6c3RhdGljIGJvb2wgX19pbml0IGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQoaW50IGNwdTAsIGludCBjcHUxKVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTY4LXtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2OTpcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUoY3B1MCwgY3B1MSkpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NzAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jPTg1ODI9dm9pZCBfX2luaXQgd29ya3F1ZXVlX2luaXRfdG9wb2xvZ3kodm9pZClcXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTg4LVxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX1NNVF0sIGNwdXNfc2hhcmVfc210KTtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU4OTpcXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV0sIGNwdXNfc2hhcmVfY2FjaGUpO1xcbmtlcm5lbC93b3JrcXVldWUuYy04NTkwLVxcdHByZWNvbXB1dGVfY2FjaGVfc2hhcmRfaWRzKCk7XFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1OTE6XFx0aW5pdF9wb2RfdHlwZShcXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVfU0hBUkRdLCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKTtcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU5Mi1cXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9OVU1BXSwgY3B1c19zaGFyZV9udW1hKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTUyNzU9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMDAtXFx0XFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTMwMTpcXHRcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXFxubmV0L2NvcmUvZGV2LmMtNTMwMi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6NTcuNzQ0ODM3NDA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjExNjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQ1BVIGNhY2hlIHNoYXJpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzY2hlZHVsZXIuIExldCdzIHN0YXJ0IHdpdGggYSBsb29rIGF0IGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgd2l0aCBgY3B1c19zaGFyZV9jYWNoZWAuIFRoaXMgaXMgdGhlIGxpa2VseSBwb2ludCBvZiBjb250cm9sLiBJIGtub3cgdGhpcyBhcmVhIGZhaXJseSB3ZWxsLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byBOVU1BIG5vZGUgYXdhcmVuZXNzIGFuZCBob3cgd2UgaGFuZGxlIGNvcmUtc2hhcmluZyBhZmZpbml0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA5OjAxLjkwNjAxMjE2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcwMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk5MDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4zOTkxOlxcdFxcbjM5OTI6XFx0XFx0cmV0dXJuIGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoaXNfY3B1KSA9PSBhcmNoX3NjYWxlX2NwdV9jYXBhY2l0eSh0aGF0X2NwdSk7XFxuMzk5MzpcXHR9XFxuMzk5NDpcXHRcXG4zOTk1OlxcdGJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG4zOTk2OlxcdHtcXG4zOTk3OlxcdFxcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcXG4zOTk4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM5OTk6XFx0XFxuNDAwMDpcXHRcXHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xcbjQwMDE6XFx0fVxcbjQwMDI6XFx0XFxuNDAwMzpcXHQvKlxcbjQwMDQ6XFx0ICogV2hldGhlciBDUFVzIGFyZSBzaGFyZSBjYWNoZSByZXNvdXJjZXMsIHdoaWNoIG1lYW5zIExMQyBvbiBub24tY2x1c3RlclxcbjQwMDU6XFx0ICogbWFjaGluZXMgYW5kIExMQyB0YWcgb3IgTDIgb24gbWFjaGluZXMgd2l0aCBjbHVzdGVycy5cXG40MDA2OlxcdCAqL1xcbjQwMDc6XFx0Ym9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG40MDA4OlxcdHtcXG40MDA5OlxcdFxcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcXG40MDEwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQwMTE6XFx0XFxuNDAxMjpcXHRcXHRyZXR1cm4gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhpc19jcHUpID09IHBlcl9jcHUoc2Rfc2hhcmVfaWQsIHRoYXRfY3B1KTtcXG40MDEzOlxcdH1cXG40MDE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOTowMS45MDc0MDk1MzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0NzA1NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFJQUyBGZWF0dXJlIEFmZmluaXR5IGluIE5ldC9Db3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBoYW5kbGVzIExMQyAoTGluayBMYXllciBDb250cm9sKSBhZmZpbml0eS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIHVzdWFsLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IOKAkyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGF0IGZpbGUgZm9yIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29udHJvbCBtZWNoYW5pc21zIGZvciB0aGlzIHBhcnRpY3VsYXIgUlBTIGZlYXR1cmUgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgY29uZmlndXJlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgUlBTIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOTowNC40NTQ0NzA1ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0NTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtZXNzYWdlX2J1cnN0XFxcIixcXG4gNTQ2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2bmV0X3JhdGVsaW1pdF9zdGF0ZS5idXJzdCxcXG4gNTQ3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbiA1NDg6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU0OTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjLFxcbiA1NTA6XFx0XFx0fSxcXG4gNTUxOlxcdCNpZmRlZiBDT05GSUdfUlBTXFxuIDU1MjpcXHRcXHR7XFxuIDU1MzpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJycHNfc29ja19mbG93X2VudHJpZXNcXFwiLFxcbiA1NTQ6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuIDU1NTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4gNTU2OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXFxuIDU1NzpcXHRcXHR9LFxcbiA1NTg6XFx0XFx0e1xcbiA1NTk6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicnBzX2ZlYXRfbGxjX2FmZmluaXR5XFxcIixcXG4gNTYwOlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSxcXG4gNTYxOlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSxcXG4gNTYyOlxcdFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiA1NjM6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb19zdGF0aWNfa2V5XFxuIDU2NDpcXHRcXHR9LFxcbiA1NjU6XFx0I2VuZGlmXFxuIDU2NjpcXHQjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXFxuIDU2NzpcXHRcXHR7XFxuIDU2ODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJmbG93X2xpbWl0X2NwdV9iaXRtYXBcXFwiLFxcbiA1Njk6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU3MDpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBmbG93X2xpbWl0X2NwdV9zeXNjdGxcXG4gNTcxOlxcdFxcdH0sXFxuIDU3MjpcXHRcXHR7XFxuIDU3MzpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJmbG93X2xpbWl0X3RhYmxlX2xlblxcXCIsXFxuIDU3NDpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNm5ldGRldl9mbG93X2xpbWl0X3RhYmxlX2xlbixcXG4gNTc1OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbiA1NzY6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU3NzpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBmbG93X2xpbWl0X3RhYmxlX2xlbl9zeXNjdGxcXG4gNTc4OlxcdFxcdH0sXFxuIDU3OTpcXHQjZW5kaWYgLyogQ09ORklHX05FVF9GTE9XX0xJTUlUICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA5OjA0LjQ1NDYwMzc0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTkxNDI0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSUFMgRnV6emluZyBTY2VuYXJpbyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBzeXNjdGxgIGludGVyZmFjZS4gV2hpbGUgdXN1YWxseSBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgIGhhbmRsZSB0aGVzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgaGVyZS5cblxuTmV4dCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBgUlBTYCByZWxpZXMgb24gYm90aCBgU01QYCAoc3ltbWV0cmljIG11bHRpcHJvY2Vzc2luZykgYW5kIGBTWVNGU2AgKHN5c2ZzIGZpbGUgc3lzdGVtKS4gU28gSSdsbCBuZWVkIHRvIGVuYWJsZSB0aG9zZSBjb25maWdzOyB0aGVyZWZvcmUsIGBFbmFibGVDb25maWdzYDogYFtcIlJQU1wiLCBcIlNNUFwiLCBcIlNZU0ZTXCJdYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogdGhlIGZvY3VzZWQgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IG5ld2x5IGFkZGVkIG9yIG1vZGlmaWVkIHN5bWJvbHMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHJwc19sbGNfY2hlY2tgIGlzIGEgbmV3IGZ1bmN0aW9uLCBhbmQgYm90aCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucywgYWxzbyBpbiB0aGF0IGZpbGUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBjaGFuZ2Ugb3IgYWRkaXRpb24gdG8gdGhlIGNvZGUuXG5cbkdpdmVuIHRoaXMgaW5mb3JtYXRpb24sIGFuZCByZW1lbWJlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgW1wicnBzX2xsY19jaGVja1wiLCBcInNvY2tfcnBzX3JlY29yZF9mbG93XCIsIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXWAuIEkga25vdyB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYDogYFtcIlJQU1wiLCBcIlNNUFwiLCBcIlNZU0ZTXCJdYC4gTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSByYXRpb25hbGUsIGV4cGxhaW4gd2hhdCB0aGVzZSBzeW1ib2xzIGRvLCBhbmQgY29ubmVjdCB0aGVtIHRvIHRoZSByZWxldmFudCBjb25maWdzLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1NSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOToxMi42NDYwMzEyOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjcxMjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUlBTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnBzX2xsY19jaGVja1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgICBcInNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOToxMi43MzI3NTM3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQ4Mzk4ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDk6MTIuNzMzNDE1MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDE1NDc3MzMyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4rZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiBcbiAvKlxuICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuQEAgLTU1LDExICs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoIFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XG4gXHR1MzIgdmFsID0gaGFzaCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiBcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbitcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyArNzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4gXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcbiBcdCAqIGhlcmUsIGFuZCBhbm90aGVyIG9uZSBpbiBnZXRfcnBzX2NwdSgpLlxuIFx0ICovXG4tXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcbitcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4rXHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbi0jZW5kaWZcbi19XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7XG4rc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiArNTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY3B1O1xuIH1cbiBcbisvKipcbisgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuKyAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbit7XG4rXHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuK1xuK1x0LypcbitcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbitcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuK1x0ICpcbitcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuK1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4rXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cbitcdCAqXG4rXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xuK1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuK1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuK1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbitcdFx0aWYgKG9sZF9jcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbitcdFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cbitcdFx0ICovXG4rXHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTMxOCw2ICs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xuK1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuK1xuIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqL1xuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgKzU1NSwxMyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiBcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbitcdH0sXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxuIFx0e1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDk6MTIuNzMzNDE2NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQyMTg0NTYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBSUFMgTExDIEFmZmluaXR5IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLiBGaXJzdCwgSSdsbCBtZXRpY3Vsb3VzbHkgZ28gb3ZlciB0aGUgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL25ldC9ycHMuaGAsIGl0IGludHJvZHVjZXMgYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIHRoZSBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBvbGRfdmFsYCBpbiBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGlzIHJlYWQgdXNpbmcgYFJFQURfT05DRWAsIGFuZCB0aGVuIHBhc3NlZCB0byBgcnBzX2xsY19jaGVja2AgYmVmb3JlIGFueSB3cml0ZXMuIEdvb2QsIHNlZW1zIHNhZmUgb24gdGhlIHN1cmZhY2UuIEFsc28sIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB3ZXJlIG1vdmVkIGZyb20gdGhlIGhlYWRlciBmaWxlIHRvIGBuZXQvY29yZS9kZXYuY2AuXG5cbk1vdmluZyBvbiB0byBgbmV0L2NvcmUvZGV2LmNgLCB3ZSBzZWUgdGhlIGRlZmluaXRpb24gb2YgYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcnBzX2xsY19jaGVja2AuIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gVGhlIGNoZWNrIGV4dHJhY3RzIENQVSBhZmZpbml0eSBpbmZvcm1hdGlvbiBiYXNlZCBvbiBhIENQVSBtYXNrLiBUaGUgdXNlIG9mIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIG9sZCBDUFUgaXMgaW52YWxpZCBvciB0aGUgQ1BVcyBkb24ndCBzaGFyZSB0aGUgc2FtZSBjYWNoZS4gVGhlIGBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2tgIGlzIGFsc28gd29ydGggYSBjbG9zZXIgbG9vayBpbiBvdGhlciBhcmVhcy4gVGhlIGZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYXJlIG5vdyBleHBvcnRlZC5cblxuRmluYWxseSwgaW4gYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCwgdGhlIHBhdGNoIGFkZHMgYSBzeXNjdGwgZW50cnkgZm9yIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHVzaW5nIGBwcm9jX2RvX3N0YXRpY19rZXlgLiBUaGlzIGlzIHdoZXJlIG15IGZvY3VzIHNoYXJwZW5zLiBUaGUgYmlnZ2VzdCByaXNrIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBwcm9jX2RvX3N0YXRpY19rZXlgIGhhbmRsZXIgaXMgc2FmZS4gTGV0IG1lIGNoZWNrIHRoZSBvdGhlciB1c2FnZXMgb2YgYHByb2NfZG9fc3RhdGljX2tleWAgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3RhbmRhcmQgcHJhY3RpY2VzIG9yIHBvdGVudGlhbCByaXNrcy5cblxuTm93LCBsZXQncyBzcGVjaWZpY2FsbHkgbG9vayBmb3IgYW55IHJpc2tzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZT8gYHByb2NfZG9fc3RhdGljX2tleWAgcmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIGBycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5YC4gSXMgdGhpcyBhIHN0YW5kYXJkL3NhZmUgcHJhY3RpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19kb19zdGF0aWNfa2V5YCBpbml0aWFsaXplcyB0aGlzIGNvcnJlY3RseS4gSSB3aWxsIGRvIGEgcXVpY2sgZ3JlcCBvbiB0aGUgY29kZWJhc2UgZm9yIGBwcm9jX2RvX3N0YXRpY19rZXlgIHRvIGJlIGV4dHJhIHN1cmUuXG5cbkFzIGZvciBvdGhlciBwb3RlbnRpYWwgS01TQU4gZmxhZ3MgLSBhcmUgdGhlcmUgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IGBycHNfbGxjX2NoZWNrYCBvcGVyYXRlcyBvbiBzY2FsYXIgYHUzMmAgYXJndW1lbnRzIHdoaWNoIGFyZSBpbml0aWFsaXplZCwgc28gdGhhdCBpcyBub3QgYSBjb25jZXJuLiBUaGUgYG9sZF92YWxgIGlzIGluaXRpYWxpemVkIGJ5IGBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudClgIGFuZCBgdmFsYCBpcyBpbml0aWFsaXplZCBieSBiaXR3aXNlIG9wZXJhdGlvbnMgc28gdGhpcyBkb2Vzbid0IHNlZW0gbGlrZSB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCByZWFkcyBvbiB0aGlzIGZyb250LiBGdXJ0aGVybW9yZSwgdGhlIGZ1bmN0aW9ucyBkb24ndCBjb3B5IGhlYXAvc3RhY2sgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHBhZGRpbmcgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMgZWl0aGVyLiBPdmVyYWxsLCBpdCAqYXBwZWFycyogc2FmZSwgYnV0IEknbGwgZG91YmxlLWNoZWNrIGBwcm9jX2RvX3N0YXRpY19rZXlgIHVzYWdlcyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MTA6MjYuOTUxODc5MDMxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3Nzg3NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZG9fc3RhdGljX2tleVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2N0bC5oPTk3PWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTk4LVxcdFxcdFxcdCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaDo5OTppbnQgcHJvY19kb19zdGF0aWNfa2V5KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTAwLVxcdFxcdCAgICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9MTM2MT1pbnQgcHJvY19kb19sYXJnZV9iaXRtYXAoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTM2OS0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKVxcbmtlcm5lbC9zeXNjdGwuYzoxMzcwOmludCBwcm9jX2RvX3N0YXRpY19rZXkoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTEzNzEtXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTM1PUVYUE9SVF9TWU1CT0wocGFnZV9hbGxvY190YWdnaW5nX29wcyk7XFxuLS1cXG5saWIvYWxsb2NfdGFnLmMtOTM4LS8qXFxubGliL2FsbG9jX3RhZy5jOjkzOTogKiBOb3QgdXNpbmcgcHJvY19kb19zdGF0aWNfa2V5KCkgZGlyZWN0bHkgdG8gcHJldmVudCBlbmFibGluZyBwcm9maWxpbmdcXG5saWIvYWxsb2NfdGFnLmMtOTQwLSAqIGFmdGVyIGl0IHdhcyBzaHV0IGRvd24uXFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTQyPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbmxpYi9hbGxvY190YWcuYy05NjEtXFxubGliL2FsbG9jX3RhZy5jOjk2MjpcXHRyZXR1cm4gcHJvY19kb19zdGF0aWNfa2V5KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG5saWIvYWxsb2NfdGFnLmMtOTYzLX1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNjg9RVhQT1JUX1NZTUJPTChwYWdlX2FsbG9jX3RhZ2dpbmdfb3BzKTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEyNzEtLypcXG5tbS9hbGxvY190YWcuYzoxMjcyOiAqIE5vdCB1c2luZyBwcm9jX2RvX3N0YXRpY19rZXkoKSBkaXJlY3RseSB0byBwcmV2ZW50IGVuYWJsaW5nIHByb2ZpbGluZ1xcbm1tL2FsbG9jX3RhZy5jLTEyNzMtICogYWZ0ZXIgaXQgd2FzIHNodXQgZG93bi5cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNzU9c3RhdGljIGludCBwcm9jX21lbV9wcm9maWxpbmdfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTI5NC1cXG5tbS9hbGxvY190YWcuYzoxMjk1OlxcdHJldHVybiBwcm9jX2RvX3N0YXRpY19rZXkodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbm1tL2FsbG9jX3RhZy5jLTEyOTYtfVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTI5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfYWxsb2NhdGlvbl9wcm9maWxpbmdfc3lzY3Rsc1tdID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTMwOS1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG5tbS9hbGxvY190YWcuYzoxMzEwOlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcXG5tbS9hbGxvY190YWcuYy0xMzExLVxcdH0sXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzE9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU2Mi1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjM6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb19zdGF0aWNfa2V5XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTY0LVxcdH0sXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NTktXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjYwOlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NjEtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MTA6MjguNjU5NjczOTE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NTcwNTU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENQVSBDYWNoZSBTaGFyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSlgLiBJJ3ZlIGdvdCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY2FjaGUgdG9wb2xvZ3kgaGVyZS4gV2hhdCBhbSBJIHJlYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dD8gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbidzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHdlIGRldGVybWluZSBpZiBtb3ZpbmcgZnJvbSBgb2xkX2NwdWAgdG8gYG5ld19jcHVgIGhhcyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHJhbWlmaWNhdGlvbnMgc3RlbW1pbmcgZnJvbSBjYWNoZSBjb250ZW50aW9uLCBvciBjYWNoZSBhZmZpbml0eSBpc3N1ZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLiBMZXQncyBzZWUuLi4gaXMgaXQgYXMgc2ltcGxlIGFzIGNoZWNraW5nIHdoZXRoZXIgdGhleSdyZSBvbiB0aGUgc2FtZSBOVU1BIG5vZGUgYW5kIHNoYXJlIHRoZSBzYW1lIGxldmVscyBvZiBjYWNoZT8gT3IgaXMgaXQgbW9yZSBjb21wbGV4LCBpbnZvbHZpbmcgc29tZSBraW5kIG9mIG51YW5jZWQgYW5hbHlzaXMgb2YgY2FjaGUgaGllcmFyY2h5IGFuZCBjb2hlcmVuY2UgZG9tYWlucz8gSSd2ZSBnb3QgdG8gcmVtZW1iZXIgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvZiBoeXBlcnRocmVhZGluZyB0b28uIERvZXMgdGhpcyBmdW5jdGlvbiBhY2NvdW50IGZvciB0aGF0LCBvciBpcyBpdCBhYnN0cmFjdGVkIGF3YXkgYXQgYSBsb3dlciBsZXZlbD8gQWxyaWdodCwgbGV0J3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gc2VlIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkgc3VzcGVjdCBpdCdzIGludm9sdmVkIGluIHNvbWV0aGluZyBsaWtlIENQVSBob3RwbHVnZ2luZywgb3IgbWF5YmUgZXZlbiB0YXNrIG1pZ3JhdGlvbi4gS25vd2luZyB0aGF0IGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBzZXZlcml0eSBvZiBhbnkgcG90ZW50aWFsIGNhY2hlLXJlbGF0ZWQgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMDozNC4zMTY3MzI5OTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3ODM4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3B1c19zaGFyZV9jYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfY29tcGxldGVfbmVlZF9pcGkoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTI1OS1cXHQgICAgKCF0ZXN0X2JpdChRVUVVRV9GTEFHX1NBTUVfRk9SQ0UsIFxcdTAwMjZycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLW1xLmM6MTI2MDpcXHQgICAgIGNwdXNfc2hhcmVfY2FjaGUoY3B1LCBycS1cXHUwMDNlbXFfY3R4LVxcdTAwM2VjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLW1xLmMtMTI2MS1cXHQgICAgIGNwdXNfZXF1YWxfY2FwYWNpdHkoY3B1LCBycS1cXHUwMDNlbXFfY3R4LVxcdTAwM2VjcHUpKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yMDI9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6MjAzOmJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTIwNC1ib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzk4ND1ib29sIGNwdXNfZXF1YWxfY2FwYWNpdHkoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTQtXFxua2VybmVsL3NjaGVkL2NvcmUuYzozOTk1OmJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTYte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz00MDE1PXN0YXRpYyBpbmxpbmUgYm9vbCB0dHd1X3F1ZXVlX2NvbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQyLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDA0MzpcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIGNwdSkpXFxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQ0LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9NDU4PXMzMiBzY3hfc2VsZWN0X2NwdV9kZmwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzMzIgcHJldl9jcHUsIHU2NCB3YWtlX2ZsYWdzLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTMzLVxcdFxcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzo1MzQ6XFx0XFx0aWYgKGlzX3ByZXZfYWxsb3dlZCBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcHJldl9jcHUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTM1LVxcdFxcdCAgICBzY3hfaWRsZV90ZXN0X2FuZF9jbGVhcl9jcHUocHJldl9jcHUpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgzNTA9d2FrZV9hZmZpbmVfaWRsZShpbnQgdGhpc19jcHUsIGludCBwcmV2X2NwdSwgaW50IHN5bmMpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjMtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MzY0OlxcdGlmIChhdmFpbGFibGVfaWRsZV9jcHUodGhpc19jcHUpIFxcdTAwMjZcXHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIHByZXZfY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjUtXFx0XFx0cmV0dXJuIGF2YWlsYWJsZV9pZGxlX2NwdShwcmV2X2NwdSkgPyBwcmV2X2NwdSA6IHRoaXNfY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz04OTQ5PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfc2libGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2LCBpbnQgdGFyZ2V0KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTc4LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODk3OTpcXHRpZiAocHJldiAhPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShwcmV2LCB0YXJnZXQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTgwLVxcdCAgICBjaG9vc2VfaWRsZV9jcHUocHJldiwgcCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTAxMC1cXHQgICAgcmVjZW50X3VzZWRfY3B1ICE9IHRhcmdldCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTAxMTpcXHQgICAgY3B1c19zaGFyZV9jYWNoZShyZWNlbnRfdXNlZF9jcHUsIHRhcmdldCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTItXFx0ICAgIGNob29zZV9pZGxlX2NwdShyZWNlbnRfdXNlZF9jcHUsIHApIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwNTAtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDUxOlxcdFxcdGlmICghaGFzX2lkbGVfY29yZSBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwNTItXFx0XFx0XFx0aSA9IHNlbGVjdF9pZGxlX3NtdChwLCBzZCwgcHJldik7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNjk4PXN0YXRpYyBlbnVtIGxsY19taWcgY2FuX21pZ3JhdGVfbGxjX3Rhc2soaW50IHNyY19jcHUsIGludCBkc3RfY3B1LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcwOS1cXHRjcHUgPSBSRUFEX09OQ0UobW0tXFx1MDAzZXNjX3N0YXQuY3B1KTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzEwOlxcdGlmIChjcHUgXFx1MDAzYyAwIHx8IGNwdXNfc2hhcmVfY2FjaGUoc3JjX2NwdSwgZHN0X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcxMS1cXHRcXHRyZXR1cm4gbWlnX3VucmVzdHJpY3RlZDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjAtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMTpcXHRpZiAoY3B1c19zaGFyZV9jYWNoZShkc3RfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjItXFx0XFx0dG9fcHJlZiA9IHRydWU7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMzpcXHRlbHNlIGlmIChjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGNwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyNC1cXHRcXHR0b19wcmVmID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzQxPWFsYl9icmVha19sbGMoc3RydWN0IGxiX2VudiAqZW52KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0NS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzQ2OlxcdGlmIChjcHVzX3NoYXJlX2NhY2hlKGVudi1cXHUwMDNlc3JjX2NwdSwgZW52LVxcdTAwM2Vkc3RfY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzQ3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTY2MD1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbnMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy02NzItICogb2YgdGhlIGRvbWFpbiksIHRoaXMgYWxsb3dzIHVzIHRvIHF1aWNrbHkgdGVsbCBpZiB0d28gQ1BVcyBhcmUgaW4gdGhlIHNhbWVcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NzM6ICogY2FjaGUgZG9tYWluLCBzZWUgY3B1c19zaGFyZV9jYWNoZSgpLlxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3NC0gKi9cXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYz04NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVjb21wdXRlX2NhY2hlX3NoYXJkX2lkcyh2b2lkKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjEtLypcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2MjogKiBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkIC0gdGVzdCB3aGV0aGVyIHR3byBDUFVzIGJlbG9uZyB0byB0aGUgc2FtZSBjYWNoZSBzaGFyZFxcbmtlcm5lbC93b3JrcXVldWUuYy04NTYzLSAqXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2Ni0gKi9cXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2NzpzdGF0aWMgYm9vbCBfX2luaXQgY3B1c19zaGFyZV9jYWNoZV9zaGFyZChpbnQgY3B1MCwgaW50IGNwdTEpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1Njgte1xcbmtlcm5lbC93b3JrcXVldWUuYzo4NTY5OlxcdGlmICghY3B1c19zaGFyZV9jYWNoZShjcHUwLCBjcHUxKSlcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU3MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODU4Mj12b2lkIF9faW5pdCB3b3JrcXVldWVfaW5pdF90b3BvbG9neSh2b2lkKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1ODgtXFx0aW5pdF9wb2RfdHlwZShcXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fU01UXSwgY3B1c19zaGFyZV9zbXQpO1xcbmtlcm5lbC93b3JrcXVldWUuYzo4NTg5OlxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX0NBQ0hFXSwgY3B1c19zaGFyZV9jYWNoZSk7XFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1OTAtXFx0cHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHMoKTtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU5MTpcXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV9TSEFSRF0sIGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQpO1xcbmtlcm5lbC93b3JrcXVldWUuYy04NTkyLVxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX05VTUFdLCBjcHVzX3NoYXJlX251bWEpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTI3NT1ib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMwMC1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzAxOlxcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG5uZXQvY29yZS9kZXYuYy01MzAyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMDozNS45NDI1MjQ1MDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1Mzg1ODIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQ1BVIGNhY2hlIHNoYXJpbmcsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGBrZXJuZWwvc2NoZWQvY29yZS5jYCBpcyB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGBjcHVzX3NoYXJlX2NhY2hlYC4gVGhhdCBuYW1lIGlzIHByZXR0eSBpbmRpY2F0aXZlIG9mIHdoYXQgd2UncmUgYWZ0ZXIsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGVyZSB0ZWxscyB1cyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcmVsYXRpb25zaGlwIGJldHdlZW4gQ1BVcyBhbmQgdGhlaXIgY2FjaGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIHZpZXdzIGFuZCBtYW5hZ2VzIGNhY2hlIHNoYXJpbmcgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIG1vZGVybiBtdWx0aS1jb3JlIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYXNvbnMgYWJvdXQgaXQgd2hlbiBtYWtpbmcgc2NoZWR1bGluZyBkZWNpc2lvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgYWN0dWFsIGxvZ2ljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCBDUFVzIGFyZSBzaGFyaW5nIGEgY2FjaGUgYXQgYW55IGdpdmVuIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjE0LjQ4MTExMDEwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDA4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTkwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM5OTE6XFx0XFxuMzk5MjpcXHRcXHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcXG4zOTkzOlxcdH1cXG4zOTk0OlxcdFxcbjM5OTU6XFx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbjM5OTY6XFx0e1xcbjM5OTc6XFx0XFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxcbjM5OTg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzk5OTpcXHRcXG40MDAwOlxcdFxcdHJldHVybiBwZXJfY3B1KHNkX2xsY19pZCwgdGhpc19jcHUpID09IHBlcl9jcHUoc2RfbGxjX2lkLCB0aGF0X2NwdSk7XFxuNDAwMTpcXHR9XFxuNDAwMjpcXHRcXG40MDAzOlxcdC8qXFxuNDAwNDpcXHQgKiBXaGV0aGVyIENQVXMgYXJlIHNoYXJlIGNhY2hlIHJlc291cmNlcywgd2hpY2ggbWVhbnMgTExDIG9uIG5vbi1jbHVzdGVyXFxuNDAwNTpcXHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxcbjQwMDY6XFx0ICovXFxuNDAwNzpcXHRib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbjQwMDg6XFx0e1xcbjQwMDk6XFx0XFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxcbjQwMTA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xcbjQwMTM6XFx0fVxcbjQwMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjE0LjQ4MTQ1MzAzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTQ5MDA3MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBSUFMgRmxvdyBSZWNvcmRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFJQUyBmbG93IHJlY29yZGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5LCB0aGUgYHJwc19yZWNvcmRfc29ja19mbG93YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIExldCdzIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGFyZ3VtZW50cywgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIGdpdmVuIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIGZsb3cgY29udGV4dHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJQUyBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvciByZWxhdGVkIHRvIGZsb3cgYWZmaW5pdHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgc2hhcmVkIHNvY2tldHMgYW5kIHdoZXRoZXIgaXQgY29ycmVjdGx5IGludGVyYWN0cyB3aXRoIHZhcmlvdXMgb2ZmbG9hZCBjb25maWd1cmF0aW9ucy4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yIGZyb20gYSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSBwZXJzcGVjdGl2ZSB0b28uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMToyMi42MzA0NjI2MjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcnBzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0fTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0I2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxcbiAgNTg6XFx0XFxuICA1OTpcXHRib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0dW5zaWduZWQgaW50IGluZGV4ID0gaGFzaCBcXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcXG4gIDY0OlxcdFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gIDY1OlxcdFxcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcXG4gIDY2OlxcdFxcdHUzMiBvbGRfdmFsO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXFxuICA2OTpcXHRcXHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0dGFibGUgPSBycHNfdGFnX3RvX3RhYmxlKHRhZ19wdHIpO1xcbiAgNzI6XFx0XFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXFxuICA3MzpcXHRcXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cXG4gIDc0OlxcdFxcdCAqL1xcbiAgNzU6XFx0XFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4gIDc2OlxcdFxcdGlmIChvbGRfdmFsICE9IHZhbCBcXHUwMDI2XFx1MDAyNiBycHNfbGxjX2NoZWNrKG9sZF92YWwsIHZhbCkpXFxuICA3NzpcXHRcXHRcXHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7XFxuICA3ODpcXHR9XFxuICA3OTpcXHRcXG4gIDgwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0aWYgKCFoYXNoKVxcbiAgODU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgODc6XFx0XFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcXG4gIDg4OlxcdFxcdGlmICh0YWdfcHRyKVxcbiAgODk6XFx0XFx0XFx0cnBzX3JlY29yZF9zb2NrX2Zsb3codGFnX3B0ciwgaGFzaCk7XFxuICA5MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDkxOlxcdH1cXG4gIDkyOlxcdFxcbiAgOTM6XFx0c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuICA5NDpcXHR7XFxuICA5NTpcXHRcXHQvKiBSZWFkaW5nIHNrLVxcdTAwM2Vza19yeGhhc2ggbWlnaHQgaW5jdXIgYW4gZXhwZW5zaXZlIGNhY2hlIGxpbmVcXG4gIDk2OlxcdFxcdCAqIG1pc3MuXFxuICA5NzpcXHRcXHQgKlxcbiAgOTg6XFx0XFx0ICogVENQX0VTVEFCTElTSEVEIGRvZXMgY292ZXIgYWxtb3N0IGFsbCBzdGF0ZXMgd2hlcmUgUkZTXFxuICA5OTpcXHRcXHQgKiBtaWdodCBiZSB1c2VmdWwsIGFuZCBpcyBjaGVhcGVyIFsxXSB0aGFuIHRlc3RpbmcgOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMToyMi42MzA1MzQyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2NTA1ODk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gb3B0aW1pemluZyBSRlMvQVJGUyBmbG93IHVwZGF0ZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYSBjaGVjayBmb3IgTExDIGFmZmluaXR5IChgcnBzX2xsY19jaGVja2ApLiBUaGF0J3MgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgd2hpY2ggaXMgZ29vZC4gV2UgYWxzbyBzZWUgYSBuZXcgc3lzY3RsIGJvb2xlYW4ga25vYiBiZWluZyBpbnRyb2R1Y2VkLCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YC4gSW50ZXJlc3RpbmcuXG5cbk5vdywgSSBzZWUgdGhlIGlubGluZWQgZnVuY3Rpb25zIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhcmUgYmVpbmcgbW92ZWQuIFRoaXMgaXMgdXN1YWxseSB0byBtYWtlIHRoZW0gY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBOb3RoaW5nIGluaGVyZW50bHkgZGFuZ2Vyb3VzLCBidXQgd2UgYWx3YXlzIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGVyZSB0aGV5IGFyZSBtb3ZlZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uczogVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE5vcGUsIHRoYW5rZnVsbHkuIFBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSBvciBhY3Jvc3Mga2VybmVsIGJvdW5kYXJpZXM/IE5vIGlzc3VlcyB0aGVyZSBlaXRoZXIuIEJ1ZmZlciBzaXplcywgYWxsb2NhdGlvbnMsIHN0cnVjdCBsYXlvdXRzPyBObyBjaGFuZ2VzLCB3aGljaCBpcyBhIHJlbGllZi4gTm8gbmV3IHN0YWNrIGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Tbywgc3RhbmRhcmQgbWVtb3J5IHNhbml0aXplcnMg4oCTIEtBU0FOLCBMT0NLREVQLCBVQlNBTiDigJMgcGx1cyB0aGUgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG9idmlvdXMgcmVkIGZsYWdzIHRoYXQgd291bGQganVzdGlmeSBpbnZva2luZyBLTVNBTiBmb3IgdGhpcy4gV2UgYXJlbid0IGRlYWxpbmcgd2l0aCBhbnkgb2YgdGhlIHN1YnRsZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB1bmNvdmVyLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gc2FmZWx5IG1vdmUgZm9yd2FyZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBLTVNBTiBzY2FuIGZvciB0aGlzIHBhdGNoLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGlzIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZCwgZXhwbGFpbmluZyBleGFjdGx5IHdoeSB3ZSBhcmUgY29uZmlkZW50IGluIHJlbHlpbmcgb24gZXhpc3RpbmcgdG9vbHMgYW5kIHRlc3RpbmcuIFRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjEzLCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjM0LjI4MTEyNjYyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMtYWZmaW5pdHktYmFzZWQgb3B0aW1pemF0aW9uIGZvciBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAvIFJlY2VpdmUgRmxvdyBTdGVlcmluZyAoUkZTKSBmbG93IHRhYmxlIHVwZGF0ZXMsIGFkZHMgYSBjb3JyZXNwb25kaW5nIHN5c2N0bCBlbnRyeSAocnBzX2ZlYXRfbGxjX2FmZmluaXR5KSBoYW5kbGVkIGJ5IHByb2NfZG9fc3RhdGljX2tleSwgYW5kIG91dC1vZi1saW5lcy9leHBvcnRzIHNvY2tfcnBzX3JlY29yZF9mbG93eyxfaGFzaH0uXFxuXFxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvj7w2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 13:48:29 +0000 UTC FinishedAt: 2026-09-02 14:11:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c29b37ed7a4d9856ed758a82282456d69cee2ed1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS", "SMP", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c29b37ed7a4d9856ed758a82282456d69cee2ed1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RPS", "SMP", "SYSFS" ], "series_id": "4d57ad63-dadf-4697-947b-6df9aca89ce6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rps_llc_check", "sock_rps_record_flow", "sock_rps_record_flow_hash" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJlOWI5Zjk0YzNjNDQwMTM2MmM4YTQ0ZTc3ZmQ5MDU0OTNiZTg2MjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDE0OjA1OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkO1xuJiM0MztleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xuIFxuIC8qXG4gICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXG5AQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiBcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuIFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuJiM0MztcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyAmIzQzOzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuIFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXG4gXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cbiBcdCAqL1xuLVx0aWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpXG4mIzQzO1x0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcbiYjNDM7XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JQU1xuLVx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4tI2VuZGlmXG4tfVxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICYjNDM7NTA1Miw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcbiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiAmIzQzOzUyNjUsNDggQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGNwdTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbiYjNDM7e1xuJiM0MztcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuJiM0MztcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbiYjNDM7XHQgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuJiM0MztcdCAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudFxuJiM0MztcdCAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDXG4mIzQzO1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuJiM0MztcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuJiM0MztcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG4mIzQzO1x0XHRpZiAob2xkX2NwdSBcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbiYjNDM7XHRcdCAqIGV4cGVuc2l2ZSByZW1vdGUgbWVtb3J5IGFjY2Vzc2VzIGFuZCBjYWNoZSBtaXNzZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcbiAvKipcbkBAIC01MzE4LDYgJiM0Mzs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1JQU1xuJiM0MztcdGlmICghcmZzX2lzX25lZWRlZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKTtcbiYjNDM7XG4mIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUlBTXG4mIzQzO1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuJiM0MztcbiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi9cbiBzdGF0aWMgdm9pZCB0cmlnZ2VyX3J4X3NvZnRpcnEodm9pZCAqZGF0YSlcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuaW5kZXggZWIzNWRhMzU1NmY0YS4uOWI2NzAyZjVlYWIxOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY1xuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgc3RhdGljIGludCBycHNfc29ja19mbG93X3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgJiM0Mzs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbiBcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIFx0XHQucHJvY19oYW5kbGVyXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHJwc19mZWF0X2xsY19hZmZpbml0eS5rZXkpLFxuJiM0MztcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuJiM0MztcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbiYjNDM7XHR9LFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcbiBcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSUFMmIzM0OywKICAgICYjMzQ7U01QJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LAogICAgJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvdyYjMzQ7LAogICAgJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU5YjlmOTRjM2M0NDAxMzYyYzhhNDRlNzdmZDkwNTQ5M2JlODYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTQ6MDU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ycHMuaCBiL2luY2x1ZGUvbmV0L3Jwcy5oCmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3Jwcy5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDsKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkOwomIzQzO2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7CiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGUKQEAgLTU1LDExICYjNDM7NTYsMTQgQEAgc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgewogCiAjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmCiAKJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoICZhbXA7IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTsKIAl1MzIgdmFsID0gaGFzaCAmYW1wOyB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwogCXN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTsKJiM0MzsJdTMyIG9sZF92YWw7CiAKIAkvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovCiAJdmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC02OCw3ICYjNDM7NzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpCiAJLyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpCiAJICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuCiAJICovCi0JaWYgKFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KSAhPSB2YWwpCiYjNDM7CW9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7CiYjNDM7CWlmIChvbGRfdmFsICE9IHZhbCAmYW1wOyZhbXA7IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSkKIAkJV1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpOwogfQogCkBAIC0xMzYsMjUgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotI2lmZGVmIENPTkZJR19SUFMKLQlpZiAoIXJmc19pc19uZWVkZWQoKSkKLQkJcmV0dXJuOwotCi0JX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKLSNlbmRpZgotfQomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTsKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLmIyNzgzOWViNTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC01MDUyLDYgJiM0Mzs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTsKIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7CiYjNDM7c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7CiYjNDM7RVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpOwogCiBzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKQogewpAQCAtNTI2Myw2ICYjNDM7NTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGNwdTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHJwc19sbGNfY2hlY2sgLSBkZXRlcm1pbmUgaWYgUlBTIGZsb3cgdGFibGUgc2hvdWxkIGJlIHVwZGF0ZWQuCiYjNDM7ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLgomIzQzOyAqIEBuZXdfdmFsOiB0YXJnZXQgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKQomIzQzO3sKJiM0MzsJdTMyIG9sZF9jcHUgPSBvbGRfdmFsICZhbXA7IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzazsKJiM0MzsJdTMyIG5ld19jcHUgPSBuZXdfdmFsICZhbXA7IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzazsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUlBTIExMQyBBZmZpbml0eSBGZWF0dXJlOgomIzQzOwkgKiBSZWR1Y2UgUkZTL0FSRlMgZmxvdyB1cGRhdGVzIGJ5IGNoZWNraW5nIExMQyBhZmZpbml0eS4KJiM0MzsJICoKJiM0MzsJICogRnJlcXVlbnQgZmxvdyB0YWJsZSB1cGRhdGVzIGNhbiB0cmlnZ2VyIGNvbnN0YW50IGhhcmR3YXJlIHN0ZWVyaW5nCiYjNDM7CSAqIHJlY29uZmlndXJhdGlvbnMgKGUuZy4sIG5kb19yeF9mbG93X3N0ZWVyKSwgbGVhZGluZyB0byBzaWduaWZpY2FudAomIzQzOwkgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1JiMzOTtzIGFyZnNfbG9jaykuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgc3RyYXRlZ3kgb25seSB1cGRhdGVzIHRoZSBmbG93IHJlY29yZCBpZiBpdCBtaWdyYXRlcyBhY3Jvc3MgTExDCiYjNDM7CSAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmcKJiM0MzsJICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkgewomIzQzOwkJLyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovCiYjNDM7CQlpZiAob2xkX2NwdSAmZ3Q7PSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIENQVXMgZG8gbm90IHNoYXJlIGEgY2FjaGUsIGFsbG93IHRoZSB1cGRhdGUgdG8gcHJldmVudAomIzQzOwkJICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFjcHVzX3NoYXJlX2NhY2hlKG9sZF9jcHUsIG5ld19jcHUpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMCiAKIC8qKgpAQCAtNTMxOCw2ICYjNDM7NTM2MiwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpCiAKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKJiM0Mzt2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19SUFMKJiM0MzsJaWYgKCFyZnNfaXNfbmVlZGVkKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpOwomIzQzOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChzb2NrX3Jwc19yZWNvcmRfZmxvdyk7CiYjNDM7CiAvKiBDYWxsZWQgZnJvbSBoYXJkaXJxIChJUEkpIGNvbnRleHQgKi8KIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBzdGF0aWMgaW50IHJwc19zb2NrX2Zsb3dfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJa3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVQKQEAgLTU1NCw2ICYjNDM7NTU1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBycHNfc29ja19mbG93X3N5c2N0bAogCX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cnBzX2ZlYXRfbGxjX2FmZmluaXR5JiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3Jwc19mZWF0X2xsY19hZmZpbml0eS5rZXksCiYjNDM7CQkubWF4bGVuCQk9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSwKJiM0MzsJCS5tb2RlCQk9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb19zdGF0aWNfa2V5CiYjNDM7CX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVQKIAl7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDMKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUlBTIGFuZCBMTEMgQWZmaW5pdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSByZWZpbmVtZW50cyB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBwb2ludCB1cyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uOiB3ZSYjMzk7cmUgdG91Y2hpbmcgYHJwcy5oYCwgYGRldi5jYCwgYW5kIGBzeXNjdGxfbmV0X2NvcmUuY2AuIFRoaXMgaXMgYWxsIGNsYXNzaWMgUlBTIHRlcnJpdG9yeS4KClNvLCB0aGUgbWVhdCBvZiBpdDogd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIHdoaWNoIGlzIGtleS4gVGhpcyBsaWtlbHkgYWxsb3dzIHVzIHRvIGR5bmFtaWNhbGx5IGNvbnRyb2wgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHN0YXRpYyBrZXksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGdpdmluZyB1cyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGhvdyBSUFMgaW50ZXJhY3RzIHdpdGggdGhlIENQVSBjYWNoZS4gVGhlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgZnVuY3Rpb24gbm93IGNhbGxzIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgc21hcnQ7IGl0IHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGF0dGVtcHRpbmcgdG8gb3B0aW1pemUgY2FjaGUgbG9jYWxpdHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcnBzX2xsY19jaGVja2AgaW4gYGRldi5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhlIG1vdmVtZW50IG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBmcm9tIGlubGluZXMgaW4gYHJwcy5oYCB0byBleHBvcnRlZCBzeW1ib2xzIGluIGBkZXYuY2AgYWxzbyBjYXRjaGVzIG15IGV5ZS4gVGhpcyBoaW50cyBhdCBzb21lIHNvcnQgb2YgaW50ZXJuYWwgcmVzdHJ1Y3R1cmluZywgcG90ZW50aWFsbHkgZm9yIGNvZGUgcmV1c2Ugb3IgbW9yZSByb2J1c3QgbW9kdWxlIGludGVncmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyAqdXNpbmcqIHRoZXNlIGV4cG9ydGVkIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBDT05GSUdgIG9wdGlvbnMuIFRoaXMgcGF0Y2ggY2xlYXJseSBhZmZlY3RzIFJQUyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBzZXR0aW5ncy4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yOTM9Y29uZmlnIE1BWF9TS0JfRlJBR1Ncbi0tXG5uZXQvS2NvbmZpZy0zMDQtXG5uZXQvS2NvbmZpZzozMDU6Y29uZmlnIFJQU1xubmV0L0tjb25maWctMzA2LVx0Ym9vbCBcJiMzNDtSZWNlaXZlIHBhY2tldCBzdGVlcmluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMDUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbiwgcHJlc3VtYWJseSBmb3IgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZSBvciBtb2R1bGUuIFRoZSBLY29uZmlnIHN5bnRheCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgYSBxdWljayBzY2FuIHdpbGwgaGVscCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgcXVpY2tseSB6ZXJvIGluIG9uIGFueSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25zdHJhaW50cy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gcHJvdmlkZXMgdGhlIGNsdWVzIEkgbmVlZCB0byBkZWJ1ZyBvciB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGJlaGF2aW9yLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0ICBsZWdhY3kgZHJpdmVycy5cbiAzMDE6XHRcdCAgVGhpcyBhbHNvIGluY3JlYXNlcyBtZW1vcnkgb3ZlcmhlYWQgb2Ygc21hbGwgcGFja2V0cyxcbiAzMDI6XHRcdCAgYW5kIGluIGRyaXZlcnMgdXNpbmcgYnVpbGRfc2tiKCkuXG4gMzAzOlx0XHQgIElmIHVuc3VyZSwgc2F5IDE3LlxuIDMwNDpcdFxuIDMwNTpcdGNvbmZpZyBSUFNcbiAzMDY6XHRcdGJvb2wgXCYjMzQ7UmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcJiMzNDtcbiAzMDc6XHRcdGRlcGVuZHMgb24gU01QIFx1MDAyNlx1MDAyNiBTWVNGU1xuIDMwODpcdFx0ZGVmYXVsdCB5XG4gMzA5Olx0XHRoZWxwXG4gMzEwOlx0XHQgIFNvZnR3YXJlIHJlY2VpdmUgc2lkZSBwYWNrZXQgc3RlZXJpbmcgKFJQUykgZGlzdHJpYnV0ZXMgdGhlXG4gMzExOlx0XHQgIGxvYWQgb2YgcmVjZWl2ZWQgcGFja2V0IHByb2Nlc3NpbmcgYWNyb3NzIG11bHRpcGxlIENQVXMuXG4gMzEyOlx0XG4gMzEzOlx0Y29uZmlnIFJGU19BQ0NFTFxuIDMxNDpcdFx0Ym9vbCBcJiMzNDtIYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgUkZTXCYjMzQ7XG4gMzE1Olx0XHRkZXBlbmRzIG9uIFJQU1xuIDMxNjpcdFx0c2VsZWN0IENQVV9STUFQXG4gMzE3Olx0XHRkZWZhdWx0IHlcbiAzMTg6XHRcdGhlbHBcbiAzMTk6XHRcdCAgQWxsb3dpbmcgZHJpdmVycyBmb3IgbXVsdGlxdWV1ZSBoYXJkd2FyZSB3aXRoIGZsb3cgZmlsdGVyIHRhYmxlcyB0b1xuIDMyMDpcdFx0ICBhY2NlbGVyYXRlIFJGUy5cbiAzMjE6XHRcbiAzMjI6XHRjb25maWcgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gMzIzOlx0XHRib29sXG4gMzI0Olx0XG4gMzI1Olx0Y29uZmlnIFhQU1xuIDMyNjpcdFx0Ym9vbFxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBTTVBcbiAzMjg6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAzMjk6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJQUyBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgKFJQUykgaXMgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBjaGVjay4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgY29yZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjayDigJMgYG5ldC9jb3JlL2Rldi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBhcm91bmQgYHJwc19sbGNfY2hlY2tgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBkZWNpc2lvbnMgYWJvdXQgd2hlcmUgdG8gc3RlZXIgaW5jb21pbmcgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBMTEMgaW5mb3JtYXRpb24gc2hvdWxkIGJlIG1hZGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcyBhbmQgd2hhdCBpdHMgY29udHJvbCBmbG93IGlzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJQUyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBFdGhlcm5ldCBoZWFkZXIgcHJvY2Vzc2luZyBhdCB0aGlzIHN0YWdlLCBhbmQgd2hhdCB0aGUgY3JpdGVyaWEgYXJlIGZvciBkaXJlY3RpbmcgcGFja2V0cyB0byBzcGVjaWZpYyBDUFVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRyYWZmaWMgaXMgYmVpbmcgZGlzdHJpYnV0ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gdGhlIExMQyBjaGVjayBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI2MDpcdFx0XHRcdGdvdG8gZG9uZTtcbjUyNjE6XHRcdFx0fVxuNTI2MjpcdFx0fVxuNTI2MzpcdFxuNTI2NDpcdGRvbmU6XG41MjY1Olx0XHRyZXR1cm4gY3B1O1xuNTI2NjpcdH1cbjUyNjc6XHRcbjUyNjg6XHQvKipcbjUyNjk6XHQgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuNTI3MDpcdCAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbjUyNzE6XHQgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuNTI3MjpcdCAqXG41MjczOlx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG41Mjc0Olx0ICovXG41Mjc1Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbjUyNzY6XHR7XG41Mjc3Olx0XHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbjUyNzg6XHRcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuNTI3OTpcdFxuNTI4MDpcdFx0LypcbjUyODE6XHRcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbjUyODI6XHRcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuNTI4MzpcdFx0ICpcbjUyODQ6XHRcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuNTI4NTpcdFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG41Mjg2Olx0XHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1JiMzOTtzIGFyZnNfbG9jaykuXG41Mjg3Olx0XHQgKlxuNTI4ODpcdFx0ICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTENcbjUyODk6XHRcdCAqIGJvdW5kYXJpZXMuIFRoaXMgbWluaW1pemVzIGV4cGVuc2l2ZSBoYXJkd2FyZSB1cGRhdGVzIHdoaWxlIHByZXNlcnZpbmdcbjUyOTA6XHRcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXG41MjkxOlx0XHQgKi9cbjUyOTI6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcbjUyOTM6XHRcdFx0LyogRm9yY2UgdXBkYXRlIGlmIHRoZSByZWNvcmRlZCBDUFUgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBvZmZsaW5lICovXG41Mjk0Olx0XHRcdGlmIChvbGRfY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcbjUyOTU6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjUyOTY6XHRcbjUyOTc6XHRcdFx0LypcbjUyOTg6XHRcdFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XG41Mjk5Olx0XHRcdCAqIGV4cGVuc2l2ZSByZW1vdGUgbWVtb3J5IGFjY2Vzc2VzIGFuZCBjYWNoZSBtaXNzZXMuXG41MzAwOlx0XHRcdCAqL1xuNTMwMTpcdFx0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG41MzAyOlx0XHRcdFx0cmV0dXJuIHRydWU7XG41MzAzOlx0XG41MzA0Olx0XHRcdHJldHVybiBmYWxzZTtcbjUzMDU6XHRcdH1cbjUzMDY6XHRcbjUzMDc6XHRcdHJldHVybiB0cnVlO1xuNTMwODpcdH1cbjUzMDk6XHRcbjUzMTA6XHQjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuNTMxMTpcdFxuNTMxMjpcdC8qKlxuNTMxMzpcdCAqIHJwc19tYXlfZXhwaXJlX2Zsb3cgLSBjaGVjayB3aGV0aGVyIGFuIFJGUyBoYXJkd2FyZSBmaWx0ZXIgbWF5IGJlIHJlbW92ZWRcbjUzMTQ6XHQgKiBAZGV2OiBEZXZpY2Ugb24gd2hpY2ggdGhlIGZpbHRlciB3YXMgc2V0XG41MzE1Olx0ICogQHJ4cV9pbmRleDogUlggcXVldWUgaW5kZXhcbjUzMTY6XHQgKiBAZmxvd19pZDogRmxvdyBJRCBwYXNzZWQgdG8gbmRvX3J4X2Zsb3dfc3RlZXIoKVxuNTMxNzpcdCAqIEBmaWx0ZXJfaWQ6IEZpbHRlciBJRCByZXR1cm5lZCBieSBuZG9fcnhfZmxvd19zdGVlcigpXG41MzE4Olx0ICpcbjUzMTk6XHQgKiBEcml2ZXJzIHRoYXQgaW1wbGVtZW50IG5kb19yeF9mbG93X3N0ZWVyKCkgc2hvdWxkIHBlcmlvZGljYWxseSBjYWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIFJQUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHJwc19sbGNfY2hlY2tgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIGBDT05GSUdfUlBTYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBhIHN1YnRsZSBidWcgaW4gb3VyIG5ldHdvcmsgc3RhY2sgY2FuIGNhdXNlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHByb2JsZW1zLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9kZXYuY2AgZmlsZSwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgZm9yIFJQUyBhbmQgUkZTIGxvZ2ljLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGEgYCNpZmRlZiBDT05GSUdfUlBTYCBibG9jayBpbiB0aGF0IGFyZWEsIGFuZCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbCwgYHJwc19sbGNfY2hlY2tgLCBpcyBlbmNsb3NlZCB3aXRoaW4gaXQuIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZXMgNTA0MC01MDYwIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY29uZmlybS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwNDA6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmFwaS1cdTAwM2Vwb2xsX2xpc3QsIFx1MDAyNnNkLVx1MDAzZXBvbGxfbGlzdCk7XG41MDQxOlx0XHRXUklURV9PTkNFKG5hcGktXHUwMDNlbGlzdF9vd25lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbjUwNDI6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKClcbjUwNDM6XHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG41MDQ0Olx0XHQgKi9cbjUwNDU6XHRcdGlmICghc2QtXHUwMDNlaW5fbmV0X3J4X2FjdGlvbilcbjUwNDY6XHRcdFx0cmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuNTA0NzpcdH1cbjUwNDg6XHRcbjUwNDk6XHQjaWZkZWYgQ09ORklHX1JQU1xuNTA1MDpcdFxuNTA1MTpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcbjUwNTI6XHRFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpO1xuNTA1MzpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQgX19yZWFkX21vc3RseTtcbjUwNTQ6XHRFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xuNTA1NTpcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eSBfX3JlYWRfbW9zdGx5O1xuNTA1NjpcdEVYUE9SVF9TWU1CT0wocnBzX2ZlYXRfbGxjX2FmZmluaXR5KTtcbjUwNTc6XHRcbjUwNTg6XHRzdGF0aWMgdTMyIHJmc19zbG90KHUzMiBoYXNoLCBycHNfdGFnX3B0ciB0YWdfcHRyKVxuNTA1OTpcdHtcbjUwNjA6XHRcdHJldHVybiBoYXNoXzMyKGhhc2gsIHJwc190YWdfdG9fbG9nKHRhZ19wdHIpKTtcbjUwNjE6XHR9XG41MDYyOlx0XG41MDYzOlx0I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbjUwNjQ6XHQvKipcbjUwNjU6XHQgKiBycHNfZmxvd19pc19hY3RpdmUgLSBjaGVjayB3aGV0aGVyIHRoZSBmbG93IGlzIHJlY2VudGx5IGFjdGl2ZS5cbjUwNjY6XHQgKiBAcmZsb3c6IFNwZWNpZmljIGZsb3cgdG8gY2hlY2sgYWN0aXZpdHkuXG41MDY3Olx0ICogQGxvZzogaWxvZzIoaGFzaHNpemUpLlxuNTA2ODpcdCAqIEBjcHU6IENQVSBzYXZlZCBpbiBAcmZsb3cuXG41MDY5Olx0ICpcbjUwNzA6XHQgKiBJZiB0aGUgQ1BVIGhhcyBwcm9jZXNzZWQgbWFueSBwYWNrZXRzIHNpbmNlIHRoZSBmbG93JiMzOTtzIGxhc3QgYWN0aXZpdHlcbjUwNzE6XHQgKiAoYmV5b25kIDEwIHRpbWVzIHRoZSB0YWJsZSBzaXplKSwgdGhlIGZsb3cgaXMgY29uc2lkZXJlZCBzdGFsZS5cbjUwNzI6XHQgKlxuNTA3MzpcdCAqIFJldHVybjogdHJ1ZSBpZiBmbG93IHdhcyByZWNlbnRseSBhY3RpdmUuXG41MDc0Olx0ICovXG41MDc1Olx0c3RhdGljIGJvb2wgcnBzX2Zsb3dfaXNfYWN0aXZlKHN0cnVjdCBycHNfZGV2X2Zsb3cgKnJmbG93LFxuNTA3NjpcdFx0XHRcdCAgICAgICB1OCBsb2csXG41MDc3Olx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBjcHUpXG41MDc4Olx0e1xuNTA3OTpcdFx0dW5zaWduZWQgaW50IGZsb3dfbGFzdF9hY3RpdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKlJQUyBEaXNhYmxlbWVudCBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgUlBTIGFuZCBob3cgaXQgYmVoYXZlcyB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aG91dCBgQ09ORklHX1JQU2AgZW5hYmxlZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBldmVuIHdoZW4gUlBTIGlzIG9mZiwgdGhlcmUgbWlnaHQgc3RpbGwgYmUgc29tZSBjb2RlIHBhdGhzIG9yIGRlZmluaXRpb25zIHRoYXQgdG91Y2ggdXBvbiBSUFMtcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gU28sIGxldCYjMzk7cyBtYWtlIHN1cmUgd2Ugc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvcnBzLmhgIGhlYWRlciBmaWxlIGV2ZW4gaW4gdGhpcyBkaXNhYmxlZCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGtleSBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBwb3RlbnRpYWwgcmVtbmFudHMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zLiBHb3R0YSBiZSBleHRyYSBjYXJlZnVsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuICAgMjpcdCNpZm5kZWYgX05FVF9SUFNfSFxuICAgMzpcdCNkZWZpbmUgX05FVF9SUFNfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2hvdGRhdGEuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpZmRlZiBDT05GSUdfUlBTXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3Jwcy10eXBlcy5oXHUwMDNlXG4gIDEyOlx0XG4gIDEzOlx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gIDE0Olx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4gIDE1Olx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuICAxOTpcdCAqIG1hcCBpcyBhbiBhcnJheSBvZiBDUFVzLlxuICAyMDpcdCAqL1xuICAyMTpcdHN0cnVjdCBycHNfbWFwIHtcbiAgMjI6XHRcdHVuc2lnbmVkIGludFx0bGVuO1xuICAyMzpcdFx0c3RydWN0IHJjdV9oZWFkXHRyY3U7XG4gIDI0Olx0XHR1MTZcdFx0Y3B1c1tdO1xuICAyNTpcdH07XG4gIDI2Olx0I2RlZmluZSBSUFNfTUFQX1NJWkUoX251bSkgKHNpemVvZihzdHJ1Y3QgcnBzX21hcCkgJiM0MzsgKChfbnVtKSAqIHNpemVvZih1MTYpKSlcbiAgMjc6XHRcbiAgMjg6XHQvKlxuICAyOTpcdCAqIFRoZSBycHNfZGV2X2Zsb3cgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGEgZmxvdyB0byBhIENQVSwgdGhlXG4gIDMwOlx0ICogdGFpbCBwb2ludGVyIGZvciB0aGF0IENQVSYjMzk7cyBpbnB1dCBxdWV1ZSBhdCB0aGUgdGltZSBvZiBsYXN0IGVucXVldWUsIGFcbiAgMzE6XHQgKiBoYXJkd2FyZSBmaWx0ZXIgaW5kZXgsIGFuZCB0aGUgaGFzaCBvZiB0aGUgZmxvdyBpZiBhUkZTIGlzIGVuYWJsZWQuXG4gIDMyOlx0ICovXG4gIDMzOlx0c3RydWN0IHJwc19kZXZfZmxvdyB7XG4gIDM0Olx0XHR1MTZcdFx0Y3B1O1xuICAzNTpcdFx0dTE2XHRcdGZpbHRlcjtcbiAgMzY6XHRcdHVuc2lnbmVkIGludFx0bGFzdF9xdGFpbDtcbiAgMzc6XHQjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuICAzODpcdFx0dTMyXHRcdGhhc2g7XG4gIDM5Olx0I2VuZGlmXG4gIDQwOlx0fTtcbiAgNDE6XHQjZGVmaW5lIFJQU19OT19GSUxURVIgMHhmZmZmXG4gIDQyOlx0XG4gIDQzOlx0LypcbiAgNDQ6XHQgKiBUaGUgcnBzX3NvY2tfZmxvd190YWJsZSBjb250YWlucyBtYXBwaW5ncyBvZiBmbG93cyB0byB0aGUgbGFzdCBDUFVcbiAgNDU6XHQgKiBvbiB3aGljaCB0aGV5IHdlcmUgcHJvY2Vzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiAoc2V0IGluIHJlY3Ztc2cpLlxuICA0NjpcdCAqIEVhY2ggZW50cnkgaXMgYSAzMmJpdCB2YWx1ZS4gVXBwZXIgcGFydCBpcyB0aGUgaGlnaC1vcmRlciBiaXRzXG4gIDQ3Olx0ICogb2YgZmxvdyBoYXNoLCBsb3dlciBwYXJ0IGlzIENQVSBudW1iZXIuXG4gIDQ4Olx0ICogcnBzX2NwdV9tYXNrIGlzIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBzcGFjZSwgZGVwZW5kaW5nIG9uIG51bWJlciBvZlxuICA0OTpcdCAqIHBvc3NpYmxlIENQVXMgOiBycHNfY3B1X21hc2sgPSByb3VuZHVwX3Bvd19vZl90d28obnJfY3B1X2lkcykgLSAxXG4gIDUwOlx0ICogRm9yIGV4YW1wbGUsIGlmIDY0IENQVXMgYXJlIHBvc3NpYmxlLCBycHNfY3B1X21hc2sgPSAweDNmLFxuICA1MTpcdCAqIG1lYW5pbmcgd2UgdXNlIDMyLTY9MjYgYml0cyBmb3IgdGhlIGhhc2guXG4gIDUyOlx0ICovXG4gIDUzOlx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUge1xuICA1NDpcdFx0dTMyXHRlbnQ7XG4gIDU1Olx0fTtcbiAgNTY6XHRcbiAgNTc6XHQjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gIDU4Olx0XG4gIDU5Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuICA2MjpcdHtcbiAgNjM6XHRcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAgNjQ6XHRcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuICA2NTpcdFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuICA2NjpcdFx0dTMyIG9sZF92YWw7XG4gIDY3Olx0XG4gIDY4Olx0XHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gIDY5Olx0XHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAgNzA6XHRcbiAgNzE6XHRcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcbiAgNzI6XHRcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuICA3MzpcdFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gIDc0Olx0XHQgKi9cbiAgNzU6XHRcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4gIDc2Olx0XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiAgNzc6XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbmNsdWRlL25ldC9ycHMuaGAgaGVhZGVyLCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBkaXZlIGludG8gbmV0d29ya2luZyBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIHRoZSBgcnBzLmhgIEhlYWRlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgYSBzaWduaWZpY2FudCBwYXJ0IG9mIGl0LCBpbiB0ZXJtcyBvZiBzdGVlcmluZyBwYWNrZXRzIHRvIHRoZSByaWdodCBDUFUgY29yZSBmb3IgcHJvY2Vzc2luZy4mIzM0OyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgYW5kIGxpa2VseSBzb21lIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBrZXkgdG8gbWFraW5nIHRoaXMgaGFwcGVuIGVmZmljaWVudGx5LiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgZGlzcGF0Y2ggYW5kIHdoYXQgbWVjaGFuaXNtcyBpdCB1c2VzIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24gQ1BVLCBpZGVhbGx5LCB3aXRob3V0IHRvbyBtdWNoIG92ZXJoZWFkIG9yIGxvY2tpbmcgY29udGVudGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgbGlrZSB0aGUgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBOSUMmIzM5O3Mgb3duIFJTUyAoUmVjZWl2ZSBTaWRlIFNjYWxpbmcpIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgdHVuaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0e1xuICA4MjpcdFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcbiAgODM6XHRcbiAgODQ6XHRcdGlmICghaGFzaClcbiAgODU6XHRcdFx0cmV0dXJuO1xuICA4NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA4NzpcdFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcbiAgODg6XHRcdGlmICh0YWdfcHRyKVxuICA4OTpcdFx0XHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcbiAgOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA5MTpcdH1cbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiAgOTQ6XHR7XG4gIDk1Olx0XHQvKiBSZWFkaW5nIHNrLVx1MDAzZXNrX3J4aGFzaCBtaWdodCBpbmN1ciBhbiBleHBlbnNpdmUgY2FjaGUgbGluZVxuICA5NjpcdFx0ICogbWlzcy5cbiAgOTc6XHRcdCAqXG4gIDk4Olx0XHQgKiBUQ1BfRVNUQUJMSVNIRUQgZG9lcyBjb3ZlciBhbG1vc3QgYWxsIHN0YXRlcyB3aGVyZSBSRlNcbiAgOTk6XHRcdCAqIG1pZ2h0IGJlIHVzZWZ1bCwgYW5kIGlzIGNoZWFwZXIgWzFdIHRoYW4gdGVzdGluZyA6XG4gMTAwOlx0XHQgKlx0SVB2NDogaW5ldF9zayhzayktXHUwMDNlaW5ldF9kYWRkclxuIDEwMTpcdFx0ICpcdElQdjY6IGlwdjZfYWRkcl9hbnkoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIpXG4gMTAyOlx0XHQgKiBPUlx0YW4gYWRkaXRpb25hbCBzb2NrZXQgZmxhZ1xuIDEwMzpcdFx0ICogWzFdIDogc2tfc3RhdGUgYW5kIHNrX3Byb3QgYXJlIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuXG4gMTA0Olx0XHQgKi9cbiAxMDU6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiAxMDY6XHRcdFx0LyogVGhpcyBSRUFEX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgV1JJVEVfT05DRSgpXG4gMTA3Olx0XHRcdCAqIGZyb20gc29ja19ycHNfc2F2ZV9yeGhhc2goKSBhbmQgc29ja19ycHNfcmVzZXRfcnhoYXNoKCkuXG4gMTA4Olx0XHRcdCAqL1xuIDEwOTpcdFx0XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcnhoYXNoKSk7XG4gMTEwOlx0XHR9XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDExNDpcdHtcbiAxMTU6XHRcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbiAxMTY6XHRcdHJwc190YWdfcHRyIHRhZ19wdHI7XG4gMTE3Olx0XHR1MzIgaGFzaCwgaW5kZXg7XG4gMTE4Olx0XG4gMTE5Olx0XHRoYXNoID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCk7XG4gMTIwOlx0XHRpZiAoIWhhc2gpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjQ6XHRcdHRhZ19wdHIgPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEucnBzX3NvY2tfZmxvd190YWJsZSk7XG4gMTI1Olx0XHRpZiAodGFnX3B0cikge1xuIDEyNjpcdFx0XHRpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAxMjc6XHRcdFx0dGFibGUgPSBycHNfdGFnX3RvX3RhYmxlKHRhZ19wdHIpO1xuIDEyODpcdFx0XHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IFJQU19OT19DUFUpXG4gMTI5Olx0XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCBSUFNfTk9fQ1BVKTtcbiAxMzA6XHRcdH1cbiAxMzE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEzMjpcdH1cbiAxMzM6XHQjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIDEzNDpcdFxuIDEzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gMTM2Olx0e1xuIDEzNzpcdCNpZmRlZiBDT05GSUdfUlBTXG4gMTM4Olx0XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZyZnNfbmVlZGVkKTtcbiAxMzk6XHQjZWxzZVxuIDE0MDpcdFx0cmV0dXJuIGZhbHNlO1xuIDE0MTpcdCNlbmRpZlxuIDE0MjpcdH1cbiAxNDM6XHRcbiAxNDQ6XHR2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCk7XG4gMTQ1Olx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuIDE0NjpcdFxuIDE0NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19kZWxldGVfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gMTQ4Olx0e1xuIDE0OTpcdCNpZmRlZiBDT05GSUdfUlBTXG4gMTUwOlx0XHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbiAxNTE6XHRcdFx0cmV0dXJuO1xuIDE1MjpcdFxuIDE1MzpcdFx0X3NvY2tfcnBzX2RlbGV0ZV9mbG93KHNrKTtcbiAxNTQ6XHQjZW5kaWZcbiAxNTU6XHR9XG4gMTU2Olx0XG4gMTU3Olx0c3RhdGljIGlubGluZSB1MzIgcnBzX2lucHV0X3F1ZXVlX3RhaWxfaW5jcihzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbiAxNTg6XHR7XG4gMTU5Olx0I2lmZGVmIENPTkZJR19SUFNcbiAxNjA6XHRcdHJldHVybiAmIzQzOyYjNDM7c2QtXHUwMDNlaW5wdXRfcXVldWVfdGFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3QgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBSUFMvUkZTIGFyZSBhY3RpdmUgYW5kIHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcnBzX2xsY19jaGVja2AgaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGZsb3cgdXBkYXRlcywgQ1BVIGFmZmluaXR5LCBhbmQgc3RlZXJpbmcgd2l0aGluIHRoZSBSUFMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoZWNraW5nIGBvbGRfY3B1YCBhbmQgYG5ld19jcHVgIGFnYWluc3QgYG5ldF9ob3RkYXRhLnJwc19jcHVfbWFza2AsIGFuZCBjb25kaXRpb25hbGx5IGNhbGxpbmcgYGNwdV9hY3RpdmVgIGFuZCBgY3B1c19zaGFyZV9jYWNoZWAgYmFzZWQgb24gdGhlIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBjb25kaXRpb24uCgpOb3csIGFyZSB0aGVzZSBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEkgbmVlZCB0byBhcHBseSB0aGUgY3JpdGVyaWEuIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbW1lbnQgY2hhbmdlLCBhIGxvZ2dpbmcgdXBkYXRlLCBvciBhIHB1cmVseSBjb3NtZXRpYyBudW1lcmljIGNoYW5nZS4gVGhlcmUmIzM5O3MgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGluIGBuZXQvY29yZS9kZXYuY2AsIGBpbmNsdWRlL25ldC9ycHMuaGAsIGFuZCBgbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNgLiBUaGlzIGlzbiYjMzk7dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGNvZGUgb3IgaG90LXVucGx1ZyByZWxhdGVkIGNvZGUuIENyaXRpY2FsbHksIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd291bGQgYmUgZmluZS4gVGhlcmVmb3JlLCAqKldvcnRoRnV6emluZz10cnVlKiouCgpOZXh0LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gQ2xlYXJseSwgYHJwc19sbGNfY2hlY2tgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIHRhcmdldC4gSXQmIzM5O3MgYSBub24tc3RhdGljIGJvb2xlYW4gZnVuY3Rpb24gaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHdpdGggdGhlIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBhbmQgdGhlIGBjcHVzX3NoYXJlX2NhY2hlYCBjaGVjay4gVGhpcyBpcyBuZXcgYW5kIHdhcnJhbnRzIGF0dGVudGlvbi4gQWxzbywgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgLCB3aGljaCBhcmUgbm93IGV4cG9ydGVkIGZ1bmN0aW9ucywgYXJlIGFsc28gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIGZ1enppbmcuIFRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLgoKQXJlIHRoZXkgaG90LXBhdGg/IEkgc2hvdWxkIGJlIGNhcmVmdWwgdG8gb25seSBmbGFnIGZ1bmN0aW9ucyB0byBmdXp6IHRoYXQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBycHNfbGxjX2NoZWNrYCB0aGF0IGNoZWNrcyBjYWNoZSBhZmZpbml0eSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGhpdC4gVGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHNvY2tldCBvcHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBleGFjdGx5IHdoZXJlIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgaXMgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBnb29kIHRhcmdldHMsIGJ1dCBmb3Igbm93IHRoZXkgc2VlbSBva2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX3Jwc19yZWNvcmRfZmxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz00MTQ9c3RhdGljIHZvaWQgdHVuX2Zsb3dfdXBkYXRlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHUzMiByeGhhc2gsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNDMyLVx0XHRcdGUtXHUwMDNldXBkYXRlZCA9IGppZmZpZXM7XG5kcml2ZXJzL25ldC90dW4uYzo0MzM6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goZS1cdTAwM2VycHNfcnhoYXNoKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTQzNC1cdH0gZWxzZSB7XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9NjE9c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuLS1cbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxuaW5jbHVkZS9uZXQvcnBzLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG5pbmNsdWRlL25ldC9ycHMuaC04MS17XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtOTItXG5pbmNsdWRlL25ldC9ycHMuaDo5MzpzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcbi0tXG5pbmNsdWRlL25ldC9ycHMuaC0xMDgtXHRcdCAqL1xuaW5jbHVkZS9uZXQvcnBzLmg6MTA5Olx0XHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcnhoYXNoKSk7XG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXHR9XG4tLVxuaW5jbHVkZS9uZXQvcnBzLmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvcnBzLmgtMTQzLVxuaW5jbHVkZS9uZXQvcnBzLmg6MTQ0OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcbmluY2x1ZGUvbmV0L3Jwcy5oOjE0NTp2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9ycHMuaC0xNDYtXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTEyMDU9c3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3NhdmVfcnhoYXNoKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIwOS1cdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuaW5jbHVkZS9uZXQvc29jay5oOjEyMTA6XHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKS5cbmluY2x1ZGUvbmV0L3NvY2suaC0xMjExLVx0ICovXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTEyMTc9c3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3Jlc2V0X3J4aGFzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTEyMTktI2lmZGVmIENPTkZJR19SUFNcbmluY2x1ZGUvbmV0L3NvY2suaDoxMjIwOlx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKSAqL1xuaW5jbHVkZS9uZXQvc29jay5oLTEyMjEtXHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3J4aGFzaCwgMCk7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTE5NTM9aW50IGlvX3pjcnhfcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE5NjItXG5pb191cmluZy96Y3J4LmM6MTk2MzpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbmlvX3VyaW5nL3pjcnguYy0xOTY0LVx0cmV0dXJuIGlvX3pjcnhfdGNwX3JlY3Ztc2cocmVxLCBpZnEsIHNrLCBmbGFncywgaXNzdWVfZmxhZ3MsIGxlbik7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTM1ND1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM2NC1cbm5ldC9jb3JlL2Rldi5jOjUzNjU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG5uZXQvY29yZS9kZXYuYy01MzY2LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01MzcwLVxubmV0L2NvcmUvZGV2LmM6NTM3MTpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xubmV0L2NvcmUvZGV2LmMtNTM3Mi0jZW5kaWZcbm5ldC9jb3JlL2Rldi5jLTUzNzMtfVxubmV0L2NvcmUvZGV2LmM6NTM3NDpFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xubmV0L2NvcmUvZGV2LmMtNTM3NS1cbm5ldC9jb3JlL2Rldi5jOjUzNzY6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9kZXYuYy01Mzc3LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01MzgxLVxubmV0L2NvcmUvZGV2LmM6NTM4MjpcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvY29yZS9kZXYuYy01MzgzLSNlbmRpZlxubmV0L2NvcmUvZGV2LmMtNTM4NC19XG5uZXQvY29yZS9kZXYuYzo1Mzg1OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xubmV0L2NvcmUvZGV2LmMtNTM4Ni1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9NzYxPXZvaWQgX19pbmV0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTc2Ny1cbm5ldC9pcHY0L2FmX2luZXQuYzo3Njg6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhuZXdzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY5LVx0V0FSTl9PTighKCgxIFx1MDAzY1x1MDAzYyBuZXdzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTg0ND1pbnQgaW5ldF9zZW5kX3ByZXBhcmUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvYWZfaW5ldC5jLTg0NS17XG5uZXQvaXB2NC9hZl9pbmV0LmM6ODQ2Olx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTg0Ny1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9ODg0PWludCBpbmV0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtODkwLVx0aWYgKGxpa2VseSghKGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKSlcbm5ldC9pcHY0L2FmX2luZXQuYzo4OTE6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY0L2FmX2luZXQuYy04OTItXG4tLVxubmV0L2lwdjQvdGNwLmM9ODExPXNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbi0tXG5uZXQvaXB2NC90Y3AuYy04MjQtXG5uZXQvaXB2NC90Y3AuYzo4MjU6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC90Y3AuYy04MjYtXHQvKlxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjIyMy1cbm5ldC9pcHY0L3RjcC5jOjIyMjQ6XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG5uZXQvaXB2NC90Y3AuYy0yMjI1LVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjQ1PWludCBpbmV0Nl9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTEtXHRpZiAobGlrZWx5KCEoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpKVxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTI6XHRcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5ODA9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5ODktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTkwOlx0XHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5MS1cdH1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz04NzEyPV9fcG9sbF90IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgcG9sbF90YWJsZSAqd2FpdClcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy04NzE5LVxubmV0L3NjdHAvc29ja2V0LmM6ODcyMDpcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbm5ldC9zY3RwL3NvY2tldC5jLTg3MjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcnBzX2xsY19jaGVja2AgRnVuY3Rpb24mIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBycHNfbGxjX2NoZWNrYCBmdW5jdGlvbiwgc2VlaW5nIGFzIGl0JiMzOTtzIHRoZSB0YXJnZXQuIEkga25vdyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZHVyaW5nIHRoZSBzb2NrIGZsb3cgcmVjb3JkaW5nIHByb2Nlc3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IEtjb25maWcgb3B0aW9ucy4gV2hhdCBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBnb2luZyB0byBiZSByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGJ1aWx0IGFuZCB3b3JrIGNvcnJlY3RseT8KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlOiBgbmV0L0tjb25maWdgLiBJIHNlZSBgQ09ORklHX1JQU2AgZGVmaW5lZCB0aGVyZToKCmBgYApjb25maWcgUlBTCglib29sICYjMzQ7UmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmcmIzM0OwoJZGVwZW5kcyBvbiBTTVAgJmFtcDsmYW1wOyBTWVNGUwoJZGVmYXVsdCB5CmBgYAoKQWxyaWdodCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFdlIG5lZWQgYFJQU2AgKHRoZSBjb3JlIGZlYXR1cmUgaXRzZWxmKSwgYFNNUGAgKHN5bW1ldHJpYyBtdWx0aXByb2Nlc3NpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwYWNrZXQgc3RlZXJpbmcgYWNyb3NzIG11bHRpcGxlIENQVXMpLCBhbmQgYFNZU0ZTYCAoZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UpLiBTZWVtcyBsb2dpY2FsLgoKQnV0LCBJJiMzOTttIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgSSBhbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycHNfbGxjX2NoZWNrYCBpc24mIzM5O3QgaW5kaXJlY3RseSBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZSB2aWEgb3RoZXIga2VybmVsIGZ1bmN0aW9ucyBvciBjb25maWd1cmF0aW9ucy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY2hlY2sgdGhlIGBjcHVzX3NoYXJlX2NhY2hlYCBkZWZpbml0aW9uIGluIHRoZSBrZXJuZWwgdHJlZSBhbmQgd29yayBiYWNrIHRvIGRldGVybWluZSBob3cgYHJwc19sbGNfY2hlY2tgIGlzIGludm9sdmVkLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwdXNfc2hhcmVfY2FjaGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmM9MTI0MT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX2NvbXBsZXRlX25lZWRfaXBpKHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstbXEuYy0xMjU5LVx0ICAgICghdGVzdF9iaXQoUVVFVUVfRkxBR19TQU1FX0ZPUkNFLCBcdTAwMjZycS1cdTAwM2VxLVx1MDAzZXF1ZXVlX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay1tcS5jOjEyNjA6XHQgICAgIGNwdXNfc2hhcmVfY2FjaGUoY3B1LCBycS1cdTAwM2VtcV9jdHgtXHUwMDNlY3B1KSBcdTAwMjZcdTAwMjZcbmJsb2NrL2Jsay1tcS5jLTEyNjEtXHQgICAgIGNwdXNfZXF1YWxfY2FwYWNpdHkoY3B1LCBycS1cdTAwM2VtcV9jdHgtXHUwMDNlY3B1KSkpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oPTIwMj1ib29sIGNwdXNfZXF1YWxfY2FwYWNpdHkoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjIwMzpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTIwNC1ib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM5ODQ9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMzk5NC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mzk5NTpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTYte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDAxNT1zdGF0aWMgaW5saW5lIGJvb2wgdHR3dV9xdWV1ZV9jb25kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQwNDItXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDA0MzpcdGlmICghY3B1c19zaGFyZV9jYWNoZSh0aGlzX2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0NC1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9NDU4PXMzMiBzY3hfc2VsZWN0X2NwdV9kZmwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzMzIgcHJldl9jcHUsIHU2NCB3YWtlX2ZsYWdzLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzMy1cdFx0Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6NTM0Olx0XHRpZiAoaXNfcHJldl9hbGxvd2VkIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcHJldl9jcHUpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTM1LVx0XHQgICAgc2N4X2lkbGVfdGVzdF9hbmRfY2xlYXJfY3B1KHByZXZfY3B1KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODM1MD13YWtlX2FmZmluZV9pZGxlKGludCB0aGlzX2NwdSwgaW50IHByZXZfY3B1LCBpbnQgc3luYylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjMtXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODM2NDpcdGlmIChhdmFpbGFibGVfaWRsZV9jcHUodGhpc19jcHUpIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBwcmV2X2NwdSkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjUtXHRcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUocHJldl9jcHUpID8gcHJldl9jcHUgOiB0aGlzX2NwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTg5NDk9c3RhdGljIGludCBzZWxlY3RfaWRsZV9zaWJsaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXYsIGludCB0YXJnZXQpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTc4LVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg5Nzk6XHRpZiAocHJldiAhPSB0YXJnZXQgXHUwMDI2XHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk4MC1cdCAgICBjaG9vc2VfaWRsZV9jcHUocHJldiwgcCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEwLVx0ICAgIHJlY2VudF91c2VkX2NwdSAhPSB0YXJnZXQgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jOjkwMTE6XHQgICAgY3B1c19zaGFyZV9jYWNoZShyZWNlbnRfdXNlZF9jcHUsIHRhcmdldCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTItXHQgICAgY2hvb3NlX2lkbGVfY3B1KHJlY2VudF91c2VkX2NwdSwgcCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUwLVxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDUxOlx0XHRpZiAoIWhhc19pZGxlX2NvcmUgXHUwMDI2XHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUyLVx0XHRcdGkgPSBzZWxlY3RfaWRsZV9zbXQocCwgc2QsIHByZXYpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA2OTg9c3RhdGljIGVudW0gbGxjX21pZyBjYW5fbWlncmF0ZV9sbGNfdGFzayhpbnQgc3JjX2NwdSwgaW50IGRzdF9jcHUsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcwOS1cdGNwdSA9IFJFQURfT05DRShtbS1cdTAwM2VzY19zdGF0LmNwdSk7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzEwOlx0aWYgKGNwdSBcdTAwM2MgMCB8fCBjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGRzdF9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcxMS1cdFx0cmV0dXJuIG1pZ191bnJlc3RyaWN0ZWQ7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyMC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjE6XHRpZiAoY3B1c19zaGFyZV9jYWNoZShkc3RfY3B1LCBjcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyMi1cdFx0dG9fcHJlZiA9IHRydWU7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzIzOlx0ZWxzZSBpZiAoY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBjcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyNC1cdFx0dG9fcHJlZiA9IGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTA3NDE9YWxiX2JyZWFrX2xsYyhzdHJ1Y3QgbGJfZW52ICplbnYpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0NS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3NDY6XHRpZiAoY3B1c19zaGFyZV9jYWNoZShlbnYtXHUwMDNlc3JjX2NwdSwgZW52LVx1MDAzZWRzdF9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTY2MD1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbnMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXG4tLVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjcyLSAqIG9mIHRoZSBkb21haW4pLCB0aGlzIGFsbG93cyB1cyB0byBxdWlja2x5IHRlbGwgaWYgdHdvIENQVXMgYXJlIGluIHRoZSBzYW1lXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NzM6ICogY2FjaGUgZG9tYWluLCBzZWUgY3B1c19zaGFyZV9jYWNoZSgpLlxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjc0LSAqL1xuLS1cbmtlcm5lbC93b3JrcXVldWUuYz04NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVjb21wdXRlX2NhY2hlX3NoYXJkX2lkcyh2b2lkKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy04NTYxLS8qXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2MjogKiBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkIC0gdGVzdCB3aGV0aGVyIHR3byBDUFVzIGJlbG9uZyB0byB0aGUgc2FtZSBjYWNoZSBzaGFyZFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjMtICpcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2Ni0gKi9cbmtlcm5lbC93b3JrcXVldWUuYzo4NTY3OnN0YXRpYyBib29sIF9faW5pdCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKGludCBjcHUwLCBpbnQgY3B1MSlcbmtlcm5lbC93b3JrcXVldWUuYy04NTY4LXtcbmtlcm5lbC93b3JrcXVldWUuYzo4NTY5Olx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKGNwdTAsIGNwdTEpKVxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODU4Mj12b2lkIF9faW5pdCB3b3JrcXVldWVfaW5pdF90b3BvbG9neSh2b2lkKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy04NTg4LVx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9TTVRdLCBjcHVzX3NoYXJlX3NtdCk7XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU4OTpcdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVdLCBjcHVzX3NoYXJlX2NhY2hlKTtcbmtlcm5lbC93b3JrcXVldWUuYy04NTkwLVx0cHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHMoKTtcbmtlcm5lbC93b3JrcXVldWUuYzo4NTkxOlx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV9TSEFSRF0sIGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQpO1xua2VybmVsL3dvcmtxdWV1ZS5jLTg1OTItXHRpbml0X3BvZF90eXBlKFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX05VTUFdLCBjcHVzX3NoYXJlX251bWEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUyNzU9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbi0tXG5uZXQvY29yZS9kZXYuYy01MzAwLVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzMDE6XHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbm5ldC9jb3JlL2Rldi5jLTUzMDItXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjY0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxlciBDb3JlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQ1BVIGNhY2hlIHNoYXJpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzY2hlZHVsZXIuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgbG9vayBhdCBga2VybmVsL3NjaGVkL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB3aXRoIGBjcHVzX3NoYXJlX2NhY2hlYC4gVGhpcyBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGNvbnRyb2wuIEkga25vdyB0aGlzIGFyZWEgZmFpcmx5IHdlbGwsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byBOVU1BIG5vZGUgYXdhcmVuZXNzIGFuZCBob3cgd2UgaGFuZGxlIGNvcmUtc2hhcmluZyBhZmZpbml0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5OTA6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTkxOlx0XG4zOTkyOlx0XHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcbjM5OTM6XHR9XG4zOTk0Olx0XG4zOTk1Olx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuMzk5NjpcdHtcbjM5OTc6XHRcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcbjM5OTg6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTk5Olx0XG40MDAwOlx0XHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xuNDAwMTpcdH1cbjQwMDI6XHRcbjQwMDM6XHQvKlxuNDAwNDpcdCAqIFdoZXRoZXIgQ1BVcyBhcmUgc2hhcmUgY2FjaGUgcmVzb3VyY2VzLCB3aGljaCBtZWFucyBMTEMgb24gbm9uLWNsdXN0ZXJcbjQwMDU6XHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxuNDAwNjpcdCAqL1xuNDAwNzpcdGJvb2wgY3B1c19zaGFyZV9yZXNvdXJjZXMoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG40MDA4Olx0e1xuNDAwOTpcdFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxuNDAxMDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQwMTE6XHRcbjQwMTI6XHRcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xuNDAxMzpcdH1cbjQwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgUlBTIEZlYXR1cmUgQWZmaW5pdHkgaW4gTmV0L0NvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBoYW5kbGVzIExMQyAoTGluayBMYXllciBDb250cm9sKSBhZmZpbml0eS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIHVzdWFsLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdCDigJMgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IGZpbGUgZm9yIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvbnRyb2wgbWVjaGFuaXNtcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFJQUyBmZWF0dXJlIGFyZSBkZWZpbmVkLCByaWdodD8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgY29uZmlndXJlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgUlBTIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lc3NhZ2VfYnVyc3RcJiMzNDssXG4gNTQ2Olx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2bmV0X3JhdGVsaW1pdF9zdGF0ZS5idXJzdCxcbiA1NDc6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuIDU0ODpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gNTQ5Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlYyxcbiA1NTA6XHRcdH0sXG4gNTUxOlx0I2lmZGVmIENPTkZJR19SUFNcbiA1NTI6XHRcdHtcbiA1NTM6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3Jwc19zb2NrX2Zsb3dfZW50cmllc1wmIzM0OyxcbiA1NTQ6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuIDU1NTpcdFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gNTU2Olx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiA1NTc6XHRcdH0sXG4gNTU4Olx0XHR7XG4gNTU5Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHlcJiMzNDssXG4gNTYwOlx0XHRcdC5kYXRhXHRcdD0gXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSxcbiA1NjE6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSxcbiA1NjI6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIDU2MzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleVxuIDU2NDpcdFx0fSxcbiA1NjU6XHQjZW5kaWZcbiA1NjY6XHQjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG4gNTY3Olx0XHR7XG4gNTY4Olx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtmbG93X2xpbWl0X2NwdV9iaXRtYXBcJiMzNDssXG4gNTY5Olx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiA1NzA6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBmbG93X2xpbWl0X2NwdV9zeXNjdGxcbiA1NzE6XHRcdH0sXG4gNTcyOlx0XHR7XG4gNTczOlx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtmbG93X2xpbWl0X3RhYmxlX2xlblwmIzM0OyxcbiA1NzQ6XHRcdFx0LmRhdGFcdFx0PSBcdTAwMjZuZXRkZXZfZmxvd19saW1pdF90YWJsZV9sZW4sXG4gNTc1Olx0XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiA1NzY6XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuIDU3NzpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IGZsb3dfbGltaXRfdGFibGVfbGVuX3N5c2N0bFxuIDU3ODpcdFx0fSxcbiA1Nzk6XHQjZW5kaWYgLyogQ09ORklHX05FVF9GTE9XX0xJTUlUICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU1CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUlBTIEZ1enppbmcgU2NlbmFyaW8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBzeXNjdGxgIGludGVyZmFjZS4gV2hpbGUgdXN1YWxseSBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgIGhhbmRsZSB0aGVzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgaGVyZS4KCk5leHQsIEkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYFJQU2AgcmVsaWVzIG9uIGJvdGggYFNNUGAgKHN5bW1ldHJpYyBtdWx0aXByb2Nlc3NpbmcpIGFuZCBgU1lTRlNgIChzeXNmcyBmaWxlIHN5c3RlbSkuIFNvIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3M7IHRoZXJlZm9yZSwgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7UlBTJiMzNDssICYjMzQ7U01QJiMzNDssICYjMzQ7U1lTRlMmIzM0O11gLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogdGhlIGZvY3VzZWQgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IG5ld2x5IGFkZGVkIG9yIG1vZGlmaWVkIHN5bWJvbHMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBycHNfbGxjX2NoZWNrYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIGJvdGggYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFyZSBleHBvcnRlZCBmdW5jdGlvbnMsIGFsc28gaW4gdGhhdCBmaWxlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGEgc2lnbmlmaWNhbnQgY2hhbmdlIG9yIGFkZGl0aW9uIHRvIHRoZSBjb2RlLgoKR2l2ZW4gdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHJlbWVtYmVyaW5nIHRoZSBpbnN0cnVjdGlvbnMgSSByZWNlaXZlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgWyYjMzQ7cnBzX2xsY19jaGVjayYjMzQ7LCAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssICYjMzQ7c29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCYjMzQ7XWAuIEkga25vdyB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYDogYFsmIzM0O1JQUyYjMzQ7LCAmIzM0O1NNUCYjMzQ7LCAmIzM0O1NZU0ZTJiMzNDtdYC4gTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSByYXRpb25hbGUsIGV4cGxhaW4gd2hhdCB0aGVzZSBzeW1ib2xzIGRvLCBhbmQgY29ubmVjdCB0aGVtIHRvIHRoZSByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5IGNoZWNrIGZvciBSUFMvUkZTIGZsb3cgdXBkYXRlcyBjb250cm9sbGVkIHZpYSBhIG5ldyBzeXNjdGwgKG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSkuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0L3NvY2tldCByZWNlaXZlIHN0ZWVyaW5nIGxvZ2ljIGluIG5ldC9jb3JlL2Rldi5jIGFuZCBtb3ZlcyBzb2NrX3Jwc19yZWNvcmRfZmxvdy9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoIHRvIG5vbi1pbmxpbmUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JQUyYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtycHNfbGxjX2NoZWNrJiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93JiMzNDssCiAgICAmIzM0O3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMgKExhc3QgTGV2ZWwgQ2FjaGUpIGFmZmluaXR5IGNoZWNrIGZvciBSUFMvUkZTIGZsb3cgdXBkYXRlcyBjb250cm9sbGVkIHZpYSBhIG5ldyBzeXNjdGwgKG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eSkuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0L3NvY2tldCByZWNlaXZlIHN0ZWVyaW5nIGxvZ2ljIGluIG5ldC9jb3JlL2Rldi5jIGFuZCBtb3ZlcyBzb2NrX3Jwc19yZWNvcmRfZmxvdy9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoIHRvIG5vbi1pbmxpbmUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmgKaW5kZXggZTMzYzZhMmZhOGJiYy4uNmRhY2YwODg4YTZjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcnBzLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkOwogZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTsKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZQpAQCAtNTUsMTEgJiM0Mzs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7CiAKICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmYKIAomIzQzO2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpOwomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKQogewogCXVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggJmFtcDsgcnBzX3RhZ190b19tYXNrKHRhZ19wdHIpOwogCXUzMiB2YWwgPSBoYXNoICZhbXA7IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7CiAJc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlOwomIzQzOwl1MzIgb2xkX3ZhbDsKIAogCS8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi8KIAl2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTY4LDcgJiM0Mzs3Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaCkKIAkvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKCkKIAkgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS4KIAkgKi8KLQlpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbCkKJiM0MzsJb2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTsKJiM0MzsJaWYgKG9sZF92YWwgIT0gdmFsICZhbXA7JmFtcDsgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKQogCQlXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7CiB9CiAKQEAgLTEzNiwyNSAmIzQzOzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaCkKLXsKLSNpZmRlZiBDT05GSUdfUlBTCi0JaWYgKCFyZnNfaXNfbmVlZGVkKCkpCi0JCXJldHVybjsKLQotCV9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0jaWZkZWYgQ09ORklHX1JQUwotCWlmICghcmZzX2lzX25lZWRlZCgpKQotCQlyZXR1cm47Ci0KLQlfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spOwotI2VuZGlmCi19CiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpOwomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMzgzMzY4NThjMTY4Zi4uYjI3ODM5ZWI1OTRkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTUwNTIsNiAmIzQzOzUwNTIsOCBAQCBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHJwc19uZWVkZWQpOwogc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChyZnNfbmVlZGVkKTsKJiM0MztzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTsKJiM0MztFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7CiAKIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpCiB7CkBAIC01MjYzLDYgJiM0Mzs1MjY1LDQ4IEBAIHN0YXRpYyBpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gY3B1OwogfQogCiYjNDM7LyoqCiYjNDM7ICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC4KJiM0MzsgKiBAb2xkX3ZhbDogcHJldmlvdXMgZmxvdyByZWNvcmQgdmFsdWUuCiYjNDM7ICogQG5ld192YWw6IHRhcmdldCBmbG93IHJlY29yZCB2YWx1ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVjb3JkIG5lZWRzIGFuIHVwZGF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpCiYjNDM7ewomIzQzOwl1MzIgb2xkX2NwdSA9IG9sZF92YWwgJmFtcDsgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwl1MzIgbmV3X2NwdSA9IG5ld192YWwgJmFtcDsgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6CiYjNDM7CSAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LgomIzQzOwkgKgomIzQzOwkgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmcKJiM0MzsJICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50CiYjNDM7CSAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUmIzM5O3MgYXJmc19sb2NrKS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzdHJhdGVneSBvbmx5IHVwZGF0ZXMgdGhlIGZsb3cgcmVjb3JkIGlmIGl0IG1pZ3JhdGVzIGFjcm9zcyBMTEMKJiM0MzsJICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZwomIzQzOwkgKiBjYWNoZSBsb2NhbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtycHNfZmVhdF9sbGNfYWZmaW5pdHkpKSB7CiYjNDM7CQkvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi8KJiM0MzsJCWlmIChvbGRfY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9hY3RpdmUob2xkX2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50CiYjNDM7CQkgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwKIAogLyoqCkBAIC01MzE4LDYgJiM0Mzs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSkKIAogI2VuZGlmIC8qIENPTkZJR19SUFMgKi8KIAomIzQzO3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1JQUwomIzQzOwlpZiAoIXJmc19pc19uZWVkZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7CiYjNDM7CiYjNDM7dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUlBTCiYjNDM7CWlmICghcmZzX2lzX25lZWRlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlfc29ja19ycHNfcmVjb3JkX2Zsb3coc2spOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93KTsKJiM0MzsKIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqLwogc3RhdGljIHZvaWQgdHJpZ2dlcl9yeF9zb2Z0aXJxKHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IGViMzVkYTM1NTZmNGEuLjliNjcwMmY1ZWFiMTkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC0yMTAsNiAmIzQzOzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlrdmZyZWVfcmN1X21pZ2h0c2xlZXAodG9mcmVlKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwogI2VuZGlmIC8qIENPTkZJR19SUFMgKi8KIAogI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVApAQCAtNTU0LDYgJiM0Mzs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHJwc19zb2NrX2Zsb3dfc3lzY3RsCiAJfSwKJiM0MzsJewomIzQzOwkJLnByb2NuYW1lCT0gJiMzNDtycHNfZmVhdF9sbGNfYWZmaW5pdHkmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHJwc19mZWF0X2xsY19hZmZpbml0eS5rZXkpLAomIzQzOwkJLm1vZGUJCT0gMDY0NCwKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvX3N0YXRpY19rZXkKJiM0MzsJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVAogCXsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBSUFMgTExDIEFmZmluaXR5IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGZsYWcuIEZpcnN0LCBJJiMzOTtsbCBtZXRpY3Vsb3VzbHkgZ28gb3ZlciB0aGUgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLgoKTG9va2luZyBhdCBgaW5jbHVkZS9uZXQvcnBzLmhgLCBpdCBpbnRyb2R1Y2VzIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIGFuZCB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb2xkX3ZhbGAgaW4gYHJwc19yZWNvcmRfc29ja19mbG93YCBpcyByZWFkIHVzaW5nIGBSRUFEX09OQ0VgLCBhbmQgdGhlbiBwYXNzZWQgdG8gYHJwc19sbGNfY2hlY2tgIGJlZm9yZSBhbnkgd3JpdGVzLiBHb29kLCBzZWVtcyBzYWZlIG9uIHRoZSBzdXJmYWNlLiBBbHNvLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2VyZSBtb3ZlZCBmcm9tIHRoZSBoZWFkZXIgZmlsZSB0byBgbmV0L2NvcmUvZGV2LmNgLgoKTW92aW5nIG9uIHRvIGBuZXQvY29yZS9kZXYuY2AsIHdlIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBycHNfbGxjX2NoZWNrYC4gVGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGUgY2hlY2sgZXh0cmFjdHMgQ1BVIGFmZmluaXR5IGluZm9ybWF0aW9uIGJhc2VkIG9uIGEgQ1BVIG1hc2suIFRoZSB1c2Ugb2YgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2xkIENQVSBpcyBpbnZhbGlkIG9yIHRoZSBDUFVzIGRvbiYjMzk7dCBzaGFyZSB0aGUgc2FtZSBjYWNoZS4gVGhlIGBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2tgIGlzIGFsc28gd29ydGggYSBjbG9zZXIgbG9vayBpbiBvdGhlciBhcmVhcy4gVGhlIGZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYXJlIG5vdyBleHBvcnRlZC4KCkZpbmFsbHksIGluIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AsIHRoZSBwYXRjaCBhZGRzIGEgc3lzY3RsIGVudHJ5IGZvciBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB1c2luZyBgcHJvY19kb19zdGF0aWNfa2V5YC4gVGhpcyBpcyB3aGVyZSBteSBmb2N1cyBzaGFycGVucy4gVGhlIGJpZ2dlc3QgcmlzayBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJvY19kb19zdGF0aWNfa2V5YCBoYW5kbGVyIGlzIHNhZmUuIExldCBtZSBjaGVjayB0aGUgb3RoZXIgdXNhZ2VzIG9mIGBwcm9jX2RvX3N0YXRpY19rZXlgIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN0YW5kYXJkIHByYWN0aWNlcyBvciBwb3RlbnRpYWwgcmlza3MuCgpOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgbG9vayBmb3IgYW55IHJpc2tzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZT8gYHByb2NfZG9fc3RhdGljX2tleWAgcmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIGBycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5YC4gSXMgdGhpcyBhIHN0YW5kYXJkL3NhZmUgcHJhY3RpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19kb19zdGF0aWNfa2V5YCBpbml0aWFsaXplcyB0aGlzIGNvcnJlY3RseS4gSSB3aWxsIGRvIGEgcXVpY2sgZ3JlcCBvbiB0aGUgY29kZWJhc2UgZm9yIGBwcm9jX2RvX3N0YXRpY19rZXlgIHRvIGJlIGV4dHJhIHN1cmUuCgpBcyBmb3Igb3RoZXIgcG90ZW50aWFsIEtNU0FOIGZsYWdzIC0gYXJlIHRoZXJlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHJlYWRzPyBgcnBzX2xsY19jaGVja2Agb3BlcmF0ZXMgb24gc2NhbGFyIGB1MzJgIGFyZ3VtZW50cyB3aGljaCBhcmUgaW5pdGlhbGl6ZWQsIHNvIHRoYXQgaXMgbm90IGEgY29uY2Vybi4gVGhlIGBvbGRfdmFsYCBpcyBpbml0aWFsaXplZCBieSBgUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpYCBhbmQgYHZhbGAgaXMgaW5pdGlhbGl6ZWQgYnkgYml0d2lzZSBvcGVyYXRpb25zIHNvIHRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIHJlYWRzIG9uIHRoaXMgZnJvbnQuIEZ1cnRoZXJtb3JlLCB0aGUgZnVuY3Rpb25zIGRvbiYjMzk7dCBjb3B5IGhlYXAvc3RhY2sgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGJyYW5jaGVzIGVpdGhlci4gT3ZlcmFsbCwgaXQgKmFwcGVhcnMqIHNhZmUsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYHByb2NfZG9fc3RhdGljX2tleWAgdXNhZ2VzIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZG9fc3RhdGljX2tleSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2N0bC5oPTk3PWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtOTgtXHRcdFx0IHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTtcbmluY2x1ZGUvbGludXgvc3lzY3RsLmg6OTk6aW50IHByb2NfZG9fc3RhdGljX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTAwLVx0XHQgICAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMzYxPWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTM2OS0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKVxua2VybmVsL3N5c2N0bC5jOjEzNzA6aW50IHByb2NfZG9fc3RhdGljX2tleShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy0xMzcxLVx0XHQgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5saWIvYWxsb2NfdGFnLmM9OTM1PUVYUE9SVF9TWU1CT0wocGFnZV9hbGxvY190YWdnaW5nX29wcyk7XG4tLVxubGliL2FsbG9jX3RhZy5jLTkzOC0vKlxubGliL2FsbG9jX3RhZy5jOjkzOTogKiBOb3QgdXNpbmcgcHJvY19kb19zdGF0aWNfa2V5KCkgZGlyZWN0bHkgdG8gcHJldmVudCBlbmFibGluZyBwcm9maWxpbmdcbmxpYi9hbGxvY190YWcuYy05NDAtICogYWZ0ZXIgaXQgd2FzIHNodXQgZG93bi5cbi0tXG5saWIvYWxsb2NfdGFnLmM9OTQyPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5saWIvYWxsb2NfdGFnLmMtOTYxLVxubGliL2FsbG9jX3RhZy5jOjk2MjpcdHJldHVybiBwcm9jX2RvX3N0YXRpY19rZXkodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubGliL2FsbG9jX3RhZy5jLTk2My19XG4tLVxubW0vYWxsb2NfdGFnLmM9MTI2OD1FWFBPUlRfU1lNQk9MKHBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTEyNzEtLypcbm1tL2FsbG9jX3RhZy5jOjEyNzI6ICogTm90IHVzaW5nIHByb2NfZG9fc3RhdGljX2tleSgpIGRpcmVjdGx5IHRvIHByZXZlbnQgZW5hYmxpbmcgcHJvZmlsaW5nXG5tbS9hbGxvY190YWcuYy0xMjczLSAqIGFmdGVyIGl0IHdhcyBzaHV0IGRvd24uXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI3NT1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI5NC1cbm1tL2FsbG9jX3RhZy5jOjEyOTU6XHRyZXR1cm4gcHJvY19kb19zdGF0aWNfa2V5KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbm1tL2FsbG9jX3RhZy5jLTEyOTYtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTEyOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2FsbG9jYXRpb25fcHJvZmlsaW5nX3N5c2N0bHNbXSA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy0xMzA5LVx0XHQubW9kZVx0XHQ9IDA0NDQsXG5tbS9hbGxvY190YWcuYzoxMzEwOlx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcbm1tL2FsbG9jX3RhZy5jLTEzMTEtXHR9LFxuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTQzMT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU2Mi1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTYzOlx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9fc3RhdGljX2tleVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTY0LVx0fSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NTktXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjY2MDpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXksXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NjEtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIENQVSBDYWNoZSBTaGFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KWAuIEkmIzM5O3ZlIGdvdCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY2FjaGUgdG9wb2xvZ3kgaGVyZS4gV2hhdCBhbSBJIHJlYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dD8gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgbW92aW5nIGZyb20gYG9sZF9jcHVgIHRvIGBuZXdfY3B1YCBoYXMgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSByYW1pZmljYXRpb25zIHN0ZW1taW5nIGZyb20gY2FjaGUgY29udGVudGlvbiwgb3IgY2FjaGUgYWZmaW5pdHkgaXNzdWVzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gaXMgaXQgYXMgc2ltcGxlIGFzIGNoZWNraW5nIHdoZXRoZXIgdGhleSYjMzk7cmUgb24gdGhlIHNhbWUgTlVNQSBub2RlIGFuZCBzaGFyZSB0aGUgc2FtZSBsZXZlbHMgb2YgY2FjaGU/IE9yIGlzIGl0IG1vcmUgY29tcGxleCwgaW52b2x2aW5nIHNvbWUga2luZCBvZiBudWFuY2VkIGFuYWx5c2lzIG9mIGNhY2hlIGhpZXJhcmNoeSBhbmQgY29oZXJlbmNlIGRvbWFpbnM/IEkmIzM5O3ZlIGdvdCB0byByZW1lbWJlciB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIGh5cGVydGhyZWFkaW5nIHRvby4gRG9lcyB0aGlzIGZ1bmN0aW9uIGFjY291bnQgZm9yIHRoYXQsIG9yIGlzIGl0IGFic3RyYWN0ZWQgYXdheSBhdCBhIGxvd2VyIGxldmVsPyBBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gc2VlIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkgc3VzcGVjdCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21ldGhpbmcgbGlrZSBDUFUgaG90cGx1Z2dpbmcsIG9yIG1heWJlIGV2ZW4gdGFzayBtaWdyYXRpb24uIEtub3dpbmcgdGhhdCBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgc2V2ZXJpdHkgb2YgYW55IHBvdGVudGlhbCBjYWNoZS1yZWxhdGVkIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcHVzX3NoYXJlX2NhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tcS5jPTEyNDE9c3RhdGljIGlubGluZSBib29sIGJsa19tcV9jb21wbGV0ZV9uZWVkX2lwaShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTI1OS1cdCAgICAoIXRlc3RfYml0KFFVRVVFX0ZMQUdfU0FNRV9GT1JDRSwgXHUwMDI2cnEtXHUwMDNlcS1cdTAwM2VxdWV1ZV9mbGFncykgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstbXEuYzoxMjYwOlx0ICAgICBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcnEtXHUwMDNlbXFfY3R4LVx1MDAzZWNwdSkgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstbXEuYy0xMjYxLVx0ICAgICBjcHVzX2VxdWFsX2NhcGFjaXR5KGNwdSwgcnEtXHUwMDNlbXFfY3R4LVx1MDAzZWNwdSkpKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yMDI9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaDoyMDM6Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yMDQtYm9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0zOTg0PWJvb2wgY3B1c19lcXVhbF9jYXBhY2l0eShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTQtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjM5OTU6Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk2LXtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQwMTU9c3RhdGljIGlubGluZSBib29sIHR0d3VfcXVldWVfY29uZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQyLVx0ICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQwNDM6XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIGNwdSkpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQwNDQtXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTQ1OD1zMzIgc2N4X3NlbGVjdF9jcHVfZGZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgczMyIHByZXZfY3B1LCB1NjQgd2FrZV9mbGFncyxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy01MzMtXHRcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jOjUzNDpcdFx0aWYgKGlzX3ByZXZfYWxsb3dlZCBcdTAwMjZcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShjcHUsIHByZXZfY3B1KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzNS1cdFx0ICAgIHNjeF9pZGxlX3Rlc3RfYW5kX2NsZWFyX2NwdShwcmV2X2NwdSkpIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgzNTA9d2FrZV9hZmZpbmVfaWRsZShpbnQgdGhpc19jcHUsIGludCBwcmV2X2NwdSwgaW50IHN5bmMpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzYzLVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjgzNjQ6XHRpZiAoYXZhaWxhYmxlX2lkbGVfY3B1KHRoaXNfY3B1KSBcdTAwMjZcdTAwMjYgY3B1c19zaGFyZV9jYWNoZSh0aGlzX2NwdSwgcHJldl9jcHUpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzY1LVx0XHRyZXR1cm4gYXZhaWxhYmxlX2lkbGVfY3B1KHByZXZfY3B1KSA/IHByZXZfY3B1IDogdGhpc19jcHU7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz04OTQ5PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfc2libGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2LCBpbnQgdGFyZ2V0KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk3OC1cdCAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4OTc5Olx0aWYgKHByZXYgIT0gdGFyZ2V0IFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTg5ODAtXHQgICAgY2hvb3NlX2lkbGVfY3B1KHByZXYsIHApIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTAxMC1cdCAgICByZWNlbnRfdXNlZF9jcHUgIT0gdGFyZ2V0IFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDExOlx0ICAgIGNwdXNfc2hhcmVfY2FjaGUocmVjZW50X3VzZWRfY3B1LCB0YXJnZXQpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEyLVx0ICAgIGNob29zZV9pZGxlX2NwdShyZWNlbnRfdXNlZF9jcHUsIHApIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTA1MC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTA1MTpcdFx0aWYgKCFoYXNfaWRsZV9jb3JlIFx1MDAyNlx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTA1Mi1cdFx0XHRpID0gc2VsZWN0X2lkbGVfc210KHAsIHNkLCBwcmV2KTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNjk4PXN0YXRpYyBlbnVtIGxsY19taWcgY2FuX21pZ3JhdGVfbGxjX3Rhc2soaW50IHNyY19jcHUsIGludCBkc3RfY3B1LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MDktXHRjcHUgPSBSRUFEX09OQ0UobW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcxMDpcdGlmIChjcHUgXHUwMDNjIDAgfHwgY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBkc3RfY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MTEtXHRcdHJldHVybiBtaWdfdW5yZXN0cmljdGVkO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjAtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzIxOlx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZHN0X2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjItXHRcdHRvX3ByZWYgPSB0cnVlO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMzpcdGVsc2UgaWYgKGNwdXNfc2hhcmVfY2FjaGUoc3JjX2NwdSwgY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjQtXHRcdHRvX3ByZWYgPSBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzQxPWFsYl9icmVha19sbGMoc3RydWN0IGxiX2VudiAqZW52KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDUtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzQ2Olx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZW52LVx1MDAzZXNyY19jcHUsIGVudi1cdTAwM2Vkc3RfY3B1KSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02NjA9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW5zKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3Mi0gKiBvZiB0aGUgZG9tYWluKSwgdGhpcyBhbGxvd3MgdXMgdG8gcXVpY2tseSB0ZWxsIGlmIHR3byBDUFVzIGFyZSBpbiB0aGUgc2FtZVxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjczOiAqIGNhY2hlIGRvbWFpbiwgc2VlIGNwdXNfc2hhcmVfY2FjaGUoKS5cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3NC0gKi9cbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODUzOT1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHModm9pZClcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2MS0vKlxua2VybmVsL3dvcmtxdWV1ZS5jOjg1NjI6ICogY3B1c19zaGFyZV9jYWNoZV9zaGFyZCAtIHRlc3Qgd2hldGhlciB0d28gQ1BVcyBiZWxvbmcgdG8gdGhlIHNhbWUgY2FjaGUgc2hhcmRcbmtlcm5lbC93b3JrcXVldWUuYy04NTYzLSAqXG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjYtICovXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2NzpzdGF0aWMgYm9vbCBfX2luaXQgY3B1c19zaGFyZV9jYWNoZV9zaGFyZChpbnQgY3B1MCwgaW50IGNwdTEpXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2OC17XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2OTpcdGlmICghY3B1c19zaGFyZV9jYWNoZShjcHUwLCBjcHUxKSlcbmtlcm5lbC93b3JrcXVldWUuYy04NTcwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTg1ODI9dm9pZCBfX2luaXQgd29ya3F1ZXVlX2luaXRfdG9wb2xvZ3kodm9pZClcbi0tXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU4OC1cdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fU01UXSwgY3B1c19zaGFyZV9zbXQpO1xua2VybmVsL3dvcmtxdWV1ZS5jOjg1ODk6XHRpbml0X3BvZF90eXBlKFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX0NBQ0hFXSwgY3B1c19zaGFyZV9jYWNoZSk7XG5rZXJuZWwvd29ya3F1ZXVlLmMtODU5MC1cdHByZWNvbXB1dGVfY2FjaGVfc2hhcmRfaWRzKCk7XG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU5MTpcdGluaXRfcG9kX3R5cGUoXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVfU0hBUkRdLCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKTtcbmtlcm5lbC93b3JrcXVldWUuYy04NTkyLVx0aW5pdF9wb2RfdHlwZShcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9OVU1BXSwgY3B1c19zaGFyZV9udW1hKTtcbi0tXG5uZXQvY29yZS9kZXYuYz01Mjc1PWJvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMwMC1cdFx0ICovXG5uZXQvY29yZS9kZXYuYzo1MzAxOlx0XHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXG5uZXQvY29yZS9kZXYuYy01MzAyLVx0XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBDUFUgY2FjaGUgc2hhcmluZywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYGtlcm5lbC9zY2hlZC9jb3JlLmNgIGlzIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYGNwdXNfc2hhcmVfY2FjaGVgLiBUaGF0IG5hbWUgaXMgcHJldHR5IGluZGljYXRpdmUgb2Ygd2hhdCB3ZSYjMzk7cmUgYWZ0ZXIsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGVyZSB0ZWxscyB1cyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcmVsYXRpb25zaGlwIGJldHdlZW4gQ1BVcyBhbmQgdGhlaXIgY2FjaGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIHZpZXdzIGFuZCBtYW5hZ2VzIGNhY2hlIHNoYXJpbmcgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIG1vZGVybiBtdWx0aS1jb3JlIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgdGhlIGtlcm5lbCByZWFzb25zIGFib3V0IGl0IHdoZW4gbWFraW5nIHNjaGVkdWxpbmcgZGVjaXNpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkYXRhIHN0cnVjdHVyZXMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgbG9naWMgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IENQVXMgYXJlIHNoYXJpbmcgYSBjYWNoZSBhdCBhbnkgZ2l2ZW4gbW9tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5OTA6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTkxOlx0XG4zOTkyOlx0XHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcbjM5OTM6XHR9XG4zOTk0Olx0XG4zOTk1Olx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxuMzk5NjpcdHtcbjM5OTc6XHRcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcbjM5OTg6XHRcdFx0cmV0dXJuIHRydWU7XG4zOTk5Olx0XG40MDAwOlx0XHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xuNDAwMTpcdH1cbjQwMDI6XHRcbjQwMDM6XHQvKlxuNDAwNDpcdCAqIFdoZXRoZXIgQ1BVcyBhcmUgc2hhcmUgY2FjaGUgcmVzb3VyY2VzLCB3aGljaCBtZWFucyBMTEMgb24gbm9uLWNsdXN0ZXJcbjQwMDU6XHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxuNDAwNjpcdCAqL1xuNDAwNzpcdGJvb2wgY3B1c19zaGFyZV9yZXNvdXJjZXMoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXG40MDA4Olx0e1xuNDAwOTpcdFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxuNDAxMDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQwMTE6XHRcbjQwMTI6XHRcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xuNDAxMzpcdH1cbjQwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFJQUyBGbG93IFJlY29yZGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFJQUyBmbG93IHJlY29yZGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5LCB0aGUgYHJwc19yZWNvcmRfc29ja19mbG93YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvcnBzLmhgLiBMZXQmIzM5O3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGFyZ3VtZW50cywgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIGdpdmVuIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIGZsb3cgY29udGV4dHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJQUyBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvciByZWxhdGVkIHRvIGZsb3cgYWZmaW5pdHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBzb2NrZXRzIGFuZCB3aGV0aGVyIGl0IGNvcnJlY3RseSBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIG9mZmxvYWQgY29uZmlndXJhdGlvbnMuIEdvdHRhIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIHByb3Blcmx5IGFjY291bnRlZCBmb3IgZnJvbSBhIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IHBlcnNwZWN0aXZlIHRvby4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcnBzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU1Olx0fTtcbiAgNTY6XHRcbiAgNTc6XHQjZGVmaW5lIFJQU19OT19DUFUgMHhmZmZmXG4gIDU4Olx0XG4gIDU5Olx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxuICA2MjpcdHtcbiAgNjM6XHRcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcbiAgNjQ6XHRcdHUzMiB2YWwgPSBoYXNoIFx1MDAyNiB+bmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuICA2NTpcdFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xuICA2NjpcdFx0dTMyIG9sZF92YWw7XG4gIDY3Olx0XG4gIDY4Olx0XHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXG4gIDY5Olx0XHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAgNzA6XHRcbiAgNzE6XHRcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcbiAgNzI6XHRcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxuICA3MzpcdFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXG4gIDc0Olx0XHQgKi9cbiAgNzU6XHRcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4gIDc2Olx0XHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiAgNzc6XHRcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcbiAgODE6XHR7XG4gIDgyOlx0XHRycHNfdGFnX3B0ciB0YWdfcHRyO1xuICA4MzpcdFxuICA4NDpcdFx0aWYgKCFoYXNoKVxuICA4NTpcdFx0XHRyZXR1cm47XG4gIDg2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDg3Olx0XHR0YWdfcHRyID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnJwc19zb2NrX2Zsb3dfdGFibGUpO1xuICA4ODpcdFx0aWYgKHRhZ19wdHIpXG4gIDg5Olx0XHRcdHJwc19yZWNvcmRfc29ja19mbG93KHRhZ19wdHIsIGhhc2gpO1xuICA5MDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gIDkxOlx0fVxuICA5MjpcdFxuICA5MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuICA5NDpcdHtcbiAgOTU6XHRcdC8qIFJlYWRpbmcgc2stXHUwMDNlc2tfcnhoYXNoIG1pZ2h0IGluY3VyIGFuIGV4cGVuc2l2ZSBjYWNoZSBsaW5lXG4gIDk2Olx0XHQgKiBtaXNzLlxuICA5NzpcdFx0ICpcbiAgOTg6XHRcdCAqIFRDUF9FU1RBQkxJU0hFRCBkb2VzIGNvdmVyIGFsbW9zdCBhbGwgc3RhdGVzIHdoZXJlIFJGU1xuICA5OTpcdFx0ICogbWlnaHQgYmUgdXNlZnVsLCBhbmQgaXMgY2hlYXBlciBbMV0gdGhhbiB0ZXN0aW5nIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTMKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gb3B0aW1pemluZyBSRlMvQVJGUyBmbG93IHVwZGF0ZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYSBjaGVjayBmb3IgTExDIGFmZmluaXR5IChgcnBzX2xsY19jaGVja2ApLiBUaGF0JiMzOTtzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIHdoaWNoIGlzIGdvb2QuIFdlIGFsc28gc2VlIGEgbmV3IHN5c2N0bCBib29sZWFuIGtub2IgYmVpbmcgaW50cm9kdWNlZCwgYHJwc19mZWF0X2xsY19hZmZpbml0eWAuIEludGVyZXN0aW5nLgoKTm93LCBJIHNlZSB0aGUgaW5saW5lZCBmdW5jdGlvbnMgYHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFyZSBiZWluZyBtb3ZlZC4gVGhpcyBpcyB1c3VhbGx5IHRvIG1ha2UgdGhlbSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE5vdGhpbmcgaW5oZXJlbnRseSBkYW5nZXJvdXMsIGJ1dCB3ZSBhbHdheXMgaGF2ZSB0byBiZSBjYXJlZnVsIGFib3V0IHdoZXJlIHRoZXkgYXJlIG1vdmVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uczogVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE5vcGUsIHRoYW5rZnVsbHkuIFBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSBvciBhY3Jvc3Mga2VybmVsIGJvdW5kYXJpZXM/IE5vIGlzc3VlcyB0aGVyZSBlaXRoZXIuIEJ1ZmZlciBzaXplcywgYWxsb2NhdGlvbnMsIHN0cnVjdCBsYXlvdXRzPyBObyBjaGFuZ2VzLCB3aGljaCBpcyBhIHJlbGllZi4gTm8gbmV3IHN0YWNrIGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHN0YW5kYXJkIG1lbW9yeSBzYW5pdGl6ZXJzIOKAkyBLQVNBTiwgTE9DS0RFUCwgVUJTQU4g4oCTIHBsdXMgdGhlIHN0YW5kYXJkIHRlc3RpbmcgcmVnaW1lIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlIGFyZSBubyBvYnZpb3VzIHJlZCBmbGFncyB0aGF0IHdvdWxkIGp1c3RpZnkgaW52b2tpbmcgS01TQU4gZm9yIHRoaXMuIFdlIGFyZW4mIzM5O3QgZGVhbGluZyB3aXRoIGFueSBvZiB0aGUgc3VidGxlLCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHVuY292ZXIuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gc2FmZWx5IG1vdmUgZm9yd2FyZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBLTVNBTiBzY2FuIGZvciB0aGlzIHBhdGNoLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGlzIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZCwgZXhwbGFpbmluZyBleGFjdGx5IHdoeSB3ZSBhcmUgY29uZmlkZW50IGluIHJlbHlpbmcgb24gZXhpc3RpbmcgdG9vbHMgYW5kIHRlc3RpbmcuIFRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxuXG5BbGwgb3BlcmF0aW9ucyBpbiB0aGlzIHBhdGNoIHdvcmsgd2l0aCBzY2FsYXIgdmFsdWVzICh1MzIgaGFzaC9jcHUgSURzKSBhbmQgc3RhdGljIGtleXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQy1hZmZpbml0eS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC8gUmVjZWl2ZSBGbG93IFN0ZWVyaW5nIChSRlMpIGZsb3cgdGFibGUgdXBkYXRlcywgYWRkcyBhIGNvcnJlc3BvbmRpbmcgc3lzY3RsIGVudHJ5IChycHNfZmVhdF9sbGNfYWZmaW5pdHkpIGhhbmRsZWQgYnkgcHJvY19kb19zdGF0aWNfa2V5LCBhbmQgb3V0LW9mLWxpbmVzL2V4cG9ydHMgc29ja19ycHNfcmVjb3JkX2Zsb3d7LF9oYXNofS5cblxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNTo1MC42NDYyNjEwMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM2MzQ5MDM5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUlBTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnBzX2xsY19jaGVja1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgICBcInNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDU6NTAuNjQ2MjY2NDYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY1MTA1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTQ6MDU6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnBzLmggYi9pbmNsdWRlL25ldC9ycHMuaFxcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcnBzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ycHMuaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZDtcXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuK2V4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHk7XFxuIFxcbiAvKlxcbiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGVcXG5AQCAtNTUsMTEgKzU2LDE0IEBAIHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gXFxuICNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gXFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbitcXHR1MzIgb2xkX3ZhbDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBDUFUgdW5kZXIgdXMgKi9cXG4gXFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuQEAgLTY4LDcgKzcyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG4gXFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcXG4rXFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4rXFx0aWYgKG9sZF92YWwgIT0gdmFsIFxcdTAwMjZcXHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcXG4gXFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiB9XFxuIFxcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbi17XFxuLSNpZmRlZiBDT05GSUdfUlBTXFxuLVxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChoYXNoKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLXtcXG4tI2lmZGVmIENPTkZJR19SUFNcXG4tXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuLSNlbmRpZlxcbi19XFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX2RlbGV0ZV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggMzgzMzY4NThjMTY4Zi4uYjI3ODM5ZWI1OTRkNiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTUwNTIsNiArNTA1Miw4IEBAIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG4gRVhQT1JUX1NZTUJPTChycHNfbmVlZGVkKTtcXG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xcbiBFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbitzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfZmVhdF9sbGNfYWZmaW5pdHkgX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xcbiBcXG4gc3RhdGljIHUzMiByZnNfc2xvdCh1MzIgaGFzaCwgcnBzX3RhZ19wdHIgdGFnX3B0cilcXG4ge1xcbkBAIC01MjYzLDYgKzUyNjUsNDggQEAgc3RhdGljIGludCBnZXRfcnBzX2NwdShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gY3B1O1xcbiB9XFxuIFxcbisvKipcXG4rICogcnBzX2xsY19jaGVjayAtIGRldGVybWluZSBpZiBSUFMgZmxvdyB0YWJsZSBzaG91bGQgYmUgdXBkYXRlZC5cXG4rICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpXFxuK3tcXG4rXFx0dTMyIG9sZF9jcHUgPSBvbGRfdmFsIFxcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xcbitcXHR1MzIgbmV3X2NwdSA9IG5ld192YWwgXFx1MDAyNiBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSUFMgTExDIEFmZmluaXR5IEZlYXR1cmU6XFxuK1xcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxcbitcXHQgKlxcbitcXHQgKiBGcmVxdWVudCBmbG93IHRhYmxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgY29uc3RhbnQgaGFyZHdhcmUgc3RlZXJpbmdcXG4rXFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XFxuK1xcdCAqIGNvbnRlbnRpb24gb24gZHJpdmVyIGludGVybmFsIGxvY2tzIChsaWtlIG1seDUncyBhcmZzX2xvY2spLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xcbitcXHQgKiBib3VuZGFyaWVzLiBUaGlzIG1pbmltaXplcyBleHBlbnNpdmUgaGFyZHdhcmUgdXBkYXRlcyB3aGlsZSBwcmVzZXJ2aW5nXFxuK1xcdCAqIGNhY2hlIGxvY2FsaXR5IGZvciB0aGUgYXBwbGljYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xcbitcXHRcXHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cXG4rXFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbiBcXG4gLyoqXFxuQEAgLTUzMTgsNiArNTM2MiwyOCBAQCBzdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiBcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xcbisjZW5kaWZcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xcbitcXG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19SUFNcXG4rXFx0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbitcXG4gLyogQ2FsbGVkIGZyb20gaGFyZGlycSAoSVBJKSBjb250ZXh0ICovXFxuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXFxuKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gXFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKHRvZnJlZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuICNlbmRpZiAvKiBDT05GSUdfUlBTICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXFxuQEAgLTU1NCw2ICs1NTUsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4gXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicnBzX2ZlYXRfbGxjX2FmZmluaXR5XFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5LFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvX3N0YXRpY19rZXlcXG4rXFx0fSxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfTkVUX0ZMT1dfTElNSVRcXG4gXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNTo1MS4xNDM0Nzc4MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMTU4OTI3MDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4rZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiBcbiAvKlxuICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuQEAgLTU1LDExICs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoIFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XG4gXHR1MzIgdmFsID0gaGFzaCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiBcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbitcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyArNzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4gXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcbiBcdCAqIGhlcmUsIGFuZCBhbm90aGVyIG9uZSBpbiBnZXRfcnBzX2NwdSgpLlxuIFx0ICovXG4tXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcbitcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4rXHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbi0jZW5kaWZcbi19XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7XG4rc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiArNTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY3B1O1xuIH1cbiBcbisvKipcbisgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuKyAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbit7XG4rXHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuK1xuK1x0LypcbitcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbitcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuK1x0ICpcbitcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuK1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4rXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cbitcdCAqXG4rXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xuK1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuK1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuK1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbitcdFx0aWYgKG9sZF9jcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbitcdFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cbitcdFx0ICovXG4rXHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTMxOCw2ICs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xuK1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuK1xuIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqL1xuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgKzU1NSwxMyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiBcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbitcdH0sXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxuIFx0e1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDU6NTEuMTQzNDc5Mjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyMjM5ODk4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gUlBTIGFuZCBMTEMgQWZmaW5pdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSByZWZpbmVtZW50cyB0byBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eS4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBwb2ludCB1cyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uOiB3ZSdyZSB0b3VjaGluZyBgcnBzLmhgLCBgZGV2LmNgLCBhbmQgYHN5c2N0bF9uZXRfY29yZS5jYC4gVGhpcyBpcyBhbGwgY2xhc3NpYyBSUFMgdGVycml0b3J5LlxuXG5TbywgdGhlIG1lYXQgb2YgaXQ6IHdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IHN5c2N0bCwgYG5ldC5jb3JlLnJwc19mZWF0X2xsY19hZmZpbml0eWAsIHdoaWNoIGlzIGtleS4gVGhpcyBsaWtlbHkgYWxsb3dzIHVzIHRvIGR5bmFtaWNhbGx5IGNvbnRyb2wgdGhlIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHN0YXRpYyBrZXksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIGdpdmluZyB1cyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGhvdyBSUFMgaW50ZXJhY3RzIHdpdGggdGhlIENQVSBjYWNoZS4gVGhlIGBycHNfcmVjb3JkX3NvY2tfZmxvd2AgZnVuY3Rpb24gbm93IGNhbGxzIGBycHNfbGxjX2NoZWNrYCwgd2hpY2ggaXMgc21hcnQ7IGl0IHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGF0dGVtcHRpbmcgdG8gb3B0aW1pemUgY2FjaGUgbG9jYWxpdHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBycHNfbGxjX2NoZWNrYCBpbiBgZGV2LmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZy5cblxuVGhlIG1vdmVtZW50IG9mIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBmcm9tIGlubGluZXMgaW4gYHJwcy5oYCB0byBleHBvcnRlZCBzeW1ib2xzIGluIGBkZXYuY2AgYWxzbyBjYXRjaGVzIG15IGV5ZS4gVGhpcyBoaW50cyBhdCBzb21lIHNvcnQgb2YgaW50ZXJuYWwgcmVzdHJ1Y3R1cmluZywgcG90ZW50aWFsbHkgZm9yIGNvZGUgcmV1c2Ugb3IgbW9yZSByb2J1c3QgbW9kdWxlIGludGVncmF0aW9uLiBUaGF0J3MgZ29vZCBwcmFjdGljZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgKnVzaW5nKiB0aGVzZSBleHBvcnRlZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBDT05GSUdgIG9wdGlvbnMuIFRoaXMgcGF0Y2ggY2xlYXJseSBhZmZlY3RzIFJQUyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBzZXR0aW5ncy4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDMsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjoyNy4zNjc0NzExOTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2Mjk5Nzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI5Mz1jb25maWcgTUFYX1NLQl9GUkFHU1xcbi0tXFxubmV0L0tjb25maWctMzA0LVxcbm5ldC9LY29uZmlnOjMwNTpjb25maWcgUlBTXFxubmV0L0tjb25maWctMzA2LVxcdGJvb2wgXFxcIlJlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjoyOS4yMzA0NzYzNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc1NzA3NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCB0aGF0IHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uLCBwcmVzdW1hYmx5IGZvciBhIG5ldHdvcmstcmVsYXRlZCBmZWF0dXJlIG9yIG1vZHVsZS4gVGhlIEtjb25maWcgc3ludGF4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBhIHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFuZCBxdWlja2x5IHplcm8gaW4gb24gYW55IHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbnN0cmFpbnRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBwcm92aWRlcyB0aGUgY2x1ZXMgSSBuZWVkIHRvIGRlYnVnIG9yIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYmVoYXZpb3IuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA2OjQ1Ljk4NzU1NDAyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHQgIGxlZ2FjeSBkcml2ZXJzLlxcbiAzMDE6XFx0XFx0ICBUaGlzIGFsc28gaW5jcmVhc2VzIG1lbW9yeSBvdmVyaGVhZCBvZiBzbWFsbCBwYWNrZXRzLFxcbiAzMDI6XFx0XFx0ICBhbmQgaW4gZHJpdmVycyB1c2luZyBidWlsZF9za2IoKS5cXG4gMzAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgMTcuXFxuIDMwNDpcXHRcXG4gMzA1OlxcdGNvbmZpZyBSUFNcXG4gMzA2OlxcdFxcdGJvb2wgXFxcIlJlY2VpdmUgcGFja2V0IHN0ZWVyaW5nXFxcIlxcbiAzMDc6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gMzA4OlxcdFxcdGRlZmF1bHQgeVxcbiAzMDk6XFx0XFx0aGVscFxcbiAzMTA6XFx0XFx0ICBTb2Z0d2FyZSByZWNlaXZlIHNpZGUgcGFja2V0IHN0ZWVyaW5nIChSUFMpIGRpc3RyaWJ1dGVzIHRoZVxcbiAzMTE6XFx0XFx0ICBsb2FkIG9mIHJlY2VpdmVkIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcyBtdWx0aXBsZSBDUFVzLlxcbiAzMTI6XFx0XFxuIDMxMzpcXHRjb25maWcgUkZTX0FDQ0VMXFxuIDMxNDpcXHRcXHRib29sIFxcXCJIYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgUkZTXFxcIlxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzE2OlxcdFxcdHNlbGVjdCBDUFVfUk1BUFxcbiAzMTc6XFx0XFx0ZGVmYXVsdCB5XFxuIDMxODpcXHRcXHRoZWxwXFxuIDMxOTpcXHRcXHQgIEFsbG93aW5nIGRyaXZlcnMgZm9yIG11bHRpcXVldWUgaGFyZHdhcmUgd2l0aCBmbG93IGZpbHRlciB0YWJsZXMgdG9cXG4gMzIwOlxcdFxcdCAgYWNjZWxlcmF0ZSBSRlMuXFxuIDMyMTpcXHRcXG4gMzIyOlxcdGNvbmZpZyBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gMzIzOlxcdFxcdGJvb2xcXG4gMzI0OlxcdFxcbiAzMjU6XFx0Y29uZmlnIFhQU1xcbiAzMjY6XFx0XFx0Ym9vbFxcbiAzMjc6XFx0XFx0ZGVwZW5kcyBvbiBTTVBcXG4gMzI4OlxcdFxcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gMzI5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNjo0NS45ODc2NDc2OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTA2NTQ0MzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJQUyBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAoUlBTKSBpcyBiZWluZyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGNoZWNrLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIOKAkyBgbmV0L2NvcmUvZGV2LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBgcnBzX2xsY19jaGVja2AuIFRoaXMgaXMgd2hlcmUgdGhlIGxvd2VyLWxldmVsIGRlY2lzaW9ucyBhYm91dCB3aGVyZSB0byBzdGVlciBpbmNvbWluZyBwYWNrZXRzIGJhc2VkIG9uIHRoZWlyIExMQyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgbWFkZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgYW5kIHdoYXQgaXRzIGNvbnRyb2wgZmxvdyBpcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJQUyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBFdGhlcm5ldCBoZWFkZXIgcHJvY2Vzc2luZyBhdCB0aGlzIHN0YWdlLCBhbmQgd2hhdCB0aGUgY3JpdGVyaWEgYXJlIGZvciBkaXJlY3RpbmcgcGFja2V0cyB0byBzcGVjaWZpYyBDUFVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdHJhZmZpYyBpcyBiZWluZyBkaXN0cmlidXRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGUgTExDIGNoZWNrIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDc6MjcuMDUzMDkzNTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjUyNjE6XFx0XFx0XFx0fVxcbjUyNjI6XFx0XFx0fVxcbjUyNjM6XFx0XFxuNTI2NDpcXHRkb25lOlxcbjUyNjU6XFx0XFx0cmV0dXJuIGNwdTtcXG41MjY2OlxcdH1cXG41MjY3OlxcdFxcbjUyNjg6XFx0LyoqXFxuNTI2OTpcXHQgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxcbjUyNzA6XFx0ICogQG9sZF92YWw6IHByZXZpb3VzIGZsb3cgcmVjb3JkIHZhbHVlLlxcbjUyNzE6XFx0ICogQG5ld192YWw6IHRhcmdldCBmbG93IHJlY29yZCB2YWx1ZS5cXG41MjcyOlxcdCAqXFxuNTI3MzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlY29yZCBuZWVkcyBhbiB1cGRhdGUsIGZhbHNlIG90aGVyd2lzZS5cXG41Mjc0OlxcdCAqL1xcbjUyNzU6XFx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG41Mjc2OlxcdHtcXG41Mjc3OlxcdFxcdHUzMiBvbGRfY3B1ID0gb2xkX3ZhbCBcXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG41Mjc4OlxcdFxcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG41Mjc5OlxcdFxcbjUyODA6XFx0XFx0LypcXG41MjgxOlxcdFxcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcXG41MjgyOlxcdFxcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxcbjUyODM6XFx0XFx0ICpcXG41Mjg0OlxcdFxcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xcbjUyODU6XFx0XFx0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XFxuNTI4NjpcXHRcXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cXG41Mjg3OlxcdFxcdCAqXFxuNTI4ODpcXHRcXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xcbjUyODk6XFx0XFx0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xcbjUyOTA6XFx0XFx0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cXG41MjkxOlxcdFxcdCAqL1xcbjUyOTI6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eSkpIHtcXG41MjkzOlxcdFxcdFxcdC8qIEZvcmNlIHVwZGF0ZSBpZiB0aGUgcmVjb3JkZWQgQ1BVIGlzIGludmFsaWQgb3IgaGFzIGdvbmUgb2ZmbGluZSAqL1xcbjUyOTQ6XFx0XFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X2FjdGl2ZShvbGRfY3B1KSlcXG41Mjk1OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjUyOTY6XFx0XFxuNTI5NzpcXHRcXHRcXHQvKlxcbjUyOTg6XFx0XFx0XFx0ICogSWYgQ1BVcyBkbyBub3Qgc2hhcmUgYSBjYWNoZSwgYWxsb3cgdGhlIHVwZGF0ZSB0byBwcmV2ZW50XFxuNTI5OTpcXHRcXHRcXHQgKiBleHBlbnNpdmUgcmVtb3RlIG1lbW9yeSBhY2Nlc3NlcyBhbmQgY2FjaGUgbWlzc2VzLlxcbjUzMDA6XFx0XFx0XFx0ICovXFxuNTMwMTpcXHRcXHRcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXFxuNTMwMjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzMDU6XFx0XFx0fVxcbjUzMDY6XFx0XFxuNTMwNzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzA4OlxcdH1cXG41MzA5OlxcdFxcbjUzMTA6XFx0I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG41MzExOlxcdFxcbjUzMTI6XFx0LyoqXFxuNTMxMzpcXHQgKiBycHNfbWF5X2V4cGlyZV9mbG93IC0gY2hlY2sgd2hldGhlciBhbiBSRlMgaGFyZHdhcmUgZmlsdGVyIG1heSBiZSByZW1vdmVkXFxuNTMxNDpcXHQgKiBAZGV2OiBEZXZpY2Ugb24gd2hpY2ggdGhlIGZpbHRlciB3YXMgc2V0XFxuNTMxNTpcXHQgKiBAcnhxX2luZGV4OiBSWCBxdWV1ZSBpbmRleFxcbjUzMTY6XFx0ICogQGZsb3dfaWQ6IEZsb3cgSUQgcGFzc2VkIHRvIG5kb19yeF9mbG93X3N0ZWVyKClcXG41MzE3OlxcdCAqIEBmaWx0ZXJfaWQ6IEZpbHRlciBJRCByZXR1cm5lZCBieSBuZG9fcnhfZmxvd19zdGVlcigpXFxuNTMxODpcXHQgKlxcbjUzMTk6XFx0ICogRHJpdmVycyB0aGF0IGltcGxlbWVudCBuZG9fcnhfZmxvd19zdGVlcigpIHNob3VsZCBwZXJpb2RpY2FsbHkgY2FsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowNzoyNy4wNTM1MjU5ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY0MTM4MTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBSUFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgcnBzX2xsY19jaGVja2AgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19SUFNgIGlzIGVuYWJsZWQuIEl0J3MgYSBjb21tb24gb3ZlcnNpZ2h0LCBhbmQgYSBzdWJ0bGUgYnVnIGluIG91ciBuZXR3b3JrIHN0YWNrIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbmV0L2NvcmUvZGV2LmNgIGZpbGUsIHNpbmNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgZm9yIFJQUyBhbmQgUkZTIGxvZ2ljLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgZXhwZWN0IHRvIGZpbmQgYSBgI2lmZGVmIENPTkZJR19SUFNgIGJsb2NrIGluIHRoYXQgYXJlYSwgYW5kIEknbSBiZXR0aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGwsIGBycHNfbGxjX2NoZWNrYCwgaXMgZW5jbG9zZWQgd2l0aGluIGl0LiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDUwNDAtNTA2MCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNvbmZpcm0uIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjQyLjY5NDkxMTExMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA0MDpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuYXBpLVxcdTAwM2Vwb2xsX2xpc3QsIFxcdTAwMjZzZC1cXHUwMDNlcG9sbF9saXN0KTtcXG41MDQxOlxcdFxcdFdSSVRFX09OQ0UobmFwaS1cXHUwMDNlbGlzdF9vd25lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG41MDQyOlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKClcXG41MDQzOlxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxuNTA0NDpcXHRcXHQgKi9cXG41MDQ1OlxcdFxcdGlmICghc2QtXFx1MDAzZWluX25ldF9yeF9hY3Rpb24pXFxuNTA0NjpcXHRcXHRcXHRyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuNTA0NzpcXHR9XFxuNTA0ODpcXHRcXG41MDQ5OlxcdCNpZmRlZiBDT05GSUdfUlBTXFxuNTA1MDpcXHRcXG41MDUxOlxcdHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQgX19yZWFkX21vc3RseTtcXG41MDUyOlxcdEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XFxuNTA1MzpcXHRzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSByZnNfbmVlZGVkIF9fcmVhZF9tb3N0bHk7XFxuNTA1NDpcXHRFWFBPUlRfU1lNQk9MKHJmc19uZWVkZWQpO1xcbjUwNTU6XFx0c3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XFxuNTA1NjpcXHRFWFBPUlRfU1lNQk9MKHJwc19mZWF0X2xsY19hZmZpbml0eSk7XFxuNTA1NzpcXHRcXG41MDU4OlxcdHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXFxuNTA1OTpcXHR7XFxuNTA2MDpcXHRcXHRyZXR1cm4gaGFzaF8zMihoYXNoLCBycHNfdGFnX3RvX2xvZyh0YWdfcHRyKSk7XFxuNTA2MTpcXHR9XFxuNTA2MjpcXHRcXG41MDYzOlxcdCNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuNTA2NDpcXHQvKipcXG41MDY1OlxcdCAqIHJwc19mbG93X2lzX2FjdGl2ZSAtIGNoZWNrIHdoZXRoZXIgdGhlIGZsb3cgaXMgcmVjZW50bHkgYWN0aXZlLlxcbjUwNjY6XFx0ICogQHJmbG93OiBTcGVjaWZpYyBmbG93IHRvIGNoZWNrIGFjdGl2aXR5LlxcbjUwNjc6XFx0ICogQGxvZzogaWxvZzIoaGFzaHNpemUpLlxcbjUwNjg6XFx0ICogQGNwdTogQ1BVIHNhdmVkIGluIEByZmxvdy5cXG41MDY5OlxcdCAqXFxuNTA3MDpcXHQgKiBJZiB0aGUgQ1BVIGhhcyBwcm9jZXNzZWQgbWFueSBwYWNrZXRzIHNpbmNlIHRoZSBmbG93J3MgbGFzdCBhY3Rpdml0eVxcbjUwNzE6XFx0ICogKGJleW9uZCAxMCB0aW1lcyB0aGUgdGFibGUgc2l6ZSksIHRoZSBmbG93IGlzIGNvbnNpZGVyZWQgc3RhbGUuXFxuNTA3MjpcXHQgKlxcbjUwNzM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIGZsb3cgd2FzIHJlY2VudGx5IGFjdGl2ZS5cXG41MDc0OlxcdCAqL1xcbjUwNzU6XFx0c3RhdGljIGJvb2wgcnBzX2Zsb3dfaXNfYWN0aXZlKHN0cnVjdCBycHNfZGV2X2Zsb3cgKnJmbG93LFxcbjUwNzY6XFx0XFx0XFx0XFx0ICAgICAgIHU4IGxvZyxcXG41MDc3OlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY3B1KVxcbjUwNzg6XFx0e1xcbjUwNzk6XFx0XFx0dW5zaWduZWQgaW50IGZsb3dfbGFzdF9hY3RpdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjQyLjY5NTM0NzcwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU5Nzk5MjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipSUFMgRGlzYWJsZW1lbnQgRGVlcCBEaXZlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBSUFMgYW5kIGhvdyBpdCBiZWhhdmVzIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfUlBTYCBlbmFibGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGV2ZW4gd2hlbiBSUFMgaXMgb2ZmLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIGNvZGUgcGF0aHMgb3IgZGVmaW5pdGlvbnMgdGhhdCB0b3VjaCB1cG9uIFJQUy1yZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCB0aGluZ3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBTbywgbGV0J3MgbWFrZSBzdXJlIHdlIHNwZWNpZmljYWxseSBjaGVjayB0aGUgYGluY2x1ZGUvbmV0L3Jwcy5oYCBoZWFkZXIgZmlsZSBldmVuIGluIHRoaXMgZGlzYWJsZWQgY29uZmlndXJhdGlvbi4gSXQncyBhIGtleSBwbGFjZSB0byBsb29rIGZvciB0aG9zZSBwb3RlbnRpYWwgcmVtbmFudHMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zLiBHb3R0YSBiZSBleHRyYSBjYXJlZnVsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA3OjUzLjI5MzM0NTExNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcnBzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfTkVUX1JQU19IXFxuICAgMzpcXHQjZGVmaW5lIF9ORVRfUlBTX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnBzLXR5cGVzLmhcXHUwMDNlXFxuICAxMjpcXHRcXG4gIDEzOlxcdGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBycHNfbmVlZGVkO1xcbiAgMTQ6XFx0ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XFxuICAxNTpcXHRleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5O1xcbiAgMTY6XFx0XFxuICAxNzpcXHQvKlxcbiAgMTg6XFx0ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gUlBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlXFxuICAxOTpcXHQgKiBtYXAgaXMgYW4gYXJyYXkgb2YgQ1BVcy5cXG4gIDIwOlxcdCAqL1xcbiAgMjE6XFx0c3RydWN0IHJwc19tYXAge1xcbiAgMjI6XFx0XFx0dW5zaWduZWQgaW50XFx0bGVuO1xcbiAgMjM6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcbiAgMjQ6XFx0XFx0dTE2XFx0XFx0Y3B1c1tdO1xcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdCNkZWZpbmUgUlBTX01BUF9TSVpFKF9udW0pIChzaXplb2Yoc3RydWN0IHJwc19tYXApICsgKChfbnVtKSAqIHNpemVvZih1MTYpKSlcXG4gIDI3OlxcdFxcbiAgMjg6XFx0LypcXG4gIDI5OlxcdCAqIFRoZSBycHNfZGV2X2Zsb3cgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGEgZmxvdyB0byBhIENQVSwgdGhlXFxuICAzMDpcXHQgKiB0YWlsIHBvaW50ZXIgZm9yIHRoYXQgQ1BVJ3MgaW5wdXQgcXVldWUgYXQgdGhlIHRpbWUgb2YgbGFzdCBlbnF1ZXVlLCBhXFxuICAzMTpcXHQgKiBoYXJkd2FyZSBmaWx0ZXIgaW5kZXgsIGFuZCB0aGUgaGFzaCBvZiB0aGUgZmxvdyBpZiBhUkZTIGlzIGVuYWJsZWQuXFxuICAzMjpcXHQgKi9cXG4gIDMzOlxcdHN0cnVjdCBycHNfZGV2X2Zsb3cge1xcbiAgMzQ6XFx0XFx0dTE2XFx0XFx0Y3B1O1xcbiAgMzU6XFx0XFx0dTE2XFx0XFx0ZmlsdGVyO1xcbiAgMzY6XFx0XFx0dW5zaWduZWQgaW50XFx0bGFzdF9xdGFpbDtcXG4gIDM3OlxcdCNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuICAzODpcXHRcXHR1MzJcXHRcXHRoYXNoO1xcbiAgMzk6XFx0I2VuZGlmXFxuICA0MDpcXHR9O1xcbiAgNDE6XFx0I2RlZmluZSBSUFNfTk9fRklMVEVSIDB4ZmZmZlxcbiAgNDI6XFx0XFxuICA0MzpcXHQvKlxcbiAgNDQ6XFx0ICogVGhlIHJwc19zb2NrX2Zsb3dfdGFibGUgY29udGFpbnMgbWFwcGluZ3Mgb2YgZmxvd3MgdG8gdGhlIGxhc3QgQ1BVXFxuICA0NTpcXHQgKiBvbiB3aGljaCB0aGV5IHdlcmUgcHJvY2Vzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiAoc2V0IGluIHJlY3Ztc2cpLlxcbiAgNDY6XFx0ICogRWFjaCBlbnRyeSBpcyBhIDMyYml0IHZhbHVlLiBVcHBlciBwYXJ0IGlzIHRoZSBoaWdoLW9yZGVyIGJpdHNcXG4gIDQ3OlxcdCAqIG9mIGZsb3cgaGFzaCwgbG93ZXIgcGFydCBpcyBDUFUgbnVtYmVyLlxcbiAgNDg6XFx0ICogcnBzX2NwdV9tYXNrIGlzIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBzcGFjZSwgZGVwZW5kaW5nIG9uIG51bWJlciBvZlxcbiAgNDk6XFx0ICogcG9zc2libGUgQ1BVcyA6IHJwc19jcHVfbWFzayA9IHJvdW5kdXBfcG93X29mX3R3byhucl9jcHVfaWRzKSAtIDFcXG4gIDUwOlxcdCAqIEZvciBleGFtcGxlLCBpZiA2NCBDUFVzIGFyZSBwb3NzaWJsZSwgcnBzX2NwdV9tYXNrID0gMHgzZixcXG4gIDUxOlxcdCAqIG1lYW5pbmcgd2UgdXNlIDMyLTY9MjYgYml0cyBmb3IgdGhlIGhhc2guXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlIHtcXG4gIDU0OlxcdFxcdHUzMlxcdGVudDtcXG4gIDU1OlxcdH07XFxuICA1NjpcXHRcXG4gIDU3OlxcdCNkZWZpbmUgUlBTX05PX0NQVSAweGZmZmZcXG4gIDU4OlxcdFxcbiAgNTk6XFx0Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuICA2NDpcXHRcXHR1MzIgdmFsID0gaGFzaCBcXHUwMDI2IH5uZXRfaG90ZGF0YS5ycHNfY3B1X21hc2s7XFxuICA2NTpcXHRcXHRzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSAqdGFibGU7XFxuICA2NjpcXHRcXHR1MzIgb2xkX3ZhbDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xcbiAgNjk6XFx0XFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHRhYmxlID0gcnBzX3RhZ190b190YWJsZSh0YWdfcHRyKTtcXG4gIDcyOlxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgV1JJVEVfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBSRUFEX09OQ0UoKVxcbiAgNzM6XFx0XFx0ICogaGVyZSwgYW5kIGFub3RoZXIgb25lIGluIGdldF9ycHNfY3B1KCkuXFxuICA3NDpcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XFxuICA3NjpcXHRcXHRpZiAob2xkX3ZhbCAhPSB2YWwgXFx1MDAyNlxcdTAwMjYgcnBzX2xsY19jaGVjayhvbGRfdmFsLCB2YWwpKVxcbiAgNzc6XFx0XFx0XFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xcbiAgNzg6XFx0fVxcbiAgNzk6XFx0XFxuICA4MDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goX191MzIgaGFzaClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDc6NTMuMjkzNDU0ODE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzgwNDE5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGluY2x1ZGUvbmV0L3Jwcy5oYCBoZWFkZXIsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGRpdmUgaW50byBuZXR3b3JraW5nIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgYHJwcy5oYCBIZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBpbmNsdWRlL25ldC9ycHMuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCBhIHNpZ25pZmljYW50IHBhcnQgb2YgaXQsIGluIHRlcm1zIG9mIHN0ZWVyaW5nIHBhY2tldHMgdG8gdGhlIHJpZ2h0IENQVSBjb3JlIGZvciBwcm9jZXNzaW5nLlwiIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgKFJQUyksIGFuZCBsaWtlbHkgc29tZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUga2V5IHRvIG1ha2luZyB0aGlzIGhhcHBlbiBlZmZpY2llbnRseS4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGluaXRpYWwgZGlzcGF0Y2ggYW5kIHdoYXQgbWVjaGFuaXNtcyBpdCB1c2VzIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24gQ1BVLCBpZGVhbGx5LCB3aXRob3V0IHRvbyBtdWNoIG92ZXJoZWFkIG9yIGxvY2tpbmcgY29udGVudGlvbi4gSSdtIGhvcGluZyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBsaWtlIHRoZSBuZXR3b3JrIGRyaXZlciBhbmQgdGhlIE5JQydzIG93biBSU1MgKFJlY2VpdmUgU2lkZSBTY2FsaW5nKSBjYXBhYmlsaXRpZXMuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGRldGFpbHMgb24gYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgdHVuaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA4OjA2LjA3Mzg3ODkyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ycHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHR7XFxuICA4MjpcXHRcXHRycHNfdGFnX3B0ciB0YWdfcHRyO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRpZiAoIWhhc2gpXFxuICA4NTpcXHRcXHRcXHRyZXR1cm47XFxuICA4NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuICA4NzpcXHRcXHR0YWdfcHRyID0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnJwc19zb2NrX2Zsb3dfdGFibGUpO1xcbiAgODg6XFx0XFx0aWYgKHRhZ19wdHIpXFxuICA4OTpcXHRcXHRcXHRycHNfcmVjb3JkX3NvY2tfZmxvdyh0YWdfcHRyLCBoYXNoKTtcXG4gIDkwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX3NvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdC8qIFJlYWRpbmcgc2stXFx1MDAzZXNrX3J4aGFzaCBtaWdodCBpbmN1ciBhbiBleHBlbnNpdmUgY2FjaGUgbGluZVxcbiAgOTY6XFx0XFx0ICogbWlzcy5cXG4gIDk3OlxcdFxcdCAqXFxuICA5ODpcXHRcXHQgKiBUQ1BfRVNUQUJMSVNIRUQgZG9lcyBjb3ZlciBhbG1vc3QgYWxsIHN0YXRlcyB3aGVyZSBSRlNcXG4gIDk5OlxcdFxcdCAqIG1pZ2h0IGJlIHVzZWZ1bCwgYW5kIGlzIGNoZWFwZXIgWzFdIHRoYW4gdGVzdGluZyA6XFxuIDEwMDpcXHRcXHQgKlxcdElQdjQ6IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2RhZGRyXFxuIDEwMTpcXHRcXHQgKlxcdElQdjY6IGlwdjZfYWRkcl9hbnkoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcilcXG4gMTAyOlxcdFxcdCAqIE9SXFx0YW4gYWRkaXRpb25hbCBzb2NrZXQgZmxhZ1xcbiAxMDM6XFx0XFx0ICogWzFdIDogc2tfc3RhdGUgYW5kIHNrX3Byb3QgYXJlIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUuXFxuIDEwNDpcXHRcXHQgKi9cXG4gMTA1OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKSB7XFxuIDEwNjpcXHRcXHRcXHQvKiBUaGlzIFJFQURfT05DRSgpIGlzIHBhaXJlZCB3aXRoIHRoZSBXUklURV9PTkNFKClcXG4gMTA3OlxcdFxcdFxcdCAqIGZyb20gc29ja19ycHNfc2F2ZV9yeGhhc2goKSBhbmQgc29ja19ycHNfcmVzZXRfcnhoYXNoKCkuXFxuIDEwODpcXHRcXHRcXHQgKi9cXG4gMTA5OlxcdFxcdFxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKSk7XFxuIDExMDpcXHRcXHR9XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiAxMTQ6XFx0e1xcbiAxMTU6XFx0XFx0c3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlO1xcbiAxMTY6XFx0XFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4gMTE3OlxcdFxcdHUzMiBoYXNoLCBpbmRleDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0aGFzaCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoKTtcXG4gMTIwOlxcdFxcdGlmICghaGFzaClcXG4gMTIxOlxcdFxcdFxcdHJldHVybjtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjQ6XFx0XFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcXG4gMTI1OlxcdFxcdGlmICh0YWdfcHRyKSB7XFxuIDEyNjpcXHRcXHRcXHRpbmRleCA9IGhhc2ggXFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XFxuIDEyNzpcXHRcXHRcXHR0YWJsZSA9IHJwc190YWdfdG9fdGFibGUodGFnX3B0cik7XFxuIDEyODpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IFJQU19OT19DUFUpXFxuIDEyOTpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIFJQU19OT19DUFUpO1xcbiAxMzA6XFx0XFx0fVxcbiAxMzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHQjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcmZzX2lzX25lZWRlZCh2b2lkKVxcbiAxMzY6XFx0e1xcbiAxMzc6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gMTM4OlxcdFxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZyZnNfbmVlZGVkKTtcXG4gMTM5OlxcdCNlbHNlXFxuIDE0MDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0MTpcXHQjZW5kaWZcXG4gMTQyOlxcdH1cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xcbiAxNDU6XFx0dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiAxNDg6XFx0e1xcbiAxNDk6XFx0I2lmZGVmIENPTkZJR19SUFNcXG4gMTUwOlxcdFxcdGlmICghcmZzX2lzX25lZWRlZCgpKVxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRfc29ja19ycHNfZGVsZXRlX2Zsb3coc2spO1xcbiAxNTQ6XFx0I2VuZGlmXFxuIDE1NTpcXHR9XFxuIDE1NjpcXHRcXG4gMTU3OlxcdHN0YXRpYyBpbmxpbmUgdTMyIHJwc19pbnB1dF9xdWV1ZV90YWlsX2luY3Ioc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHQjaWZkZWYgQ09ORklHX1JQU1xcbiAxNjA6XFx0XFx0cmV0dXJuICsrc2QtXFx1MDAzZWlucHV0X3F1ZXVlX3RhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA4OjA2LjA3Mzk3MzgyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4NzYwMTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBhbmQgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBSUFMvUkZTIGFyZSBhY3RpdmUgYW5kIHRoZSBgbmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5YCBzeXNjdGwgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcnBzX2xsY19jaGVja2AgaXMgZG9pbmcuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGZsb3cgdXBkYXRlcywgQ1BVIGFmZmluaXR5LCBhbmQgc3RlZXJpbmcgd2l0aGluIHRoZSBSUFMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgYG9sZF9jcHVgIGFuZCBgbmV3X2NwdWAgYWdhaW5zdCBgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrYCwgYW5kIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBgY3B1X2FjdGl2ZWAgYW5kIGBjcHVzX3NoYXJlX2NhY2hlYCBiYXNlZCBvbiB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgIGNvbmRpdGlvbi5cblxuTm93LCBhcmUgdGhlc2UgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nPyBJIG5lZWQgdG8gYXBwbHkgdGhlIGNyaXRlcmlhLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbW1lbnQgY2hhbmdlLCBhIGxvZ2dpbmcgdXBkYXRlLCBvciBhIHB1cmVseSBjb3NtZXRpYyBudW1lcmljIGNoYW5nZS4gVGhlcmUncyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYmVpbmcgbW9kaWZpZWQgaW4gYG5ldC9jb3JlL2Rldi5jYCwgYGluY2x1ZGUvbmV0L3Jwcy5oYCwgYW5kIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AuIFRoaXMgaXNuJ3QgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIG9yIGhvdC11bnBsdWcgcmVsYXRlZCBjb2RlLiBDcml0aWNhbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgYSBzdGFuZGFyZCBRRU1VIHNldHVwIHdvdWxkIGJlIGZpbmUuIFRoZXJlZm9yZSwgKipXb3J0aEZ1enppbmc9dHJ1ZSoqLlxuXG5OZXh0LCBsZXQncyBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBDbGVhcmx5LCBgcnBzX2xsY19jaGVja2AgaXMgYSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0LiBJdCdzIGEgbm9uLXN0YXRpYyBib29sZWFuIGZ1bmN0aW9uIGludHJvZHVjaW5nIG5ldyBsb2dpYyB3aXRoIHRoZSBgc3RhdGljX2JyYW5jaF91bmxpa2VseWAgYW5kIHRoZSBgY3B1c19zaGFyZV9jYWNoZWAgY2hlY2suIFRoaXMgaXMgbmV3IGFuZCB3YXJyYW50cyBhdHRlbnRpb24uIEFsc28sIGBzb2NrX3Jwc19yZWNvcmRfZmxvd2AgYW5kIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCwgd2hpY2ggYXJlIG5vdyBleHBvcnRlZCBmdW5jdGlvbnMsIGFyZSBhbHNvIGdvb2QgY2FuZGlkYXRlcyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC5cblxuQXJlIHRoZXkgaG90LXBhdGg/IEkgc2hvdWxkIGJlIGNhcmVmdWwgdG8gb25seSBmbGFnIGZ1bmN0aW9ucyB0byBmdXp6IHRoYXQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgbmV3IGBycHNfbGxjX2NoZWNrYCB0aGF0IGNoZWNrcyBjYWNoZSBhZmZpbml0eSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGhpdC4gVGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHNvY2tldCBvcHMuIEknbGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgd2hlcmUgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBpcyBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGdvb2QgdGFyZ2V0cywgYnV0IGZvciBub3cgdGhleSBzZWVtIG9rYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6MjUuMzYxNTc3NzcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0MDAyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfcnBzX3JlY29yZF9mbG93XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTQxND1zdGF0aWMgdm9pZCB0dW5fZmxvd191cGRhdGUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdTMyIHJ4aGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTQzMi1cXHRcXHRcXHRlLVxcdTAwM2V1cGRhdGVkID0gamlmZmllcztcXG5kcml2ZXJzL25ldC90dW4uYzo0MzM6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChlLVxcdTAwM2VycHNfcnhoYXNoKTtcXG5kcml2ZXJzL25ldC90dW4uYy00MzQtXFx0fSBlbHNlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTc5LVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTgxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTkyLVxcbmluY2x1ZGUvbmV0L3Jwcy5oOjkzOnN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTk0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Jwcy5oLTEwOC1cXHRcXHQgKi9cXG5pbmNsdWRlL25ldC9ycHMuaDoxMDk6XFx0XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yeGhhc2gpKTtcXG5pbmNsdWRlL25ldC9ycHMuaC0xMTAtXFx0fVxcbi0tXFxuaW5jbHVkZS9uZXQvcnBzLmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9ycHMuaC0xNDMtXFxuaW5jbHVkZS9uZXQvcnBzLmg6MTQ0OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKTtcXG5pbmNsdWRlL25ldC9ycHMuaDoxNDU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3Jwcy5oLTE0Ni1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19zYXZlX3J4aGFzaChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIwOS1cXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTIxMDpcXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gc29ja19ycHNfcmVjb3JkX2Zsb3coKS5cXG5pbmNsdWRlL25ldC9zb2NrLmgtMTIxMS1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjE3PXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZXNldF9yeGhhc2goc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTEyMTktI2lmZGVmIENPTkZJR19SUFNcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTIyMDpcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiBzb2NrX3Jwc19yZWNvcmRfZmxvdygpICovXFxuaW5jbHVkZS9uZXQvc29jay5oLTEyMjEtXFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcnhoYXNoLCAwKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xOTUzPWludCBpb196Y3J4X3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTE5NjItXFxuaW9fdXJpbmcvemNyeC5jOjE5NjM6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbmlvX3VyaW5nL3pjcnguYy0xOTY0LVxcdHJldHVybiBpb196Y3J4X3RjcF9yZWN2bXNnKHJlcSwgaWZxLCBzaywgZmxhZ3MsIGlzc3VlX2ZsYWdzLCBsZW4pO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM1ND1zdGF0aWMgdm9pZCBycHNfdHJpZ2dlcl9zb2Z0aXJxKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzY0LVxcbm5ldC9jb3JlL2Rldi5jOjUzNjU6dm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXFxubmV0L2NvcmUvZGV2LmMtNTM2Ni17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzcwLVxcbm5ldC9jb3JlL2Rldi5jOjUzNzE6XFx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XFxubmV0L2NvcmUvZGV2LmMtNTM3Mi0jZW5kaWZcXG5uZXQvY29yZS9kZXYuYy01MzczLX1cXG5uZXQvY29yZS9kZXYuYzo1Mzc0OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCk7XFxubmV0L2NvcmUvZGV2LmMtNTM3NS1cXG5uZXQvY29yZS9kZXYuYzo1Mzc2OnZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2Rldi5jLTUzNzcte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTM4MS1cXG5uZXQvY29yZS9kZXYuYzo1MzgyOlxcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2NvcmUvZGV2LmMtNTM4My0jZW5kaWZcXG5uZXQvY29yZS9kZXYuYy01Mzg0LX1cXG5uZXQvY29yZS9kZXYuYzo1Mzg1OkVYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xcbm5ldC9jb3JlL2Rldi5jLTUzODYtXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9NzYxPXZvaWQgX19pbmV0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtNzY3LVxcbm5ldC9pcHY0L2FmX2luZXQuYzo3Njg6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3cobmV3c2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy03NjktXFx0V0FSTl9PTighKCgxIFxcdTAwM2NcXHUwMDNjIG5ld3NrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTg0ND1pbnQgaW5ldF9zZW5kX3ByZXBhcmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2FmX2luZXQuYy04NDUte1xcbm5ldC9pcHY0L2FmX2luZXQuYzo4NDY6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy04NDctXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9ODg0PWludCBpbmV0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy04OTAtXFx0aWYgKGxpa2VseSghKGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXFxubmV0L2lwdjQvYWZfaW5ldC5jOjg5MTpcXHRcXHRzb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTg5Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04MjQtXFxubmV0L2lwdjQvdGNwLmM6ODI1OlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvaXB2NC90Y3AuYy04MjYtXFx0LypcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMjIzLVxcbm5ldC9pcHY0L3RjcC5jOjIyMjQ6XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY0L3RjcC5jLTIyMjUtXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTEtXFx0aWYgKGxpa2VseSghKGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSkpXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTI6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc2spO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjUzLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk4MD1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg5LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5OTA6XFx0XFx0c29ja19ycHNfcmVjb3JkX2Zsb3coc3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTkxLVxcdH1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTg3MTI9X19wb2xsX3Qgc2N0cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3YWl0KVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtODcxOS1cXG5uZXQvc2N0cC9zb2NrZXQuYzo4NzIwOlxcdHNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy04NzIxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowODoyNy4xNTU1ODcxNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4ODYyNTUxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBycHNfbGxjX2NoZWNrYCBGdW5jdGlvbidzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHJwc19sbGNfY2hlY2tgIGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQncyB0aGUgdGFyZ2V0LiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZHVyaW5nIHRoZSBzb2NrIGZsb3cgcmVjb3JkaW5nIHByb2Nlc3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IEtjb25maWcgb3B0aW9ucy4gV2hhdCBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBnb2luZyB0byBiZSByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGJ1aWx0IGFuZCB3b3JrIGNvcnJlY3RseT9cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZTogYG5ldC9LY29uZmlnYC4gSSBzZWUgYENPTkZJR19SUFNgIGRlZmluZWQgdGhlcmU6XG5cbmBgYFxuY29uZmlnIFJQU1xuXHRib29sIFwiUmVjZWl2ZSBwYWNrZXQgc3RlZXJpbmdcIlxuXHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgU1lTRlNcblx0ZGVmYXVsdCB5XG5gYGBcblxuQWxyaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gV2UgbmVlZCBgUlBTYCAodGhlIGNvcmUgZmVhdHVyZSBpdHNlbGYpLCBgU01QYCAoc3ltbWV0cmljIG11bHRpcHJvY2Vzc2luZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBhY2tldCBzdGVlcmluZyBhY3Jvc3MgbXVsdGlwbGUgQ1BVcyksIGFuZCBgU1lTRlNgIChmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSkuIFNlZW1zIGxvZ2ljYWwuXG5cbkJ1dCwgSSdtIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgSSBhbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycHNfbGxjX2NoZWNrYCBpc24ndCBpbmRpcmVjdGx5IGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlIHZpYSBvdGhlciBrZXJuZWwgZnVuY3Rpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBjaGVjayB0aGUgYGNwdXNfc2hhcmVfY2FjaGVgIGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCB0cmVlIGFuZCB3b3JrIGJhY2sgdG8gZGV0ZXJtaW5lIGhvdyBgcnBzX2xsY19jaGVja2AgaXMgaW52b2x2ZWQsIGlmIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6NTYuMDQxODQ2MDIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyOTg0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNwdXNfc2hhcmVfY2FjaGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1xLmM9MTI0MT1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX2NvbXBsZXRlX25lZWRfaXBpKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTEyNTktXFx0ICAgICghdGVzdF9iaXQoUVVFVUVfRkxBR19TQU1FX0ZPUkNFLCBcXHUwMDI2cnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2Jsay1tcS5jOjEyNjA6XFx0ICAgICBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcnEtXFx1MDAzZW1xX2N0eC1cXHUwMDNlY3B1KSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2Jsay1tcS5jLTEyNjEtXFx0ICAgICBjcHVzX2VxdWFsX2NhcGFjaXR5KGNwdSwgcnEtXFx1MDAzZW1xX2N0eC1cXHUwMDNlY3B1KSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg9MjAyPWJvb2wgY3B1c19lcXVhbF9jYXBhY2l0eShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oOjIwMzpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaC0yMDQtYm9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTM5ODQ9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk0LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Mzk5NTpib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXFxua2VybmVsL3NjaGVkL2NvcmUuYy0zOTk2LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDAxNT1zdGF0aWMgaW5saW5lIGJvb2wgdHR3dV9xdWV1ZV9jb25kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0Mi1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQwNDM6XFx0aWYgKCFjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDA0NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTQ1OD1zMzIgc2N4X3NlbGVjdF9jcHVfZGZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgczMyIHByZXZfY3B1LCB1NjQgd2FrZV9mbGFncyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzMy1cXHRcXHRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6NTM0OlxcdFxcdGlmIChpc19wcmV2X2FsbG93ZWQgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShjcHUsIHByZXZfY3B1KSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTUzNS1cXHRcXHQgICAgc2N4X2lkbGVfdGVzdF9hbmRfY2xlYXJfY3B1KHByZXZfY3B1KSkge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz04MzUwPXdha2VfYWZmaW5lX2lkbGUoaW50IHRoaXNfY3B1LCBpbnQgcHJldl9jcHUsIGludCBzeW5jKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzYzLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODM2NDpcXHRpZiAoYXZhaWxhYmxlX2lkbGVfY3B1KHRoaXNfY3B1KSBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHRoaXNfY3B1LCBwcmV2X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MzY1LVxcdFxcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUocHJldl9jcHUpID8gcHJldl9jcHUgOiB0aGlzX2NwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODk0OT1zdGF0aWMgaW50IHNlbGVjdF9pZGxlX3NpYmxpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcHJldiwgaW50IHRhcmdldClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk3OC1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg5Nzk6XFx0aWYgKHByZXYgIT0gdGFyZ2V0IFxcdTAwMjZcXHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUocHJldiwgdGFyZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODk4MC1cXHQgICAgY2hvb3NlX2lkbGVfY3B1KHByZXYsIHApIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTAtXFx0ICAgIHJlY2VudF91c2VkX2NwdSAhPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjkwMTE6XFx0ICAgIGNwdXNfc2hhcmVfY2FjaGUocmVjZW50X3VzZWRfY3B1LCB0YXJnZXQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDEyLVxcdCAgICBjaG9vc2VfaWRsZV9jcHUocmVjZW50X3VzZWRfY3B1LCBwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTA1MTpcXHRcXHRpZiAoIWhhc19pZGxlX2NvcmUgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShwcmV2LCB0YXJnZXQpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy05MDUyLVxcdFxcdFxcdGkgPSBzZWxlY3RfaWRsZV9zbXQocCwgc2QsIHByZXYpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDY5OD1zdGF0aWMgZW51bSBsbGNfbWlnIGNhbl9taWdyYXRlX2xsY190YXNrKGludCBzcmNfY3B1LCBpbnQgZHN0X2NwdSxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MDktXFx0Y3B1ID0gUkVBRF9PTkNFKG1tLVxcdTAwM2VzY19zdGF0LmNwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcxMDpcXHRpZiAoY3B1IFxcdTAwM2MgMCB8fCBjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGRzdF9jcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MTEtXFx0XFx0cmV0dXJuIG1pZ191bnJlc3RyaWN0ZWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzIwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjE6XFx0aWYgKGNwdXNfc2hhcmVfY2FjaGUoZHN0X2NwdSwgY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzIyLVxcdFxcdHRvX3ByZWYgPSB0cnVlO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTA3MjM6XFx0ZWxzZSBpZiAoY3B1c19zaGFyZV9jYWNoZShzcmNfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjQtXFx0XFx0dG9fcHJlZiA9IGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDc0MT1hbGJfYnJlYWtfbGxjKHN0cnVjdCBsYl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3NDUtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDc0NjpcXHRpZiAoY3B1c19zaGFyZV9jYWNoZShlbnYtXFx1MDAzZXNyY19jcHUsIGVudi1cXHUwMDNlZHN0X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz02NjA9c3RhdGljIHZvaWQgZGVzdHJveV9zY2hlZF9kb21haW5zKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNjcyLSAqIG9mIHRoZSBkb21haW4pLCB0aGlzIGFsbG93cyB1cyB0byBxdWlja2x5IHRlbGwgaWYgdHdvIENQVXMgYXJlIGluIHRoZSBzYW1lXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM6NjczOiAqIGNhY2hlIGRvbWFpbiwgc2VlIGNwdXNfc2hhcmVfY2FjaGUoKS5cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy02NzQtICovXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODUzOT1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHModm9pZClcXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTYxLS8qXFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1NjI6ICogY3B1c19zaGFyZV9jYWNoZV9zaGFyZCAtIHRlc3Qgd2hldGhlciB0d28gQ1BVcyBiZWxvbmcgdG8gdGhlIHNhbWUgY2FjaGUgc2hhcmRcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2My0gKlxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjYtICovXFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1Njc6c3RhdGljIGJvb2wgX19pbml0IGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQoaW50IGNwdTAsIGludCBjcHUxKVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTY4LXtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2OTpcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUoY3B1MCwgY3B1MSkpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NzAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jPTg1ODI9dm9pZCBfX2luaXQgd29ya3F1ZXVlX2luaXRfdG9wb2xvZ3kodm9pZClcXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYy04NTg4LVxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX1NNVF0sIGNwdXNfc2hhcmVfc210KTtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU4OTpcXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV0sIGNwdXNfc2hhcmVfY2FjaGUpO1xcbmtlcm5lbC93b3JrcXVldWUuYy04NTkwLVxcdHByZWNvbXB1dGVfY2FjaGVfc2hhcmRfaWRzKCk7XFxua2VybmVsL3dvcmtxdWV1ZS5jOjg1OTE6XFx0aW5pdF9wb2RfdHlwZShcXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fQ0FDSEVfU0hBUkRdLCBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkKTtcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU5Mi1cXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9OVU1BXSwgY3B1c19zaGFyZV9udW1hKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTUyNzU9Ym9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzMDAtXFx0XFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTMwMTpcXHRcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSkpXFxubmV0L2NvcmUvZGV2LmMtNTMwMi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDg6NTcuNzQ0ODM3NDA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjExNjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQ1BVIGNhY2hlIHNoYXJpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzY2hlZHVsZXIuIExldCdzIHN0YXJ0IHdpdGggYSBsb29rIGF0IGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgd2l0aCBgY3B1c19zaGFyZV9jYWNoZWAuIFRoaXMgaXMgdGhlIGxpa2VseSBwb2ludCBvZiBjb250cm9sLiBJIGtub3cgdGhpcyBhcmVhIGZhaXJseSB3ZWxsLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBwaWVjZXMgcmVsYXRlZCB0byBOVU1BIG5vZGUgYXdhcmVuZXNzIGFuZCBob3cgd2UgaGFuZGxlIGNvcmUtc2hhcmluZyBhZmZpbml0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA5OjAxLjkwNjAxMjE2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcwMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk5MDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4zOTkxOlxcdFxcbjM5OTI6XFx0XFx0cmV0dXJuIGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoaXNfY3B1KSA9PSBhcmNoX3NjYWxlX2NwdV9jYXBhY2l0eSh0aGF0X2NwdSk7XFxuMzk5MzpcXHR9XFxuMzk5NDpcXHRcXG4zOTk1OlxcdGJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG4zOTk2OlxcdHtcXG4zOTk3OlxcdFxcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcXG4zOTk4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM5OTk6XFx0XFxuNDAwMDpcXHRcXHRyZXR1cm4gcGVyX2NwdShzZF9sbGNfaWQsIHRoaXNfY3B1KSA9PSBwZXJfY3B1KHNkX2xsY19pZCwgdGhhdF9jcHUpO1xcbjQwMDE6XFx0fVxcbjQwMDI6XFx0XFxuNDAwMzpcXHQvKlxcbjQwMDQ6XFx0ICogV2hldGhlciBDUFVzIGFyZSBzaGFyZSBjYWNoZSByZXNvdXJjZXMsIHdoaWNoIG1lYW5zIExMQyBvbiBub24tY2x1c3RlclxcbjQwMDU6XFx0ICogbWFjaGluZXMgYW5kIExMQyB0YWcgb3IgTDIgb24gbWFjaGluZXMgd2l0aCBjbHVzdGVycy5cXG40MDA2OlxcdCAqL1xcbjQwMDc6XFx0Ym9vbCBjcHVzX3NoYXJlX3Jlc291cmNlcyhpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG40MDA4OlxcdHtcXG40MDA5OlxcdFxcdGlmICh0aGlzX2NwdSA9PSB0aGF0X2NwdSlcXG40MDEwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQwMTE6XFx0XFxuNDAxMjpcXHRcXHRyZXR1cm4gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhpc19jcHUpID09IHBlcl9jcHUoc2Rfc2hhcmVfaWQsIHRoYXRfY3B1KTtcXG40MDEzOlxcdH1cXG40MDE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOTowMS45MDc0MDk1MzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0NzA1NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFJQUyBGZWF0dXJlIEFmZmluaXR5IGluIE5ldC9Db3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUFMgKFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nKSBoYW5kbGVzIExMQyAoTGluayBMYXllciBDb250cm9sKSBhZmZpbml0eS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIHVzdWFsLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IOKAkyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGF0IGZpbGUgZm9yIHRoZSBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YCB2YXJpYWJsZSBvciBmdW5jdGlvbi4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29udHJvbCBtZWNoYW5pc21zIGZvciB0aGlzIHBhcnRpY3VsYXIgUlBTIGZlYXR1cmUgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgY29uZmlndXJlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgUlBTIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOTowNC40NTQ0NzA1ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0NTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtZXNzYWdlX2J1cnN0XFxcIixcXG4gNTQ2OlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2bmV0X3JhdGVsaW1pdF9zdGF0ZS5idXJzdCxcXG4gNTQ3OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbiA1NDg6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU0OTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjLFxcbiA1NTA6XFx0XFx0fSxcXG4gNTUxOlxcdCNpZmRlZiBDT05GSUdfUlBTXFxuIDU1MjpcXHRcXHR7XFxuIDU1MzpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJycHNfc29ja19mbG93X2VudHJpZXNcXFwiLFxcbiA1NTQ6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuIDU1NTpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4gNTU2OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHJwc19zb2NrX2Zsb3dfc3lzY3RsXFxuIDU1NzpcXHRcXHR9LFxcbiA1NTg6XFx0XFx0e1xcbiA1NTk6XFx0XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicnBzX2ZlYXRfbGxjX2FmZmluaXR5XFxcIixcXG4gNTYwOlxcdFxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSxcXG4gNTYxOlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5KSxcXG4gNTYyOlxcdFxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbiA1NjM6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb19zdGF0aWNfa2V5XFxuIDU2NDpcXHRcXHR9LFxcbiA1NjU6XFx0I2VuZGlmXFxuIDU2NjpcXHQjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXFxuIDU2NzpcXHRcXHR7XFxuIDU2ODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJmbG93X2xpbWl0X2NwdV9iaXRtYXBcXFwiLFxcbiA1Njk6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU3MDpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBmbG93X2xpbWl0X2NwdV9zeXNjdGxcXG4gNTcxOlxcdFxcdH0sXFxuIDU3MjpcXHRcXHR7XFxuIDU3MzpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJmbG93X2xpbWl0X3RhYmxlX2xlblxcXCIsXFxuIDU3NDpcXHRcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNm5ldGRldl9mbG93X2xpbWl0X3RhYmxlX2xlbixcXG4gNTc1OlxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbiA1NzY6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDU3NzpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBmbG93X2xpbWl0X3RhYmxlX2xlbl9zeXNjdGxcXG4gNTc4OlxcdFxcdH0sXFxuIDU3OTpcXHQjZW5kaWYgLyogQ09ORklHX05FVF9GTE9XX0xJTUlUICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjA5OjA0LjQ1NDYwMzc0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTkxNDI0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBSUFMgRnV6emluZyBTY2VuYXJpbyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBzeXNjdGxgIGludGVyZmFjZS4gV2hpbGUgdXN1YWxseSBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgIGhhbmRsZSB0aGVzZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgaGVyZS5cblxuTmV4dCwgSSBzZWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBgUlBTYCByZWxpZXMgb24gYm90aCBgU01QYCAoc3ltbWV0cmljIG11bHRpcHJvY2Vzc2luZykgYW5kIGBTWVNGU2AgKHN5c2ZzIGZpbGUgc3lzdGVtKS4gU28gSSdsbCBuZWVkIHRvIGVuYWJsZSB0aG9zZSBjb25maWdzOyB0aGVyZWZvcmUsIGBFbmFibGVDb25maWdzYDogYFtcIlJQU1wiLCBcIlNNUFwiLCBcIlNZU0ZTXCJdYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogdGhlIGZvY3VzZWQgc3ltYm9scy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IG5ld2x5IGFkZGVkIG9yIG1vZGlmaWVkIHN5bWJvbHMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHJwc19sbGNfY2hlY2tgIGlzIGEgbmV3IGZ1bmN0aW9uLCBhbmQgYm90aCBgc29ja19ycHNfcmVjb3JkX2Zsb3dgIGFuZCBgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaGAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucywgYWxzbyBpbiB0aGF0IGZpbGUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBjaGFuZ2Ugb3IgYWRkaXRpb24gdG8gdGhlIGNvZGUuXG5cbkdpdmVuIHRoaXMgaW5mb3JtYXRpb24sIGFuZCByZW1lbWJlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zIEkgcmVjZWl2ZWQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgW1wicnBzX2xsY19jaGVja1wiLCBcInNvY2tfcnBzX3JlY29yZF9mbG93XCIsIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXWAuIEkga25vdyB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYDogYFtcIlJQU1wiLCBcIlNNUFwiLCBcIlNZU0ZTXCJdYC4gTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSByYXRpb25hbGUsIGV4cGxhaW4gd2hhdCB0aGVzZSBzeW1ib2xzIGRvLCBhbmQgY29ubmVjdCB0aGVtIHRvIHRoZSByZWxldmFudCBjb25maWdzLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1NSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOToxMi42NDYwMzEyOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjcxMjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUlBTXCIsXG4gICAgXCJTTVBcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnBzX2xsY19jaGVja1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dcIixcbiAgICBcInNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIExMQyAoTGFzdCBMZXZlbCBDYWNoZSkgYWZmaW5pdHkgY2hlY2sgZm9yIFJQUy9SRlMgZmxvdyB1cGRhdGVzIGNvbnRyb2xsZWQgdmlhIGEgbmV3IHN5c2N0bCAobmV0LmNvcmUucnBzX2ZlYXRfbGxjX2FmZmluaXR5KS4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQvc29ja2V0IHJlY2VpdmUgc3RlZXJpbmcgbG9naWMgaW4gbmV0L2NvcmUvZGV2LmMgYW5kIG1vdmVzIHNvY2tfcnBzX3JlY29yZF9mbG93L3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2ggdG8gbm9uLWlubGluZSBleHBvcnRlZCBmdW5jdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSUFNcIixcbiAgICBcIlNNUFwiLFxuICAgIFwiU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJycHNfbGxjX2NoZWNrXCIsXG4gICAgXCJzb2NrX3Jwc19yZWNvcmRfZmxvd1wiLFxuICAgIFwic29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDIChMYXN0IExldmVsIENhY2hlKSBhZmZpbml0eSBjaGVjayBmb3IgUlBTL1JGUyBmbG93IHVwZGF0ZXMgY29udHJvbGxlZCB2aWEgYSBuZXcgc3lzY3RsIChuZXQuY29yZS5ycHNfZmVhdF9sbGNfYWZmaW5pdHkpLiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldC9zb2NrZXQgcmVjZWl2ZSBzdGVlcmluZyBsb2dpYyBpbiBuZXQvY29yZS9kZXYuYyBhbmQgbW92ZXMgc29ja19ycHNfcmVjb3JkX2Zsb3cvc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaCB0byBub24taW5saW5lIGV4cG9ydGVkIGZ1bmN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowOToxMi43MzI3NTM3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQ4Mzk4ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDk6MTIuNzMzNDE1MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDE1NDc3MzMyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTliOWY5NGMzYzQ0MDEzNjJjOGE0NGU3N2ZkOTA1NDkzYmU4NjI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jwcy5oIGIvaW5jbHVkZS9uZXQvcnBzLmhcbmluZGV4IGUzM2M2YTJmYThiYmMuLjZkYWNmMDg4OGE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ycHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcnBzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19uZWVkZWQ7XG4gZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJmc19uZWVkZWQ7XG4rZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHJwc19mZWF0X2xsY19hZmZpbml0eTtcbiBcbiAvKlxuICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFuIFJQUyBtYXAgd2hpY2ggY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aC4gIFRoZVxuQEAgLTU1LDExICs1NiwxNCBAQCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSB7XG4gXG4gI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxuIFxuK2Jvb2wgcnBzX2xsY19jaGVjayh1MzIgb2xkX3ZhbCwgdTMyIG5ld192YWwpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBycHNfcmVjb3JkX3NvY2tfZmxvdyhycHNfdGFnX3B0ciB0YWdfcHRyLCB1MzIgaGFzaClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBoYXNoIFx1MDAyNiBycHNfdGFnX3RvX21hc2sodGFnX3B0cik7XG4gXHR1MzIgdmFsID0gaGFzaCBcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbiBcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcbitcdHUzMiBvbGRfdmFsO1xuIFxuIFx0LyogV2Ugb25seSBnaXZlIGEgaGludCwgcHJlZW1wdGlvbiBjYW4gY2hhbmdlIENQVSB1bmRlciB1cyAqL1xuIFx0dmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNjgsNyArNzIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnBzX3JlY29yZF9zb2NrX2Zsb3cocnBzX3RhZ19wdHIgdGFnX3B0ciwgdTMyIGhhc2gpXG4gXHQvKiBUaGUgZm9sbG93aW5nIFdSSVRFX09OQ0UoKSBpcyBwYWlyZWQgd2l0aCB0aGUgUkVBRF9PTkNFKClcbiBcdCAqIGhlcmUsIGFuZCBhbm90aGVyIG9uZSBpbiBnZXRfcnBzX2NwdSgpLlxuIFx0ICovXG4tXHRpZiAoUkVBRF9PTkNFKHRhYmxlW2luZGV4XS5lbnQpICE9IHZhbClcbitcdG9sZF92YWwgPSBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudCk7XG4rXHRpZiAob2xkX3ZhbCAhPSB2YWwgXHUwMDI2XHUwMDI2IHJwc19sbGNfY2hlY2sob2xkX3ZhbCwgdmFsKSlcbiBcdFx0V1JJVEVfT05DRSh0YWJsZVtpbmRleF0uZW50LCB2YWwpO1xuIH1cbiBcbkBAIC0xMzYsMjUgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZnNfaXNfbmVlZGVkKHZvaWQpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93X2hhc2goaGFzaCk7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4te1xuLSNpZmRlZiBDT05GSUdfUlBTXG4tXHRpZiAoIXJmc19pc19uZWVkZWQoKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0X3NvY2tfcnBzX3JlY29yZF9mbG93KHNrKTtcbi0jZW5kaWZcbi19XG4rdm9pZCBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKF9fdTMyIGhhc2gpO1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc29ja19ycHNfZGVsZXRlX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi5iMjc4MzllYjU5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTA1Miw2ICs1MDUyLDggQEAgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocnBzX25lZWRlZCk7XG4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcmZzX25lZWRlZCBfX3JlYWRfbW9zdGx5O1xuIEVYUE9SVF9TWU1CT0wocmZzX25lZWRlZCk7XG4rc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcnBzX2ZlYXRfbGxjX2FmZmluaXR5IF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChycHNfZmVhdF9sbGNfYWZmaW5pdHkpO1xuIFxuIHN0YXRpYyB1MzIgcmZzX3Nsb3QodTMyIGhhc2gsIHJwc190YWdfcHRyIHRhZ19wdHIpXG4ge1xuQEAgLTUyNjMsNiArNTI2NSw0OCBAQCBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gY3B1O1xuIH1cbiBcbisvKipcbisgKiBycHNfbGxjX2NoZWNrIC0gZGV0ZXJtaW5lIGlmIFJQUyBmbG93IHRhYmxlIHNob3VsZCBiZSB1cGRhdGVkLlxuKyAqIEBvbGRfdmFsOiBwcmV2aW91cyBmbG93IHJlY29yZCB2YWx1ZS5cbisgKiBAbmV3X3ZhbDogdGFyZ2V0IGZsb3cgcmVjb3JkIHZhbHVlLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWNvcmQgbmVlZHMgYW4gdXBkYXRlLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBycHNfbGxjX2NoZWNrKHUzMiBvbGRfdmFsLCB1MzIgbmV3X3ZhbClcbit7XG4rXHR1MzIgb2xkX2NwdSA9IG9sZF92YWwgXHUwMDI2IG5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcbitcdHUzMiBuZXdfY3B1ID0gbmV3X3ZhbCBcdTAwMjYgbmV0X2hvdGRhdGEucnBzX2NwdV9tYXNrO1xuK1xuK1x0LypcbitcdCAqIFJQUyBMTEMgQWZmaW5pdHkgRmVhdHVyZTpcbitcdCAqIFJlZHVjZSBSRlMvQVJGUyBmbG93IHVwZGF0ZXMgYnkgY2hlY2tpbmcgTExDIGFmZmluaXR5LlxuK1x0ICpcbitcdCAqIEZyZXF1ZW50IGZsb3cgdGFibGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBjb25zdGFudCBoYXJkd2FyZSBzdGVlcmluZ1xuK1x0ICogcmVjb25maWd1cmF0aW9ucyAoZS5nLiwgbmRvX3J4X2Zsb3dfc3RlZXIpLCBsZWFkaW5nIHRvIHNpZ25pZmljYW50XG4rXHQgKiBjb250ZW50aW9uIG9uIGRyaXZlciBpbnRlcm5hbCBsb2NrcyAobGlrZSBtbHg1J3MgYXJmc19sb2NrKS5cbitcdCAqXG4rXHQgKiBUaGlzIHN0cmF0ZWd5IG9ubHkgdXBkYXRlcyB0aGUgZmxvdyByZWNvcmQgaWYgaXQgbWlncmF0ZXMgYWNyb3NzIExMQ1xuK1x0ICogYm91bmRhcmllcy4gVGhpcyBtaW5pbWl6ZXMgZXhwZW5zaXZlIGhhcmR3YXJlIHVwZGF0ZXMgd2hpbGUgcHJlc2VydmluZ1xuK1x0ICogY2FjaGUgbG9jYWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cnBzX2ZlYXRfbGxjX2FmZmluaXR5KSkge1xuK1x0XHQvKiBGb3JjZSB1cGRhdGUgaWYgdGhlIHJlY29yZGVkIENQVSBpcyBpbnZhbGlkIG9yIGhhcyBnb25lIG9mZmxpbmUgKi9cbitcdFx0aWYgKG9sZF9jcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfYWN0aXZlKG9sZF9jcHUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBDUFVzIGRvIG5vdCBzaGFyZSBhIGNhY2hlLCBhbGxvdyB0aGUgdXBkYXRlIHRvIHByZXZlbnRcbitcdFx0ICogZXhwZW5zaXZlIHJlbW90ZSBtZW1vcnkgYWNjZXNzZXMgYW5kIGNhY2hlIG1pc3Nlcy5cbitcdFx0ICovXG4rXHRcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG4gXG4gLyoqXG5AQCAtNTMxOCw2ICs1MzYyLDI4IEBAIHN0YXRpYyB2b2lkIHJwc190cmlnZ2VyX3NvZnRpcnEodm9pZCAqZGF0YSlcbiBcbiAjZW5kaWYgLyogQ09ORklHX1JQUyAqL1xuIFxuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoKGhhc2gpO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MKHNvY2tfcnBzX3JlY29yZF9mbG93X2hhc2gpO1xuK1xuK3ZvaWQgc29ja19ycHNfcmVjb3JkX2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbisjaWZkZWYgQ09ORklHX1JQU1xuK1x0aWYgKCFyZnNfaXNfbmVlZGVkKCkpXG4rXHRcdHJldHVybjtcbitcbitcdF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhzayk7XG4rI2VuZGlmXG4rfVxuK0VYUE9SVF9TWU1CT0woc29ja19ycHNfcmVjb3JkX2Zsb3cpO1xuK1xuIC8qIENhbGxlZCBmcm9tIGhhcmRpcnEgKElQSSkgY29udGV4dCAqL1xuIHN0YXRpYyB2b2lkIHRyaWdnZXJfcnhfc29mdGlycSh2b2lkICpkYXRhKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5pbmRleCBlYjM1ZGEzNTU2ZjRhLi45YjY3MDJmNWVhYjE5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmNcbisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHN0YXRpYyBpbnQgcnBzX3NvY2tfZmxvd19zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdGt2ZnJlZV9yY3VfbWlnaHRzbGVlcCh0b2ZyZWUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19SUFMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX05FVF9GTE9XX0xJTUlUXG5AQCAtNTU0LDYgKzU1NSwxMyBAQCBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0ge1xuIFx0XHQubW9kZVx0XHQ9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcnBzX3NvY2tfZmxvd19zeXNjdGxcbiBcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInJwc19mZWF0X2xsY19hZmZpbml0eVwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnJwc19mZWF0X2xsY19hZmZpbml0eS5rZXksXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YocnBzX2ZlYXRfbGxjX2FmZmluaXR5LmtleSksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvX3N0YXRpY19rZXlcbitcdH0sXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19ORVRfRkxPV19MSU1JVFxuIFx0e1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDk6MTIuNzMzNDE2NjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQyMTg0NTYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBSUFMgTExDIEFmZmluaXR5IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLiBGaXJzdCwgSSdsbCBtZXRpY3Vsb3VzbHkgZ28gb3ZlciB0aGUgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIGFyZWFzIGZvciBjb25jZXJuLlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL25ldC9ycHMuaGAsIGl0IGludHJvZHVjZXMgYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIHRoZSBgcnBzX2xsY19jaGVja2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBvbGRfdmFsYCBpbiBgcnBzX3JlY29yZF9zb2NrX2Zsb3dgIGlzIHJlYWQgdXNpbmcgYFJFQURfT05DRWAsIGFuZCB0aGVuIHBhc3NlZCB0byBgcnBzX2xsY19jaGVja2AgYmVmb3JlIGFueSB3cml0ZXMuIEdvb2QsIHNlZW1zIHNhZmUgb24gdGhlIHN1cmZhY2UuIEFsc28sIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB3ZXJlIG1vdmVkIGZyb20gdGhlIGhlYWRlciBmaWxlIHRvIGBuZXQvY29yZS9kZXYuY2AuXG5cbk1vdmluZyBvbiB0byBgbmV0L2NvcmUvZGV2LmNgLCB3ZSBzZWUgdGhlIGRlZmluaXRpb24gb2YgYHJwc19mZWF0X2xsY19hZmZpbml0eWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcnBzX2xsY19jaGVja2AuIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gVGhlIGNoZWNrIGV4dHJhY3RzIENQVSBhZmZpbml0eSBpbmZvcm1hdGlvbiBiYXNlZCBvbiBhIENQVSBtYXNrLiBUaGUgdXNlIG9mIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIG9sZCBDUFUgaXMgaW52YWxpZCBvciB0aGUgQ1BVcyBkb24ndCBzaGFyZSB0aGUgc2FtZSBjYWNoZS4gVGhlIGBuZXRfaG90ZGF0YS5ycHNfY3B1X21hc2tgIGlzIGFsc28gd29ydGggYSBjbG9zZXIgbG9vayBpbiBvdGhlciBhcmVhcy4gVGhlIGZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYXJlIG5vdyBleHBvcnRlZC5cblxuRmluYWxseSwgaW4gYG5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jYCwgdGhlIHBhdGNoIGFkZHMgYSBzeXNjdGwgZW50cnkgZm9yIGBycHNfZmVhdF9sbGNfYWZmaW5pdHlgIHVzaW5nIGBwcm9jX2RvX3N0YXRpY19rZXlgLiBUaGlzIGlzIHdoZXJlIG15IGZvY3VzIHNoYXJwZW5zLiBUaGUgYmlnZ2VzdCByaXNrIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBwcm9jX2RvX3N0YXRpY19rZXlgIGhhbmRsZXIgaXMgc2FmZS4gTGV0IG1lIGNoZWNrIHRoZSBvdGhlciB1c2FnZXMgb2YgYHByb2NfZG9fc3RhdGljX2tleWAgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3RhbmRhcmQgcHJhY3RpY2VzIG9yIHBvdGVudGlhbCByaXNrcy5cblxuTm93LCBsZXQncyBzcGVjaWZpY2FsbHkgbG9vayBmb3IgYW55IHJpc2tzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZT8gYHByb2NfZG9fc3RhdGljX2tleWAgcmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIGBycHNfZmVhdF9sbGNfYWZmaW5pdHkua2V5YC4gSXMgdGhpcyBhIHN0YW5kYXJkL3NhZmUgcHJhY3RpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19kb19zdGF0aWNfa2V5YCBpbml0aWFsaXplcyB0aGlzIGNvcnJlY3RseS4gSSB3aWxsIGRvIGEgcXVpY2sgZ3JlcCBvbiB0aGUgY29kZWJhc2UgZm9yIGBwcm9jX2RvX3N0YXRpY19rZXlgIHRvIGJlIGV4dHJhIHN1cmUuXG5cbkFzIGZvciBvdGhlciBwb3RlbnRpYWwgS01TQU4gZmxhZ3MgLSBhcmUgdGhlcmUgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IGBycHNfbGxjX2NoZWNrYCBvcGVyYXRlcyBvbiBzY2FsYXIgYHUzMmAgYXJndW1lbnRzIHdoaWNoIGFyZSBpbml0aWFsaXplZCwgc28gdGhhdCBpcyBub3QgYSBjb25jZXJuLiBUaGUgYG9sZF92YWxgIGlzIGluaXRpYWxpemVkIGJ5IGBSRUFEX09OQ0UodGFibGVbaW5kZXhdLmVudClgIGFuZCBgdmFsYCBpcyBpbml0aWFsaXplZCBieSBiaXR3aXNlIG9wZXJhdGlvbnMgc28gdGhpcyBkb2Vzbid0IHNlZW0gbGlrZSB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCByZWFkcyBvbiB0aGlzIGZyb250LiBGdXJ0aGVybW9yZSwgdGhlIGZ1bmN0aW9ucyBkb24ndCBjb3B5IGhlYXAvc3RhY2sgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHBhZGRpbmcgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoZXMgZWl0aGVyLiBPdmVyYWxsLCBpdCAqYXBwZWFycyogc2FmZSwgYnV0IEknbGwgZG91YmxlLWNoZWNrIGBwcm9jX2RvX3N0YXRpY19rZXlgIHVzYWdlcyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MTA6MjYuOTUxODc5MDMxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3Nzg3NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZG9fc3RhdGljX2tleVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2N0bC5oPTk3PWludCBwcm9jX2RvX2xhcmdlX2JpdG1hcChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCBkaXIsIHZvaWQgKmJ1ZixcXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTk4LVxcdFxcdFxcdCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaDo5OTppbnQgcHJvY19kb19zdGF0aWNfa2V5KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTAwLVxcdFxcdCAgICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9MTM2MT1pbnQgcHJvY19kb19sYXJnZV9iaXRtYXAoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTM2OS0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKVxcbmtlcm5lbC9zeXNjdGwuYzoxMzcwOmludCBwcm9jX2RvX3N0YXRpY19rZXkoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTEzNzEtXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTM1PUVYUE9SVF9TWU1CT0wocGFnZV9hbGxvY190YWdnaW5nX29wcyk7XFxuLS1cXG5saWIvYWxsb2NfdGFnLmMtOTM4LS8qXFxubGliL2FsbG9jX3RhZy5jOjkzOTogKiBOb3QgdXNpbmcgcHJvY19kb19zdGF0aWNfa2V5KCkgZGlyZWN0bHkgdG8gcHJldmVudCBlbmFibGluZyBwcm9maWxpbmdcXG5saWIvYWxsb2NfdGFnLmMtOTQwLSAqIGFmdGVyIGl0IHdhcyBzaHV0IGRvd24uXFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTQyPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbmxpYi9hbGxvY190YWcuYy05NjEtXFxubGliL2FsbG9jX3RhZy5jOjk2MjpcXHRyZXR1cm4gcHJvY19kb19zdGF0aWNfa2V5KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG5saWIvYWxsb2NfdGFnLmMtOTYzLX1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNjg9RVhQT1JUX1NZTUJPTChwYWdlX2FsbG9jX3RhZ2dpbmdfb3BzKTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEyNzEtLypcXG5tbS9hbGxvY190YWcuYzoxMjcyOiAqIE5vdCB1c2luZyBwcm9jX2RvX3N0YXRpY19rZXkoKSBkaXJlY3RseSB0byBwcmV2ZW50IGVuYWJsaW5nIHByb2ZpbGluZ1xcbm1tL2FsbG9jX3RhZy5jLTEyNzMtICogYWZ0ZXIgaXQgd2FzIHNodXQgZG93bi5cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNzU9c3RhdGljIGludCBwcm9jX21lbV9wcm9maWxpbmdfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTI5NC1cXG5tbS9hbGxvY190YWcuYzoxMjk1OlxcdHJldHVybiBwcm9jX2RvX3N0YXRpY19rZXkodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbm1tL2FsbG9jX3RhZy5jLTEyOTYtfVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTI5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfYWxsb2NhdGlvbl9wcm9maWxpbmdfc3lzY3Rsc1tdID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTMwOS1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG5tbS9hbGxvY190YWcuYzoxMzEwOlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcXG5tbS9hbGxvY190YWcuYy0xMzExLVxcdH0sXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzE9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU2Mi1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1NjM6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb19zdGF0aWNfa2V5XFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTY0LVxcdH0sXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NTktXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NjYwOlxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9fc3RhdGljX2tleSxcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy02NjEtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MTA6MjguNjU5NjczOTE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NTcwNTU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENQVSBDYWNoZSBTaGFyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNwdXNfc2hhcmVfY2FjaGUob2xkX2NwdSwgbmV3X2NwdSlgLiBJJ3ZlIGdvdCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY2FjaGUgdG9wb2xvZ3kgaGVyZS4gV2hhdCBhbSBJIHJlYWxseSB0cnlpbmcgdG8gZmlndXJlIG91dD8gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbidzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHdlIGRldGVybWluZSBpZiBtb3ZpbmcgZnJvbSBgb2xkX2NwdWAgdG8gYG5ld19jcHVgIGhhcyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHJhbWlmaWNhdGlvbnMgc3RlbW1pbmcgZnJvbSBjYWNoZSBjb250ZW50aW9uLCBvciBjYWNoZSBhZmZpbml0eSBpc3N1ZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zLiBMZXQncyBzZWUuLi4gaXMgaXQgYXMgc2ltcGxlIGFzIGNoZWNraW5nIHdoZXRoZXIgdGhleSdyZSBvbiB0aGUgc2FtZSBOVU1BIG5vZGUgYW5kIHNoYXJlIHRoZSBzYW1lIGxldmVscyBvZiBjYWNoZT8gT3IgaXMgaXQgbW9yZSBjb21wbGV4LCBpbnZvbHZpbmcgc29tZSBraW5kIG9mIG51YW5jZWQgYW5hbHlzaXMgb2YgY2FjaGUgaGllcmFyY2h5IGFuZCBjb2hlcmVuY2UgZG9tYWlucz8gSSd2ZSBnb3QgdG8gcmVtZW1iZXIgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvZiBoeXBlcnRocmVhZGluZyB0b28uIERvZXMgdGhpcyBmdW5jdGlvbiBhY2NvdW50IGZvciB0aGF0LCBvciBpcyBpdCBhYnN0cmFjdGVkIGF3YXkgYXQgYSBsb3dlciBsZXZlbD8gQWxyaWdodCwgbGV0J3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gc2VlIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkgc3VzcGVjdCBpdCdzIGludm9sdmVkIGluIHNvbWV0aGluZyBsaWtlIENQVSBob3RwbHVnZ2luZywgb3IgbWF5YmUgZXZlbiB0YXNrIG1pZ3JhdGlvbi4gS25vd2luZyB0aGF0IGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBzZXZlcml0eSBvZiBhbnkgcG90ZW50aWFsIGNhY2hlLXJlbGF0ZWQgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMDozNC4zMTY3MzI5OTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3ODM4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3B1c19zaGFyZV9jYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfY29tcGxldGVfbmVlZF9pcGkoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTI1OS1cXHQgICAgKCF0ZXN0X2JpdChRVUVVRV9GTEFHX1NBTUVfRk9SQ0UsIFxcdTAwMjZycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLW1xLmM6MTI2MDpcXHQgICAgIGNwdXNfc2hhcmVfY2FjaGUoY3B1LCBycS1cXHUwMDNlbXFfY3R4LVxcdTAwM2VjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLW1xLmMtMTI2MS1cXHQgICAgIGNwdXNfZXF1YWxfY2FwYWNpdHkoY3B1LCBycS1cXHUwMDNlbXFfY3R4LVxcdTAwM2VjcHUpKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvdG9wb2xvZ3kuaD0yMDI9Ym9vbCBjcHVzX2VxdWFsX2NhcGFjaXR5KGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3RvcG9sb2d5Lmg6MjAzOmJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90b3BvbG9neS5oLTIwNC1ib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Mzk4ND1ib29sIGNwdXNfZXF1YWxfY2FwYWNpdHkoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTQtXFxua2VybmVsL3NjaGVkL2NvcmUuYzozOTk1OmJvb2wgY3B1c19zaGFyZV9jYWNoZShpbnQgdGhpc19jcHUsIGludCB0aGF0X2NwdSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTM5OTYte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz00MDE1PXN0YXRpYyBpbmxpbmUgYm9vbCB0dHd1X3F1ZXVlX2NvbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQyLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDA0MzpcXHRpZiAoIWNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIGNwdSkpXFxua2VybmVsL3NjaGVkL2NvcmUuYy00MDQ0LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9NDU4PXMzMiBzY3hfc2VsZWN0X2NwdV9kZmwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzMzIgcHJldl9jcHUsIHU2NCB3YWtlX2ZsYWdzLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTMzLVxcdFxcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzo1MzQ6XFx0XFx0aWYgKGlzX3ByZXZfYWxsb3dlZCBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKGNwdSwgcHJldl9jcHUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtNTM1LVxcdFxcdCAgICBzY3hfaWRsZV90ZXN0X2FuZF9jbGVhcl9jcHUocHJldl9jcHUpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgzNTA9d2FrZV9hZmZpbmVfaWRsZShpbnQgdGhpc19jcHUsIGludCBwcmV2X2NwdSwgaW50IHN5bmMpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjMtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MzY0OlxcdGlmIChhdmFpbGFibGVfaWRsZV9jcHUodGhpc19jcHUpIFxcdTAwMjZcXHUwMDI2IGNwdXNfc2hhcmVfY2FjaGUodGhpc19jcHUsIHByZXZfY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgzNjUtXFx0XFx0cmV0dXJuIGF2YWlsYWJsZV9pZGxlX2NwdShwcmV2X2NwdSkgPyBwcmV2X2NwdSA6IHRoaXNfY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz04OTQ5PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfc2libGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2LCBpbnQgdGFyZ2V0KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTc4LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6ODk3OTpcXHRpZiAocHJldiAhPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjYgY3B1c19zaGFyZV9jYWNoZShwcmV2LCB0YXJnZXQpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy04OTgwLVxcdCAgICBjaG9vc2VfaWRsZV9jcHUocHJldiwgcCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtOTAxMC1cXHQgICAgcmVjZW50X3VzZWRfY3B1ICE9IHRhcmdldCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6OTAxMTpcXHQgICAgY3B1c19zaGFyZV9jYWNoZShyZWNlbnRfdXNlZF9jcHUsIHRhcmdldCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwMTItXFx0ICAgIGNob29zZV9pZGxlX2NwdShyZWNlbnRfdXNlZF9jcHUsIHApIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwNTAtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo5MDUxOlxcdFxcdGlmICghaGFzX2lkbGVfY29yZSBcXHUwMDI2XFx1MDAyNiBjcHVzX3NoYXJlX2NhY2hlKHByZXYsIHRhcmdldCkpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTkwNTItXFx0XFx0XFx0aSA9IHNlbGVjdF9pZGxlX3NtdChwLCBzZCwgcHJldik7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNjk4PXN0YXRpYyBlbnVtIGxsY19taWcgY2FuX21pZ3JhdGVfbGxjX3Rhc2soaW50IHNyY19jcHUsIGludCBkc3RfY3B1LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcwOS1cXHRjcHUgPSBSRUFEX09OQ0UobW0tXFx1MDAzZXNjX3N0YXQuY3B1KTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzEwOlxcdGlmIChjcHUgXFx1MDAzYyAwIHx8IGNwdXNfc2hhcmVfY2FjaGUoc3JjX2NwdSwgZHN0X2NwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcxMS1cXHRcXHRyZXR1cm4gbWlnX3VucmVzdHJpY3RlZDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjAtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMTpcXHRpZiAoY3B1c19zaGFyZV9jYWNoZShkc3RfY3B1LCBjcHUpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTA3MjItXFx0XFx0dG9fcHJlZiA9IHRydWU7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDcyMzpcXHRlbHNlIGlmIChjcHVzX3NoYXJlX2NhY2hlKHNyY19jcHUsIGNwdSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDcyNC1cXHRcXHR0b19wcmVmID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwNzQxPWFsYl9icmVha19sbGMoc3RydWN0IGxiX2VudiAqZW52KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDc0NS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwNzQ2OlxcdGlmIChjcHVzX3NoYXJlX2NhY2hlKGVudi1cXHUwMDNlc3JjX2NwdSwgZW52LVxcdTAwM2Vkc3RfY3B1KSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwNzQ3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jPTY2MD1zdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbnMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpXFxuLS1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy02NzItICogb2YgdGhlIGRvbWFpbiksIHRoaXMgYWxsb3dzIHVzIHRvIHF1aWNrbHkgdGVsbCBpZiB0d28gQ1BVcyBhcmUgaW4gdGhlIHNhbWVcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo2NzM6ICogY2FjaGUgZG9tYWluLCBzZWUgY3B1c19zaGFyZV9jYWNoZSgpLlxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTY3NC0gKi9cXG4tLVxcbmtlcm5lbC93b3JrcXVldWUuYz04NTM5PXN0YXRpYyB2b2lkIF9faW5pdCBwcmVjb21wdXRlX2NhY2hlX3NoYXJkX2lkcyh2b2lkKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1NjEtLypcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2MjogKiBjcHVzX3NoYXJlX2NhY2hlX3NoYXJkIC0gdGVzdCB3aGV0aGVyIHR3byBDUFVzIGJlbG9uZyB0byB0aGUgc2FtZSBjYWNoZSBzaGFyZFxcbmtlcm5lbC93b3JrcXVldWUuYy04NTYzLSAqXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU2Ni0gKi9cXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU2NzpzdGF0aWMgYm9vbCBfX2luaXQgY3B1c19zaGFyZV9jYWNoZV9zaGFyZChpbnQgY3B1MCwgaW50IGNwdTEpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1Njgte1xcbmtlcm5lbC93b3JrcXVldWUuYzo4NTY5OlxcdGlmICghY3B1c19zaGFyZV9jYWNoZShjcHUwLCBjcHUxKSlcXG5rZXJuZWwvd29ya3F1ZXVlLmMtODU3MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9ODU4Mj12b2lkIF9faW5pdCB3b3JrcXVldWVfaW5pdF90b3BvbG9neSh2b2lkKVxcbi0tXFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1ODgtXFx0aW5pdF9wb2RfdHlwZShcXHUwMDI2d3FfcG9kX3R5cGVzW1dRX0FGRk5fU01UXSwgY3B1c19zaGFyZV9zbXQpO1xcbmtlcm5lbC93b3JrcXVldWUuYzo4NTg5OlxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX0NBQ0hFXSwgY3B1c19zaGFyZV9jYWNoZSk7XFxua2VybmVsL3dvcmtxdWV1ZS5jLTg1OTAtXFx0cHJlY29tcHV0ZV9jYWNoZV9zaGFyZF9pZHMoKTtcXG5rZXJuZWwvd29ya3F1ZXVlLmM6ODU5MTpcXHRpbml0X3BvZF90eXBlKFxcdTAwMjZ3cV9wb2RfdHlwZXNbV1FfQUZGTl9DQUNIRV9TSEFSRF0sIGNwdXNfc2hhcmVfY2FjaGVfc2hhcmQpO1xcbmtlcm5lbC93b3JrcXVldWUuYy04NTkyLVxcdGluaXRfcG9kX3R5cGUoXFx1MDAyNndxX3BvZF90eXBlc1tXUV9BRkZOX05VTUFdLCBjcHVzX3NoYXJlX251bWEpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTI3NT1ib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMwMC1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzAxOlxcdFxcdGlmICghY3B1c19zaGFyZV9jYWNoZShvbGRfY3B1LCBuZXdfY3B1KSlcXG5uZXQvY29yZS9kZXYuYy01MzAyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMDozNS45NDI1MjQ1MDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1Mzg1ODIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIgQ29yZSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQ1BVIGNhY2hlIHNoYXJpbmcsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGBrZXJuZWwvc2NoZWQvY29yZS5jYCBpcyB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGBjcHVzX3NoYXJlX2NhY2hlYC4gVGhhdCBuYW1lIGlzIHByZXR0eSBpbmRpY2F0aXZlIG9mIHdoYXQgd2UncmUgYWZ0ZXIsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGVyZSB0ZWxscyB1cyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcmVsYXRpb25zaGlwIGJldHdlZW4gQ1BVcyBhbmQgdGhlaXIgY2FjaGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIHZpZXdzIGFuZCBtYW5hZ2VzIGNhY2hlIHNoYXJpbmcgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIG1vZGVybiBtdWx0aS1jb3JlIHN5c3RlbXMuIEkgd2FudCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYXNvbnMgYWJvdXQgaXQgd2hlbiBtYWtpbmcgc2NoZWR1bGluZyBkZWNpc2lvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgYWN0dWFsIGxvZ2ljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCBDUFVzIGFyZSBzaGFyaW5nIGEgY2FjaGUgYXQgYW55IGdpdmVuIG1vbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjE0LjQ4MTExMDEwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDA4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTkwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM5OTE6XFx0XFxuMzk5MjpcXHRcXHRyZXR1cm4gYXJjaF9zY2FsZV9jcHVfY2FwYWNpdHkodGhpc19jcHUpID09IGFyY2hfc2NhbGVfY3B1X2NhcGFjaXR5KHRoYXRfY3B1KTtcXG4zOTkzOlxcdH1cXG4zOTk0OlxcdFxcbjM5OTU6XFx0Ym9vbCBjcHVzX3NoYXJlX2NhY2hlKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbjM5OTY6XFx0e1xcbjM5OTc6XFx0XFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxcbjM5OTg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzk5OTpcXHRcXG40MDAwOlxcdFxcdHJldHVybiBwZXJfY3B1KHNkX2xsY19pZCwgdGhpc19jcHUpID09IHBlcl9jcHUoc2RfbGxjX2lkLCB0aGF0X2NwdSk7XFxuNDAwMTpcXHR9XFxuNDAwMjpcXHRcXG40MDAzOlxcdC8qXFxuNDAwNDpcXHQgKiBXaGV0aGVyIENQVXMgYXJlIHNoYXJlIGNhY2hlIHJlc291cmNlcywgd2hpY2ggbWVhbnMgTExDIG9uIG5vbi1jbHVzdGVyXFxuNDAwNTpcXHQgKiBtYWNoaW5lcyBhbmQgTExDIHRhZyBvciBMMiBvbiBtYWNoaW5lcyB3aXRoIGNsdXN0ZXJzLlxcbjQwMDY6XFx0ICovXFxuNDAwNzpcXHRib29sIGNwdXNfc2hhcmVfcmVzb3VyY2VzKGludCB0aGlzX2NwdSwgaW50IHRoYXRfY3B1KVxcbjQwMDg6XFx0e1xcbjQwMDk6XFx0XFx0aWYgKHRoaXNfY3B1ID09IHRoYXRfY3B1KVxcbjQwMTA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdHJldHVybiBwZXJfY3B1KHNkX3NoYXJlX2lkLCB0aGlzX2NwdSkgPT0gcGVyX2NwdShzZF9zaGFyZV9pZCwgdGhhdF9jcHUpO1xcbjQwMTM6XFx0fVxcbjQwMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjE0LjQ4MTQ1MzAzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTQ5MDA3MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBSUFMgRmxvdyBSZWNvcmRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFJQUyBmbG93IHJlY29yZGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5LCB0aGUgYHJwc19yZWNvcmRfc29ja19mbG93YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9ycHMuaGAuIExldCdzIHB1bGwgdGhhdCB1cCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGFyZ3VtZW50cywgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIGdpdmVuIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMgYW5kIGZsb3cgY29udGV4dHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJQUyBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvciByZWxhdGVkIHRvIGZsb3cgYWZmaW5pdHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgc2hhcmVkIHNvY2tldHMgYW5kIHdoZXRoZXIgaXQgY29ycmVjdGx5IGludGVyYWN0cyB3aXRoIHZhcmlvdXMgb2ZmbG9hZCBjb25maWd1cmF0aW9ucy4gR290dGEgZW5zdXJlIGV2ZXJ5dGhpbmcncyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yIGZyb20gYSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSBwZXJzcGVjdGl2ZSB0b28uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMToyMi42MzA0NjI2MjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcnBzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0fTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0I2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZlxcbiAgNTg6XFx0XFxuICA1OTpcXHRib29sIHJwc19sbGNfY2hlY2sodTMyIG9sZF92YWwsIHUzMiBuZXdfdmFsKTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHJwc190YWdfcHRyIHRhZ19wdHIsIHUzMiBoYXNoKVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0dW5zaWduZWQgaW50IGluZGV4ID0gaGFzaCBcXHUwMDI2IHJwc190YWdfdG9fbWFzayh0YWdfcHRyKTtcXG4gIDY0OlxcdFxcdHUzMiB2YWwgPSBoYXNoIFxcdTAwMjYgfm5ldF9ob3RkYXRhLnJwc19jcHVfbWFzaztcXG4gIDY1OlxcdFxcdHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZTtcXG4gIDY2OlxcdFxcdHUzMiBvbGRfdmFsO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQvKiBXZSBvbmx5IGdpdmUgYSBoaW50LCBwcmVlbXB0aW9uIGNhbiBjaGFuZ2UgQ1BVIHVuZGVyIHVzICovXFxuICA2OTpcXHRcXHR2YWwgfD0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0dGFibGUgPSBycHNfdGFnX3RvX3RhYmxlKHRhZ19wdHIpO1xcbiAgNzI6XFx0XFx0LyogVGhlIGZvbGxvd2luZyBXUklURV9PTkNFKCkgaXMgcGFpcmVkIHdpdGggdGhlIFJFQURfT05DRSgpXFxuICA3MzpcXHRcXHQgKiBoZXJlLCBhbmQgYW5vdGhlciBvbmUgaW4gZ2V0X3Jwc19jcHUoKS5cXG4gIDc0OlxcdFxcdCAqL1xcbiAgNzU6XFx0XFx0b2xkX3ZhbCA9IFJFQURfT05DRSh0YWJsZVtpbmRleF0uZW50KTtcXG4gIDc2OlxcdFxcdGlmIChvbGRfdmFsICE9IHZhbCBcXHUwMDI2XFx1MDAyNiBycHNfbGxjX2NoZWNrKG9sZF92YWwsIHZhbCkpXFxuICA3NzpcXHRcXHRcXHRXUklURV9PTkNFKHRhYmxlW2luZGV4XS5lbnQsIHZhbCk7XFxuICA3ODpcXHR9XFxuICA3OTpcXHRcXG4gIDgwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfc29ja19ycHNfcmVjb3JkX2Zsb3dfaGFzaChfX3UzMiBoYXNoKVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0aWYgKCFoYXNoKVxcbiAgODU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgODc6XFx0XFx0dGFnX3B0ciA9IFJFQURfT05DRShuZXRfaG90ZGF0YS5ycHNfc29ja19mbG93X3RhYmxlKTtcXG4gIDg4OlxcdFxcdGlmICh0YWdfcHRyKVxcbiAgODk6XFx0XFx0XFx0cnBzX3JlY29yZF9zb2NrX2Zsb3codGFnX3B0ciwgaGFzaCk7XFxuICA5MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDkxOlxcdH1cXG4gIDkyOlxcdFxcbiAgOTM6XFx0c3RhdGljIGlubGluZSB2b2lkIF9zb2NrX3Jwc19yZWNvcmRfZmxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuICA5NDpcXHR7XFxuICA5NTpcXHRcXHQvKiBSZWFkaW5nIHNrLVxcdTAwM2Vza19yeGhhc2ggbWlnaHQgaW5jdXIgYW4gZXhwZW5zaXZlIGNhY2hlIGxpbmVcXG4gIDk2OlxcdFxcdCAqIG1pc3MuXFxuICA5NzpcXHRcXHQgKlxcbiAgOTg6XFx0XFx0ICogVENQX0VTVEFCTElTSEVEIGRvZXMgY292ZXIgYWxtb3N0IGFsbCBzdGF0ZXMgd2hlcmUgUkZTXFxuICA5OTpcXHRcXHQgKiBtaWdodCBiZSB1c2VmdWwsIGFuZCBpcyBjaGVhcGVyIFsxXSB0aGFuIHRlc3RpbmcgOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDoxMToyMi42MzA1MzQyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2NTA1ODk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gb3B0aW1pemluZyBSRlMvQVJGUyBmbG93IHVwZGF0ZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYSBjaGVjayBmb3IgTExDIGFmZmluaXR5IChgcnBzX2xsY19jaGVja2ApLiBUaGF0J3MgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgd2hpY2ggaXMgZ29vZC4gV2UgYWxzbyBzZWUgYSBuZXcgc3lzY3RsIGJvb2xlYW4ga25vYiBiZWluZyBpbnRyb2R1Y2VkLCBgcnBzX2ZlYXRfbGxjX2FmZmluaXR5YC4gSW50ZXJlc3RpbmcuXG5cbk5vdywgSSBzZWUgdGhlIGlubGluZWQgZnVuY3Rpb25zIGBzb2NrX3Jwc19yZWNvcmRfZmxvd19oYXNoYCBhbmQgYHNvY2tfcnBzX3JlY29yZF9mbG93YCBhcmUgYmVpbmcgbW92ZWQuIFRoaXMgaXMgdXN1YWxseSB0byBtYWtlIHRoZW0gY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBOb3RoaW5nIGluaGVyZW50bHkgZGFuZ2Vyb3VzLCBidXQgd2UgYWx3YXlzIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGVyZSB0aGV5IGFyZSBtb3ZlZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uczogVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE5vcGUsIHRoYW5rZnVsbHkuIFBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSBvciBhY3Jvc3Mga2VybmVsIGJvdW5kYXJpZXM/IE5vIGlzc3VlcyB0aGVyZSBlaXRoZXIuIEJ1ZmZlciBzaXplcywgYWxsb2NhdGlvbnMsIHN0cnVjdCBsYXlvdXRzPyBObyBjaGFuZ2VzLCB3aGljaCBpcyBhIHJlbGllZi4gTm8gbmV3IHN0YWNrIGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Tbywgc3RhbmRhcmQgbWVtb3J5IHNhbml0aXplcnMg4oCTIEtBU0FOLCBMT0NLREVQLCBVQlNBTiDigJMgcGx1cyB0aGUgc3RhbmRhcmQgdGVzdGluZyByZWdpbWUgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG9idmlvdXMgcmVkIGZsYWdzIHRoYXQgd291bGQganVzdGlmeSBpbnZva2luZyBLTVNBTiBmb3IgdGhpcy4gV2UgYXJlbid0IGRlYWxpbmcgd2l0aCBhbnkgb2YgdGhlIHN1YnRsZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB1bmNvdmVyLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gc2FmZWx5IG1vdmUgZm9yd2FyZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBLTVNBTiBzY2FuIGZvciB0aGlzIHBhdGNoLiBJIHdpbGwgbWFrZSBzdXJlIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGlzIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZCwgZXhwbGFpbmluZyBleGFjdGx5IHdoeSB3ZSBhcmUgY29uZmlkZW50IGluIHJlbHlpbmcgb24gZXhpc3RpbmcgdG9vbHMgYW5kIHRlc3RpbmcuIFRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjEzLCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjExOjM0LjI4MTEyNjYyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBMTEMtYWZmaW5pdHktYmFzZWQgb3B0aW1pemF0aW9uIGZvciBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAvIFJlY2VpdmUgRmxvdyBTdGVlcmluZyAoUkZTKSBmbG93IHRhYmxlIHVwZGF0ZXMsIGFkZHMgYSBjb3JyZXNwb25kaW5nIHN5c2N0bCBlbnRyeSAocnBzX2ZlYXRfbGxjX2FmZmluaXR5KSBoYW5kbGVkIGJ5IHByb2NfZG9fc3RhdGljX2tleSwgYW5kIG91dC1vZi1saW5lcy9leHBvcnRzIHNvY2tfcnBzX3JlY29yZF9mbG93eyxfaGFzaH0uXFxuXFxuQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBwYXRjaCB3b3JrIHdpdGggc2NhbGFyIHZhbHVlcyAodTMyIGhhc2gvY3B1IElEcykgYW5kIHN0YXRpYyBrZXlzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZDsgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gTExDLWFmZmluaXR5LWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVjZWl2ZSBQYWNrZXQgU3RlZXJpbmcgLyBSZWNlaXZlIEZsb3cgU3RlZXJpbmcgKFJGUykgZmxvdyB0YWJsZSB1cGRhdGVzLCBhZGRzIGEgY29ycmVzcG9uZGluZyBzeXNjdGwgZW50cnkgKHJwc19mZWF0X2xsY19hZmZpbml0eSkgaGFuZGxlZCBieSBwcm9jX2RvX3N0YXRpY19rZXksIGFuZCBvdXQtb2YtbGluZXMvZXhwb3J0cyBzb2NrX3Jwc19yZWNvcmRfZmxvd3ssX2hhc2h9LlxcblxcbkFsbCBvcGVyYXRpb25zIGluIHRoaXMgcGF0Y2ggd29yayB3aXRoIHNjYWxhciB2YWx1ZXMgKHUzMiBoYXNoL2NwdSBJRHMpIGFuZCBzdGF0aWMga2V5cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3Iga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQ7IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvj7w2[1] Phase: Succeeded StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2] Phase: Succeeded StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 14:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 14:11:40 +0000 UTC FinishedAt: 2026-09-02 14:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvj7w2/series-workflowvj7w2-convert-artifact-2875547468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 14:11:51 +0000 UTC FinishedAt: 2026-09-02 14:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 14:11:51 +0000 UTC FinishedAt: 2026-09-02 14:27:52 +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:*ea88046c-71e7-40e6-9fc3-cc630a47dfe9,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-workflowvj7w2/series-workflowvj7w2-convert-artifact-2875547468/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": "4b25c9a0-92b4-437a-930d-f30ee56150d1", "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-workflowvj7w2/series-workflowvj7w2-build-action-2704498042/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 14:11:51 +0000 UTC FinishedAt: 2026-09-02 14:27:42 +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:*ea88046c-71e7-40e6-9fc3-cc630a47dfe9,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-workflowvj7w2/series-workflowvj7w2-convert-artifact-2875547468/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": "4b25c9a0-92b4-437a-930d-f30ee56150d1", "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-workflowvj7w2/series-workflowvj7w2-build-action-2704498042/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 14:27:52 +0000 UTC FinishedAt: 2026-09-02 14:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 14:27:52 +0000 UTC FinishedAt: 2026-09-02 14:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 14:27:52 +0000 UTC FinishedAt: 2026-09-02 14:28:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 14:27:52 +0000 UTC FinishedAt: 2026-09-02 14:27:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvj7w2/series-workflowvj7w2-convert-artifact-3209247883/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 14:28:02 +0000 UTC FinishedAt: 2026-09-02 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 14:28:02 +0000 UTC FinishedAt: 2026-09-02 14:29:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b25c9a0-92b4-437a-930d-f30ee56150d1,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-workflowvj7w2/series-workflowvj7w2-build-action-2704498042/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-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 14:29:56 +0000 UTC FinishedAt: 2026-09-02 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 14:29:56 +0000 UTC FinishedAt: 2026-09-02 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 14:29:56 +0000 UTC FinishedAt: 2026-09-02 14:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 14:29:56 +0000 UTC FinishedAt: 2026-09-02 14:46:37 +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:*ea88046c-71e7-40e6-9fc3-cc630a47dfe9,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-workflowvj7w2/series-workflowvj7w2-convert-artifact-3209247883/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": "f769fb6a-cd09-4e7d-bb1d-f3d849488c05", "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-workflowvj7w2/series-workflowvj7w2-build-action-1583602479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 14:29:56 +0000 UTC FinishedAt: 2026-09-02 14:46:27 +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:*ea88046c-71e7-40e6-9fc3-cc630a47dfe9,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-workflowvj7w2/series-workflowvj7w2-convert-artifact-3209247883/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": "f769fb6a-cd09-4e7d-bb1d-f3d849488c05", "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-workflowvj7w2/series-workflowvj7w2-build-action-1583602479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 14:46:37 +0000 UTC FinishedAt: 2026-09-02 14:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 14:46:37 +0000 UTC FinishedAt: 2026-09-02 14:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 14:46:37 +0000 UTC FinishedAt: 2026-09-02 14:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 14:46:37 +0000 UTC FinishedAt: 2026-09-02 14:48:14 +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:*f769fb6a-cd09-4e7d-bb1d-f3d849488c05,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-workflowvj7w2/series-workflowvj7w2-build-action-1583602479/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-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +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":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"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:*4b25c9a0-92b4-437a-930d-f30ee56150d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f769fb6a-cd09-4e7d-bb1d-f3d849488c05,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-workflowvj7w2/series-workflowvj7w2-build-action-2704498042/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-workflowvj7w2/series-workflowvj7w2-build-action-1583602479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 14:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 14:48:29 +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":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"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-workflowvj7w2/series-workflowvj7w2-convert-artifact-3118888484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 14:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 14:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 14:48:24 +0000 UTC FinishedAt: 2026-09-02 14:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 14:48:34 +0000 UTC FinishedAt: 2026-09-02 17:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvj7w2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rps_llc_check","sock_rps_record_flow","sock_rps_record_flow_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c29b37ed7a4d9856ed758a82282456d69cee2ed1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RPS","SMP","SYSFS"],"series_id":"4d57ad63-dadf-4697-947b-6df9aca89ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 14:48:34 +0000 UTC FinishedAt: 2026-09-02 17:51:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b25c9a0-92b4-437a-930d-f30ee56150d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f769fb6a-cd09-4e7d-bb1d-f3d849488c05,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-workflowvj7w2/series-workflowvj7w2-build-action-2704498042/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-workflowvj7w2/series-workflowvj7w2-build-action-1583602479/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-workflowvj7w2/series-workflowvj7w2-convert-artifact-3118888484/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,}