Name: series-workflow9kx6x Phase: Succeeded StartedAt: 2026-09-08 18:24:35 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[0] Phase: Succeeded StartedAt: 2026-09-08 18:24:35 +0000 UTC FinishedAt: 2026-09-08 19:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 18:24:35 +0000 UTC FinishedAt: 2026-09-08 19:05:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "e66fb3ff-701b-4e41-9bd2-53537b4b61af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_next_txq", "ieee80211_txq_schedule_start", "ieee80211_handle_wake_tx_queue", "ieee80211_txq_may_transmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX25leHRfdHhxJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXG5cbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXG4zLiBDb250cm9sIGZsb3c6IFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIHF1ZXVlIHRyYXZlcnNhbCBhbmQgc2NoZWR1bGluZyBsb2dpYyAoYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCkgd2l0aG91dCBtb2RpZnlpbmcgZGF0YSBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIG1lbW9yeSBjb3B5aW5nLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3ZGRhNWM5NjA1M2IxMjkyMWVjMjJhOTJjZmY2NTgyY2JjYzRlNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjAyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgJiM0MzsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XG4gXHRzcGlubG9ja190IGFjdGl2ZV90eHFfbG9ja1tJRUVFODAyMTFfTlVNX0FDU107XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV90eHFzW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XG4mIzQzO1x0Ym9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdC8qIHNlcmlhbGl6ZXMgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlICovXG4gXHRzcGlubG9ja190IGhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2s7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggYzMzMDkyOTYwZGYyNi4uYzY2NWNlZDljMDVjYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTQxMjIsNyAmIzQzOzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuJiM0MztcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pXG4gXHRcdGdvdG8gb3V0O1xuIFxuICBiZWdpbjpcbkBAIC00MzQ3LDEyICYjNDM7NDM0NywxMiBAQCB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuIFxuLVx0aWYgKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKSB7XG4mIzQzO1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuJiM0MztcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XG4mIzQzO1x0aWYgKGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XG4gXHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG4gXHRcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuIFx0XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNTNiMGIwOGQzNDU5Ny4uNjUzMTEzNDBkYjQwNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTE0NjgsNiAmIzQzOzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHsKIAlzcGlubG9ja190IGFjdGl2ZV90eHFfbG9ja1tJRUVFODAyMTFfTlVNX0FDU107CiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107CiAJdTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTsKJiM0MzsJYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTsKIAogCS8qIHNlcmlhbGl6ZXMgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlICovCiAJc3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBjMzMwOTI5NjBkZjI2Li5jNjY1Y2VkOWMwNWNiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtNDEyMiw3ICYjNDM7NDEyMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7bG9jYWwtJmd0O2FjdGl2ZV90eHFfbG9ja1thY10pOwogCi0JaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKQomIzQzOwlpZiAoIWxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSkKIAkJZ290byBvdXQ7CiAKICBiZWdpbjoKQEAgLTQzNDcsMTIgJiM0Mzs0MzQ3LDEyIEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CiAKLQlpZiAoaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpIHsKJiM0MzsJbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdID0KJiM0MzsJCWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpOwomIzQzOwlpZiAobG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdKSB7CiAJCWxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7OwogCQlpZiAoIWxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY10pCiAJCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOzsKLQl9IGVsc2UgewotCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdID0gMDsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogTWFjODAyMTEgVFggU2NoZWR1bGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaGAgYW5kIGBuZXQvbWFjODAyMTEvdHguY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiBzaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggbWFjODAyMTEmIzM5O3MgVFggcGF0aC4KClNwZWNpZmljYWxseSwgaW4gdGhlIGhlYWRlciBmaWxlLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gdGhlIGBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgdHJhY2tpbmcgd2hldGhlciBhIHNjaGVkdWxlciBpcyAmIzM0O29wZW4mIzM0OyBmb3IgZWFjaCBBY2Nlc3MgQ2F0ZWdvcnkgKEFDKS4gU2VlbXMgbGlrZSB3ZSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyBvciBub3QuCgpUaGUgbWVhdCBvZiBpdCBpcyBpbiBgdHguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGEgc2ltcGxlIGNoYW5nZSBpbiBgaWVlZTgwMjExX25leHRfdHhxYCBpcyBzd2FwcGluZyBgc2NoZWR1bGVfcm91bmRgIGZvciBgc2NoZWR1bGVfb3BlbmAgdG8gbWFrZSB0aGUgY29uZGl0aW9uYWwgY2hlY2suIFRoZSBuZXcgbG9naWMgaW4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGlzIHN0b3JpbmcgdGhlIHJldHVybiBvZiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBpbiBgc2NoZWR1bGVfb3BlbmAuIFRoZW4gaWYgaXQgaXMgb3Blbiwgd2UgaW5jcmVtZW50IHRoZSByb3VuZCwgb3RoZXJ3aXNlLCB3ZSBkb24mIzM5O3QuIFRoYXQgbG9va3MgZmluZSwgYnV0IHRoaXMgbWF5IGNhdXNlIHNvbWUgcmVncmVzc2lvbnMgaWYgbm90IHByb3Blcmx5IHRlc3RlZC4KClNvLCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHguY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcyB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBUWCBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgYHNjaGVkdWxlX29wZW5gIHZhcmlhYmxlIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgYWlydGltZSBjaGVjayBhbmQgcm91bmQgc2NoZWR1bGluZy4gSG9wZWZ1bGx5LCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBzY2hlZHVsaW5nIGltYmFsYW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDExNTpcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDExNjpcdHtcbjQxMTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDExODpcdFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG40MTE5Olx0XHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG40MTIwOlx0XHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDEyMTpcdFx0Ym9vbCBhcWxfY2hlY2s7XG40MTIyOlx0XG40MTIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTI0Olx0XG40MTI1Olx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxuNDEyNjpcdFx0XHRnb3RvIG91dDtcbjQxMjc6XHRcbjQxMjg6XHQgYmVnaW46XG40MTI5Olx0XHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcbjQxMzA6XHRcdFx0XHRcdFx0c3RydWN0IHR4cV9pbmZvLFxuNDEzMTpcdFx0XHRcdFx0XHRzY2hlZHVsZV9vcmRlcik7XG40MTMyOlx0XHRpZiAoIXR4cWkpXG40MTMzOlx0XHRcdGdvdG8gb3V0O1xuNDEzNDpcdFxuNDEzNTpcdFx0aWYgKHR4cWkgPT0gaGVhZCkge1xuNDEzNjpcdFx0XHRpZiAoIWZvdW5kX2VsaWdpYmxlX3R4cSlcbjQxMzc6XHRcdFx0XHRnb3RvIG91dDtcbjQxMzg6XHRcdFx0ZWxzZVxuNDEzOTpcdFx0XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDE0MDpcdFx0fVxuNDE0MTpcdFxuNDE0MjpcdFx0aWYgKCFoZWFkKVxuNDE0MzpcdFx0XHRoZWFkID0gdHhxaTtcbjQxNDQ6XHRcbjQxNDU6XHRcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuNDE0NjpcdFx0aWYgKGFxbF9jaGVjaylcbjQxNDc6XHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbjQxNDg6XHRcbjQxNDk6XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEpIHtcbjQxNTA6XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cdTAwM2V0eHEuc3RhLFxuNDE1MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG40MTUyOlx0XG40MTUzOlx0XHRcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYykgXHUwMDNjIDApIHtcbjQxNTQ6XHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZVt0eHFpLVx1MDAzZXR4cS5hY10uZGVmaWNpdCAmIzQzOz1cbjQxNTU6XHRcdFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lX3dlaWdodDtcbjQxNTY6XHRcbjQxNTc6XHRcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbjQxNTg6XHRcdFx0fVxuNDE1OTpcdFx0fVxuNDE2MDpcdFxuNDE2MTpcdFx0aWYgKCFhcWxfY2hlY2spIHtcbjQxNjI6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbjQxNjM6XHRcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG40MTY0Olx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHR4LmNgKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIEkgaGF2ZSBhIGh1bmNoIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZSByb290ZWQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgdHguY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzZWdtZW50IGZyb20gcm91Z2hseSBsaW5lIDQzMzAgdG8gbGluZSA0MzcwLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBzdGFydCBkaWdnaW5nIGludG8gYW5kIHRvIGxvb2sgZm9yIGNsdWVzLCBlZGdlIGNhc2VzIG9yIHRoZSByb290IGNhdXNlLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBJJiMzOTttIGhvcGluZyB0aGlzIHNwZWNpZmljIHJhbmdlIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzMzA6XHRcdHN0YS1cdTAwM2VhaXJ0aW1lW2FjXS5kZWZpY2l0ICYjNDM7PSBzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG40MzMxOlx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1thY10pO1xuNDMzMjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzMzOlx0XG40MzM0Olx0XHRyZXR1cm4gZmFsc2U7XG40MzM1Olx0b3V0OlxuNDMzNjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuNDMzNzpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpO1xuNDMzODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzM5Olx0XG40MzQwOlx0XHRyZXR1cm4gdHJ1ZTtcbjQzNDE6XHR9XG40MzQyOlx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX21heV90cmFuc21pdCk7XG40MzQzOlx0XG40MzQ0Olx0dm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbjQzNDU6XHR7XG40MzQ2Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbjQzNDc6XHRcbjQzNDg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbjQzNDk6XHRcbjQzNTA6XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdID1cbjQzNTE6XHRcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XG40MzUyOlx0XHRpZiAobG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcbjQzNTM6XHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbjQzNTQ6XHRcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG40MzU1Olx0XHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbjQzNTY6XHRcdH1cbjQzNTc6XHRcbjQzNTg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuNDM1OTpcdH1cbjQzNjA6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpO1xuNDM2MTpcdFxuNDM2MjpcdHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNDM2MzpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDM2NDpcdFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbjQzNjU6XHRcdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MpXG40MzY2Olx0e1xuNDM2NzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuNDM2ODpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbjQzNjk6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbjQzNzA6XHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuNDM3MTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XG40MzcyOlx0XHRib29sIGdyb3VwX2FkZHJlc3NlZDtcbjQzNzM6XHRcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuNDM3NDpcdFxuNDM3NTpcdFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2MgRVRIX0hMRU4pKSB7XG40Mzc2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuNDM3NzpcdFx0XHRyZXR1cm47XG40Mzc4Olx0XHR9XG40Mzc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgc2NoZWR1bGVfcm91bmRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaCBvZiB0aGUgYHNjaGVkdWxlX3JvdW5kYCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gQmVzdCB3YXkgdG8gZG8gdGhhdCwgZXNwZWNpYWxseSBpbiBhIHByb2plY3Qgb2YgdGhpcyBzaXplLCBpcyB0byB1c2UgYSBncmVwLWxpa2UgdG9vbC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgc2NoZWR1bGVfcm91bmRgIGlzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBtYXAgb2YgaXRzIGNhbGwgc2l0ZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wYWN0IGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgbW9kaWZ5IHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIGEgZmFpcmx5IGV4dGVuc2l2ZSBsaXN0LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHNvcnQgaXQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkdWxlX3JvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTk2Mz1lbnVtIHR4cV9pbmZvX2ZsYWdzIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzctICogQHNjaGVkdWxlX29yZGVyOiB1c2VkIHdpdGggaWVlZTgwMjExX2xvY2FsLVx1MDAzZWFjdGl2ZV90eHFzXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk3OS0gKiBAZmxhZ3M6IFRYUSBmbGFncyBmcm9tIFx1MDAyNmVudW0gdHhxX2luZm9fZmxhZ3Ncbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD05ODI9c3RydWN0IHR4cV9pbmZvIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5ODc6XHR1MTYgc2NoZWR1bGVfcm91bmQ7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkdWxlX29yZGVyO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTQ2OS1cdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTQ3MDpcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVx0Ym9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQxNjYtXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3Olx0aWYgKHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxubmV0L21hYzgwMjExL3R4LmMtNDE2OC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDE3MC1cdGxpc3RfZGVsX2luaXQoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcik7XG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlx0dHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9IGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcbm5ldC9tYWM4MDIxMS90eC5jLTQxNzItXHRyZXQgPSBcdTAwMjZ0eHFpLVx1MDAzZXR4cTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDM1Mi1cdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xubmV0L21hYzgwMjExL3R4LmM6NDM1MzpcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTQ6XHRcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxubmV0L21hYzgwMjExL3R4LmM6NDM1NTpcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xubmV0L21hYzgwMjExL3R4LmMtNDM1Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggU2NoZWR1bGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2NoZWR1bGVfcm91bmRgIHBsYXlzIGEga2V5IHJvbGUgaW4gdGhlIG1hYzgwMjExJiMzOTtzIFRYIHNjaGVkdWxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YC4gVGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgdGhlIGBzY2hlZHVsZV9yb3VuZGAgdmFyaWFibGUgaXMgbWFuYWdlZCBpbiByZWxhdGlvbiB0byB0aGUgYHNjaGVkdWxlX29wZW5gIGZsYWcsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYWlydGltZSBjaGVja3MuIFByZS1wYXRjaCwgaWYgdGhlIGFpcnRpbWUgY2hlY2sgZmFpbGVkLCBgbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXWAgd291bGQgYmUgcmVzZXQgdG8gMC4gVGhlIHByb2JsZW0gdGhlbiBhcmlzZXMgYmVjYXVzZSBgaWVlZTgwMjExX25leHRfdHhxYCB1c2VzIDAgYXMgYSBjbG9zZWQgc3RhdGUgaW5kaWNhdG9yIChgaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKSBnb3RvIG91dDtgKS4gQnV0LCB3aGF0IGhhcHBlbnMgd2hlbiBpdCBpbmNyZW1lbnRzIHBhc3QgemVybyBpZiBpdCYjMzk7cyBiZWVuIHJlc2V0IHRvIHplcm8gb3IgaW5jcmVtZW50ZWQ/IEl0IHNlZW1zIHRoYXQgaWYgaXQmIzM5O3MgMCBpdCBnZXRzIGluY3JlbWVudGVkIChgaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKSBsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztgKS4KClRoZSBwYXRjaCBlc3NlbnRpYWxseSBzZXBhcmF0ZXMgdGhlIGJvb2xlYW4gYHNjaGVkdWxlX29wZW5gIGZyb20gdGhlIGNvdW50ZXIgYHNjaGVkdWxlX3JvdW5kYC4gVGhlIHB1cnBvc2Ugb2YgYHNjaGVkdWxlX3JvdW5kYCBpcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLCBzbyB3ZSBubyBsb25nZXIgdXNlIDAgYXMgYSBzdGF0ZSBpbmRpY2F0b3IuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQuIElzIG1hYzgwMjExIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXA/IEFoLCB5ZXMsIG9mIGNvdXJzZSEgbWFjODAyMTEgaXMgdGhlIGZvdW5kYXRpb25hbCB3aXJlbGVzcyA4MDIuMTEgc3lzdGVtIGluIExpbnV4LiBJdCYjMzk7cyBhY3RpdmVseSB0ZXN0ZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQsIGltcG9ydGFudGx5LCBzeXprYWxsZXIuIFRob3NlIGFyZSBib3RoIGV4Y2VsbGVudCBmb3IgdGhpcyBraW5kIG9mIGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIEkga25vdyBtYWM4MDIxMSBpcyBmdXp6IHRlc3RlZC4gVGhleSB1c2UgdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlLCBhbG9uZyB3aXRoIHZpcnRfd2lmaSBvciBVU0Igd2lmaSBnYWRnZXRzIC8gbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgYSBjcnVjaWFsIHN0ZXA6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYG1hYzgwMjExX2h3c2ltYCBvciBvdGhlciByZWxldmFudCBkcml2ZXJzIGFjdHVhbGx5ICp1c2UqIHRoZSBmdW5jdGlvbnMgYmVpbmcgZGlzY3Vzc2VkIGhlcmUsIG5hbWVseSBgaWVlZTgwMjExX25leHRfdHhxYCBvciBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAuIFRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSwgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgdG8gc2VlIHdoYXQgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz00NDc1PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBhYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ0ODAtXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCBhYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ0ODE6XHR3aGlsZSAoKHR4cSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgYWMpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDgyLVx0XHR3aGlsZSAoYXRoMTBrX21hY190eF9jYW5fcHVzaChodywgdHhxKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmM9NDc1Nz1zdGF0aWMgdm9pZCBhdGgxMGtfbWFjX29wX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcwLVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NzcxOlx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ3NzItXHRpZiAoIXR4cSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jPTE5ODA9dm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMTk5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM6MjAwMDpcdHdoaWxlICgocXVldWUgPSBpZWVlODAyMTFfbmV4dF90eHEoaHcsIHR4cS1cdTAwM2VtYWM4MDIxMV9xbnVtKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMjAwMS1cdFx0Ym9vbCBmb3JjZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM9NTY0PW10NzZfdHhxX3NjaGVkdWxlX2xpc3Qoc3RydWN0IG10NzZfcGh5ICpwaHksIGVudW0gbXQ3Nl90eHFfaWQgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYy01NzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6NTc2Olx0XHR0eHEgPSBpZWVlODAyMTFfbmV4dF90eHEocGh5LVx1MDAzZWh3LCBxaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTU3Ny1cdFx0aWYgKCF0eHEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDgyNj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3R4cV9zY2hlZHVsZShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIHU4IGFjLCBib29sICpyZWludm9rZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM3LVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM6NDgzODpcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM5LVx0XHRydHd0eHEgPSAoc3RydWN0IHJ0dzg5X3R4cSAqKXR4cS1cdTAwM2VkcnZfcHJpdjtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExNi0gKiBvYnRhaW4gdGhlIG5leHQgcXVldWUgdG8gcHVsbCBmcmFtZXMgZnJvbSwgdGhlIGRyaXZlciBjYWxsc1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoxMTc6ICogaWVlZTgwMjExX25leHRfdHhxKCkuIFRoZSBkcml2ZXIgaXMgdGhlbiBleHBlY3RlZCB0byByZXR1cm4gdGhlIHR4cSB1c2luZ1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0xMTgtICogaWVlZTgwMjExX3JldHVybl90eHEoKS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc3MzY9dm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCB0aWQpO1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc0Mi0gKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZSwgb3IgZnJvbVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo3NzQzOiAqXHRpZWVlODAyMTFfbmV4dF90eHEoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzQ0LSAqXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD03NzU4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3NjktICogQHR4cTogcG9pbnRlciBvYnRhaW5lZCBmcm9tIHN0YXRpb24gb3IgdmlydHVhbCBpbnRlcmZhY2UsIG9yIGZyb21cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzc3MDogKlx0aWVlZTgwMjExX25leHRfdHhxKClcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc3MS0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzc5NT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3OTgtLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc3OTk6ICogaWVlZTgwMjExX25leHRfdHhxIC0gZ2V0IG5leHQgdHggcXVldWUgdG8gcHVsbCBwYWNrZXRzIGZyb21cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwMC0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwNy0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NzgwODpzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYyk7XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MDktXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODE1LSAqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MTY6ICogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgaWVlZTgwMjExX25leHRfdHhxKCkgb3IgaWVlZTgwMjExX3JldHVybl90eHEoKS5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNy0gKiBUaGUgZHJpdmVyIG11c3Qgbm90IGNhbGwgbXVsdGlwbGUgVFhRIHNjaGVkdWxpbmcgcm91bmRzIGNvbmN1cnJlbnRseS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc4NDI9aWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4NDctLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4NDg6ICogaWVlZTgwMjExX3JldHVybl90eHEgLSByZXR1cm4gYSBUWFEgcHJldmlvdXNseSBhY3F1aXJlZCBieSBpZWVlODAyMTFfbmV4dF90eHEoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ5LSAqXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDEwMT1pZWVlODAyMTFfdHhxX2tlZXBfYWN0aXZlKHN0cnVjdCB0eHFfaW5mbyAqdHhxaSlcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTE0LVxubmV0L21hYzgwMjExL3R4LmM6NDExNTpzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbm5ldC9tYWM4MDIxMS90eC5jLTQxMTYte1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQxNzctfVxubmV0L21hYzgwMjExL3R4LmM6NDE3ODpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XG5uZXQvbWFjODAyMTEvdHguYy00MTc5LVxubmV0L21hYzgwMjExL3R4LmM9NDE4MD12b2lkIF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTk5LVx0XHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcbm5ldC9tYWM4MDIxMS90eC5jOjQyMDA6XHRcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXG5uZXQvbWFjODAyMTEvdHguYy00MjAxLVx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jPTMwNT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxMy1cbm5ldC9tYWM4MDIxMS91dGlsLmM6MzE0Olx0LyogVXNlIGllZWU4MDIxMV9uZXh0X3R4cSgpIGZvciBhaXJ0aW1lIGZhaXJuZXNzIGFjY291bnRpbmcgKi9cbm5ldC9tYWM4MDIxMS91dGlsLmMtMzE1LVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVx1MDAzZWFjKTtcbm5ldC9tYWM4MDIxMS91dGlsLmM6MzE2Olx0d2hpbGUgKChxdWV1ZSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgdHhxLVx1MDAzZWFjKSkpIHtcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzE3LVx0XHR3YWtlX3R4X3B1c2hfcXVldWUobG9jYWwsIHNkYXRhLCBxdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUXVldWUgV2FrZS1VcCBNZWNoYW5pc20qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS91dGlsLmM6MzA1YCwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgbWFjODAyMTEmIzM5O3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igc29mdHdhcmUgcXVldWluZyBhbmQgdGhlIHN1YnNlcXVlbnQgYXdha2VuaW5nIG9mIHRoZSB0cmFuc21pdCBxdWV1ZS4gSXQgc2VlbXMgdG8gY2FsbCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgYW5kIGBpZWVlODAyMTFfbmV4dF90eHFgLCB3aGljaCBpcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciwgc28gSSYjMzk7bGwgZ28gYmFjayB0byBgbmV0L21hYzgwMjExL3V0aWwuY2AgYXJvdW5kIGxpbmUgMzA1IGFuZCB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVuIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgIGlzIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludm9jYXRpb24gcG9pbnRzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIFRYIHF1ZXVlIG1hbmFnZW1lbnQgc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS91dGlsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHRkcnZfdHgobG9jYWwsIFx1MDAyNmNvbnRyb2wsIHNrYik7XG4gMzAxOlx0XHR9XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdC8qIHdha2VfdHhfcXVldWUgaGFuZGxlciBmb3IgZHJpdmVyIG5vdCBpbXBsZW1lbnRpbmcgYSBjdXN0b20gb25lKi9cbiAzMDU6XHR2b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAzMDY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuIDMwOTpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodHhxLVx1MDAzZXZpZik7XG4gMzEwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcXVldWU7XG4gMzExOlx0XG4gMzEyOlx0XHRzcGluX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XG4gMzEzOlx0XG4gMzE0Olx0XHQvKiBVc2UgaWVlZTgwMjExX25leHRfdHhxKCkgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYWNjb3VudGluZyAqL1xuIDMxNTpcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVx1MDAzZWFjKTtcbiAzMTY6XHRcdHdoaWxlICgocXVldWUgPSBpZWVlODAyMTFfbmV4dF90eHEoaHcsIHR4cS1cdTAwM2VhYykpKSB7XG4gMzE3Olx0XHRcdHdha2VfdHhfcHVzaF9xdWV1ZShsb2NhbCwgc2RhdGEsIHF1ZXVlKTtcbiAzMTg6XHRcdFx0aWVlZTgwMjExX3JldHVybl90eHEoaHcsIHF1ZXVlLCBmYWxzZSk7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChodywgdHhxLVx1MDAzZWFjKTtcbiAzMjE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xuIDMyMjpcdH1cbiAzMjM6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSk7XG4gMzI0Olx0XG4gMzI1Olx0c3RhdGljIHZvaWQgX19pZWVlODAyMTFfd2FrZV90eHFzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgYWMpXG4gMzI2Olx0e1xuIDMyNzpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiAzMjg6XHRcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWY7XG4gMzI5Olx0XHRzdHJ1Y3QgZnEgKmZxID0gXHUwMDI2bG9jYWwtXHUwMDNlZnE7XG4gMzMwOlx0XHRzdHJ1Y3QgcHNfZGF0YSAqcHMgPSBOVUxMO1xuIDMzMTpcdFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTDtcbiAzMzI6XHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIDMzMzpcdFx0aW50IGk7XG4gMzM0Olx0XG4gMzM1Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gMzM2Olx0XHRzcGluX2xvY2soXHUwMDI2ZnEtXHUwMDNlbG9jayk7XG4gMzM3Olx0XG4gMzM4Olx0XHRpZiAoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSlcbiAzMzk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBMaW51eCBXaXJlbGVzcyBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBtYWM4MDIxMWAgYWdhaW4uIEl0JiMzOTtzIHRoZSBiZWF0aW5nIGhlYXJ0IG9mIExpbnV4JiMzOTtzIHdpcmVsZXNzIG5ldHdvcmtpbmcsIHJpZ2h0PyBJJiMzOTttIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCB2YXJpb3VzIGludGVyZmFjZXMg4oCTIGBtYWM4MDIxMV9od3NpbWAsIGBubDgwMjExYCwgcGFja2V0IHNvY2tldHMg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBUbyB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgYWxsIHB1dCB0b2dldGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGBtYWM4MDIxMWAgaGFzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBDT05GSUdfTUFDODAyMTEqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYENPTkZJR19NQUM4MDIxMWAgc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLCB0aGlzIGxpa2VseSBpbnZvbHZlcyBhIGNhc2NhZGluZyBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBwcm9iYWJseSBub3QgYSBzaW1wbGUgJiMzNDtvbi9vZmYmIzM0OyBzd2l0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBhbmQgdGhhdCBtZWFucyB0cmFjaW5nIHRocm91Z2ggdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgZHJpdmVycywgcmVndWxhdG9yeSBzZXR0aW5ncywgdmFyaW91cyBuZXR3b3JraW5nIHN0YWNrcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciB3aXJlbGVzcy1yZWxhdGVkIGNvbXBvbmVudHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXHRib29sIFwmIzM0O2VuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVx0Ym9vbCBcJiMzNDtlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7c3VwcG9ydCBDUkRBXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1Rcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3LiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIHdhbnQgdG8gdW5kZXJzdGFuZC4gTGluZSAxNyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuIEtub3dpbmcgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb250ZXh0dWFsaXplIHRoZSBjb25maWd1cmF0aW9ucywgd2hldGhlciBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBhIGRyaXZlciwgb3IgYSBnZW5lcmFsIHdpcmVsZXNzIGZyYW1ld29yayBvcHRpb24gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdJUkVMRVNTX0VYVFxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBXRVhUX0NPUkVcbiAgIDY6XHRcdGRlZl9ib29sIHlcbiAgIDc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgV0VYVF9QUk9DXG4gIDEwOlx0XHRkZWZfYm9vbCB5XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgMTI6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFdFWFRfUFJJVlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAzMTpcdFxuICAzMjpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcbiAgMzM6XHRcbiAgMzQ6XHRcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBgbWFjODAyMTFfaHdzaW1gIGZvciBJbnNpZ2h0cyBpbnRvIE1hYzgwMjExIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgYG1hYzgwMjExYCBpcyBhY3R1YWxseSB0ZXN0ZWQgYW5kIHNpbXVsYXRlZC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCBgbWFjODAyMTFfaHdzaW1gIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoYXQuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCwgc28gaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGhvcGluZyB0byBmaW5kIG91dCBob3cgdGhleSBtYW5hZ2UgdG8gcmVwbGljYXRlIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgdGhlIGBtYWM4MDIxMWAgc3RhY2suIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB0ZXN0aW5nIG1ldGhvZG9sb2dpZXMgaW4gcGxhY2UsIGFuZCB3aGVyZSB0aGVyZSBtaWdodCBiZSBnYXBzIG9yIGFyZWFzIGZvciBpbXByb3ZlZCBjb3ZlcmFnZS4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIHNldHVwIGluIHRoaXMga2VybmVsLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IG1lbnRpb25zIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgS2NvbmZpZ2Agbm93IHRvIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTY2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNQUM4MDIxMSBUWCBTY2hlZHVsaW5nIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbiB0aGlzIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLgoKUmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGlmZnMgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZW50IGhlcmUuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaGAgYWRkcyBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBiZWhhdmlvcmFsIGNoYW5nZXMuCgpUaGVuLCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLCBgaWVlZTgwMjExX25leHRfdHhxYCBub3cgY2hlY2tzIGBsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY11gIGluc3RlYWQgb2YgYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGdhdGUgZm9yIHRyYW5zbWl0dGluZy4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGFsc28gc2V0cyBgbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdYCBiYXNlZCBvbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKClgLCBhbmQgaXQgb25seSBpbmNyZW1lbnRzIGBzY2hlZHVsZV9yb3VuZFthY11gIGlmIGBzY2hlZHVsZV9vcGVuYCBpcyB0cnVlLiBBbHNvLCBjcnVjaWFsbHksIHRoZSBjb2RlIGRvZXMgKm5vdCogemVybyBgc2NoZWR1bGVfcm91bmRbYWNdYCBpZiBgc2NoZWR1bGVfb3BlbmAgaXMgZmFsc2UuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBUWCBxdWV1ZSBzY2hlZHVsaW5nIHdvcmtzLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgVFggc2NoZWR1bGluZyByZWxhdGVkIGZ1bmN0aW9ucyBhZmZlY3RlZD8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCYjMzk7cyBsb29rIGF0IGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLCBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAsIGBpZWVlODAyMTFfcmV0dXJuX3R4cWAsIGFuZCBgX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxYC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGZvY3VzIHN5bWJvbHMgb3IgY2FsbGVycyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDE3NTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTc2Olx0XHRyZXR1cm4gcmV0O1xuNDE3NzpcdH1cbjQxNzg6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XG40MTc5Olx0XG40MTgwOlx0dm9pZCBfX2llZWU4MDIxMV9zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG40MTgxOlx0XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSxcbjQxODI6XHRcdFx0XHQgICAgICBib29sIGZvcmNlKVxuNDE4MzpcdHtcbjQxODQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDE4NTpcdFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gdG9fdHhxX2luZm8odHhxKTtcbjQxODY6XHRcdGJvb2wgaGFzX3F1ZXVlO1xuNDE4NzpcdFxuNDE4ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1t0eHEtXHUwMDNlYWNdKTtcbjQxODk6XHRcbjQxOTA6XHRcdGhhc19xdWV1ZSA9IGZvcmNlIHx8XG40MTkxOlx0XHRcdCAgICAoIXRlc3RfYml0KElFRUU4MDIxMV9UWFFfU1RPUCwgXHUwMDI2dHhxaS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG40MTkyOlx0XHRcdCAgICAgdHhxX2hhc19xdWV1ZSh0eHEpKTtcbjQxOTM6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpIFx1MDAyNlx1MDAyNlxuNDE5NDpcdFx0ICAgIChoYXNfcXVldWUgfHwgaWVlZTgwMjExX3R4cV9rZWVwX2FjdGl2ZSh0eHFpKSkpIHtcbjQxOTU6XHRcdFx0LyogSWYgYWlydGltZSBhY2NvdW50aW5nIGlzIGFjdGl2ZSwgYWx3YXlzIGVucXVldWUgU1RBcyBhdCB0aGVcbjQxOTY6XHRcdFx0ICogaGVhZCBvZiB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCB0aGV5IG9ubHkgZ2V0IG1vdmVkIHRvIHRoZVxuNDE5NzpcdFx0XHQgKiBiYWNrIGJ5IHRoZSBhaXJ0aW1lIERSUiBzY2hlZHVsZXIgb25jZSB0aGV5IGhhdmUgYSBuZWdhdGl2ZVxuNDE5ODpcdFx0XHQgKiBkZWZpY2l0LiBBIHN0YXRpb24gdGhhdCBhbHJlYWR5IGhhcyBhIG5lZ2F0aXZlIGRlZmljaXQgd2lsbFxuNDE5OTpcdFx0XHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcbjQyMDA6XHRcdFx0ICogY2FsbCB0byBpZWVlODAyMTFfbmV4dF90eHEoKS5cbjQyMDE6XHRcdFx0ICovXG40MjAyOlx0XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEgXHUwMDI2XHUwMDI2IGxvY2FsLVx1MDAzZWFpcnRpbWVfZmxhZ3MgXHUwMDI2XHUwMDI2IGhhc19xdWV1ZSBcdTAwMjZcdTAwMjZcbjQyMDM6XHRcdFx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuNDIwNDpcdFx0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcbjQyMDU6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuNDIwNjpcdFx0XHRcdFx0IFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cS1cdTAwM2VhY10pO1xuNDIwNzpcdFx0XHRlbHNlXG40MjA4Olx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuNDIwOTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbdHhxLVx1MDAzZWFjXSk7XG40MjEwOlx0XHRcdGlmIChoYXNfcXVldWUpXG40MjExOlx0XHRcdFx0aWVlZTgwMjExX3R4cV9zZXRfYWN0aXZlKHR4cWkpO1xuNDIxMjpcdFx0fVxuNDIxMzpcdFxuNDIxNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW3R4cS1cdTAwM2VhY10pO1xuNDIxNTpcdH1cbjQyMTY6XHRFWFBPUlRfU1lNQk9MKF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cSk7XG40MjE3Olx0XG40MjE4Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXFsX2Rpc2FibGUpO1xuNDIxOTpcdFxuNDIyMDpcdGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuNDIyMTpcdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpXG40MjIyOlx0e1xuNDIyMzpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG40MjI0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbjQyMjU6XHRcbjQyMjY6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcbjQyMjc6XHRcdFx0cmV0dXJuIHRydWU7XG40MjI4Olx0XG40MjI5Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcWxfZGlzYWJsZSkpXG40MjMwOlx0XHRcdHJldHVybiB0cnVlO1xuNDIzMTpcdFxuNDIzMjpcdFx0aWYgKCF0eHEtXHUwMDNlc3RhKVxuNDIzMzpcdFx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSkgXHUwMDNjXG40MjM0Olx0XHRcdCAgICAgICBsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgVFggUXVldWUgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHRyYW5zbWlzc2lvbiBxdWV1ZSBzY2hlZHVsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSBwb3AgdXAgaW4gdGhlIGNvbnRleHQgb2Ygc29tZSByZWNlbnQgcGVyZm9ybWFuY2UgdHdlYWtzIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGB0eC5jYCBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxlciBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hlbiB0byBwdWxsIHBhY2tldHMgb2ZmIHRoZSBUWCBxdWV1ZSBhbmQgaGFuZCB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggaXMgdG8gb3B0aW1pemUgZm9yIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHNjaGVkdWxpbmcgb3ZlcmhlYWQuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzLi4uIGhvcGVmdWxseSBpdCYjMzk7cyBub3QgdG9vIGNvbnZvbHV0ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgYm90dGxlbmVja3MgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvdWxkIHJlYWxseSBoZWxwIGZpbmUtdHVuZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdXRpbC5jPTMwNT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cdH1cbm5ldC9tYWM4MDIxMS91dGlsLmM6MzIwOlx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cdTAwM2VhYyk7XG5uZXQvbWFjODAyMTEvdXRpbC5jLTMyMS1cdHNwaW5fdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE4OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBEb3duIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91czogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgc29tZXdoZXJlIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBsaWtlbHkgaW4gdGhlIGNvcmUgODAyLjExIGNvZGUsIG9yIG1heWJlIGV2ZW4gaW4gYSBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaWYgaXQmIzM5O3MgZGVlcGx5IHRpZWQgdG8gaGFyZHdhcmUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGl0IGluIGEgZmlsZSBsaWtlIGBpZWVlODAyMTFfdHhxLmNgLCBgbWFjODAyMTEuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IHVzZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUmIzM5O3MgJiMzNDtmaW5kIGRlZmluaXRpb24mIzM0OyBmZWF0dXJlIHRvIHBpbnBvaW50IGl0LiBLbm93aW5nIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCB0byB1bnBhY2tpbmcgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTMzNzU9c3RhdGljIHZvaWQgYXRoMTBrX2h0dF9yeF90eF9mZXRjaF9pbmQoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0zNDgwLVx0XHRpZWVlODAyMTFfcmV0dXJuX3R4cShodywgdHhxLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jOjM0ODE6XHRcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0zNDgyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmM9NDQ3NT1zdGF0aWMgaW50IGF0aDEwa19tYWNfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgYWMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDkxLVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NDkyOlx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDQ5My1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDc4Mi1vdXQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3ODM6XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00Nzg0LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YXItXHUwMDNlcXVldWVfbG9ja1thY10pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM9MTk4MD12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDEzLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlY2hhbl9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM6MjAxNDpcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlbWFjODAyMTFfcW51bSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jLTIwMTUtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz02Mzg9dm9pZCBtdDc2X3R4cV9zY2hlZHVsZShzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTY1MC1cdFx0bGVuID0gbXQ3Nl90eHFfc2NoZWR1bGVfbGlzdChwaHksIHFpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6NjUxOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChwaHktXHUwMDNlaHcsIHFpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUyLVx0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYz00ODI2PXN0YXRpYyB2b2lkIHJ0dzg5X2NvcmVfdHhxX3NjaGVkdWxlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgdTggYWMsIGJvb2wgKnJlaW52b2tlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjMtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0ODY0Olx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjUtfVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NzgxOT12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKTtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MjEtLyogKGRlcHJlY2F0ZWQpICovXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MjI6c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgyMy17XG4tLVxubmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL3V0aWwuYy0zMTktXHR9XG5uZXQvbWFjODAyMTEvdXRpbC5jOjMyMDpcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlYWMpO1xubmV0L21hYzgwMjExL3V0aWwuYy0zMjEtXHRzcGluX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlcHJlY2F0ZWQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCBpcyBhIGRlcHJlY2F0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmlnaHQsIGRlcHJlY2F0ZWQgbWVhbnMgd2UgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHJlcGxhY2luZyBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjdXJyZW50IGNvcmUgZnVuY3Rpb24gY2FsbHMgYXJlIHN1cnJvdW5kaW5nIGl0LgoKRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggc2VlbSB0byBiZTogYGllZWU4MDIxMV9uZXh0X3R4cWAsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCwgYW5kIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLiBUaGVzZSBhbGwgbGl2ZSBpbiBgbmV0L21hYzgwMjExYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgZmxvdy4gTm93IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKQmV5b25kIHRoZXNlIGNvcmUgZWxlbWVudHMsIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxlcnMgb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYC4gSXQgbG9va3MgcmVsYXRlZCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBLbm93aW5nIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRlcHJlY2F0ZWQgZnVuY3Rpb24gdXNlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz00MjcyPXN0YXRpYyBib29sXG5uZXQvbWFjODAyMTEvdHguYzo0MjczOmllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXG5uZXQvbWFjODAyMTEvdHguYy00Mjc0LXtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MjkxPWJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDMwMy1cbm5ldC9tYWM4MDIxMS90eC5jOjQzMDQ6XHRpZiAoIWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKVxubmV0L21hYzgwMjExL3R4LmMtNDMwNS1cdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDM0ND12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQzNTAtXHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSA9XG5uZXQvbWFjODAyMTEvdHguYzo0MzUxOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbm5ldC9tYWM4MDIxMS90eC5jLTQzNTItXHRpZiAobG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NTMKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFRYIFF1ZXVlIFNjaGVkdWxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IHRvdWNoaW5nIHNvbWUgY29yZSB3aXJlbGVzcyBuZXR3b3JrIHN0YWNrIGxvZ2ljIHdpdGhpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBpcyBpbnZvbHZlZCwgYWxvbmcgd2l0aCB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gYGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbXBhY3QuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCwgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIHRvIGJlIGVuYWJsZWQsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgdGhvc2UgYXJlIHRoZSBvbmVzIHRvIGNvbnNpZGVyLgoKVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgY3J1Y2lhbCBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbXMuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBsb2dpYyBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YC4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGBtYWM4MDIxMV9od3NpbWAgb3IgZXZlbiB0aGUgYG5sODAyMTEvdmlydHVhbCB3aWZpYCBpbnRlcmZhY2UgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZS4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFib3V0IHRyYWNraW5nIHRoZSBUWCBzY2hlZHVsaW5nIHJvdW5kcyBhbmQgdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIHN0YXRlIChgc2NoZWR1bGVfb3BlbmApLCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgcXVldWUgaXRlcmF0aW9uIGlzIHRlcm1pbmF0ZWQgYW5kIHByZXZlbnRzIGxvb3BzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgZXJyb3JzLgoKVG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgcmVxdWlyZWQgY29uZmlnczogYENGRzgwMjExYCwgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gSSYjMzk7bSBnb2luZyB0byBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgaWVlZTgwMjExX25leHRfdHhxYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCwgYW5kIGBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuCgpBZnRlciBhIGZpbmFsIHN3ZWVwIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZGV0YWlscywgaXQgbG9va3MgbGlrZSBJJiMzOTt2ZSBnb3QgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE9rYXksIGl0JiMzOTtzIHRpbWUgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX25leHRfdHhxJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIHN0YXRlIHRyYWNraW5nIGluIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrIGJ5IGRlY291cGxpbmcgdGhlIGFjdGl2ZSBzY2hlZHVsZSByb3VuZCBjb3VudGVyIGZyb20gdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIGFpcnRpbWUgY2hlY2sgc3RhdHVzIChzY2hlZHVsZV9vcGVuKS4gbWFjODAyMTEgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc2ltdWxhdGVkIHJhZGlvIChtYWM4MDIxMV9od3NpbSkgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IFRYIHF1ZXVlIGl0ZXJhdGlvbiwgZGVxdWV1ZSwgYW5kIGFpcnRpbWUgc2NoZWR1bGluZyBsb29wIHRlcm1pbmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXG5cbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXG4zLiBDb250cm9sIGZsb3c6IFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIHF1ZXVlIHRyYXZlcnNhbCBhbmQgc2NoZWR1bGluZyBsb2dpYyAoYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCkgd2l0aG91dCBtb2RpZnlpbmcgZGF0YSBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIG1lbW9yeSBjb3B5aW5nLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDdkZGE1Yzk2MDUzYjEyOTIxZWMyMmE5MmNmZjY1ODJjYmNjNGU0NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MDI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0xNDY4LDYgJiM0MzsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7CiAJc3BpbmxvY2tfdCBhY3RpdmVfdHhxX2xvY2tbSUVFRTgwMjExX05VTV9BQ1NdOwogCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdOwogCXUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107CiYjNDM7CWJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107CiAKIAkvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqLwogCXNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggYzMzMDkyOTYwZGYyNi4uYzY2NWNlZDljMDVjYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTQxMjIsNyAmIzQzOzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYykKIAogCXNwaW5fbG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKIAotCWlmICghbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSkKJiM0MzsJaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY10pCiAJCWdvdG8gb3V0OwogCiAgYmVnaW46CkBAIC00MzQ3LDEyICYjNDM7NDM0NywxMiBAQCB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7bG9jYWwtJmd0O2FjdGl2ZV90eHFfbG9ja1thY10pOwogCi0JaWYgKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKSB7CiYjNDM7CWxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSA9CiYjNDM7CQlpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTsKJiM0MzsJaWYgKGxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSkgewogCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOzsKIAkJaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKQogCQkJbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7Ci0JfSBlbHNlIHsKLQkJbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSA9IDA7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgdGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIGZpZ3VyaW5nIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgYWZmZWN0ZWQgZmlsZXMsIGl0JiMzOTtzIGhpdHRpbmcgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBmbGFncyDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNtaXNzaW9uLCBpcyBhbiBhcmVhIHdoZXJlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgY2FuIGx1cmsuCgpOb3csIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBNeSBnby10byBhcHByb2FjaCBpcyBncmVwcGluZyBmb3IgcmVsZXZhbnQga2V5d29yZHMgYW5kLCBvZiBjb3Vyc2UsIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIGFueSBwb2ludGVyIG1hbmlwdWxhdGlvbiBpbiB0aG9zZSBmaWxlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlIHJlcXVpcmUgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoZWR1bGVfcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk3Ny0gKiBAc2NoZWR1bGVfb3JkZXI6IHVzZWQgd2l0aCBpZWVlODAyMTFfbG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjk3ODogKiBAc2NoZWR1bGVfcm91bmQ6IGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvbiBUWFEgc2NoZWR1bGluZ1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc5LSAqIEBmbGFnczogVFhRIGZsYWdzIGZyb20gXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTk4Mj1zdHJ1Y3QgdHhxX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk4Ni1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjk4NzpcdHUxNiBzY2hlZHVsZV9yb3VuZDtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk4OC1cdHN0cnVjdCBsaXN0X2hlYWQgc2NoZWR1bGVfb3JkZXI7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ1Nz1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVx0c3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNDcwOlx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE0NzEtXHRib29sIHNjaGVkdWxlX29wZW5bSUVFRTgwMjExX05VTV9BQ1NdO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQxMTU9c3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cbm5ldC9tYWM4MDIxMS90eC5jOjQxNjc6XHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG5uZXQvbWFjODAyMTEvdHguYy00MTY4LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyKTtcbm5ldC9tYWM4MDIxMS90eC5jOjQxNzE6XHR0eHFpLVx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdO1xubmV0L21hYzgwMjExL3R4LmMtNDE3Mi1cdHJldCA9IFx1MDAyNnR4cWktXHUwMDNldHhxO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQzNDQ9dm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVx0aWYgKGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xubmV0L21hYzgwMjExL3R4LmM6NDM1NDpcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1Olx0XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbiBvZiBgaWVlZTgwMjExX2xvY2FsYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjcml0aWNhbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSA4MDIuMTEgc3RhY2ssIGFuZCBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGRyaXZlci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBhIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIHRoZSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBUaGF0IHBvaW50cyBtZSBkaXJlY3RseSB0b3dhcmQgYGllZWU4MDIxMV9hbGxvY19od2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGFuZCwgdGhlcmVmb3JlLCBpcyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGVzdGFibGlzaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGNoYWluIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHJlc291cmNlIGNvbnRlbnRpb24gd2l0aGluIG9yIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24sIGFuZCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBtaXNtYW5hZ2VkIHBvaW50ZXJzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4gSWYgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIG9idmlvdXMgdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBzZWUgd2hvIGNhbGxzIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgbGlrZWx5IHJlc2lkZXMgYXJvdW5kIHRoYXQgZnVuY3Rpb24sIG9yIGluIGEgZnVuY3Rpb24gaXQgY2FsbHMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc3RydWN0IGllZWU4MDIxMV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgcmVuZGVyZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEhhcmR3YXJlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFsbG9jYXRpb24gaXNzdWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYmVpbmcgYnJvdWdodCBvbmxpbmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBlaXRoZXIgYGFsbG9jX2h3YCBvciBgaWVlZTgwMjExX2FsbG9jX2h3YC4gVGhlc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLCBnaXZlbiBteSBleHBlcmllbmNlLCBmb3IgdGhlIGNvcmUgYWxsb2NhdGlvbiByb3V0aW5lcyByZWxhdGVkIHRvIHdpcmVsZXNzIGhhcmR3YXJlIGluIHRoaXMgc3lzdGVtLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYz03NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCBtYWM4MDIxMV92aHRfY2FwYV9tb2RfbWFzayA9IHtcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTc5Mi1cbm5ldC9tYWM4MDIxMS9tYWluLmM6NzkzOnN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcbm5ldC9tYWM4MDIxMS9tYWluLmMtNzk0LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTA1MC19XG5uZXQvbWFjODAyMTEvbWFpbi5jOjEwNTE6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHdfbm0pO1xubmV0L21hYzgwMjExL21haW4uYy0xMDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbWFjODAyMTFgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGBsb2NhbGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0JiMzOTtzIHRoZSBjb3JlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL21haW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5MywgdGhlcmUgc2hvdWxkIGJlIHNvbWUgcmVsZXZhbnQgY29kZSBhcm91bmQgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGNydWNpYWwgYGxvY2FsYCB2YXJpYWJsZSBjb21lcyBpbnRvIGJlaW5nLi4uIEl0JiMzOTtzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgZHJpdmVyIGdldHMgc2V0IHVwLCBzbyBJIGNhbiBzZWUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBwcm9ibGVtcy4gSSYjMzk7bSBhZnRlciB0aGUgYWxsb2NhdGlvbiBpdHNlbGYsIHRoZSByZWxldmFudCBhcmd1bWVudHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkzOlx0c3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxuIDc5NDpcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzLFxuIDc5NTpcdFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSlcbiA3OTY6XHR7XG4gNzk3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbiA3OTg6XHRcdGludCBwcml2X3NpemUsIGk7XG4gNzk5Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuIDgwMDpcdFx0Ym9vbCBlbXVsYXRlX2NoYW5jdHg7XG4gODAxOlx0XG4gODAyOlx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZXR4IHx8ICFvcHMtXHUwMDNlc3RhcnQgfHwgIW9wcy1cdTAwM2VzdG9wIHx8ICFvcHMtXHUwMDNlY29uZmlnIHx8XG4gODAzOlx0XHRcdCAgICAhb3BzLVx1MDAzZWFkZF9pbnRlcmZhY2UgfHwgIW9wcy1cdTAwM2VyZW1vdmVfaW50ZXJmYWNlIHx8XG4gODA0Olx0XHRcdCAgICAhb3BzLVx1MDAzZWNvbmZpZ3VyZV9maWx0ZXIgfHwgIW9wcy1cdTAwM2V3YWtlX3R4X3F1ZXVlKSlcbiA4MDU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODA2Olx0XG4gODA3Olx0XHRpZiAoV0FSTl9PTihvcHMtXHUwMDNlc3RhX3N0YXRlIFx1MDAyNlx1MDAyNiAob3BzLVx1MDAzZXN0YV9hZGQgfHwgb3BzLVx1MDAzZXN0YV9yZW1vdmUpKSlcbiA4MDg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODA5Olx0XG4gODEwOlx0XHRpZiAoV0FSTl9PTighIW9wcy1cdTAwM2VsaW5rX2luZm9fY2hhbmdlZCAhPSAhIW9wcy1cdTAwM2V2aWZfY2ZnX2NoYW5nZWQgfHxcbiA4MTE6XHRcdFx0ICAgIChvcHMtXHUwMDNlbGlua19pbmZvX2NoYW5nZWQgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2Vic3NfaW5mb19jaGFuZ2VkKSkpXG4gODEyOlx0XHRcdHJldHVybiBOVUxMO1xuIDgxMzpcdFxuIDgxNDpcdFx0LyogY2hlY2sgYWxsIG9yIG5vIGNoYW5uZWwgY29udGV4dCBvcGVyYXRpb25zIGV4aXN0ICovXG4gODE1Olx0XHRpZiAob3BzLVx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IFx1MDAyNlx1MDAyNlxuIDgxNjpcdFx0ICAgIG9wcy1cdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCBcdTAwMjZcdTAwMjZcbiA4MTc6XHRcdCAgICBvcHMtXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpIHtcbiA4MTg6XHRcdFx0aWYgKFdBUk5fT04ob3BzLVx1MDAzZWFzc2lnbl92aWZfY2hhbmN0eCB8fFxuIDgxOTpcdFx0XHRcdCAgICBvcHMtXHUwMDNldW5hc3NpZ25fdmlmX2NoYW5jdHgpKVxuIDgyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDgyMTpcdFx0XHRlbXVsYXRlX2NoYW5jdHggPSB0cnVlO1xuIDgyMjpcdFx0fSBlbHNlIHtcbiA4MjM6XHRcdFx0aWYgKFdBUk5fT04ob3BzLVx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IHx8XG4gODI0Olx0XHRcdFx0ICAgIG9wcy1cdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCB8fFxuIDgyNTpcdFx0XHRcdCAgICBvcHMtXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpKVxuIDgyNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDgyNzpcdFx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZWFkZF9jaGFuY3R4IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIElFRUUgODAyLjExIHN0YW5kYXJkIGFuZCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byBgaWVlZTgwMjExX2FsbG9jX2h3X25tYCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGBpZWVlODAyMTFfYWxsb2NfaHdfbm1gIGZ1bmN0aW9uLiBJJiMzOTt2ZSBsaWtlbHkgZW5jb3VudGVyZWQgdGhpcyBmdW5jdGlvbiBuYW1lIGJlZm9yZSBpbiB0aGUgY29udGV4dCBvZiBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gKGxpa2VseSBhIHN0cnVjdCBgaWVlZTgwMjExX2h3YCkgd2l0aGluIHRoZSBuZXR3b3JrIGRyaXZlciBmb3IgYW4gODAyLjExIGRldmljZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBiYXNpYyBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3MsIHJlc291cmNlIGFsbG9jYXRpb24gKG1lbW9yeSBmb3IgaW50ZXJuYWwgc3RydWN0dXJlcywgcG90ZW50aWFsIERNQSBidWZmZXJzLCBldGMuKSwgYW5kIG92ZXJhbGwgZXN0YWJsaXNoaW5nIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgd2lyZWxlc3MgZHJpdmVyIGFuZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGhhbmRsZSBhIGZldyBrZXkgYXNwZWN0cy4gRmlyc3QgaXQgbXVzdCBhbGxvY2F0ZSBtZW1vcnkuIE5leHQgaXQgbXVzdCBpbml0aWFsaXplIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJdCBtaWdodCBhbHNvIGhhdmUgdG8gZGVhbCB3aXRoIHJlZ2lzdGVyaW5nIHRoZSBuZXcgaGFyZHdhcmUgb2JqZWN0IHdpdGggdGhlIGFwcHJvcHJpYXRlIDgwMi4xMSBjb3JlIChsaWtlIG1hYzgwMjExKSwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O20gdXNlZCB0byBzZWVpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBkZXZpY2UmIzM5O3MgY2FwYWJpbGl0aWVzLCB3aGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGhhcmR3YXJlIHN0YXRlLCBhbmQgaG93IGl0IGhhbmRsZXMgaW5pdGlhbCBzZXR1cCByb3V0aW5lcyAobGlrZSBlbmFibGluZyBpbnRlcnJ1cHRzIG9yIGNvbmZpZ3VyaW5nIGJhc2ljIHJlZ2lzdGVycykuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIGVycm9yIGNvbmRpdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgY3JpdGljYWwgdG8ga25vd2luZyBob3cgYSBuZXcgODAyLjExIGRldmljZSBpcyBicm91Z2h0IG9ubGluZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODI4Olx0XHRcdFx0ICAgICFvcHMtXHUwMDNlcmVtb3ZlX2NoYW5jdHggfHxcbiA4Mjk6XHRcdFx0XHQgICAgIW9wcy1cdTAwM2VjaGFuZ2VfY2hhbmN0eCB8fFxuIDgzMDpcdFx0XHRcdCAgICAhb3BzLVx1MDAzZWFzc2lnbl92aWZfY2hhbmN0eCB8fFxuIDgzMTpcdFx0XHRcdCAgICAhb3BzLVx1MDAzZXVuYXNzaWduX3ZpZl9jaGFuY3R4KSlcbiA4MzI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA4MzM6XHRcdFx0ZW11bGF0ZV9jaGFuY3R4ID0gZmFsc2U7XG4gODM0Olx0XHR9XG4gODM1Olx0XG4gODM2Olx0XHQvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLlxuIDgzNzpcdFx0ICogV2UgdXNlIHRoZSB3aXBoeSBwcml2IGRhdGEgZm9yIGJvdGggb3VyIGllZWU4MDIxMV9sb2NhbCBhbmQgZm9yXG4gODM4Olx0XHQgKiB0aGUgZHJpdmVyJiMzOTtzIHByaXZhdGUgZGF0YVxuIDgzOTpcdFx0ICpcbiA4NDA6XHRcdCAqIEluIG1lbW9yeSBpdCYjMzk7bGwgYmUgbGlrZSB0aGlzOlxuIDg0MTpcdFx0ICpcbiA4NDI6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQzOlx0XHQgKiB8IHN0cnVjdCB3aXBoeVx0ICAgIHxcbiA4NDQ6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQ1Olx0XHQgKiB8IHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgIHxcbiA4NDY6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQ3Olx0XHQgKiB8IGRyaXZlciYjMzk7cyBwcml2YXRlIGRhdGEgICB8XG4gODQ4Olx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuIDg0OTpcdFx0ICpcbiA4NTA6XHRcdCAqL1xuIDg1MTpcdFx0cHJpdl9zaXplID0gQUxJR04oc2l6ZW9mKCpsb2NhbCksIE5FVERFVl9BTElHTikgJiM0MzsgcHJpdl9kYXRhX2xlbjtcbiA4NTI6XHRcbiA4NTM6XHRcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFx1MDAyNm1hYzgwMjExX2NvbmZpZ19vcHMsIHByaXZfc2l6ZSwgcmVxdWVzdGVkX25hbWUpO1xuIDg1NDpcdFxuIDg1NTpcdFx0aWYgKCF3aXBoeSlcbiA4NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU3Olx0XG4gODU4Olx0XHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGllZWU4MDIxMV9kZWZhdWx0X21nbXRfc3R5cGVzO1xuIDg1OTpcdFxuIDg2MDpcdFx0d2lwaHktXHUwMDNlcHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkO1xuIDg2MTpcdFxuIDg2MjpcdFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19ORVROU19PSyB8XG4gODYzOlx0XHRcdFx0V0lQSFlfRkxBR180QUREUl9BUCB8XG4gODY0Olx0XHRcdFx0V0lQSFlfRkxBR180QUREUl9TVEFUSU9OIHxcbiA4NjU6XHRcdFx0XHRXSVBIWV9GTEFHX1JFUE9SVFNfT0JTUyB8XG4gODY2Olx0XHRcdFx0V0lQSFlfRkxBR19PRkZDSEFOX1RYO1xuIDg2NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGB3aXBoeV9uZXdfbm1gIGZvciBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byB3aXJlbGVzcyBQSFlzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHdpcGh5X25ld19ubWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhhdCB0aGlzIGZ1bmN0aW9uLCBiYXNlZCBvbiBpdHMgbmFtZSBhbmQgdHlwaWNhbCBrZXJuZWwgbmFtaW5nIGNvbnZlbnRpb25zLCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBuZXcgd2lyZWxlc3MgUEhZLCBhbmQgdGhlICYjMzQ7bm0mIzM0OyBsaWtlbHkgcmVmZXJzIHRvIHRoZSAmIzM0O25ldGRldiBtYW5hZ2VyJiMzNDsgYXNwZWN0cyBhc3NvY2lhdGVkIHdpdGggaXQsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBrbm93LgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCBhbGxvY2F0ZXMgbWVtb3J5IOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZXNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIHVzZSBvZiAmIzM0O2t6YWxsb2MmIzM0OyBvciAmIzM0O2t6YWxsb2Nfbm9kZSYjMzQ7IGNvbmZpcm1zIHRoaXM7IHRoZSAmIzM0O2smIzM0OyBwcmVmaXggaW1wbGllcyBrZXJuZWwgbWVtb3J5LCB3aGlsZSBgemFsbG9jYCBzdWdnZXN0cyB0aGUgbWVtb3J5IHdpbGwgYmUgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmUgYSBjbGVhbiBzbGF0ZS4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgc2Vuc2libGUgYmVoYXZpb3IgZm9yIHRoaXMgc29ydCBvZiBhbGxvY2F0aW9uLgoKTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCYjMzk7cyBkb2luZyB0aGlzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0JiMzOTtzIGxvb2sgdXAgYHdpcGh5X25ld19ubWAgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLiBJIGV4cGVjdCBpdCB0byBiZSBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uLCBwcm9iYWJseSBkb2luZyBhIGBremFsbG9jYCBvbiBhIGBzdHJ1Y3Qgd2lwaHlgIChvciBzaW1pbGFyKSBhbmQgdGhlbiBpbml0aWFsaXppbmcgc29tZSBmaWVsZHMuIEhvd2V2ZXIsIEkgd2FudCB0byB2ZXJpZnkgYW55IHN1YnRsZSBkZXRhaWxzLCBlcnJvciBjaGVja2luZywgb3IgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIGVuc3VyZSBvcHRpbWFsIHJlc291cmNlIHV0aWxpemF0aW9uIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHNpemUgY2FsY3VsYXRpb25zLCBOVU1BIG5vZGUgaGFuZGxpbmcgKGlmIGBremFsbG9jX25vZGVgIGlzIGludm9sdmVkKSwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiBjYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dpcGh5X25ld19ubSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jPTUxOD1zdGF0aWMgdm9pZCBjZmc4MDIxMV93aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTU0OC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6NTQ5OnN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NTAtXHRcdFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy03MDItfVxubmV0L3dpcmVsZXNzL2NvcmUuYzo3MDM6RVhQT1JUX1NZTUJPTCh3aXBoeV9uZXdfbm0pO1xubmV0L3dpcmVsZXNzL2NvcmUuYy03MDQtXG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYz0xMz1pbnQgdF93aXBoeV9pbml0KHN0cnVjdCBrdW5pdF9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmN0eClcbi0tXG5uZXQvd2lyZWxlc3MvdGVzdHMvdXRpbC5jLTIyLVxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYzoyMzpcdHdpcGh5ID0gd2lwaHlfbmV3X25tKG9wcywgc2l6ZW9mKCpwcml2KSwgXCYjMzQ7a3VuaXRcJiMzNDspO1xubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYy0yNC1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCB3aXBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBDb3JlKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcsIG15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSBjb3JlIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmUgNTQ5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGZ1bmRhbWVudGFsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgc3VzcGVjdGVkIG1hbGZ1bmN0aW9uIGJ5IGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0OTpcdHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuIDU1MDpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lKVxuIDU1MTpcdHtcbiA1NTI6XHRcdHN0YXRpYyBhdG9taWNfdCB3aXBoeV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMCk7XG4gNTUzOlx0XG4gNTU0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gNTU1Olx0XHRpbnQgYWxsb2Nfc2l6ZTtcbiA1NTY6XHRcbiA1NTc6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWFkZF9rZXkgXHUwMDI2XHUwMDI2ICghb3BzLVx1MDAzZWRlbF9rZXkgfHwgIW9wcy1cdTAwM2VzZXRfZGVmYXVsdF9rZXkpKTtcbiA1NTg6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWF1dGggXHUwMDI2XHUwMDI2ICghb3BzLVx1MDAzZWFzc29jIHx8ICFvcHMtXHUwMDNlZGVhdXRoIHx8ICFvcHMtXHUwMDNlZGlzYXNzb2MpKTtcbiA1NTk6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWNvbm5lY3QgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGlzY29ubmVjdCk7XG4gNTYwOlx0XHRXQVJOX09OKG9wcy1cdTAwM2Vqb2luX2lic3MgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlbGVhdmVfaWJzcyk7XG4gNTYxOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VhZGRfdmlydHVhbF9pbnRmIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWRlbF92aXJ0dWFsX2ludGYpO1xuIDU2MjpcdFx0V0FSTl9PTihvcHMtXHUwMDNlYWRkX3N0YXRpb24gXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGVsX3N0YXRpb24pO1xuIDU2MzpcdFx0V0FSTl9PTihvcHMtXHUwMDNlYWRkX21wYXRoIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWRlbF9tcGF0aCk7XG4gNTY0Olx0XHRXQVJOX09OKG9wcy1cdTAwM2Vqb2luX21lc2ggXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlbGVhdmVfbWVzaCk7XG4gNTY1Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdGFydF9wMnBfZGV2aWNlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXN0b3BfcDJwX2RldmljZSk7XG4gNTY2Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdGFydF9hcCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VzdG9wX2FwKTtcbiA1Njc6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWpvaW5fb2NiIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWxlYXZlX29jYik7XG4gNTY4Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdXNwZW5kIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXJlc3VtZSk7XG4gNTY5Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzY2hlZF9zY2FuX3N0YXJ0IFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXNjaGVkX3NjYW5fc3RvcCk7XG4gNTcwOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VjYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpO1xuIDU3MTpcdFx0V0FSTl9PTihvcHMtXHUwMDNldGRsc19jaGFubmVsX3N3aXRjaCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2V0ZGxzX2NhbmNlbF9jaGFubmVsX3N3aXRjaCk7XG4gNTcyOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VhZGRfdHhfdHMgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGVsX3R4X3RzKTtcbiA1NzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgd2lwaHlfbmV3X25tYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgY29udGV4dCBpcyBjbGVhcmx5IGEgZGl2ZSBpbnRvIHRoZSBgd2lwaHlfbmV3X25tYCBmdW5jdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjayBvciBhIHJlbGF0ZWQgbmV0d29yayBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgYmFzaWNzIOKAkyB3aGF0IGEgV2ktRmkgUEhZIGlzLCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIG1hYzgwMjExIGZyYW1ld29yaywgYW5kIHRoZSByb2xlIG9mIG5ldGxpbmsgbWVzc2FnZXMuIFNvLCB0aGUgdGhpbmtpbmcgcHJvY2VzcyBoZXJlIGlzbiYjMzk7dCBhYm91dCAqd2hhdCogdGhlIGZ1bmN0aW9uIGRvZXMgaW4gYW4gYWJzdHJhY3Qgc2Vuc2UsIGJ1dCByYXRoZXIgYSBmb2N1c2VkIGF0dGVtcHQgdG8gdW5kZXJzdGFuZCB0aGUgKmRldGFpbHMqIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyB0byBncmFzcCB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIE5ldHdvcmtNYW5hZ2VyIG9yIHNpbWlsYXIgbmV0d29yayBtYW5hZ2VtZW50IGRhZW1vbnMgKGhlbmNlIHRoZSBgX25tYCBzdWZmaXgpLiBBbSBJIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgYnVnLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGF0dGVtcHRpbmcgdG8gaW1wbGVtZW50IGEgbmV3IGZlYXR1cmUgdGhhdCBuZWVkcyB0byBob29rIGluIGhlcmUsIG9yIGp1c3QgZG9pbmcgYSBjb2RlIHJldmlldz8gUHJvYmFibHkgdGhlIGxhdHRlciwgdGhlIHdvcmRpbmcgaW1wbGllcyB0aGF0IGEgY29tcGxldGUgdmlldyBvZiB0aGUgZnVuY3Rpb24gaXMgcmVxdWlyZWQuIFRoaXMga2luZCBvZiBkZWVwIGRpdmUgaXMgYnJlYWQgYW5kIGJ1dHRlciBmb3IgYW55IG5ldHdvcmsgZW5naW5lZXIuIEtub3dpbmcgdGhlIG51YW5jZXMgb2Ygd2lwaHkgY3JlYXRpb24gaXMgZXNzZW50aWFsIGZvciBldmVyeXRoaW5nIGZyb20gZHJpdmVyIGRldmVsb3BtZW50IHRvIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGNvbm5lY3Rpdml0eSBpc3N1ZXMuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0bywgd2VsbCwgcmVhZCB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc0Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSAmIzQzOyBzaXplb2ZfcHJpdjtcbiA1NzU6XHRcbiA1NzY6XHRcdHJkZXYgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpO1xuIDU3NzpcdFx0aWYgKCFyZGV2KVxuIDU3ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1Nzk6XHRcbiA1ODA6XHRcdHJkZXYtXHUwMDNlb3BzID0gb3BzO1xuIDU4MTpcdFxuIDU4MjpcdFx0cmRldi1cdTAwM2V3aXBoeV9pZHggPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZ3aXBoeV9jb3VudGVyKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZXdpcGh5X2lkeCBcdTAwM2MgMCkpIHtcbiA1ODU6XHRcdFx0LyogdWdoLCB3cmFwcGVkISAqL1xuIDU4NjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNndpcGh5X2NvdW50ZXIpO1xuIDU4NzpcdFx0XHRrZnJlZShyZGV2KTtcbiA1ODg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTg5Olx0XHR9XG4gNTkwOlx0XG4gNTkxOlx0XHQvKiBhdG9taWNfaW5jX3JldHVybiBtYWtlcyBpdCBzdGFydCBhdCAxLCBtYWtlIGl0IHN0YXJ0IGF0IDAgKi9cbiA1OTI6XHRcdHJkZXYtXHUwMDNld2lwaHlfaWR4LS07XG4gNTkzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBUWCBRdWV1ZSBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBgbWFjODAyMTFgIGludGVybmFscywgdGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIGxvZ2ljLiBJIHNlZSB0aGF0IGByZGV2YCBhbmQgYHNpemVvZl9wcml2YCwgd2hpY2ggaW5jbHVkZXMgdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCwgYXJlIGluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jYC4gVGhpcyBpbXBsaWVzIHRoYXQgYGxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXWAgaXMgaW5pdGlhbGx5IHNldCB0byBgZmFsc2VgIOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCYjMzk7cyBhIGtub3duIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGRpZmYgaXRzZWxmLiAgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIGBpZWVlODAyMTFfaS5oYCB3aGVyZSBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgaXMgYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYC4gVGhpcyBpbmRpY2F0ZXMgYSBuZXcgc3RhdGUgdmFyaWFibGUgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBjb250cm9sIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nLgoKVGhlbiwgbG9va2luZyBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMiBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgSSBub3RpY2UgdGhlIGNoYW5nZSBmcm9tIGNoZWNraW5nIGAhbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXWAgdG8gYCFsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY11gLiBUaGlzIGlzIHRoZSBrZXkg4oCTIHRoaXMgbmV3IGBzY2hlZHVsZV9vcGVuYCBib29sZWFuIGlzIG5vdyBkZXRlcm1pbmluZyBpZiB3ZSBlbnRlciB0aGUgVFggcXVldWUgc2VsZWN0aW9uIGxvb3AuICBJdCBzZWVtcyB0byBiZSBhIG1vcmUgZGlyZWN0IGFuZCBleHBsaWNpdCB3YXkgb2YgbWFuYWdpbmcgdGhlICYjMzQ7b3BlbiYjMzQ7IHN0YXRlIG9mIHRoZSBzY2hlZHVsZXIgZm9yIGEgZ2l2ZW4gQUMgKEFjY2VzcyBDYXRlZ29yeSkuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb24gKGFyb3VuZCBsaW5lIDQzNDcpLCB0aGUgY29kZSBub3cgZGlyZWN0bHkgYXNzaWducyB0aGUgcmVzdWx0IG9mIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiB0byBgbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdYC4gSWYgdGhhdCBjaGVjayByZXR1cm5zIHRydWUsIHRoZSBzY2hlZHVsZXIgaXMgZGVlbWVkICYjMzQ7b3BlbiwmIzM0OyB0aGUgcm91bmQgY291bnRlciAoYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gKSBpcyBpbmNyZW1lbnRlZCwgYW5kIGlmIHRoZSBjb3VudGVyIGlzIGFib3V0IHRvIG92ZXJmbG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1cGRhdGluZyBgc2NoZWR1bGVfcm91bmRgIGFmdGVyIHRoZSBhaXJ0aW1lIGNoZWNrLCBzbyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSBzdHJlYW1saW5lcyB0aGUgbG9naWMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgcmVsaWFuY2Ugb24gYHNjaGVkdWxlX3JvdW5kYCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBUWCBxdWV1ZSBpcyBzY2hlZHVsYWJsZSwgd2l0aCB0aGUgZXhwbGljaXQgdXNlIG9mIGEgYm9vbGVhbiBmbGFnLCBgc2NoZWR1bGVfb3BlbmAuIFRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiBwcm9iYWJseSBkZXRlcm1pbmVzIGlmIHRoZSBhaXJ0aW1lIGNvbmRpdGlvbiBmb3Igc2NoZWR1bGluZyBUWCBwYWNrZXRzIGhhcyBiZWVuIG1ldC4gVGhpcyBpcyBhIGNsZWFuZXIgYW5kIG1vcmUgcmVhZGFibGUgYXBwcm9hY2guIFRoZSBleHBsaWNpdCBgc2NoZWR1bGVfb3BlbmAgdmFyaWFibGUgbWFrZXMgdGhlIGludGVudCBtdWNoIGNsZWFyZXIsIHdoaWNoIHNob3VsZCBsZWFkIHRvIGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDExNTpcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDExNjpcdHtcbjQxMTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDExODpcdFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG40MTE5Olx0XHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG40MTIwOlx0XHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDEyMTpcdFx0Ym9vbCBhcWxfY2hlY2s7XG40MTIyOlx0XG40MTIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTI0Olx0XG40MTI1Olx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxuNDEyNjpcdFx0XHRnb3RvIG91dDtcbjQxMjc6XHRcbjQxMjg6XHQgYmVnaW46XG40MTI5Olx0XHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcbjQxMzA6XHRcdFx0XHRcdFx0c3RydWN0IHR4cV9pbmZvLFxuNDEzMTpcdFx0XHRcdFx0XHRzY2hlZHVsZV9vcmRlcik7XG40MTMyOlx0XHRpZiAoIXR4cWkpXG40MTMzOlx0XHRcdGdvdG8gb3V0O1xuNDEzNDpcdFxuNDEzNTpcdFx0aWYgKHR4cWkgPT0gaGVhZCkge1xuNDEzNjpcdFx0XHRpZiAoIWZvdW5kX2VsaWdpYmxlX3R4cSlcbjQxMzc6XHRcdFx0XHRnb3RvIG91dDtcbjQxMzg6XHRcdFx0ZWxzZVxuNDEzOTpcdFx0XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDE0MDpcdFx0fVxuNDE0MTpcdFxuNDE0MjpcdFx0aWYgKCFoZWFkKVxuNDE0MzpcdFx0XHRoZWFkID0gdHhxaTtcbjQxNDQ6XHRcbjQxNDU6XHRcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuNDE0NjpcdFx0aWYgKGFxbF9jaGVjaylcbjQxNDc6XHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbjQxNDg6XHRcbjQxNDk6XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEpIHtcbjQxNTA6XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cdTAwM2V0eHEuc3RhLFxuNDE1MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG40MTUyOlx0XG40MTUzOlx0XHRcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYykgXHUwMDNjIDApIHtcbjQxNTQ6XHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZVt0eHFpLVx1MDAzZXR4cS5hY10uZGVmaWNpdCAmIzQzOz1cbjQxNTU6XHRcdFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lX3dlaWdodDtcbjQxNTY6XHRcbjQxNTc6XHRcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbjQxNTg6XHRcdFx0fVxuNDE1OTpcdFx0fVxuNDE2MDpcdFxuNDE2MTpcdFx0aWYgKCFhcWxfY2hlY2spIHtcbjQxNjI6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbjQxNjM6XHRcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG40MTY0Olx0XHRcdGdvdG8gYmVnaW47XG40MTY1Olx0XHR9XG40MTY2Olx0XG40MTY3Olx0XHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG40MTY4Olx0XHRcdGdvdG8gb3V0O1xuNDE2OTpcdFxuNDE3MDpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyKTtcbjQxNzE6XHRcdHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY107XG40MTcyOlx0XHRyZXQgPSBcdTAwMjZ0eHFpLVx1MDAzZXR4cTtcbjQxNzM6XHRcbjQxNzQ6XHRvdXQ6XG40MTc1Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbjQxNzY6XHRcdHJldHVybiByZXQ7XG40MTc3Olx0fVxuNDE3ODpcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX25leHRfdHhxKTtcbjQxNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgVFggUXVldWUgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggcGFja2V0IHNjaGVkdWxpbmcgaW4gdGhlIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGVyIGtpY2tzIGludG8gZ2Vhci4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnM/IFdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbj8gV2hhdCYjMzk7cyBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIGEgdHJhbnNtaXNzaW9uIGlzc3VlIEkmIzM5O3ZlIGJlZW4gc2VlaW5nLiBJJiMzOTttIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBob3cgdGhpbmdzIGFyZSBzdXBwb3NlZCB0byB3b3JrIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmxvdyBpcyBkZXZpYXRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgd2l0aCBlYWNoIG9mIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzNDA6XHRcdHJldHVybiB0cnVlO1xuNDM0MTpcdH1cbjQzNDI6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KTtcbjQzNDM6XHRcbjQzNDQ6XHR2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDM0NTpcdHtcbjQzNDY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDM0NzpcdFxuNDM0ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuNDM0OTpcdFxuNDM1MDpcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuNDM1MTpcdFx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbjQzNTI6XHRcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuNDM1MzpcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xuNDM1NDpcdFx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcbjQzNTU6XHRcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xuNDM1NjpcdFx0fVxuNDM1NzpcdFxuNDM1ODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzU5Olx0fVxuNDM2MDpcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XG40MzYxOlx0XG40MzYyOlx0dm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG40MzYzOlx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG40MzY0Olx0XHRcdFx0XHQgIHUzMiBpbmZvX2ZsYWdzLFxuNDM2NTpcdFx0XHRcdFx0ICB1MzIgY3RybF9mbGFncylcbjQzNjY6XHR7XG40MzY3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG40MzY4Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuNDM2OTpcdFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuNDM3MDpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG40MzcxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbjQzNzI6XHRcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuNDM3MzpcdFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG40Mzc0Olx0XG40Mzc1Olx0XHRpZiAodW5saWtlbHkoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzYyBFVEhfSExFTikpIHtcbjQzNzY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG40Mzc3Olx0XHRcdHJldHVybjtcbjQzNzg6XHRcdH1cbjQzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjgKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMzk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNjaGVkdWxpbmcgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHdhcyBjb25mbGF0aW5nIGEg4oCcbm90IG9wZW7igJ0gc3RhdGUgd2l0aCBhIHNjaGVkdWxpbmcgcm91bmQgY291bnRlciBvZiB6ZXJvIHdpdGhpbiB0aGUgYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gIHZhcmlhYmxlLiBUaGlzIGxlZCB0byBwcm9ibGVtYXRpYyBjb21wYXJpc29ucyAoIGAwID09IDBgIG9yIGAhMGAgKSBhbmQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzLCBlc3BlY2lhbGx5IGR1cmluZyB0aGUgaW5pdGlhbCBzdGF0ZSB3aGVuIGB0eHFpLSZndDtzY2hlZHVsZV9yb3VuZGAgbWlnaHQgYWxzbyBiZSB6ZXJvLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgY2xlYW5seSBieSBpbnRyb2R1Y2luZyBhIG5ldyBib29sZWFuIGFycmF5LCBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gLCB3aXRoaW4gdGhlIGBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZS4gVGhpcyBjbGVhbmx5IHNlcGFyYXRlcyB0aGUg4oCcb3BlbuKAnSBzdGF0dXMgZnJvbSB0aGUgYWN0dWFsIHJvdW5kIGNvdW50ZXIgdmFsdWUsIHdoaWNoIGlzIGEgbXVjaCBjbGVhbmVyIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCBjb25jZXJucyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgZXNwZWNpYWxseSBzaW5jZSB0aGlzIGludm9sdmVzIGEgbmV3IHZhcmlhYmxlLiBIZXJlJiMzOTtzIG15IGJyZWFrZG93bjoKCjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKClgLCB3aGljaCBpcyBnb29kLiBUaGlzIG1lYW5zIGBzY2hlZHVsZV9vcGVuYCBpcyBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgKHRvIGZhbHNlKS4gVGhpcyBpbW1lZGlhdGVseSBlbGltaW5hdGVzIHRoZSBtb3N0IGNvbW1vbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KMi4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGUgZ29vZCBuZXdzIGhlcmUgaXMgdGhhdCBgc2NoZWR1bGVfb3BlbmAgYW5kIGBzY2hlZHVsZV9yb3VuZGAgYXJlICpub3QqIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBvcGVyYXRlcyBlbnRpcmVseSB3aXRoaW4gdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHNjaGVkdWxpbmcgbG9naWMsIHdoaWNoIHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLgozLiAgKipEYXRhIEhhbmRsaW5nOioqIENydWNpYWxseSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhbHRlciBidWZmZXIgbGVuZ3RocywgdG91Y2ggYW55IGJvdW5kcyBjaGVja3MsIG1vZGlmeSBjb3B5IHNpemVzLCBvciBjaGFuZ2Ugc3RydWN0dXJlIHBhZGRpbmcgaW4gYSB3YXkgdGhhdCB3b3VsZCBiZSB2aXNpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgc3RyaWN0bHkgaW50ZXJuYWwgc2NoZWR1bGluZyBmaXguCjQuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEkmIzM5O20gYWxzbyBlbnN1cmluZyB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBjb3VsZCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBvZiB0aGUgbmV3IHZhcmlhYmxlLiBUaGUgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB2aWEgYGt6YWxsb2MoKWAgYW5kIGFueSBsYXRlciB3cml0ZXMgb2NjdXIgaW4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCB3aGljaCBzZWVtcyBzYWZlLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gYW5hbHlzaXMgb3Igc2ltaWxhciB0b29scy4gSXQmIzM5O3MgYSB3ZWxsLXNjb3BlZCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgZml4IGZvciBhIHRyaWNreSBzY2hlZHVsaW5nIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxuXG4xLiBNZW1vcnkgYWxsb2NhdGlvbjogYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgZHVyaW5nIHdpcGh5IGluaXRpYWxpemF0aW9uIChgd2lwaHlfbmV3X25tKClgKSwgZW5zdXJpbmcgYWxsIG5ldyBhbmQgZXhpc3RpbmcgZmllbGRzIChpbmNsdWRpbmcgYHNjaGVkdWxlX29wZW5gKSBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxuXG4xLiBNZW1vcnkgYWxsb2NhdGlvbjogYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgZHVyaW5nIHdpcGh5IGluaXRpYWxpemF0aW9uIChgd2lwaHlfbmV3X25tKClgKSwgZW5zdXJpbmcgYWxsIG5ldyBhbmQgZXhpc3RpbmcgZmllbGRzIChpbmNsdWRpbmcgYHNjaGVkdWxlX29wZW5gKSBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTIuMDY1MjI1ODY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4NjU4NTM3NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfbmV4dF90eHFcIixcbiAgICBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRcIixcbiAgICBcImllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTIuMDY1MjMwODg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjEwNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDdkZGE1Yzk2MDUzYjEyOTIxZWMyMmE5MmNmZjY1ODJjYmNjNGU0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjAyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCA1M2IwYjA4ZDM0NTk3Li42NTMxMTM0MGRiNDA2IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMTQ2OCw2ICsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuIFxcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XFxuK1xcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcbiBcXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xcbiBcXHRzcGlubG9ja190IGhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2s7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcXG5pbmRleCBjMzMwOTI5NjBkZjI2Li5jNjY1Y2VkOWMwNWNiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNDEyMiw3ICs0MTIyLDcgQEAgc3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG4gXFxuLVxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG4rXFx0aWYgKCFsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gIGJlZ2luOlxcbkBAIC00MzQ3LDEyICs0MzQ3LDEyIEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG4gXFxuLVxcdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xcbitcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbitcXHRcXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcXG4rXFx0aWYgKGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuIFxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSsrO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdID0gMDtcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTMuNjYwMTM0NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc4MDczNDUwMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfbmV4dF90eHFcIixcbiAgICBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRcIixcbiAgICBcImllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbitcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XG4gXG4gXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IGMzMzA5Mjk2MGRmMjYuLmM2NjVjZWQ5YzA1Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MTIyLDcgKzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuK1x0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gIGJlZ2luOlxuQEAgLTQzNDcsMTIgKzQzNDcsMTIgQEAgdm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xuK1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuK1x0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbitcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuIFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcbiBcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMjo1My42NjAxMzYxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODk2NTY5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBNYWM4MDIxMSBUWCBTY2hlZHVsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIHNpbmNlIEknbSBmYW1pbGlhciB3aXRoIG1hYzgwMjExJ3MgVFggcGF0aC5cblxuU3BlY2lmaWNhbGx5LCBpbiB0aGUgaGVhZGVyIGZpbGUsIGl0J3MgaW50cm9kdWNpbmcgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIExvb2tzIGxpa2Ugd2UncmUgdHJhY2tpbmcgd2hldGhlciBhIHNjaGVkdWxlciBpcyBcIm9wZW5cIiBmb3IgZWFjaCBBY2Nlc3MgQ2F0ZWdvcnkgKEFDKS4gU2VlbXMgbGlrZSB3ZSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyBvciBub3QuXG5cblRoZSBtZWF0IG9mIGl0IGlzIGluIGB0eC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYSBzaW1wbGUgY2hhbmdlIGluIGBpZWVlODAyMTFfbmV4dF90eHFgIGlzIHN3YXBwaW5nIGBzY2hlZHVsZV9yb3VuZGAgZm9yIGBzY2hlZHVsZV9vcGVuYCB0byBtYWtlIHRoZSBjb25kaXRpb25hbCBjaGVjay4gVGhlIG5ldyBsb2dpYyBpbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgaXMgc3RvcmluZyB0aGUgcmV0dXJuIG9mIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGluIGBzY2hlZHVsZV9vcGVuYC4gVGhlbiBpZiBpdCBpcyBvcGVuLCB3ZSBpbmNyZW1lbnQgdGhlIHJvdW5kLCBvdGhlcndpc2UsIHdlIGRvbid0LiBUaGF0IGxvb2tzIGZpbmUsIGJ1dCB0aGlzIG1heSBjYXVzZSBzb21lIHJlZ3Jlc3Npb25zIGlmIG5vdCBwcm9wZXJseSB0ZXN0ZWQuXG5cblNvLCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHguY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIFRYIHNjaGVkdWxpbmcgYmVoYXZpb3IuIEknbSBrZWVuIHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGBzY2hlZHVsZV9vcGVuYCB2YXJpYWJsZSBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIGFpcnRpbWUgY2hlY2sgYW5kIHJvdW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBzY2hlZHVsaW5nIGltYmFsYW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzowNC41NTY3MDc1NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDExNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDExNTpcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG40MTE2OlxcdHtcXG40MTE3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbjQxMTg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XFxuNDExOTpcXHRcXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XFxuNDEyMDpcXHRcXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbjQxMjE6XFx0XFx0Ym9vbCBhcWxfY2hlY2s7XFxuNDEyMjpcXHRcXG40MTIzOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQxMjQ6XFx0XFxuNDEyNTpcXHRcXHRpZiAoIWxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcXG40MTI2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQxMjc6XFx0XFxuNDEyODpcXHQgYmVnaW46XFxuNDEyOTpcXHRcXHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxcbjQxMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHR4cV9pbmZvLFxcbjQxMzE6XFx0XFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfb3JkZXIpO1xcbjQxMzI6XFx0XFx0aWYgKCF0eHFpKVxcbjQxMzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEzNDpcXHRcXG40MTM1OlxcdFxcdGlmICh0eHFpID09IGhlYWQpIHtcXG40MTM2OlxcdFxcdFxcdGlmICghZm91bmRfZWxpZ2libGVfdHhxKVxcbjQxMzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEzODpcXHRcXHRcXHRlbHNlXFxuNDEzOTpcXHRcXHRcXHRcXHRmb3VuZF9lbGlnaWJsZV90eHEgPSBmYWxzZTtcXG40MTQwOlxcdFxcdH1cXG40MTQxOlxcdFxcbjQxNDI6XFx0XFx0aWYgKCFoZWFkKVxcbjQxNDM6XFx0XFx0XFx0aGVhZCA9IHR4cWk7XFxuNDE0NDpcXHRcXG40MTQ1OlxcdFxcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuNDE0NjpcXHRcXHRpZiAoYXFsX2NoZWNrKVxcbjQxNDc6XFx0XFx0XFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcXG40MTQ4OlxcdFxcbjQxNDk6XFx0XFx0aWYgKHR4cWktXFx1MDAzZXR4cS5zdGEpIHtcXG40MTUwOlxcdFxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHR4cWktXFx1MDAzZXR4cS5zdGEsXFxuNDE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbjQxNTI6XFx0XFxuNDE1MzpcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cXHUwMDNldHhxLmFjKSBcXHUwMDNjIDApIHtcXG40MTU0OlxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZVt0eHFpLVxcdTAwM2V0eHEuYWNdLmRlZmljaXQgKz1cXG40MTU1OlxcdFxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZV93ZWlnaHQ7XFxuNDE1NjpcXHRcXG40MTU3OlxcdFxcdFxcdFxcdGFxbF9jaGVjayA9IGZhbHNlO1xcbjQxNTg6XFx0XFx0XFx0fVxcbjQxNTk6XFx0XFx0fVxcbjQxNjA6XFx0XFxuNDE2MTpcXHRcXHRpZiAoIWFxbF9jaGVjaykge1xcbjQxNjI6XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLFxcbjQxNjM6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxc1t0eHFpLVxcdTAwM2V0eHEuYWNdKTtcXG40MTY0OlxcdFxcdFxcdGdvdG8gYmVnaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA0LjU1Njk5MTczMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwODg0NTQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHR4LmNgKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZy4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4gc28gZmFyLCBJIGhhdmUgYSBodW5jaCB3aGVyZSB0aGUgaXNzdWUgbWlnaHQgYmUgcm9vdGVkLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgdHguY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzZWdtZW50IGZyb20gcm91Z2hseSBsaW5lIDQzMzAgdG8gbGluZSA0MzcwLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBzdGFydCBkaWdnaW5nIGludG8gYW5kIHRvIGxvb2sgZm9yIGNsdWVzLCBlZGdlIGNhc2VzIG9yIHRoZSByb290IGNhdXNlLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBJJ20gaG9waW5nIHRoaXMgc3BlY2lmaWMgcmFuZ2UgaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA5LjY0NTQ1OTI5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzMwOlxcdFxcdHN0YS1cXHUwMDNlYWlydGltZVthY10uZGVmaWNpdCArPSBzdGEtXFx1MDAzZWFpcnRpbWVfd2VpZ2h0O1xcbjQzMzE6XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW2FjXSk7XFxuNDMzMjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQzMzM6XFx0XFxuNDMzNDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDMzNTpcXHRvdXQ6XFxuNDMzNjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKSlcXG40MzM3OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG40MzM4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDMzOTpcXHRcXG40MzQwOlxcdFxcdHJldHVybiB0cnVlO1xcbjQzNDE6XFx0fVxcbjQzNDI6XFx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX21heV90cmFuc21pdCk7XFxuNDM0MzpcXHRcXG40MzQ0OlxcdHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuNDM0NTpcXHR7XFxuNDM0NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG40MzQ3OlxcdFxcbjQzNDg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDM0OTpcXHRcXG40MzUwOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSA9XFxuNDM1MTpcXHRcXHRcXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcXG40MzUyOlxcdFxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG40MzUzOlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG40MzU0OlxcdFxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG40MzU1OlxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG40MzU2OlxcdFxcdH1cXG40MzU3OlxcdFxcbjQzNTg6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG40MzU5OlxcdH1cXG40MzYwOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XFxuNDM2MTpcXHRcXG40MzYyOlxcdHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjQzNjM6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjQzNjQ6XFx0XFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG40MzY1OlxcdFxcdFxcdFxcdFxcdCAgdTMyIGN0cmxfZmxhZ3MpXFxuNDM2NjpcXHR7XFxuNDM2NzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG40MzY5OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG40MzcwOlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbjQzNzE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuNDM3MjpcXHRcXHRib29sIGdyb3VwX2FkZHJlc3NlZDtcXG40MzczOlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG40Mzc0OlxcdFxcbjQzNzU6XFx0XFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBFVEhfSExFTikpIHtcXG40Mzc2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjQzNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjQzNzg6XFx0XFx0fVxcbjQzNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA5LjY0NjAxNzk1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTA1NTkxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgc2NoZWR1bGVfcm91bmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoIG9mIHRoZSBgc2NoZWR1bGVfcm91bmRgIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBCZXN0IHdheSB0byBkbyB0aGF0LCBlc3BlY2lhbGx5IGluIGEgcHJvamVjdCBvZiB0aGlzIHNpemUsIGlzIHRvIHVzZSBhIGdyZXAtbGlrZSB0b29sLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYHNjaGVkdWxlX3JvdW5kYCBpcyBiZWluZyB1c2VkLiBUaGF0J3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBtYXAgb2YgaXRzIGNhbGwgc2l0ZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wYWN0IGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgbW9kaWZ5IHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgYSBmYWlybHkgZXh0ZW5zaXZlIGxpc3QsIHNvIEknbGwgbmVlZCB0byBzb3J0IGl0IGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MTEuNzM2NTgwMzY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc3OTU5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWR1bGVfcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc3LSAqIEBzY2hlZHVsZV9vcmRlcjogdXNlZCB3aXRoIGllZWU4MDIxMV9sb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzktICogQGZsYWdzOiBUWFEgZmxhZ3MgZnJvbSBcXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTgyPXN0cnVjdCB0eHFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTg3OlxcdHUxNiBzY2hlZHVsZV9yb3VuZDtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlZHVsZV9vcmRlcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVxcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0NzA6XFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVxcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3OlxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxNjgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlxcdHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcXG5uZXQvbWFjODAyMTEvdHguYy00MTcyLVxcdHJldCA9IFxcdTAwMjZ0eHFpLVxcdTAwM2V0eHE7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MTMuMzg0MzgyODE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1MTUyMzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1hYzgwMjExIFRYIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzY2hlZHVsZV9yb3VuZGAgcGxheXMgYSBrZXkgcm9sZSBpbiB0aGUgbWFjODAyMTEncyBUWCBzY2hlZHVsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAuIFRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBgc2NoZWR1bGVfcm91bmRgIHZhcmlhYmxlIGlzIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBzY2hlZHVsZV9vcGVuYCBmbGFnLCB3aGljaCBpcyByZWxhdGVkIHRvIGFpcnRpbWUgY2hlY2tzLiBQcmUtcGF0Y2gsIGlmIHRoZSBhaXJ0aW1lIGNoZWNrIGZhaWxlZCwgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXWAgd291bGQgYmUgcmVzZXQgdG8gMC4gVGhlIHByb2JsZW0gdGhlbiBhcmlzZXMgYmVjYXVzZSBgaWVlZTgwMjExX25leHRfdHhxYCB1c2VzIDAgYXMgYSBjbG9zZWQgc3RhdGUgaW5kaWNhdG9yIChgaWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pIGdvdG8gb3V0O2ApLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIGl0IGluY3JlbWVudHMgcGFzdCB6ZXJvIGlmIGl0J3MgYmVlbiByZXNldCB0byB6ZXJvIG9yIGluY3JlbWVudGVkPyBJdCBzZWVtcyB0aGF0IGlmIGl0J3MgMCBpdCBnZXRzIGluY3JlbWVudGVkIChgaWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pIGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSsrO2ApLlxuXG5UaGUgcGF0Y2ggZXNzZW50aWFsbHkgc2VwYXJhdGVzIHRoZSBib29sZWFuIGBzY2hlZHVsZV9vcGVuYCBmcm9tIHRoZSBjb3VudGVyIGBzY2hlZHVsZV9yb3VuZGAuIFRoZSBwdXJwb3NlIG9mIGBzY2hlZHVsZV9yb3VuZGAgaXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcywgc28gd2Ugbm8gbG9uZ2VyIHVzZSAwIGFzIGEgc3RhdGUgaW5kaWNhdG9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQuIElzIG1hYzgwMjExIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXA/IEFoLCB5ZXMsIG9mIGNvdXJzZSEgbWFjODAyMTEgaXMgdGhlIGZvdW5kYXRpb25hbCB3aXJlbGVzcyA4MDIuMTEgc3lzdGVtIGluIExpbnV4LiBJdCdzIGFjdGl2ZWx5IHRlc3RlZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCwgaW1wb3J0YW50bHksIHN5emthbGxlci4gVGhvc2UgYXJlIGJvdGggZXhjZWxsZW50IGZvciB0aGlzIGtpbmQgb2YgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSBrbm93IG1hYzgwMjExIGlzIGZ1enogdGVzdGVkLiBUaGV5IHVzZSB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUsIGFsb25nIHdpdGggdmlydF93aWZpIG9yIFVTQiB3aWZpIGdhZGdldHMgLyBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGEgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBtYWM4MDIxMV9od3NpbWAgb3Igb3RoZXIgcmVsZXZhbnQgZHJpdmVycyBhY3R1YWxseSAqdXNlKiB0aGUgZnVuY3Rpb25zIGJlaW5nIGRpc2N1c3NlZCBoZXJlLCBuYW1lbHkgYGllZWU4MDIxMV9uZXh0X3R4cWAgb3IgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLiBUbyBjb25maXJtIHRoZSByZWFjaGFiaWxpdHksIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgdG8gc2VlIHdoYXQgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjE4LjUzNTkwOTExOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTg2NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfbmV4dF90eHFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz00NDc1PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBhYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDQ4MC1cXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCBhYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NDgxOlxcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDgyLVxcdFxcdHdoaWxlIChhdGgxMGtfbWFjX3R4X2Nhbl9wdXNoKGh3LCB0eHEpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcwLVxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3NzE6XFx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcyLVxcdGlmICghdHhxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYz0xOTgwPXZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMTk5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jOjIwMDA6XFx0d2hpbGUgKChxdWV1ZSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgdHhxLVxcdTAwM2VtYWM4MDIxMV9xbnVtKSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jLTIwMDEtXFx0XFx0Ym9vbCBmb3JjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz01NjQ9bXQ3Nl90eHFfc2NoZWR1bGVfbGlzdChzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNTc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzo1NzY6XFx0XFx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKHBoeS1cXHUwMDNlaHcsIHFpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTU3Ny1cXHRcXHRpZiAoIXR4cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jPTQ4MjY9c3RhdGljIHZvaWQgcnR3ODlfY29yZV90eHFfc2NoZWR1bGUoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LCB1OCBhYywgYm9vbCAqcmVpbnZva2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM3LVxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0ODM4OlxcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMtNDgzOS1cXHRcXHRydHd0eHEgPSAoc3RydWN0IHJ0dzg5X3R4cSAqKXR4cS1cXHUwMDNlZHJ2X3ByaXY7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExNi0gKiBvYnRhaW4gdGhlIG5leHQgcXVldWUgdG8gcHVsbCBmcmFtZXMgZnJvbSwgdGhlIGRyaXZlciBjYWxsc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6MTE3OiAqIGllZWU4MDIxMV9uZXh0X3R4cSgpLiBUaGUgZHJpdmVyIGlzIHRoZW4gZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSB0eHEgdXNpbmdcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExOC0gKiBpZWVlODAyMTFfcmV0dXJuX3R4cSgpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD03NzM2PXZvaWQgaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc0Mi0gKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZSwgb3IgZnJvbVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzc0MzogKlxcdGllZWU4MDIxMV9uZXh0X3R4cSgpXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzQ0LSAqXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc3NTg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzY5LSAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBmcm9tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo3NzcwOiAqXFx0aWVlZTgwMjExX25leHRfdHhxKClcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3NzEtICpcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzc5NT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc5OC0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc3OTk6ICogaWVlZTgwMjExX25leHRfdHhxIC0gZ2V0IG5leHQgdHggcXVldWUgdG8gcHVsbCBwYWNrZXRzIGZyb21cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MDAtICpcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwNy0gKi9cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MDg6c3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpO1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwOS1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNS0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NzgxNjogKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBpZWVlODAyMTFfbmV4dF90eHEoKSBvciBpZWVlODAyMTFfcmV0dXJuX3R4cSgpLlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNy0gKiBUaGUgZHJpdmVyIG11c3Qgbm90IGNhbGwgbXVsdGlwbGUgVFhRIHNjaGVkdWxpbmcgcm91bmRzIGNvbmN1cnJlbnRseS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzg0Mj1pZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ3LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzg0ODogKiBpZWVlODAyMTFfcmV0dXJuX3R4cSAtIHJldHVybiBhIFRYUSBwcmV2aW91c2x5IGFjcXVpcmVkIGJ5IGllZWU4MDIxMV9uZXh0X3R4cSgpXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ5LSAqXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTAxPWllZWU4MDIxMV90eHFfa2VlcF9hY3RpdmUoc3RydWN0IHR4cV9pbmZvICp0eHFpKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDExNC1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTE1OnN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxMTYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE3Ny19XFxubmV0L21hYzgwMjExL3R4LmM6NDE3ODpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDE3OS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTgwPXZvaWQgX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE5OS1cXHRcXHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcXG5uZXQvbWFjODAyMTEvdHguYzo0MjAwOlxcdFxcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXFxubmV0L21hYzgwMjExL3R4LmMtNDIwMS1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS91dGlsLmM9MzA1PXZvaWQgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3V0aWwuYy0zMTMtXFxubmV0L21hYzgwMjExL3V0aWwuYzozMTQ6XFx0LyogVXNlIGllZWU4MDIxMV9uZXh0X3R4cSgpIGZvciBhaXJ0aW1lIGZhaXJuZXNzIGFjY291bnRpbmcgKi9cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxNS1cXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCB0eHEtXFx1MDAzZWFjKTtcXG5uZXQvbWFjODAyMTEvdXRpbC5jOjMxNjpcXHR3aGlsZSAoKHF1ZXVlID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCB0eHEtXFx1MDAzZWFjKSkpIHtcXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxNy1cXHRcXHR3YWtlX3R4X3B1c2hfcXVldWUobG9jYWwsIHNkYXRhLCBxdWV1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjIwLjIyNzc4MTQ3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE0MzgzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUXVldWUgV2FrZS1VcCBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS91dGlsLmM6MzA1YCwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgbWFjODAyMTEncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBzb2Z0d2FyZSBxdWV1aW5nIGFuZCB0aGUgc3Vic2VxdWVudCBhd2FrZW5pbmcgb2YgdGhlIHRyYW5zbWl0IHF1ZXVlLiBJdCBzZWVtcyB0byBjYWxsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCBhbmQgYGllZWU4MDIxMV9uZXh0X3R4cWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLCBzbyBJJ2xsIGdvIGJhY2sgdG8gYG5ldC9tYWM4MDIxMS91dGlsLmNgIGFyb3VuZCBsaW5lIDMwNSBhbmQgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGV4YWN0bHkgd2hlbiBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBpcyBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnZvY2F0aW9uIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUWCBxdWV1ZSBtYW5hZ2VtZW50IHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjMuMDQyMTY4NTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHRkcnZfdHgobG9jYWwsIFxcdTAwMjZjb250cm9sLCBza2IpO1xcbiAzMDE6XFx0XFx0fVxcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHQvKiB3YWtlX3R4X3F1ZXVlIGhhbmRsZXIgZm9yIGRyaXZlciBub3QgaW1wbGVtZW50aW5nIGEgY3VzdG9tIG9uZSovXFxuIDMwNTpcXHR2b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbiAzMDc6XFx0e1xcbiAzMDg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuIDMwOTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh0eHEtXFx1MDAzZXZpZik7XFxuIDMxMDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcXVldWU7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHQvKiBVc2UgaWVlZTgwMjExX25leHRfdHhxKCkgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYWNjb3VudGluZyAqL1xcbiAzMTU6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVxcdTAwM2VhYyk7XFxuIDMxNjpcXHRcXHR3aGlsZSAoKHF1ZXVlID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCB0eHEtXFx1MDAzZWFjKSkpIHtcXG4gMzE3OlxcdFxcdFxcdHdha2VfdHhfcHVzaF9xdWV1ZShsb2NhbCwgc2RhdGEsIHF1ZXVlKTtcXG4gMzE4OlxcdFxcdFxcdGllZWU4MDIxMV9yZXR1cm5fdHhxKGh3LCBxdWV1ZSwgZmFsc2UpO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbiAzMjE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrKTtcXG4gMzIyOlxcdH1cXG4gMzIzOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlKTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIHZvaWQgX19pZWVlODAyMTFfd2FrZV90eHFzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgYWMpXFxuIDMyNjpcXHR7XFxuIDMyNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4gMzI4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZjtcXG4gMzI5OlxcdFxcdHN0cnVjdCBmcSAqZnEgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWZxO1xcbiAzMzA6XFx0XFx0c3RydWN0IHBzX2RhdGEgKnBzID0gTlVMTDtcXG4gMzMxOlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEw7XFxuIDMzMjpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4gMzMzOlxcdFxcdGludCBpO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIDMzNjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmZxLVxcdTAwM2Vsb2NrKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0aWYgKCF0ZXN0X2JpdChTREFUQV9TVEFURV9SVU5OSU5HLCBcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXRlKSlcXG4gMzM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzoyMy4wNDIzNDYzMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1NjUyMjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBMaW51eCBXaXJlbGVzcyBTdGFjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgbWFjODAyMTFgIGFnYWluLiBJdCdzIHRoZSBiZWF0aW5nIGhlYXJ0IG9mIExpbnV4J3Mgd2lyZWxlc3MgbmV0d29ya2luZywgcmlnaHQ/IEknbSBpbnRlcmFjdGluZyB3aXRoIGl0IHRocm91Z2ggdmFyaW91cyBpbnRlcmZhY2VzIOKAkyBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIHBhY2tldCBzb2NrZXRzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZy4gVG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiwgYW5kIGhvdyBpdCdzIGVuYWJsZWQsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQncyBhbGwgcHV0IHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCBgbWFjODAyMTFgIGhhcyBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjUuMTk4ODcwOTI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1NDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjUuMjUxODMwODcxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTMxNTU1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBDT05GSUdfTUFDODAyMTEqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgQ09ORklHX01BQzgwMjExYCBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBhc3N1bWluZywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLCB0aGlzIGxpa2VseSBpbnZvbHZlcyBhIGNhc2NhZGluZyBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCdzIHByb2JhYmx5IG5vdCBhIHNpbXBsZSBcIm9uL29mZlwiIHN3aXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIGRyaXZlcnMsIHJlZ3VsYXRvcnkgc2V0dGluZ3MsIHZhcmlvdXMgbmV0d29ya2luZyBzdGFja3MsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgd2lyZWxlc3MtcmVsYXRlZCBjb21wb25lbnRzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjcuMjA0OTg5MDY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzoyNy4yMDUwNzM4NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyNzEyMjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBDRkc4MDIxMWAgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGdpdmVuIHRoZSBldm9sdXRpb24gb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzKio6IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgQ0ZHODAyMTFgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBkcml2ZXJzLCBvciBnZW5lcmFsIHdpcmVsZXNzIGZlYXR1cmUgdG9nZ2xlcz9cbiogICAqKk1vZHVsZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMqKjogSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdmFyaW91cyB3aXJlbGVzcyBtb2R1bGVzIChlLmcuLCBzcGVjaWZpYyByYWRpbyBmaXJtd2FyZSBzdXBwb3J0KSByZWx5IG9uIHRoaXMgZm91bmRhdGlvbmFsIGxheWVyLiBBIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGggaXMgZXNzZW50aWFsLlxuKiAgICoqQnVpbGQtdGltZSBpbXBsaWNhdGlvbnMqKjogSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhZmZlY3QgdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGZyb20gY29tcGlsYXRpb24gdGltZSB0byBpbWFnZSBzaXplLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiBgQ0ZHODAyMTFgIGFuZCBvdGhlciB3aXJlbGVzcyBzdWJzeXN0ZW1zIChlLmcuLCBkZXByZWNhdGVkIG9yIGxlZ2FjeSB3aXJlbGVzcyBzdGFja3MpLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIVxuXG5UaGlzIGRlZXAgZGl2ZSBpcyBqdXN0IGFub3RoZXIgZGF5IGF0IHRoZSBvZmZpY2UgdG8gZW5zdXJlIGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgY29yZSBjb21wb25lbnQgaXMgdXNlZCwgYW5kIHRvIGZvcmVzZWUgYW55IGZ1dHVyZSBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjMzLjUzMjE5ODI5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczODQyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MzMuNTc5NTkyMTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Nzc4MDc2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGludGVyZXN0ZWQgaW4sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGNoYWluIEkgd2FudCB0byB1bmRlcnN0YW5kLiBMaW5lIDE3IGlzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBncmFzcCB0aGUgY29udGV4dC4gS25vd2luZyB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbnRleHR1YWxpemUgdGhlIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIGl0J3MgYSBuZXcgZmVhdHVyZSwgYSBkcml2ZXIsIG9yIGEgZ2VuZXJhbCB3aXJlbGVzcyBmcmFtZXdvcmsgb3B0aW9uIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM1LjQ1NzQwNDA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM1LjQ1NzQ2NzMzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNjIwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYWM4MDIxMV9od3NpbWAgZm9yIEluc2lnaHRzIGludG8gTWFjODAyMTEgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgYG1hYzgwMjExYCBpcyBhY3R1YWxseSB0ZXN0ZWQgYW5kIHNpbXVsYXRlZC4gSSBrbm93IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IGBtYWM4MDIxMV9od3NpbWAgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhhdC4gSXQncyB0aGUgc3RhbmRhcmQsIHNvIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gaG9waW5nIHRvIGZpbmQgb3V0IGhvdyB0aGV5IG1hbmFnZSB0byByZXBsaWNhdGUgdGhlIGhhcmR3YXJlIGVudmlyb25tZW50IHdpdGhpbiB0aGUga2VybmVsIGZvciB0aGUgYG1hYzgwMjExYCBzdGFjay4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHRlc3RpbmcgbWV0aG9kb2xvZ2llcyBpbiBwbGFjZSwgYW5kIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIGdhcHMgb3IgYXJlYXMgZm9yIGltcHJvdmVkIGNvdmVyYWdlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM3LjUxMDA5MDQyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTUyMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzozOS4wNjk2MTc0MzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Njg2Njc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgV2lyZWxlc3MgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0J3Mgc2VlLi4uIHRoZSB0ZXh0IG1lbnRpb25zIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgS2NvbmZpZ2Agbm93IHRvIHNlZSB3aGF0J3MgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhpcyBhbGwgcGllY2VzIHRvZ2V0aGVyLiBUaGF0J2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDEuNDM2NDg3MDk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDEuNDM2NjAxOTk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MjUyODY4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1BQzgwMjExIFRYIFNjaGVkdWxpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbiB0aGlzIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLlxuXG5SaWdodCwgbGV0J3MgZGlnIGludG8gdGhlIGRpZmZzIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVudCBoZXJlLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCBgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhgIGFkZHMgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBiZWhhdmlvcmFsIGNoYW5nZXMuXG5cblRoZW4sIGluIGBuZXQvbWFjODAyMTEvdHguY2AsIGBpZWVlODAyMTFfbmV4dF90eHFgIG5vdyBjaGVja3MgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdYCBpbnN0ZWFkIG9mIGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY11gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCdzIGEgY29uZGl0aW9uYWwgZ2F0ZSBmb3IgdHJhbnNtaXR0aW5nLiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgYWxzbyBzZXRzIGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXWAgYmFzZWQgb24gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjaygpYCwgYW5kIGl0IG9ubHkgaW5jcmVtZW50cyBgc2NoZWR1bGVfcm91bmRbYWNdYCBpZiBgc2NoZWR1bGVfb3BlbmAgaXMgdHJ1ZS4gQWxzbywgY3J1Y2lhbGx5LCB0aGUgY29kZSBkb2VzICpub3QqIHplcm8gYHNjaGVkdWxlX3JvdW5kW2FjXWAgaWYgYHNjaGVkdWxlX29wZW5gIGlzIGZhbHNlLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBUWCBxdWV1ZSBzY2hlZHVsaW5nIHdvcmtzLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBUWCBzY2hlZHVsaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc28gbGV0J3MgbG9vayBhdCBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCwgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLCBgaWVlZTgwMjExX3JldHVybl90eHFgLCBhbmQgYF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBmb2N1cyBzeW1ib2xzIG9yIGNhbGxlcnMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIGBuZXQvbWFjODAyMTEvdHguY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDYuOTYxODkyMDk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTc1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTc1OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDE3NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjQxNzc6XFx0fVxcbjQxNzg6XFx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV4dF90eHEpO1xcbjQxNzk6XFx0XFxuNDE4MDpcXHR2b2lkIF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG40MTgxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEsXFxuNDE4MjpcXHRcXHRcXHRcXHQgICAgICBib29sIGZvcmNlKVxcbjQxODM6XFx0e1xcbjQxODQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDE4NTpcXHRcXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSB0b190eHFfaW5mbyh0eHEpO1xcbjQxODY6XFx0XFx0Ym9vbCBoYXNfcXVldWU7XFxuNDE4NzpcXHRcXG40MTg4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1t0eHEtXFx1MDAzZWFjXSk7XFxuNDE4OTpcXHRcXG40MTkwOlxcdFxcdGhhc19xdWV1ZSA9IGZvcmNlIHx8XFxuNDE5MTpcXHRcXHRcXHQgICAgKCF0ZXN0X2JpdChJRUVFODAyMTFfVFhRX1NUT1AsIFxcdTAwMjZ0eHFpLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG40MTkyOlxcdFxcdFxcdCAgICAgdHhxX2hhc19xdWV1ZSh0eHEpKTtcXG40MTkzOlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0eHFpLVxcdTAwM2VzY2hlZHVsZV9vcmRlcikgXFx1MDAyNlxcdTAwMjZcXG40MTk0OlxcdFxcdCAgICAoaGFzX3F1ZXVlIHx8IGllZWU4MDIxMV90eHFfa2VlcF9hY3RpdmUodHhxaSkpKSB7XFxuNDE5NTpcXHRcXHRcXHQvKiBJZiBhaXJ0aW1lIGFjY291bnRpbmcgaXMgYWN0aXZlLCBhbHdheXMgZW5xdWV1ZSBTVEFzIGF0IHRoZVxcbjQxOTY6XFx0XFx0XFx0ICogaGVhZCBvZiB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCB0aGV5IG9ubHkgZ2V0IG1vdmVkIHRvIHRoZVxcbjQxOTc6XFx0XFx0XFx0ICogYmFjayBieSB0aGUgYWlydGltZSBEUlIgc2NoZWR1bGVyIG9uY2UgdGhleSBoYXZlIGEgbmVnYXRpdmVcXG40MTk4OlxcdFxcdFxcdCAqIGRlZmljaXQuIEEgc3RhdGlvbiB0aGF0IGFscmVhZHkgaGFzIGEgbmVnYXRpdmUgZGVmaWNpdCB3aWxsXFxuNDE5OTpcXHRcXHRcXHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcXG40MjAwOlxcdFxcdFxcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXFxuNDIwMTpcXHRcXHRcXHQgKi9cXG40MjAyOlxcdFxcdFxcdGlmICh0eHFpLVxcdTAwM2V0eHEuc3RhIFxcdTAwMjZcXHUwMDI2IGxvY2FsLVxcdTAwM2VhaXJ0aW1lX2ZsYWdzIFxcdTAwMjZcXHUwMDI2IGhhc19xdWV1ZSBcXHUwMDI2XFx1MDAyNlxcbjQyMDM6XFx0XFx0XFx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG40MjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0FJUlRJTUVfRkFJUk5FU1MpKVxcbjQyMDU6XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLFxcbjQyMDY6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbdHhxLVxcdTAwM2VhY10pO1xcbjQyMDc6XFx0XFx0XFx0ZWxzZVxcbjQyMDg6XFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuNDIwOTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cS1cXHUwMDNlYWNdKTtcXG40MjEwOlxcdFxcdFxcdGlmIChoYXNfcXVldWUpXFxuNDIxMTpcXHRcXHRcXHRcXHRpZWVlODAyMTFfdHhxX3NldF9hY3RpdmUodHhxaSk7XFxuNDIxMjpcXHRcXHR9XFxuNDIxMzpcXHRcXG40MjE0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW3R4cS1cXHUwMDNlYWNdKTtcXG40MjE1OlxcdH1cXG40MjE2OlxcdEVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxKTtcXG40MjE3OlxcdFxcbjQyMTg6XFx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXFsX2Rpc2FibGUpO1xcbjQyMTk6XFx0XFxuNDIyMDpcXHRib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG40MjIxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbjQyMjI6XFx0e1xcbjQyMjM6XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuNDIyNDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG40MjI1OlxcdFxcbjQyMjY6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcXG40MjI3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQyMjg6XFx0XFxuNDIyOTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXFsX2Rpc2FibGUpKVxcbjQyMzA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDIzMTpcXHRcXG40MjMyOlxcdFxcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcXHUwMDNjXFxuNDIzNDpcXHRcXHRcXHQgICAgICAgbG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjQ2Ljk2MjE0NDQ2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjAwMDE3NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBUWCBRdWV1ZSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGluZywgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG5hbWUgcG9wIHVwIGluIHRoZSBjb250ZXh0IG9mIHNvbWUgcmVjZW50IHBlcmZvcm1hbmNlIHR3ZWFrcyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBgdHguY2AgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxlciBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hlbiB0byBwdWxsIHBhY2tldHMgb2ZmIHRoZSBUWCBxdWV1ZSBhbmQgaGFuZCB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggaXMgdG8gb3B0aW1pemUgZm9yIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHNjaGVkdWxpbmcgb3ZlcmhlYWQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MuLi4gaG9wZWZ1bGx5IGl0J3Mgbm90IHRvbyBjb252b2x1dGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgYm90dGxlbmVja3MgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvdWxkIHJlYWxseSBoZWxwIGZpbmUtdHVuZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NTguOTYyMzIyMjAyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cXHR9XFxubmV0L21hYzgwMjExL3V0aWwuYzozMjA6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzIxLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjU5LjAwOTg2NjQ4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzMwNzYzNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgRG93biBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLiBJJ20gc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91czogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBzb21ld2hlcmUgd2l0aGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGxpa2VseSBpbiB0aGUgY29yZSA4MDIuMTEgY29kZSwgb3IgbWF5YmUgZXZlbiBpbiBhIGRyaXZlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpZiBpdCdzIGRlZXBseSB0aWVkIHRvIGhhcmR3YXJlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEknZCBleHBlY3QgdG8gc2VlIGl0IGluIGEgZmlsZSBsaWtlIGBpZWVlODAyMTFfdHhxLmNgLCBgbWFjODAyMTEuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IHVzZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUncyBcImZpbmQgZGVmaW5pdGlvblwiIGZlYXR1cmUgdG8gcGlucG9pbnQgaXQuIEtub3dpbmcgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIHRoZSBmaXJzdCBzdGVwIHRvIHVucGFja2luZyB0aGUgd2hvbGUgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MDEuNzQwNjM0MTU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5OTI1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmM9MzM3NT1zdGF0aWMgdm9pZCBhdGgxMGtfaHR0X3J4X3R4X2ZldGNoX2luZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMzQ4MC1cXHRcXHRpZWVlODAyMTFfcmV0dXJuX3R4cShodywgdHhxLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzozNDgxOlxcdFxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXFx1MDAzZWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTM0ODItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ0NzU9c3RhdGljIGludCBhdGgxMGtfbWFjX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGFjKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDkxLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ0OTI6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ0OTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzgyLW91dDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3ODM6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ3ODQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFyLVxcdTAwM2VxdWV1ZV9sb2NrW2FjXSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jPTE5ODA9dm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDEzLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlY2hhbl9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jOjIwMTQ6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlbWFjODAyMTFfcW51bSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz02Mzg9dm9pZCBtdDc2X3R4cV9zY2hlZHVsZShzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUwLVxcdFxcdGxlbiA9IG10NzZfdHhxX3NjaGVkdWxlX2xpc3QocGh5LCBxaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzo2NTE6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQocGh5LVxcdTAwM2VodywgcWlkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUyLVxcdH0gd2hpbGUgKGxlbiBcXHUwMDNlIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDgyNj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3R4cV9zY2hlZHVsZShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIHU4IGFjLCBib29sICpyZWludm9rZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjMtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jOjQ4NjQ6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODY1LX1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NzgxOT12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgyMS0vKiAoZGVwcmVjYXRlZCkgKi9cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MjI6c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MjMte1xcbi0tXFxubmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cXHR9XFxubmV0L21hYzgwMjExL3V0aWwuYzozMjA6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzIxLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjAzLjI4MDU2NTQzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk1MjY0MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZXByZWNhdGVkIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCBpcyBhIGRlcHJlY2F0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmlnaHQsIGRlcHJlY2F0ZWQgbWVhbnMgd2UgbmVlZCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQncyByZXBsYWNpbmcgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBjdXJyZW50IGNvcmUgZnVuY3Rpb24gY2FsbHMgYXJlIHN1cnJvdW5kaW5nIGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBzZWVtIHRvIGJlOiBgaWVlZTgwMjExX25leHRfdHhxYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCBhbmQgYGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZWAuIFRoZXNlIGFsbCBsaXZlIGluIGBuZXQvbWFjODAyMTFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGZsb3cuIE5vdyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5CZXlvbmQgdGhlc2UgY29yZSBlbGVtZW50cywgSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3QgY2FsbGVycyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgLiBJdCBsb29rcyByZWxhdGVkLCBsZXQncyB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4gS25vd2luZyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9uIHVzZWQgdG8gYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDowNS41NzU4MzIxOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTEzODExMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTQyNzI9c3RhdGljIGJvb2xcXG5uZXQvbWFjODAyMTEvdHguYzo0MjczOmllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXFxubmV0L21hYzgwMjExL3R4LmMtNDI3NC17XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MjkxPWJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzAzLVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzMDQ6XFx0aWYgKCFpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSlcXG5uZXQvbWFjODAyMTEvdHguYy00MzA1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDM0ND12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDM1MC1cXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTE6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XFxubmV0L21hYzgwMjExL3R4LmMtNDM1Mi1cXHRpZiAobG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjA3LjEyNzIxOTA4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTMxODM0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFRYIFF1ZXVlIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgdG91Y2hpbmcgc29tZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2sgbG9naWMgd2l0aGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGlzIGludm9sdmVkLCBhbG9uZyB3aXRoIHRoZSBleHBvcnRlZCBmdW5jdGlvbiBgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCByaWdodCBhd2F5IEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbXBhY3QuXG5cbkJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAsIGFuZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCB0byBiZSBlbmFibGVkLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIHRob3NlIGFyZSB0aGUgb25lcyB0byBjb25zaWRlci5cblxuVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgY3J1Y2lhbCBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbXMuIEl0J3MgdG91Y2hpbmcgdGhlIGxvZ2ljIGluIGBpZWVlODAyMTFfbmV4dF90eHFgLCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLiBUaGUgZmFjdCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIHRoZSBgbmw4MDIxMS92aXJ0dWFsIHdpZmlgIGludGVyZmFjZSBtZWFucyBpdCdzIGFjY2Vzc2libGUuIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBhYm91dCB0cmFja2luZyB0aGUgVFggc2NoZWR1bGluZyByb3VuZHMgYW5kIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBzdGF0ZSAoYHNjaGVkdWxlX29wZW5gKSwgd2hpY2ggZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIHF1ZXVlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGFuZCBwcmV2ZW50cyBsb29wcy4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgZXJyb3JzLlxuXG5UbyBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHJldmlldyB0aGUgcmVxdWlyZWQgY29uZmlnczogYENGRzgwMjExYCwgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gSSdtIGdvaW5nIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBpZWVlODAyMTFfbmV4dF90eHFgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAsIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLCBhbmQgYGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0YC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuQWZ0ZXIgYSBmaW5hbCBzd2VlcCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZGV0YWlscywgaXQgbG9va3MgbGlrZSBJJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gT2theSwgaXQncyB0aW1lIHRvIGZsYWcgdGhpcyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NTMsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjExLjY1OTA1NTk2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTI2MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX25leHRfdHhxXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0XCIsXG4gICAgXCJpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVcIixcbiAgICBcImllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9uZXh0X3R4cVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydFwiLFxuICAgIFwiaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX21heV90cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIHN0YXRlIHRyYWNraW5nIGluIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrIGJ5IGRlY291cGxpbmcgdGhlIGFjdGl2ZSBzY2hlZHVsZSByb3VuZCBjb3VudGVyIGZyb20gdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIGFpcnRpbWUgY2hlY2sgc3RhdHVzIChzY2hlZHVsZV9vcGVuKS4gbWFjODAyMTEgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc2ltdWxhdGVkIHJhZGlvIChtYWM4MDIxMV9od3NpbSkgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IFRYIHF1ZXVlIGl0ZXJhdGlvbiwgZGVxdWV1ZSwgYW5kIGFpcnRpbWUgc2NoZWR1bGluZyBsb29wIHRlcm1pbmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoxMS43MzM1ODgzNTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTkwMTY0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTEuNzM0MDA3NDYzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDg5ODk3NDAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbitcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XG4gXG4gXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IGMzMzA5Mjk2MGRmMjYuLmM2NjVjZWQ5YzA1Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MTIyLDcgKzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuK1x0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gIGJlZ2luOlxuQEAgLTQzNDcsMTIgKzQzNDcsMTIgQEAgdm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xuK1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuK1x0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbitcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuIFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcbiBcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoxMS43MzQwMDgyOTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg1NDIxNjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBmaWd1cmluZyBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIExvb2tpbmcgYXQgdGhlIGFmZmVjdGVkIGZpbGVzLCBpdCdzIGhpdHRpbmcgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBmbGFncyDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNtaXNzaW9uLCBpcyBhbiBhcmVhIHdoZXJlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgY2FuIGx1cmsuXG5cbk5vdywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIE15IGdvLXRvIGFwcHJvYWNoIGlzIGdyZXBwaW5nIGZvciByZWxldmFudCBrZXl3b3JkcyBhbmQsIG9mIGNvdXJzZSwgYSBnb29kIG9sZC1mYXNoaW9uZWQgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBhbnkgcG9pbnRlciBtYW5pcHVsYXRpb24gaW4gdGhvc2UgZmlsZXMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlIHJlcXVpcmUgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTYuNTg4MjI3Mzg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI5ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hlZHVsZV9yb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc3LSAqIEBzY2hlZHVsZV9vcmRlcjogdXNlZCB3aXRoIGllZWU4MDIxMV9sb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzktICogQGZsYWdzOiBUWFEgZmxhZ3MgZnJvbSBcXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTgyPXN0cnVjdCB0eHFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTg3OlxcdHUxNiBzY2hlZHVsZV9yb3VuZDtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlZHVsZV9vcmRlcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVxcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0NzA6XFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVxcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3OlxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxNjgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlxcdHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcXG5uZXQvbWFjODAyMTEvdHguYy00MTcyLVxcdHJldCA9IFxcdTAwMjZ0eHFpLVxcdTAwM2V0eHE7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTYuNjM4NTMwMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3NjI5MzI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGllZWU4MDIxMV9sb2NhbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEdpdmVuIHRoYXQgaXQncyBhIGNyaXRpY2FsIHN0cnVjdHVyZSB3aXRoaW4gdGhlIDgwMi4xMSBzdGFjaywgYW5kIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb3IgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLCB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBwaGFzZS4gVGhhdCBwb2ludHMgbWUgZGlyZWN0bHkgdG93YXJkIGBpZWVlODAyMTFfYWxsb2NfaHdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGFuZCwgdGhlcmVmb3JlLCBpcyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGVzdGFibGlzaGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgY2hhaW4gYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcmVzb3VyY2UgY29udGVudGlvbiB3aXRoaW4gb3IgYXJvdW5kIHRoYXQgZnVuY3Rpb24uIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uLCBhbmQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbWlzbWFuYWdlZCBwb2ludGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4gSWYgSSBkb24ndCBzZWUgYW55dGhpbmcgb2J2aW91cyB0aGVyZSwgSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gc2VlIHdobyBjYWxscyB0aGF0IGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGxpa2VseSByZXNpZGVzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLCBvciBpbiBhIGZ1bmN0aW9uIGl0IGNhbGxzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoyNS40MDE0NjYwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzI5MDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKnN0cnVjdCBpZWVlODAyMTFfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoyNS40NjAwNDcyOTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzOTQxMDY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEhhcmR3YXJlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBhbGxvY2F0aW9uIGlzc3VlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZXJlIHRoZSBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGJlaW5nIGJyb3VnaHQgb25saW5lLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZWl0aGVyIGBhbGxvY19od2Agb3IgYGllZWU4MDIxMV9hbGxvY19od2AuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gcm91dGluZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBoYXJkd2FyZSBpbiB0aGlzIHN5c3RlbS4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjI3LjI5OTQ1OTg2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5MDA2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tYWluLmM9Nzc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgbWFjODAyMTFfdmh0X2NhcGFfbW9kX21hc2sgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTc5Mi1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjc5MzpzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxubmV0L21hYzgwMjExL21haW4uYy03OTQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTA1MC19XFxubmV0L21hYzgwMjExL21haW4uYzoxMDUxOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2FsbG9jX2h3X25tKTtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEwNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjI3LjM2OTM2NzAyNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI0MTYyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1hYzgwMjExYCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGBsb2NhbGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0J3MgdGhlIGNvcmUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHBhcnRpY3VsYXIgd2lyZWxlc3MgZGV2aWNlLiBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9tYWM4MDIxMS9tYWluLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3OTMsIHRoZXJlIHNob3VsZCBiZSBzb21lIHJlbGV2YW50IGNvZGUgYXJvdW5kIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNydWNpYWwgYGxvY2FsYCB2YXJpYWJsZSBjb21lcyBpbnRvIGJlaW5nLi4uIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBkcml2ZXIgZ2V0cyBzZXQgdXAsIHNvIEkgY2FuIHNlZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBJJ20gYWZ0ZXIgdGhlIGFsbG9jYXRpb24gaXRzZWxmLCB0aGUgcmVsZXZhbnQgYXJndW1lbnRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MjkuMzkzNTMxNDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkzOlxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMsXFxuIDc5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSlcXG4gNzk2OlxcdHtcXG4gNzk3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsO1xcbiA3OTg6XFx0XFx0aW50IHByaXZfc2l6ZSwgaTtcXG4gNzk5OlxcdFxcdHN0cnVjdCB3aXBoeSAqd2lwaHk7XFxuIDgwMDpcXHRcXHRib29sIGVtdWxhdGVfY2hhbmN0eDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0aWYgKFdBUk5fT04oIW9wcy1cXHUwMDNldHggfHwgIW9wcy1cXHUwMDNlc3RhcnQgfHwgIW9wcy1cXHUwMDNlc3RvcCB8fCAhb3BzLVxcdTAwM2Vjb25maWcgfHxcXG4gODAzOlxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2VhZGRfaW50ZXJmYWNlIHx8ICFvcHMtXFx1MDAzZXJlbW92ZV9pbnRlcmZhY2UgfHxcXG4gODA0OlxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2Vjb25maWd1cmVfZmlsdGVyIHx8ICFvcHMtXFx1MDAzZXdha2VfdHhfcXVldWUpKVxcbiA4MDU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlc3RhX3N0YXRlIFxcdTAwMjZcXHUwMDI2IChvcHMtXFx1MDAzZXN0YV9hZGQgfHwgb3BzLVxcdTAwM2VzdGFfcmVtb3ZlKSkpXFxuIDgwODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0aWYgKFdBUk5fT04oISFvcHMtXFx1MDAzZWxpbmtfaW5mb19jaGFuZ2VkICE9ICEhb3BzLVxcdTAwM2V2aWZfY2ZnX2NoYW5nZWQgfHxcXG4gODExOlxcdFxcdFxcdCAgICAob3BzLVxcdTAwM2VsaW5rX2luZm9fY2hhbmdlZCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWJzc19pbmZvX2NoYW5nZWQpKSlcXG4gODEyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4MTM6XFx0XFxuIDgxNDpcXHRcXHQvKiBjaGVjayBhbGwgb3Igbm8gY2hhbm5lbCBjb250ZXh0IG9wZXJhdGlvbnMgZXhpc3QgKi9cXG4gODE1OlxcdFxcdGlmIChvcHMtXFx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IFxcdTAwMjZcXHUwMDI2XFxuIDgxNjpcXHRcXHQgICAgb3BzLVxcdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCBcXHUwMDI2XFx1MDAyNlxcbiA4MTc6XFx0XFx0ICAgIG9wcy1cXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpIHtcXG4gODE4OlxcdFxcdFxcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlYXNzaWduX3ZpZl9jaGFuY3R4IHx8XFxuIDgxOTpcXHRcXHRcXHRcXHQgICAgb3BzLVxcdTAwM2V1bmFzc2lnbl92aWZfY2hhbmN0eCkpXFxuIDgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODIxOlxcdFxcdFxcdGVtdWxhdGVfY2hhbmN0eCA9IHRydWU7XFxuIDgyMjpcXHRcXHR9IGVsc2Uge1xcbiA4MjM6XFx0XFx0XFx0aWYgKFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9hZGRfY2hhbmN0eCB8fFxcbiA4MjQ6XFx0XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlcmVtb3ZlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfcmVtb3ZlX2NoYW5jdHggfHxcXG4gODI1OlxcdFxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZWNoYW5nZV9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2NoYW5nZV9jaGFuY3R4KSlcXG4gODI2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4Mjc6XFx0XFx0XFx0aWYgKFdBUk5fT04oIW9wcy1cXHUwMDNlYWRkX2NoYW5jdHggfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MjkuMzkzNjcyOThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMTM5NTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBJRUVFIDgwMi4xMSBzdGFuZGFyZCBhbmQgbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBgaWVlZTgwMjExX2FsbG9jX2h3X25tYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGllZWU4MDIxMV9hbGxvY19od19ubWAgZnVuY3Rpb24uIEkndmUgbGlrZWx5IGVuY291bnRlcmVkIHRoaXMgZnVuY3Rpb24gbmFtZSBiZWZvcmUgaW4gdGhlIGNvbnRleHQgb2YgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgbmV3IGhhcmR3YXJlIHJlcHJlc2VudGF0aW9uIChsaWtlbHkgYSBzdHJ1Y3QgYGllZWU4MDIxMV9od2ApIHdpdGhpbiB0aGUgbmV0d29yayBkcml2ZXIgZm9yIGFuIDgwMi4xMSBkZXZpY2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCByZXNvdXJjZSBhbGxvY2F0aW9uIChtZW1vcnkgZm9yIGludGVybmFsIHN0cnVjdHVyZXMsIHBvdGVudGlhbCBETUEgYnVmZmVycywgZXRjLiksIGFuZCBvdmVyYWxsIGVzdGFibGlzaGluZyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHdpcmVsZXNzIGRyaXZlciBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBJIGFudGljaXBhdGUgaXQgd2lsbCBoYW5kbGUgYSBmZXcga2V5IGFzcGVjdHMuIEZpcnN0IGl0IG11c3QgYWxsb2NhdGUgbWVtb3J5LiBOZXh0IGl0IG11c3QgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSXQgbWlnaHQgYWxzbyBoYXZlIHRvIGRlYWwgd2l0aCByZWdpc3RlcmluZyB0aGUgbmV3IGhhcmR3YXJlIG9iamVjdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSA4MDIuMTEgY29yZSAobGlrZSBtYWM4MDIxMSksIHdoaWNoIGlzIHNvbWV0aGluZyBJJ20gdXNlZCB0byBzZWVpbmcuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIGRldmljZSdzIGNhcGFiaWxpdGllcywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBoYXJkd2FyZSBzdGF0ZSwgYW5kIGhvdyBpdCBoYW5kbGVzIGluaXRpYWwgc2V0dXAgcm91dGluZXMgKGxpa2UgZW5hYmxpbmcgaW50ZXJydXB0cyBvciBjb25maWd1cmluZyBiYXNpYyByZWdpc3RlcnMpLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIGVycm9yIGNvbmRpdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBjcml0aWNhbCB0byBrbm93aW5nIGhvdyBhIG5ldyA4MDIuMTEgZGV2aWNlIGlzIGJyb3VnaHQgb25saW5lIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaG93IGl0J3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjMxLjg5NTA3MDYzOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjg6XFx0XFx0XFx0XFx0ICAgICFvcHMtXFx1MDAzZXJlbW92ZV9jaGFuY3R4IHx8XFxuIDgyOTpcXHRcXHRcXHRcXHQgICAgIW9wcy1cXHUwMDNlY2hhbmdlX2NoYW5jdHggfHxcXG4gODMwOlxcdFxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2Vhc3NpZ25fdmlmX2NoYW5jdHggfHxcXG4gODMxOlxcdFxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2V1bmFzc2lnbl92aWZfY2hhbmN0eCkpXFxuIDgzMjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODMzOlxcdFxcdFxcdGVtdWxhdGVfY2hhbmN0eCA9IGZhbHNlO1xcbiA4MzQ6XFx0XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHQvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLlxcbiA4Mzc6XFx0XFx0ICogV2UgdXNlIHRoZSB3aXBoeSBwcml2IGRhdGEgZm9yIGJvdGggb3VyIGllZWU4MDIxMV9sb2NhbCBhbmQgZm9yXFxuIDgzODpcXHRcXHQgKiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhXFxuIDgzOTpcXHRcXHQgKlxcbiA4NDA6XFx0XFx0ICogSW4gbWVtb3J5IGl0J2xsIGJlIGxpa2UgdGhpczpcXG4gODQxOlxcdFxcdCAqXFxuIDg0MjpcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcXG4gODQzOlxcdFxcdCAqIHwgc3RydWN0IHdpcGh5XFx0ICAgIHxcXG4gODQ0OlxcdFxcdCAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbiA4NDU6XFx0XFx0ICogfCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICB8XFxuIDg0NjpcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcXG4gODQ3OlxcdFxcdCAqIHwgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhICAgfFxcbiA4NDg6XFx0XFx0ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuIDg0OTpcXHRcXHQgKlxcbiA4NTA6XFx0XFx0ICovXFxuIDg1MTpcXHRcXHRwcml2X3NpemUgPSBBTElHTihzaXplb2YoKmxvY2FsKSwgTkVUREVWX0FMSUdOKSArIHByaXZfZGF0YV9sZW47XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFxcdTAwMjZtYWM4MDIxMV9jb25maWdfb3BzLCBwcml2X3NpemUsIHJlcXVlc3RlZF9uYW1lKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKCF3aXBoeSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHR3aXBoeS1cXHUwMDNlbWdtdF9zdHlwZXMgPSBpZWVlODAyMTFfZGVmYXVsdF9tZ210X3N0eXBlcztcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0d2lwaHktXFx1MDAzZXByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDtcXG4gODYxOlxcdFxcbiA4NjI6XFx0XFx0d2lwaHktXFx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfTkVUTlNfT0sgfFxcbiA4NjM6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR180QUREUl9BUCB8XFxuIDg2NDpcXHRcXHRcXHRcXHRXSVBIWV9GTEFHXzRBRERSX1NUQVRJT04gfFxcbiA4NjU6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR19SRVBPUlRTX09CU1MgfFxcbiA4NjY6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR19PRkZDSEFOX1RYO1xcbiA4Njc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjMxLjg5NTIzNjIxOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg4MjAyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYHdpcGh5X25ld19ubWAgZm9yIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byB3aXJlbGVzcyBQSFlzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgd2lwaHlfbmV3X25tYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRoaXMgZnVuY3Rpb24sIGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0eXBpY2FsIGtlcm5lbCBuYW1pbmcgY29udmVudGlvbnMsIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIG5ldyB3aXJlbGVzcyBQSFksIGFuZCB0aGUgXCJubVwiIGxpa2VseSByZWZlcnMgdG8gdGhlIFwibmV0ZGV2IG1hbmFnZXJcIiBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCBpdCwgd2hpY2ggaXMgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGtub3cuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgYWxsb2NhdGVzIG1lbW9yeSDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZXNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIHVzZSBvZiBcImt6YWxsb2NcIiBvciBcImt6YWxsb2Nfbm9kZVwiIGNvbmZpcm1zIHRoaXM7IHRoZSBcImtcIiBwcmVmaXggaW1wbGllcyBrZXJuZWwgbWVtb3J5LCB3aGlsZSBgemFsbG9jYCBzdWdnZXN0cyB0aGUgbWVtb3J5IHdpbGwgYmUgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmUgYSBjbGVhbiBzbGF0ZS4gVGhhdCdzIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSBiZWhhdmlvciBmb3IgdGhpcyBzb3J0IG9mIGFsbG9jYXRpb24uXG5cbk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgKmhvdyogaXQncyBkb2luZyB0aGlzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3MgbG9vayB1cCBgd2lwaHlfbmV3X25tYCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIEkgZXhwZWN0IGl0IHRvIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24sIHByb2JhYmx5IGRvaW5nIGEgYGt6YWxsb2NgIG9uIGEgYHN0cnVjdCB3aXBoeWAgKG9yIHNpbWlsYXIpIGFuZCB0aGVuIGluaXRpYWxpemluZyBzb21lIGZpZWxkcy4gSG93ZXZlciwgSSB3YW50IHRvIHZlcmlmeSBhbnkgc3VidGxlIGRldGFpbHMsIGVycm9yIGNoZWNraW5nLCBvciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgaXQgbWlnaHQgYmUgdXNpbmcgdG8gZW5zdXJlIG9wdGltYWwgcmVzb3VyY2UgdXRpbGl6YXRpb24gYW5kIHByZXZlbnQgcG90ZW50aWFsIGlzc3Vlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBzaXplIGNhbGN1bGF0aW9ucywgTlVNQSBub2RlIGhhbmRsaW5nIChpZiBga3phbGxvY19ub2RlYCBpcyBpbnZvbHZlZCksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MzUuMjgzNDQxNzU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU1NjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aXBoeV9uZXdfbm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9NTE4PXN0YXRpYyB2b2lkIGNmZzgwMjExX3dpcGh5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NDgtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo1NDk6c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NTAtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTcwMi19XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo3MDM6RVhQT1JUX1NZTUJPTCh3aXBoeV9uZXdfbm0pO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNzA0LVxcbi0tXFxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYz0xMz1pbnQgdF93aXBoeV9pbml0KHN0cnVjdCBrdW5pdF9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmN0eClcXG4tLVxcbm5ldC93aXJlbGVzcy90ZXN0cy91dGlsLmMtMjItXFxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYzoyMzpcXHR3aXBoeSA9IHdpcGh5X25ld19ubShvcHMsIHNpemVvZigqcHJpdiksIFxcXCJrdW5pdFxcXCIpO1xcbm5ldC93aXJlbGVzcy90ZXN0cy91dGlsLmMtMjQtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHdpcGh5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MzUuMzM1MDAyMzk2WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjMwMjg0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIENvcmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIHdpcmVsZXNzIGlzc3VlLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIG15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSBjb3JlIGhhbmRsaW5nLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZSA1NDkuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBmdW5kYW1lbnRhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgc3VzcGVjdGVkIG1hbGZ1bmN0aW9uIGJ5IGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDEuMjk4MDMzNjhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ5LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ5OlxcdHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxcbiA1NTA6XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRzdGF0aWMgYXRvbWljX3Qgd2lwaHlfY291bnRlciA9IEFUT01JQ19JTklUKDApO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuIDU1NTpcXHRcXHRpbnQgYWxsb2Nfc2l6ZTtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZWFkZF9rZXkgXFx1MDAyNlxcdTAwMjYgKCFvcHMtXFx1MDAzZWRlbF9rZXkgfHwgIW9wcy1cXHUwMDNlc2V0X2RlZmF1bHRfa2V5KSk7XFxuIDU1ODpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYXV0aCBcXHUwMDI2XFx1MDAyNiAoIW9wcy1cXHUwMDNlYXNzb2MgfHwgIW9wcy1cXHUwMDNlZGVhdXRoIHx8ICFvcHMtXFx1MDAzZWRpc2Fzc29jKSk7XFxuIDU1OTpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlY29ubmVjdCBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkaXNjb25uZWN0KTtcXG4gNTYwOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2Vqb2luX2lic3MgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlbGVhdmVfaWJzcyk7XFxuIDU2MTpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYWRkX3ZpcnR1YWxfaW50ZiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkZWxfdmlydHVhbF9pbnRmKTtcXG4gNTYyOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfc3RhdGlvbiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkZWxfc3RhdGlvbik7XFxuIDU2MzpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYWRkX21wYXRoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZWRlbF9tcGF0aCk7XFxuIDU2NDpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlam9pbl9tZXNoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZWxlYXZlX21lc2gpO1xcbiA1NjU6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZXN0YXJ0X3AycF9kZXZpY2UgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlc3RvcF9wMnBfZGV2aWNlKTtcXG4gNTY2OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VzdGFydF9hcCBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VzdG9wX2FwKTtcXG4gNTY3OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2Vqb2luX29jYiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VsZWF2ZV9vY2IpO1xcbiA1Njg6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZXN1c3BlbmQgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlcmVzdW1lKTtcXG4gNTY5OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VzY2hlZF9zY2FuX3N0YXJ0IFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZXNjaGVkX3NjYW5fc3RvcCk7XFxuIDU3MDpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlcmVtYWluX29uX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKTtcXG4gNTcxOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2V0ZGxzX2NoYW5uZWxfc3dpdGNoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZXRkbHNfY2FuY2VsX2NoYW5uZWxfc3dpdGNoKTtcXG4gNTcyOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfdHhfdHMgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlZGVsX3R4X3RzKTtcXG4gNTczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDo0MS4yOTgyMDQ4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYyODAyMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHdpcGh5X25ld19ubWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBjb250ZXh0IGlzIGNsZWFybHkgYSBkaXZlIGludG8gdGhlIGB3aXBoeV9uZXdfbm1gIGZ1bmN0aW9uLCBwcm9iYWJseSB3aXRoaW4gdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrIG9yIGEgcmVsYXRlZCBuZXR3b3JrIG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgaW1wbGljaXQgYXNzdW1wdGlvbiBpcyB0aGF0IEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljcyDigJMgd2hhdCBhIFdpLUZpIFBIWSBpcywgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmssIGFuZCB0aGUgcm9sZSBvZiBuZXRsaW5rIG1lc3NhZ2VzLiBTbywgdGhlIHRoaW5raW5nIHByb2Nlc3MgaGVyZSBpc24ndCBhYm91dCAqd2hhdCogdGhlIGZ1bmN0aW9uIGRvZXMgaW4gYW4gYWJzdHJhY3Qgc2Vuc2UsIGJ1dCByYXRoZXIgYSBmb2N1c2VkIGF0dGVtcHQgdG8gdW5kZXJzdGFuZCB0aGUgKmRldGFpbHMqIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdtIGxpa2VseSBsb29raW5nIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggTmV0d29ya01hbmFnZXIgb3Igc2ltaWxhciBuZXR3b3JrIG1hbmFnZW1lbnQgZGFlbW9ucyAoaGVuY2UgdGhlIGBfbm1gIHN1ZmZpeCkuIEFtIEkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBidWcsIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYXR0ZW1wdGluZyB0byBpbXBsZW1lbnQgYSBuZXcgZmVhdHVyZSB0aGF0IG5lZWRzIHRvIGhvb2sgaW4gaGVyZSwgb3IganVzdCBkb2luZyBhIGNvZGUgcmV2aWV3PyBQcm9iYWJseSB0aGUgbGF0dGVyLCB0aGUgd29yZGluZyBpbXBsaWVzIHRoYXQgYSBjb21wbGV0ZSB2aWV3IG9mIHRoZSBmdW5jdGlvbiBpcyByZXF1aXJlZC4gVGhpcyBraW5kIG9mIGRlZXAgZGl2ZSBpcyBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgbmV0d29yayBlbmdpbmVlci4gS25vd2luZyB0aGUgbnVhbmNlcyBvZiB3aXBoeSBjcmVhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBkcml2ZXIgZGV2ZWxvcG1lbnQgdG8gdHJvdWJsZXNob290aW5nIGNvbXBsZXggY29ubmVjdGl2aXR5IGlzc3Vlcy4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvLCB3ZWxsLCByZWFkIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDQuMjYxMDA5NjM0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NDpcXHRcXHRhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSArIHNpemVvZl9wcml2O1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHRyZGV2ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNTc3OlxcdFxcdGlmICghcmRldilcXG4gNTc4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyZGV2LVxcdTAwM2VvcHMgPSBvcHM7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJkZXYtXFx1MDAzZXdpcGh5X2lkeCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZ3aXBoeV9jb3VudGVyKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKHVubGlrZWx5KHJkZXYtXFx1MDAzZXdpcGh5X2lkeCBcXHUwMDNjIDApKSB7XFxuIDU4NTpcXHRcXHRcXHQvKiB1Z2gsIHdyYXBwZWQhICovXFxuIDU4NjpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZ3aXBoeV9jb3VudGVyKTtcXG4gNTg3OlxcdFxcdFxcdGtmcmVlKHJkZXYpO1xcbiA1ODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU4OTpcXHRcXHR9XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdC8qIGF0b21pY19pbmNfcmV0dXJuIG1ha2VzIGl0IHN0YXJ0IGF0IDEsIG1ha2UgaXQgc3RhcnQgYXQgMCAqL1xcbiA1OTI6XFx0XFx0cmRldi1cXHUwMDNld2lwaHlfaWR4LS07XFxuIDU5MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDQuMjYxMjA3MTU0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxODg1NDMzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBUWCBRdWV1ZSBTY2hlZHVsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgYG1hYzgwMjExYCBpbnRlcm5hbHMsIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBsb2dpYy4gSSBzZWUgdGhhdCBgcmRldmAgYW5kIGBzaXplb2ZfcHJpdmAsIHdoaWNoIGluY2x1ZGVzIHRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAsIGFyZSBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgaW1wbGllcyB0aGF0IGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXWAgaXMgaW5pdGlhbGx5IHNldCB0byBgZmFsc2VgIOKAkyB0aGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFzIGl0J3MgYSBrbm93biBzdGF0ZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgZGlmZiBpdHNlbGYuICBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byBgaWVlZTgwMjExX2kuaGAgd2hlcmUgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAuIFRoaXMgaW5kaWNhdGVzIGEgbmV3IHN0YXRlIHZhcmlhYmxlIGlzIGJlaW5nIGludHJvZHVjZWQgdG8gY29udHJvbCB0aGUgVFggcXVldWUgc2NoZWR1bGluZy5cblxuVGhlbiwgbG9va2luZyBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMiBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgSSBub3RpY2UgdGhlIGNoYW5nZSBmcm9tIGNoZWNraW5nIGAhbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdYCB0byBgIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdYC4gVGhpcyBpcyB0aGUga2V5IOKAkyB0aGlzIG5ldyBgc2NoZWR1bGVfb3BlbmAgYm9vbGVhbiBpcyBub3cgZGV0ZXJtaW5pbmcgaWYgd2UgZW50ZXIgdGhlIFRYIHF1ZXVlIHNlbGVjdGlvbiBsb29wLiAgSXQgc2VlbXMgdG8gYmUgYSBtb3JlIGRpcmVjdCBhbmQgZXhwbGljaXQgd2F5IG9mIG1hbmFnaW5nIHRoZSBcIm9wZW5cIiBzdGF0ZSBvZiB0aGUgc2NoZWR1bGVyIGZvciBhIGdpdmVuIEFDIChBY2Nlc3MgQ2F0ZWdvcnkpLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb24gKGFyb3VuZCBsaW5lIDQzNDcpLCB0aGUgY29kZSBub3cgZGlyZWN0bHkgYXNzaWducyB0aGUgcmVzdWx0IG9mIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiB0byBgbG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY11gLiBJZiB0aGF0IGNoZWNrIHJldHVybnMgdHJ1ZSwgdGhlIHNjaGVkdWxlciBpcyBkZWVtZWQgXCJvcGVuLFwiIHRoZSByb3VuZCBjb3VudGVyIChgbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdYCkgaXMgaW5jcmVtZW50ZWQsIGFuZCBpZiB0aGUgY291bnRlciBpcyBhYm91dCB0byBvdmVyZmxvdyBpdCdzIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1cGRhdGluZyBgc2NoZWR1bGVfcm91bmRgIGFmdGVyIHRoZSBhaXJ0aW1lIGNoZWNrLCBzbyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSBzdHJlYW1saW5lcyB0aGUgbG9naWMuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIHJlcGxhY2VzIHRoZSByZWxpYW5jZSBvbiBgc2NoZWR1bGVfcm91bmRgIGZvciBkZXRlcm1pbmluZyBpZiBhIFRYIHF1ZXVlIGlzIHNjaGVkdWxhYmxlLCB3aXRoIHRoZSBleHBsaWNpdCB1c2Ugb2YgYSBib29sZWFuIGZsYWcsIGBzY2hlZHVsZV9vcGVuYC4gVGhlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGZ1bmN0aW9uIHByb2JhYmx5IGRldGVybWluZXMgaWYgdGhlIGFpcnRpbWUgY29uZGl0aW9uIGZvciBzY2hlZHVsaW5nIFRYIHBhY2tldHMgaGFzIGJlZW4gbWV0LiBUaGlzIGlzIGEgY2xlYW5lciBhbmQgbW9yZSByZWFkYWJsZSBhcHByb2FjaC4gVGhlIGV4cGxpY2l0IGBzY2hlZHVsZV9vcGVuYCB2YXJpYWJsZSBtYWtlcyB0aGUgaW50ZW50IG11Y2ggY2xlYXJlciwgd2hpY2ggc2hvdWxkIGxlYWQgdG8gZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UsIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NTAuNDQ5NzUzMTkxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTE1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTE1OlxcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbjQxMTY6XFx0e1xcbjQxMTc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDExODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcmV0ID0gTlVMTDtcXG40MTE5OlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEwsICpoZWFkID0gTlVMTDtcXG40MTIwOlxcdFxcdGJvb2wgZm91bmRfZWxpZ2libGVfdHhxID0gZmFsc2U7XFxuNDEyMTpcXHRcXHRib29sIGFxbF9jaGVjaztcXG40MTIyOlxcdFxcbjQxMjM6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDEyNDpcXHRcXG40MTI1OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxcbjQxMjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEyNzpcXHRcXG40MTI4OlxcdCBiZWdpbjpcXG40MTI5OlxcdFxcdHR4cWkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxc1thY10sXFxuNDEzMDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdHhxX2luZm8sXFxuNDEzMTpcXHRcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9vcmRlcik7XFxuNDEzMjpcXHRcXHRpZiAoIXR4cWkpXFxuNDEzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG40MTM0OlxcdFxcbjQxMzU6XFx0XFx0aWYgKHR4cWkgPT0gaGVhZCkge1xcbjQxMzY6XFx0XFx0XFx0aWYgKCFmb3VuZF9lbGlnaWJsZV90eHEpXFxuNDEzNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40MTM4OlxcdFxcdFxcdGVsc2VcXG40MTM5OlxcdFxcdFxcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbjQxNDA6XFx0XFx0fVxcbjQxNDE6XFx0XFxuNDE0MjpcXHRcXHRpZiAoIWhlYWQpXFxuNDE0MzpcXHRcXHRcXHRoZWFkID0gdHhxaTtcXG40MTQ0OlxcdFxcbjQxNDU6XFx0XFx0YXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCBcXHUwMDI2dHhxaS1cXHUwMDNldHhxKTtcXG40MTQ2OlxcdFxcdGlmIChhcWxfY2hlY2spXFxuNDE0NzpcXHRcXHRcXHRmb3VuZF9lbGlnaWJsZV90eHEgPSB0cnVlO1xcbjQxNDg6XFx0XFxuNDE0OTpcXHRcXHRpZiAodHhxaS1cXHUwMDNldHhxLnN0YSkge1xcbjQxNTA6XFx0XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cXHUwMDNldHhxLnN0YSxcXG40MTUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuNDE1MjpcXHRcXG40MTUzOlxcdFxcdFxcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVxcdTAwM2V0eHEuYWMpIFxcdTAwM2MgMCkge1xcbjQxNTQ6XFx0XFx0XFx0XFx0c3RhLVxcdTAwM2VhaXJ0aW1lW3R4cWktXFx1MDAzZXR4cS5hY10uZGVmaWNpdCArPVxcbjQxNTU6XFx0XFx0XFx0XFx0XFx0c3RhLVxcdTAwM2VhaXJ0aW1lX3dlaWdodDtcXG40MTU2OlxcdFxcbjQxNTc6XFx0XFx0XFx0XFx0YXFsX2NoZWNrID0gZmFsc2U7XFxuNDE1ODpcXHRcXHRcXHR9XFxuNDE1OTpcXHRcXHR9XFxuNDE2MDpcXHRcXG40MTYxOlxcdFxcdGlmICghYXFsX2NoZWNrKSB7XFxuNDE2MjpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuNDE2MzpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXFx1MDAzZXR4cS5hY10pO1xcbjQxNjQ6XFx0XFx0XFx0Z290byBiZWdpbjtcXG40MTY1OlxcdFxcdH1cXG40MTY2OlxcdFxcbjQxNjc6XFx0XFx0aWYgKHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID09IGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXFxuNDE2ODpcXHRcXHRcXHRnb3RvIG91dDtcXG40MTY5OlxcdFxcbjQxNzA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIpO1xcbjQxNzE6XFx0XFx0dHhxaS1cXHUwMDNlc2NoZWR1bGVfcm91bmQgPSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdO1xcbjQxNzI6XFx0XFx0cmV0ID0gXFx1MDAyNnR4cWktXFx1MDAzZXR4cTtcXG40MTczOlxcdFxcbjQxNzQ6XFx0b3V0OlxcbjQxNzU6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG40MTc2OlxcdFxcdHJldHVybiByZXQ7XFxuNDE3NzpcXHR9XFxuNDE3ODpcXHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XFxuNDE3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NTAuNDUwMTMwNDMxWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDg2ODQwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBUWCBRdWV1ZSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggcGFja2V0IHNjaGVkdWxpbmcgaW4gdGhlIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGVyIGtpY2tzIGludG8gZ2Vhci4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnM/IFdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbj8gV2hhdCdzIGl0cyBvdmVyYWxsIHJvbGUgaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGVidWcgYSB0cmFuc21pc3Npb24gaXNzdWUgSSd2ZSBiZWVuIHNlZWluZy4gSSdtIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBob3cgdGhpbmdzIGFyZSBzdXBwb3NlZCB0byB3b3JrIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmxvdyBpcyBkZXZpYXRpbmcuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkb2luZyB3aXRoIGVhY2ggb2YgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjUyLjM5ODgxNzgzOVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM0MDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MzQxOlxcdH1cXG40MzQyOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQpO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHR2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbjQzNDU6XFx0e1xcbjQzNDY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDM0NzpcXHRcXG40MzQ4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQzNDk6XFx0XFxuNDM1MDpcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbjQzNTE6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XFxuNDM1MjpcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XFxuNDM1MzpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuNDM1NDpcXHRcXHRcXHRpZiAoIWxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXFxuNDM1NTpcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuNDM1NjpcXHRcXHR9XFxuNDM1NzpcXHRcXG40MzU4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDM1OTpcXHR9XFxuNDM2MDpcXHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpO1xcbjQzNjE6XFx0XFxuNDM2MjpcXHR2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40MzYzOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40MzY0OlxcdFxcdFxcdFxcdFxcdCAgdTMyIGluZm9fZmxhZ3MsXFxuNDM2NTpcXHRcXHRcXHRcXHRcXHQgIHUzMiBjdHJsX2ZsYWdzKVxcbjQzNjY6XFx0e1xcbjQzNjc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xcbjQzNjg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuNDM2OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuNDM3MDpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG40MzcxOlxcdFxcdHN0cnVjdCBza19idWZmICpuZXh0O1xcbjQzNzI6XFx0XFx0Ym9vbCBncm91cF9hZGRyZXNzZWQ7XFxuNDM3MzpcXHRcXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNDM3NDpcXHRcXG40Mzc1OlxcdFxcdGlmICh1bmxpa2VseSghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgRVRIX0hMRU4pKSB7XFxuNDM3NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG40Mzc3OlxcdFxcdFxcdHJldHVybjtcXG40Mzc4OlxcdFxcdH1cXG40Mzc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDo1Mi4zOTkwNTU3MDlaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODMyNDY3NDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTY2hlZHVsaW5nIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHdhcyBjb25mbGF0aW5nIGEg4oCcbm90IG9wZW7igJ0gc3RhdGUgd2l0aCBhIHNjaGVkdWxpbmcgcm91bmQgY291bnRlciBvZiB6ZXJvIHdpdGhpbiB0aGUgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXWAgdmFyaWFibGUuIFRoaXMgbGVkIHRvIHByb2JsZW1hdGljIGNvbXBhcmlzb25zICggYDAgPT0gMGAgb3IgYCEwYCApIGFuZCBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMsIGVzcGVjaWFsbHkgZHVyaW5nIHRoZSBpbml0aWFsIHN0YXRlIHdoZW4gYHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmRgIG1pZ2h0IGFsc28gYmUgemVyby4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGNsZWFubHkgYnkgaW50cm9kdWNpbmcgYSBuZXcgYm9vbGVhbiBhcnJheSwgYHNjaGVkdWxlX29wZW5bSUVFRTgwMjExX05VTV9BQ1NdYCwgd2l0aGluIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFRoaXMgY2xlYW5seSBzZXBhcmF0ZXMgdGhlIOKAnG9wZW7igJ0gc3RhdHVzIGZyb20gdGhlIGFjdHVhbCByb3VuZCBjb3VudGVyIHZhbHVlLCB3aGljaCBpcyBhIG11Y2ggY2xlYW5lciBhcHByb2FjaC5cblxuTm93LCBsZXQncyBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIGNvbmNlcm5zIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMgaW52b2x2ZXMgYSBuZXcgdmFyaWFibGUuIEhlcmUncyBteSBicmVha2Rvd246XG5cbjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKClgLCB3aGljaCBpcyBnb29kLiBUaGlzIG1lYW5zIGBzY2hlZHVsZV9vcGVuYCBpcyBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgKHRvIGZhbHNlKS4gVGhpcyBpbW1lZGlhdGVseSBlbGltaW5hdGVzIHRoZSBtb3N0IGNvbW1vbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cbjIuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogVGhlIGdvb2QgbmV3cyBoZXJlIGlzIHRoYXQgYHNjaGVkdWxlX29wZW5gIGFuZCBgc2NoZWR1bGVfcm91bmRgIGFyZSAqbm90KiBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggb3BlcmF0ZXMgZW50aXJlbHkgd2l0aGluIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBzY2hlZHVsaW5nIGxvZ2ljLCB3aGljaCByZWR1Y2VzIHRoZSBhdHRhY2sgc3VyZmFjZS5cbjMuICAqKkRhdGEgSGFuZGxpbmc6KiogQ3J1Y2lhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMsIHRvdWNoIGFueSBib3VuZHMgY2hlY2tzLCBtb2RpZnkgY29weSBzaXplcywgb3IgY2hhbmdlIHN0cnVjdHVyZSBwYWRkaW5nIGluIGEgd2F5IHRoYXQgd291bGQgYmUgdmlzaWJsZSB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmljdGx5IGludGVybmFsIHNjaGVkdWxpbmcgZml4LlxuNC4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSSdtIGFsc28gZW5zdXJpbmcgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgY291bGQgZGVwZW5kIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgb2YgdGhlIG5ldyB2YXJpYWJsZS4gVGhlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgdmlhIGBremFsbG9jKClgIGFuZCBhbnkgbGF0ZXIgd3JpdGVzIG9jY3VyIGluIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCwgd2hpY2ggc2VlbXMgc2FmZS5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGFuYWx5c2lzIG9yIHNpbWlsYXIgdG9vbHMuIEl0J3MgYSB3ZWxsLXNjb3BlZCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgZml4IGZvciBhIHRyaWNreSBzY2hlZHVsaW5nIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY4LCJPdXRwdXRUb2tlbnMiOjI3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA1OjAwLjcyMzczMTk3M1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXFxuXFxuMS4gTWVtb3J5IGFsbG9jYXRpb246IGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGR1cmluZyB3aXBoeSBpbml0aWFsaXphdGlvbiAoYHdpcGh5X25ld19ubSgpYCksIGVuc3VyaW5nIGFsbCBuZXcgYW5kIGV4aXN0aW5nIGZpZWxkcyAoaW5jbHVkaW5nIGBzY2hlZHVsZV9vcGVuYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQuXFxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXFxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9kx6x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 18:24:35 +0000 UTC FinishedAt: 2026-09-08 19:05:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "e66fb3ff-701b-4e41-9bd2-53537b4b61af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_next_txq", "ieee80211_txq_schedule_start", "ieee80211_handle_wake_tx_queue", "ieee80211_txq_may_transmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX25leHRfdHhxJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXG5cbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXG4zLiBDb250cm9sIGZsb3c6IFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIHF1ZXVlIHRyYXZlcnNhbCBhbmQgc2NoZWR1bGluZyBsb2dpYyAoYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCkgd2l0aG91dCBtb2RpZnlpbmcgZGF0YSBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIG1lbW9yeSBjb3B5aW5nLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3ZGRhNWM5NjA1M2IxMjkyMWVjMjJhOTJjZmY2NTgyY2JjYzRlNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjAyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgJiM0MzsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XG4gXHRzcGlubG9ja190IGFjdGl2ZV90eHFfbG9ja1tJRUVFODAyMTFfTlVNX0FDU107XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV90eHFzW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XG4mIzQzO1x0Ym9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcbiBcdC8qIHNlcmlhbGl6ZXMgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlICovXG4gXHRzcGlubG9ja190IGhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2s7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggYzMzMDkyOTYwZGYyNi4uYzY2NWNlZDljMDVjYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTQxMjIsNyAmIzQzOzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuJiM0MztcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pXG4gXHRcdGdvdG8gb3V0O1xuIFxuICBiZWdpbjpcbkBAIC00MzQ3LDEyICYjNDM7NDM0NywxMiBAQCB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuIFxuLVx0aWYgKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKSB7XG4mIzQzO1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuJiM0MztcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XG4mIzQzO1x0aWYgKGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XG4gXHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG4gXHRcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuIFx0XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNTNiMGIwOGQzNDU5Ny4uNjUzMTEzNDBkYjQwNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTE0NjgsNiAmIzQzOzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHsKIAlzcGlubG9ja190IGFjdGl2ZV90eHFfbG9ja1tJRUVFODAyMTFfTlVNX0FDU107CiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107CiAJdTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTsKJiM0MzsJYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTsKIAogCS8qIHNlcmlhbGl6ZXMgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlICovCiAJc3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBjMzMwOTI5NjBkZjI2Li5jNjY1Y2VkOWMwNWNiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtNDEyMiw3ICYjNDM7NDEyMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7bG9jYWwtJmd0O2FjdGl2ZV90eHFfbG9ja1thY10pOwogCi0JaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKQomIzQzOwlpZiAoIWxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSkKIAkJZ290byBvdXQ7CiAKICBiZWdpbjoKQEAgLTQzNDcsMTIgJiM0Mzs0MzQ3LDEyIEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCiAKIAlzcGluX2xvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CiAKLQlpZiAoaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYykpIHsKJiM0MzsJbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdID0KJiM0MzsJCWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpOwomIzQzOwlpZiAobG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdKSB7CiAJCWxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7OwogCQlpZiAoIWxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY10pCiAJCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOzsKLQl9IGVsc2UgewotCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdID0gMDsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogTWFjODAyMTEgVFggU2NoZWR1bGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIGBuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaGAgYW5kIGBuZXQvbWFjODAyMTEvdHguY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiBzaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggbWFjODAyMTEmIzM5O3MgVFggcGF0aC4KClNwZWNpZmljYWxseSwgaW4gdGhlIGhlYWRlciBmaWxlLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gdGhlIGBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgdHJhY2tpbmcgd2hldGhlciBhIHNjaGVkdWxlciBpcyAmIzM0O29wZW4mIzM0OyBmb3IgZWFjaCBBY2Nlc3MgQ2F0ZWdvcnkgKEFDKS4gU2VlbXMgbGlrZSB3ZSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyBvciBub3QuCgpUaGUgbWVhdCBvZiBpdCBpcyBpbiBgdHguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGEgc2ltcGxlIGNoYW5nZSBpbiBgaWVlZTgwMjExX25leHRfdHhxYCBpcyBzd2FwcGluZyBgc2NoZWR1bGVfcm91bmRgIGZvciBgc2NoZWR1bGVfb3BlbmAgdG8gbWFrZSB0aGUgY29uZGl0aW9uYWwgY2hlY2suIFRoZSBuZXcgbG9naWMgaW4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGlzIHN0b3JpbmcgdGhlIHJldHVybiBvZiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBpbiBgc2NoZWR1bGVfb3BlbmAuIFRoZW4gaWYgaXQgaXMgb3Blbiwgd2UgaW5jcmVtZW50IHRoZSByb3VuZCwgb3RoZXJ3aXNlLCB3ZSBkb24mIzM5O3QuIFRoYXQgbG9va3MgZmluZSwgYnV0IHRoaXMgbWF5IGNhdXNlIHNvbWUgcmVncmVzc2lvbnMgaWYgbm90IHByb3Blcmx5IHRlc3RlZC4KClNvLCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHguY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcyB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBUWCBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgYHNjaGVkdWxlX29wZW5gIHZhcmlhYmxlIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgYWlydGltZSBjaGVjayBhbmQgcm91bmQgc2NoZWR1bGluZy4gSG9wZWZ1bGx5LCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBzY2hlZHVsaW5nIGltYmFsYW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDExNTpcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDExNjpcdHtcbjQxMTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDExODpcdFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG40MTE5Olx0XHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG40MTIwOlx0XHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDEyMTpcdFx0Ym9vbCBhcWxfY2hlY2s7XG40MTIyOlx0XG40MTIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTI0Olx0XG40MTI1Olx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxuNDEyNjpcdFx0XHRnb3RvIG91dDtcbjQxMjc6XHRcbjQxMjg6XHQgYmVnaW46XG40MTI5Olx0XHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcbjQxMzA6XHRcdFx0XHRcdFx0c3RydWN0IHR4cV9pbmZvLFxuNDEzMTpcdFx0XHRcdFx0XHRzY2hlZHVsZV9vcmRlcik7XG40MTMyOlx0XHRpZiAoIXR4cWkpXG40MTMzOlx0XHRcdGdvdG8gb3V0O1xuNDEzNDpcdFxuNDEzNTpcdFx0aWYgKHR4cWkgPT0gaGVhZCkge1xuNDEzNjpcdFx0XHRpZiAoIWZvdW5kX2VsaWdpYmxlX3R4cSlcbjQxMzc6XHRcdFx0XHRnb3RvIG91dDtcbjQxMzg6XHRcdFx0ZWxzZVxuNDEzOTpcdFx0XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDE0MDpcdFx0fVxuNDE0MTpcdFxuNDE0MjpcdFx0aWYgKCFoZWFkKVxuNDE0MzpcdFx0XHRoZWFkID0gdHhxaTtcbjQxNDQ6XHRcbjQxNDU6XHRcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuNDE0NjpcdFx0aWYgKGFxbF9jaGVjaylcbjQxNDc6XHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbjQxNDg6XHRcbjQxNDk6XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEpIHtcbjQxNTA6XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cdTAwM2V0eHEuc3RhLFxuNDE1MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG40MTUyOlx0XG40MTUzOlx0XHRcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYykgXHUwMDNjIDApIHtcbjQxNTQ6XHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZVt0eHFpLVx1MDAzZXR4cS5hY10uZGVmaWNpdCAmIzQzOz1cbjQxNTU6XHRcdFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lX3dlaWdodDtcbjQxNTY6XHRcbjQxNTc6XHRcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbjQxNTg6XHRcdFx0fVxuNDE1OTpcdFx0fVxuNDE2MDpcdFxuNDE2MTpcdFx0aWYgKCFhcWxfY2hlY2spIHtcbjQxNjI6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbjQxNjM6XHRcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG40MTY0Olx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHR4LmNgKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcuIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIEkgaGF2ZSBhIGh1bmNoIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZSByb290ZWQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgdHguY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzZWdtZW50IGZyb20gcm91Z2hseSBsaW5lIDQzMzAgdG8gbGluZSA0MzcwLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBzdGFydCBkaWdnaW5nIGludG8gYW5kIHRvIGxvb2sgZm9yIGNsdWVzLCBlZGdlIGNhc2VzIG9yIHRoZSByb290IGNhdXNlLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBJJiMzOTttIGhvcGluZyB0aGlzIHNwZWNpZmljIHJhbmdlIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzMzA6XHRcdHN0YS1cdTAwM2VhaXJ0aW1lW2FjXS5kZWZpY2l0ICYjNDM7PSBzdGEtXHUwMDNlYWlydGltZV93ZWlnaHQ7XG40MzMxOlx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxc1thY10pO1xuNDMzMjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzMzOlx0XG40MzM0Olx0XHRyZXR1cm4gZmFsc2U7XG40MzM1Olx0b3V0OlxuNDMzNjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpKVxuNDMzNzpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpO1xuNDMzODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzM5Olx0XG40MzQwOlx0XHRyZXR1cm4gdHJ1ZTtcbjQzNDE6XHR9XG40MzQyOlx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX21heV90cmFuc21pdCk7XG40MzQzOlx0XG40MzQ0Olx0dm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbjQzNDU6XHR7XG40MzQ2Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbjQzNDc6XHRcbjQzNDg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbjQzNDk6XHRcbjQzNTA6XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdID1cbjQzNTE6XHRcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XG40MzUyOlx0XHRpZiAobG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcbjQzNTM6XHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbjQzNTQ6XHRcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG40MzU1Olx0XHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbjQzNTY6XHRcdH1cbjQzNTc6XHRcbjQzNTg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuNDM1OTpcdH1cbjQzNjA6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpO1xuNDM2MTpcdFxuNDM2MjpcdHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNDM2MzpcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDM2NDpcdFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbjQzNjU6XHRcdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MpXG40MzY2Olx0e1xuNDM2NzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuNDM2ODpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbjQzNjk6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbjQzNzA6XHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuNDM3MTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XG40MzcyOlx0XHRib29sIGdyb3VwX2FkZHJlc3NlZDtcbjQzNzM6XHRcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuNDM3NDpcdFxuNDM3NTpcdFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2MgRVRIX0hMRU4pKSB7XG40Mzc2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuNDM3NzpcdFx0XHRyZXR1cm47XG40Mzc4Olx0XHR9XG40Mzc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgc2NoZWR1bGVfcm91bmRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaCBvZiB0aGUgYHNjaGVkdWxlX3JvdW5kYCBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gQmVzdCB3YXkgdG8gZG8gdGhhdCwgZXNwZWNpYWxseSBpbiBhIHByb2plY3Qgb2YgdGhpcyBzaXplLCBpcyB0byB1c2UgYSBncmVwLWxpa2UgdG9vbC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgc2NoZWR1bGVfcm91bmRgIGlzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBtYXAgb2YgaXRzIGNhbGwgc2l0ZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wYWN0IGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgbW9kaWZ5IHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIGEgZmFpcmx5IGV4dGVuc2l2ZSBsaXN0LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHNvcnQgaXQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkdWxlX3JvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTk2Mz1lbnVtIHR4cV9pbmZvX2ZsYWdzIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzctICogQHNjaGVkdWxlX29yZGVyOiB1c2VkIHdpdGggaWVlZTgwMjExX2xvY2FsLVx1MDAzZWFjdGl2ZV90eHFzXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk3OS0gKiBAZmxhZ3M6IFRYUSBmbGFncyBmcm9tIFx1MDAyNmVudW0gdHhxX2luZm9fZmxhZ3Ncbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD05ODI9c3RydWN0IHR4cV9pbmZvIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5ODc6XHR1MTYgc2NoZWR1bGVfcm91bmQ7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkdWxlX29yZGVyO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTQ2OS1cdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTQ3MDpcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVx0Ym9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQxNjYtXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3Olx0aWYgKHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPT0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxubmV0L21hYzgwMjExL3R4LmMtNDE2OC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDE3MC1cdGxpc3RfZGVsX2luaXQoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcik7XG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlx0dHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9IGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcbm5ldC9tYWM4MDIxMS90eC5jLTQxNzItXHRyZXQgPSBcdTAwMjZ0eHFpLVx1MDAzZXR4cTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDM1Mi1cdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xubmV0L21hYzgwMjExL3R4LmM6NDM1MzpcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTQ6XHRcdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxubmV0L21hYzgwMjExL3R4LmM6NDM1NTpcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xubmV0L21hYzgwMjExL3R4LmMtNDM1Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggU2NoZWR1bGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2NoZWR1bGVfcm91bmRgIHBsYXlzIGEga2V5IHJvbGUgaW4gdGhlIG1hYzgwMjExJiMzOTtzIFRYIHNjaGVkdWxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YC4gVGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgdGhlIGBzY2hlZHVsZV9yb3VuZGAgdmFyaWFibGUgaXMgbWFuYWdlZCBpbiByZWxhdGlvbiB0byB0aGUgYHNjaGVkdWxlX29wZW5gIGZsYWcsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gYWlydGltZSBjaGVja3MuIFByZS1wYXRjaCwgaWYgdGhlIGFpcnRpbWUgY2hlY2sgZmFpbGVkLCBgbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXWAgd291bGQgYmUgcmVzZXQgdG8gMC4gVGhlIHByb2JsZW0gdGhlbiBhcmlzZXMgYmVjYXVzZSBgaWVlZTgwMjExX25leHRfdHhxYCB1c2VzIDAgYXMgYSBjbG9zZWQgc3RhdGUgaW5kaWNhdG9yIChgaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKSBnb3RvIG91dDtgKS4gQnV0LCB3aGF0IGhhcHBlbnMgd2hlbiBpdCBpbmNyZW1lbnRzIHBhc3QgemVybyBpZiBpdCYjMzk7cyBiZWVuIHJlc2V0IHRvIHplcm8gb3IgaW5jcmVtZW50ZWQ/IEl0IHNlZW1zIHRoYXQgaWYgaXQmIzM5O3MgMCBpdCBnZXRzIGluY3JlbWVudGVkIChgaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKSBsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOztgKS4KClRoZSBwYXRjaCBlc3NlbnRpYWxseSBzZXBhcmF0ZXMgdGhlIGJvb2xlYW4gYHNjaGVkdWxlX29wZW5gIGZyb20gdGhlIGNvdW50ZXIgYHNjaGVkdWxlX3JvdW5kYC4gVGhlIHB1cnBvc2Ugb2YgYHNjaGVkdWxlX3JvdW5kYCBpcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLCBzbyB3ZSBubyBsb25nZXIgdXNlIDAgYXMgYSBzdGF0ZSBpbmRpY2F0b3IuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQuIElzIG1hYzgwMjExIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXA/IEFoLCB5ZXMsIG9mIGNvdXJzZSEgbWFjODAyMTEgaXMgdGhlIGZvdW5kYXRpb25hbCB3aXJlbGVzcyA4MDIuMTEgc3lzdGVtIGluIExpbnV4LiBJdCYjMzk7cyBhY3RpdmVseSB0ZXN0ZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQsIGltcG9ydGFudGx5LCBzeXprYWxsZXIuIFRob3NlIGFyZSBib3RoIGV4Y2VsbGVudCBmb3IgdGhpcyBraW5kIG9mIGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIEkga25vdyBtYWM4MDIxMSBpcyBmdXp6IHRlc3RlZC4gVGhleSB1c2UgdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlLCBhbG9uZyB3aXRoIHZpcnRfd2lmaSBvciBVU0Igd2lmaSBnYWRnZXRzIC8gbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgYSBjcnVjaWFsIHN0ZXA6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYG1hYzgwMjExX2h3c2ltYCBvciBvdGhlciByZWxldmFudCBkcml2ZXJzIGFjdHVhbGx5ICp1c2UqIHRoZSBmdW5jdGlvbnMgYmVpbmcgZGlzY3Vzc2VkIGhlcmUsIG5hbWVseSBgaWVlZTgwMjExX25leHRfdHhxYCBvciBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAuIFRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSwgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgdG8gc2VlIHdoYXQgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz00NDc1PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBhYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ0ODAtXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCBhYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ0ODE6XHR3aGlsZSAoKHR4cSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgYWMpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDgyLVx0XHR3aGlsZSAoYXRoMTBrX21hY190eF9jYW5fcHVzaChodywgdHhxKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmM9NDc1Nz1zdGF0aWMgdm9pZCBhdGgxMGtfbWFjX29wX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcwLVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NzcxOlx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ3NzItXHRpZiAoIXR4cSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jPTE5ODA9dm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMTk5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM6MjAwMDpcdHdoaWxlICgocXVldWUgPSBpZWVlODAyMTFfbmV4dF90eHEoaHcsIHR4cS1cdTAwM2VtYWM4MDIxMV9xbnVtKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMjAwMS1cdFx0Ym9vbCBmb3JjZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM9NTY0PW10NzZfdHhxX3NjaGVkdWxlX2xpc3Qoc3RydWN0IG10NzZfcGh5ICpwaHksIGVudW0gbXQ3Nl90eHFfaWQgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYy01NzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6NTc2Olx0XHR0eHEgPSBpZWVlODAyMTFfbmV4dF90eHEocGh5LVx1MDAzZWh3LCBxaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTU3Ny1cdFx0aWYgKCF0eHEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDgyNj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3R4cV9zY2hlZHVsZShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIHU4IGFjLCBib29sICpyZWludm9rZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM3LVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM6NDgzODpcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM5LVx0XHRydHd0eHEgPSAoc3RydWN0IHJ0dzg5X3R4cSAqKXR4cS1cdTAwM2VkcnZfcHJpdjtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExNi0gKiBvYnRhaW4gdGhlIG5leHQgcXVldWUgdG8gcHVsbCBmcmFtZXMgZnJvbSwgdGhlIGRyaXZlciBjYWxsc1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoxMTc6ICogaWVlZTgwMjExX25leHRfdHhxKCkuIFRoZSBkcml2ZXIgaXMgdGhlbiBleHBlY3RlZCB0byByZXR1cm4gdGhlIHR4cSB1c2luZ1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0xMTgtICogaWVlZTgwMjExX3JldHVybl90eHEoKS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc3MzY9dm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCB0aWQpO1xuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc0Mi0gKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZSwgb3IgZnJvbVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo3NzQzOiAqXHRpZWVlODAyMTFfbmV4dF90eHEoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzQ0LSAqXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD03NzU4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3NjktICogQHR4cTogcG9pbnRlciBvYnRhaW5lZCBmcm9tIHN0YXRpb24gb3IgdmlydHVhbCBpbnRlcmZhY2UsIG9yIGZyb21cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzc3MDogKlx0aWVlZTgwMjExX25leHRfdHhxKClcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc3MS0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzc5NT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3OTgtLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc3OTk6ICogaWVlZTgwMjExX25leHRfdHhxIC0gZ2V0IG5leHQgdHggcXVldWUgdG8gcHVsbCBwYWNrZXRzIGZyb21cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwMC0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwNy0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NzgwODpzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYyk7XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MDktXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODE1LSAqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MTY6ICogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgaWVlZTgwMjExX25leHRfdHhxKCkgb3IgaWVlZTgwMjExX3JldHVybl90eHEoKS5cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNy0gKiBUaGUgZHJpdmVyIG11c3Qgbm90IGNhbGwgbXVsdGlwbGUgVFhRIHNjaGVkdWxpbmcgcm91bmRzIGNvbmN1cnJlbnRseS5cbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc4NDI9aWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSlcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4NDctLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4NDg6ICogaWVlZTgwMjExX3JldHVybl90eHEgLSByZXR1cm4gYSBUWFEgcHJldmlvdXNseSBhY3F1aXJlZCBieSBpZWVlODAyMTFfbmV4dF90eHEoKVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ5LSAqXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDEwMT1pZWVlODAyMTFfdHhxX2tlZXBfYWN0aXZlKHN0cnVjdCB0eHFfaW5mbyAqdHhxaSlcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTE0LVxubmV0L21hYzgwMjExL3R4LmM6NDExNTpzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbm5ldC9tYWM4MDIxMS90eC5jLTQxMTYte1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQxNzctfVxubmV0L21hYzgwMjExL3R4LmM6NDE3ODpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XG5uZXQvbWFjODAyMTEvdHguYy00MTc5LVxubmV0L21hYzgwMjExL3R4LmM9NDE4MD12b2lkIF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTk5LVx0XHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcbm5ldC9tYWM4MDIxMS90eC5jOjQyMDA6XHRcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXG5uZXQvbWFjODAyMTEvdHguYy00MjAxLVx0XHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jPTMwNT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxMy1cbm5ldC9tYWM4MDIxMS91dGlsLmM6MzE0Olx0LyogVXNlIGllZWU4MDIxMV9uZXh0X3R4cSgpIGZvciBhaXJ0aW1lIGZhaXJuZXNzIGFjY291bnRpbmcgKi9cbm5ldC9tYWM4MDIxMS91dGlsLmMtMzE1LVx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVx1MDAzZWFjKTtcbm5ldC9tYWM4MDIxMS91dGlsLmM6MzE2Olx0d2hpbGUgKChxdWV1ZSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgdHhxLVx1MDAzZWFjKSkpIHtcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzE3LVx0XHR3YWtlX3R4X3B1c2hfcXVldWUobG9jYWwsIHNkYXRhLCBxdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUXVldWUgV2FrZS1VcCBNZWNoYW5pc20qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS91dGlsLmM6MzA1YCwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgbWFjODAyMTEmIzM5O3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igc29mdHdhcmUgcXVldWluZyBhbmQgdGhlIHN1YnNlcXVlbnQgYXdha2VuaW5nIG9mIHRoZSB0cmFuc21pdCBxdWV1ZS4gSXQgc2VlbXMgdG8gY2FsbCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgYW5kIGBpZWVlODAyMTFfbmV4dF90eHFgLCB3aGljaCBpcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciwgc28gSSYjMzk7bGwgZ28gYmFjayB0byBgbmV0L21hYzgwMjExL3V0aWwuY2AgYXJvdW5kIGxpbmUgMzA1IGFuZCB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVuIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgIGlzIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludm9jYXRpb24gcG9pbnRzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIFRYIHF1ZXVlIG1hbmFnZW1lbnQgc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS91dGlsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0XHRkcnZfdHgobG9jYWwsIFx1MDAyNmNvbnRyb2wsIHNrYik7XG4gMzAxOlx0XHR9XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdC8qIHdha2VfdHhfcXVldWUgaGFuZGxlciBmb3IgZHJpdmVyIG5vdCBpbXBsZW1lbnRpbmcgYSBjdXN0b20gb25lKi9cbiAzMDU6XHR2b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAzMDY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxuIDMwNzpcdHtcbiAzMDg6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuIDMwOTpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodHhxLVx1MDAzZXZpZik7XG4gMzEwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcXVldWU7XG4gMzExOlx0XG4gMzEyOlx0XHRzcGluX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XG4gMzEzOlx0XG4gMzE0Olx0XHQvKiBVc2UgaWVlZTgwMjExX25leHRfdHhxKCkgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYWNjb3VudGluZyAqL1xuIDMxNTpcdFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVx1MDAzZWFjKTtcbiAzMTY6XHRcdHdoaWxlICgocXVldWUgPSBpZWVlODAyMTFfbmV4dF90eHEoaHcsIHR4cS1cdTAwM2VhYykpKSB7XG4gMzE3Olx0XHRcdHdha2VfdHhfcHVzaF9xdWV1ZShsb2NhbCwgc2RhdGEsIHF1ZXVlKTtcbiAzMTg6XHRcdFx0aWVlZTgwMjExX3JldHVybl90eHEoaHcsIHF1ZXVlLCBmYWxzZSk7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChodywgdHhxLVx1MDAzZWFjKTtcbiAzMjE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xuIDMyMjpcdH1cbiAzMjM6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSk7XG4gMzI0Olx0XG4gMzI1Olx0c3RhdGljIHZvaWQgX19pZWVlODAyMTFfd2FrZV90eHFzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgYWMpXG4gMzI2Olx0e1xuIDMyNzpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiAzMjg6XHRcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBcdTAwMjZzZGF0YS1cdTAwM2V2aWY7XG4gMzI5Olx0XHRzdHJ1Y3QgZnEgKmZxID0gXHUwMDI2bG9jYWwtXHUwMDNlZnE7XG4gMzMwOlx0XHRzdHJ1Y3QgcHNfZGF0YSAqcHMgPSBOVUxMO1xuIDMzMTpcdFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gTlVMTDtcbiAzMzI6XHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIDMzMzpcdFx0aW50IGk7XG4gMzM0Olx0XG4gMzM1Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gMzM2Olx0XHRzcGluX2xvY2soXHUwMDI2ZnEtXHUwMDNlbG9jayk7XG4gMzM3Olx0XG4gMzM4Olx0XHRpZiAoIXRlc3RfYml0KFNEQVRBX1NUQVRFX1JVTk5JTkcsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSlcbiAzMzk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBMaW51eCBXaXJlbGVzcyBTdGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBtYWM4MDIxMWAgYWdhaW4uIEl0JiMzOTtzIHRoZSBiZWF0aW5nIGhlYXJ0IG9mIExpbnV4JiMzOTtzIHdpcmVsZXNzIG5ldHdvcmtpbmcsIHJpZ2h0PyBJJiMzOTttIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCB2YXJpb3VzIGludGVyZmFjZXMg4oCTIGBtYWM4MDIxMV9od3NpbWAsIGBubDgwMjExYCwgcGFja2V0IHNvY2tldHMg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBUbyB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uLCBhbmQgaG93IGl0JiMzOTtzIGVuYWJsZWQsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgYWxsIHB1dCB0b2dldGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGBtYWM4MDIxMWAgaGFzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBDT05GSUdfTUFDODAyMTEqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYENPTkZJR19NQUM4MDIxMWAgc2l0dWF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLCB0aGlzIGxpa2VseSBpbnZvbHZlcyBhIGNhc2NhZGluZyBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBwcm9iYWJseSBub3QgYSBzaW1wbGUgJiMzNDtvbi9vZmYmIzM0OyBzd2l0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBhbmQgdGhhdCBtZWFucyB0cmFjaW5nIHRocm91Z2ggdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgZHJpdmVycywgcmVndWxhdG9yeSBzZXR0aW5ncywgdmFyaW91cyBuZXR3b3JraW5nIHN0YWNrcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciB3aXJlbGVzcy1yZWxhdGVkIGNvbXBvbmVudHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXHRib29sIFwmIzM0O2VuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXHRib29sIFwmIzM0O3JlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDthbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXHRzdHJpbmcgXCYjMzQ7YWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XCYjMzQ7IGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O2NmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVx0Ym9vbCBcJiMzNDtlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7c3VwcG9ydCBDUkRBXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1Rcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBjZmc4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3LiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBjaGFpbiBJIHdhbnQgdG8gdW5kZXJzdGFuZC4gTGluZSAxNyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuIEtub3dpbmcgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb250ZXh0dWFsaXplIHRoZSBjb25maWd1cmF0aW9ucywgd2hldGhlciBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBhIGRyaXZlciwgb3IgYSBnZW5lcmFsIHdpcmVsZXNzIGZyYW1ld29yayBvcHRpb24gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdJUkVMRVNTX0VYVFxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBXRVhUX0NPUkVcbiAgIDY6XHRcdGRlZl9ib29sIHlcbiAgIDc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgV0VYVF9QUk9DXG4gIDEwOlx0XHRkZWZfYm9vbCB5XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgMTI6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFdFWFRfUFJJVlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBDRkc4MDIxMVxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAyMDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IENSQzMyXG4gIDIyOlx0XHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcbiAgMjM6XHRcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbiYjMzk7dFxuICAyNDpcdFx0IyAodGhpcyBpcyBoZXJlIHJhdGhlciB0aGFuIGJlbG93IHRvIGFsbG93IGl0IHRvIGJlIGEgbW9kdWxlKVxuICAyNTpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTYgaWYgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuXG4gIDI4Olx0XHQgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAzMTpcdFxuICAzMjpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcbiAgMzM6XHRcbiAgMzQ6XHRcdCAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBgbWFjODAyMTFfaHdzaW1gIGZvciBJbnNpZ2h0cyBpbnRvIE1hYzgwMjExIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgYG1hYzgwMjExYCBpcyBhY3R1YWxseSB0ZXN0ZWQgYW5kIHNpbXVsYXRlZC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCBgbWFjODAyMTFfaHdzaW1gIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoYXQuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCwgc28gaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGhvcGluZyB0byBmaW5kIG91dCBob3cgdGhleSBtYW5hZ2UgdG8gcmVwbGljYXRlIHRoZSBoYXJkd2FyZSBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGtlcm5lbCBmb3IgdGhlIGBtYWM4MDIxMWAgc3RhY2suIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB0ZXN0aW5nIG1ldGhvZG9sb2dpZXMgaW4gcGxhY2UsIGFuZCB3aGVyZSB0aGVyZSBtaWdodCBiZSBnYXBzIG9yIGFyZWFzIGZvciBpbXByb3ZlZCBjb3ZlcmFnZS4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIHNldHVwIGluIHRoaXMga2VybmVsLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IG1lbnRpb25zIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgS2NvbmZpZ2Agbm93IHRvIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTY2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNQUM4MDIxMSBUWCBTY2hlZHVsaW5nIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbiB0aGlzIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLgoKUmlnaHQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGlmZnMgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZW50IGhlcmUuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaGAgYWRkcyBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBiZWhhdmlvcmFsIGNoYW5nZXMuCgpUaGVuLCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLCBgaWVlZTgwMjExX25leHRfdHhxYCBub3cgY2hlY2tzIGBsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY11gIGluc3RlYWQgb2YgYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGdhdGUgZm9yIHRyYW5zbWl0dGluZy4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGFsc28gc2V0cyBgbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdYCBiYXNlZCBvbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKClgLCBhbmQgaXQgb25seSBpbmNyZW1lbnRzIGBzY2hlZHVsZV9yb3VuZFthY11gIGlmIGBzY2hlZHVsZV9vcGVuYCBpcyB0cnVlLiBBbHNvLCBjcnVjaWFsbHksIHRoZSBjb2RlIGRvZXMgKm5vdCogemVybyBgc2NoZWR1bGVfcm91bmRbYWNdYCBpZiBgc2NoZWR1bGVfb3BlbmAgaXMgZmFsc2UuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBUWCBxdWV1ZSBzY2hlZHVsaW5nIHdvcmtzLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgVFggc2NoZWR1bGluZyByZWxhdGVkIGZ1bmN0aW9ucyBhZmZlY3RlZD8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCYjMzk7cyBsb29rIGF0IGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLCBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAsIGBpZWVlODAyMTFfcmV0dXJuX3R4cWAsIGFuZCBgX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxYC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGZvY3VzIHN5bWJvbHMgb3IgY2FsbGVycyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDE3NTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTc2Olx0XHRyZXR1cm4gcmV0O1xuNDE3NzpcdH1cbjQxNzg6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XG40MTc5Olx0XG40MTgwOlx0dm9pZCBfX2llZWU4MDIxMV9zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG40MTgxOlx0XHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSxcbjQxODI6XHRcdFx0XHQgICAgICBib29sIGZvcmNlKVxuNDE4MzpcdHtcbjQxODQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDE4NTpcdFx0c3RydWN0IHR4cV9pbmZvICp0eHFpID0gdG9fdHhxX2luZm8odHhxKTtcbjQxODY6XHRcdGJvb2wgaGFzX3F1ZXVlO1xuNDE4NzpcdFxuNDE4ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1t0eHEtXHUwMDNlYWNdKTtcbjQxODk6XHRcbjQxOTA6XHRcdGhhc19xdWV1ZSA9IGZvcmNlIHx8XG40MTkxOlx0XHRcdCAgICAoIXRlc3RfYml0KElFRUU4MDIxMV9UWFFfU1RPUCwgXHUwMDI2dHhxaS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG40MTkyOlx0XHRcdCAgICAgdHhxX2hhc19xdWV1ZSh0eHEpKTtcbjQxOTM6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnR4cWktXHUwMDNlc2NoZWR1bGVfb3JkZXIpIFx1MDAyNlx1MDAyNlxuNDE5NDpcdFx0ICAgIChoYXNfcXVldWUgfHwgaWVlZTgwMjExX3R4cV9rZWVwX2FjdGl2ZSh0eHFpKSkpIHtcbjQxOTU6XHRcdFx0LyogSWYgYWlydGltZSBhY2NvdW50aW5nIGlzIGFjdGl2ZSwgYWx3YXlzIGVucXVldWUgU1RBcyBhdCB0aGVcbjQxOTY6XHRcdFx0ICogaGVhZCBvZiB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCB0aGV5IG9ubHkgZ2V0IG1vdmVkIHRvIHRoZVxuNDE5NzpcdFx0XHQgKiBiYWNrIGJ5IHRoZSBhaXJ0aW1lIERSUiBzY2hlZHVsZXIgb25jZSB0aGV5IGhhdmUgYSBuZWdhdGl2ZVxuNDE5ODpcdFx0XHQgKiBkZWZpY2l0LiBBIHN0YXRpb24gdGhhdCBhbHJlYWR5IGhhcyBhIG5lZ2F0aXZlIGRlZmljaXQgd2lsbFxuNDE5OTpcdFx0XHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcbjQyMDA6XHRcdFx0ICogY2FsbCB0byBpZWVlODAyMTFfbmV4dF90eHEoKS5cbjQyMDE6XHRcdFx0ICovXG40MjAyOlx0XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEgXHUwMDI2XHUwMDI2IGxvY2FsLVx1MDAzZWFpcnRpbWVfZmxhZ3MgXHUwMDI2XHUwMDI2IGhhc19xdWV1ZSBcdTAwMjZcdTAwMjZcbjQyMDM6XHRcdFx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuNDIwNDpcdFx0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSlcbjQyMDU6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuNDIwNjpcdFx0XHRcdFx0IFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cS1cdTAwM2VhY10pO1xuNDIwNzpcdFx0XHRlbHNlXG40MjA4Olx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyLFxuNDIwOTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNbdHhxLVx1MDAzZWFjXSk7XG40MjEwOlx0XHRcdGlmIChoYXNfcXVldWUpXG40MjExOlx0XHRcdFx0aWVlZTgwMjExX3R4cV9zZXRfYWN0aXZlKHR4cWkpO1xuNDIxMjpcdFx0fVxuNDIxMzpcdFxuNDIxNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW3R4cS1cdTAwM2VhY10pO1xuNDIxNTpcdH1cbjQyMTY6XHRFWFBPUlRfU1lNQk9MKF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cSk7XG40MjE3Olx0XG40MjE4Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXFsX2Rpc2FibGUpO1xuNDIxOTpcdFxuNDIyMDpcdGJvb2wgaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuNDIyMTpcdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpXG40MjIyOlx0e1xuNDIyMzpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG40MjI0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbjQyMjU6XHRcbjQyMjY6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcbjQyMjc6XHRcdFx0cmV0dXJuIHRydWU7XG40MjI4Olx0XG40MjI5Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcWxfZGlzYWJsZSkpXG40MjMwOlx0XHRcdHJldHVybiB0cnVlO1xuNDIzMTpcdFxuNDIzMjpcdFx0aWYgKCF0eHEtXHUwMDNlc3RhKVxuNDIzMzpcdFx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNlYXFsX21jX3BlbmRpbmdfYWlydGltZSkgXHUwMDNjXG40MjM0Olx0XHRcdCAgICAgICBsb2NhbC1cdTAwM2VhcWxfdHhxX2xpbWl0X21jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgVFggUXVldWUgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHRyYW5zbWlzc2lvbiBxdWV1ZSBzY2hlZHVsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSBwb3AgdXAgaW4gdGhlIGNvbnRleHQgb2Ygc29tZSByZWNlbnQgcGVyZm9ybWFuY2UgdHdlYWtzIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGB0eC5jYCBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxlciBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hlbiB0byBwdWxsIHBhY2tldHMgb2ZmIHRoZSBUWCBxdWV1ZSBhbmQgaGFuZCB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggaXMgdG8gb3B0aW1pemUgZm9yIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHNjaGVkdWxpbmcgb3ZlcmhlYWQuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzLi4uIGhvcGVmdWxseSBpdCYjMzk7cyBub3QgdG9vIGNvbnZvbHV0ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgYm90dGxlbmVja3MgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvdWxkIHJlYWxseSBoZWxwIGZpbmUtdHVuZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdXRpbC5jPTMwNT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cdH1cbm5ldC9tYWM4MDIxMS91dGlsLmM6MzIwOlx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cdTAwM2VhYyk7XG5uZXQvbWFjODAyMTEvdXRpbC5jLTMyMS1cdHNwaW5fdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE4OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBEb3duIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZGAuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91czogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgc29tZXdoZXJlIHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3Vic3lzdGVtLCBsaWtlbHkgaW4gdGhlIGNvcmUgODAyLjExIGNvZGUsIG9yIG1heWJlIGV2ZW4gaW4gYSBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaWYgaXQmIzM5O3MgZGVlcGx5IHRpZWQgdG8gaGFyZHdhcmUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGl0IGluIGEgZmlsZSBsaWtlIGBpZWVlODAyMTFfdHhxLmNgLCBgbWFjODAyMTEuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IHVzZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUmIzM5O3MgJiMzNDtmaW5kIGRlZmluaXRpb24mIzM0OyBmZWF0dXJlIHRvIHBpbnBvaW50IGl0LiBLbm93aW5nIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCB0byB1bnBhY2tpbmcgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTMzNzU9c3RhdGljIHZvaWQgYXRoMTBrX2h0dF9yeF90eF9mZXRjaF9pbmQoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0zNDgwLVx0XHRpZWVlODAyMTFfcmV0dXJuX3R4cShodywgdHhxLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jOjM0ODE6XHRcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0zNDgyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmM9NDQ3NT1zdGF0aWMgaW50IGF0aDEwa19tYWNfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgYWMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDkxLVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NDkyOlx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDQ5My1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDc4Mi1vdXQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3ODM6XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChodywgYWMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00Nzg0LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YXItXHUwMDNlcXVldWVfbG9ja1thY10pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM9MTk4MD12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDEzLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlY2hhbl9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmM6MjAxNDpcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlbWFjODAyMTFfcW51bSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jLTIwMTUtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz02Mzg9dm9pZCBtdDc2X3R4cV9zY2hlZHVsZShzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTY1MC1cdFx0bGVuID0gbXQ3Nl90eHFfc2NoZWR1bGVfbGlzdChwaHksIHFpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6NjUxOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChwaHktXHUwMDNlaHcsIHFpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUyLVx0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYz00ODI2PXN0YXRpYyB2b2lkIHJ0dzg5X2NvcmVfdHhxX3NjaGVkdWxlKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgdTggYWMsIGJvb2wgKnJlaW52b2tlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjMtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0ODY0Olx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjUtfVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NzgxOT12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKTtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MjEtLyogKGRlcHJlY2F0ZWQpICovXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MjI6c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgyMy17XG4tLVxubmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL3V0aWwuYy0zMTktXHR9XG5uZXQvbWFjODAyMTEvdXRpbC5jOjMyMDpcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXHUwMDNlYWMpO1xubmV0L21hYzgwMjExL3V0aWwuYy0zMjEtXHRzcGluX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlcHJlY2F0ZWQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCBpcyBhIGRlcHJlY2F0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmlnaHQsIGRlcHJlY2F0ZWQgbWVhbnMgd2UgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHJlcGxhY2luZyBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjdXJyZW50IGNvcmUgZnVuY3Rpb24gY2FsbHMgYXJlIHN1cnJvdW5kaW5nIGl0LgoKRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggc2VlbSB0byBiZTogYGllZWU4MDIxMV9uZXh0X3R4cWAsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCwgYW5kIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLiBUaGVzZSBhbGwgbGl2ZSBpbiBgbmV0L21hYzgwMjExYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgZmxvdy4gTm93IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKQmV5b25kIHRoZXNlIGNvcmUgZWxlbWVudHMsIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxlcnMgb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYC4gSXQgbG9va3MgcmVsYXRlZCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBLbm93aW5nIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRlcHJlY2F0ZWQgZnVuY3Rpb24gdXNlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz00MjcyPXN0YXRpYyBib29sXG5uZXQvbWFjODAyMTEvdHguYzo0MjczOmllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXG5uZXQvbWFjODAyMTEvdHguYy00Mjc0LXtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00MjkxPWJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDMwMy1cbm5ldC9tYWM4MDIxMS90eC5jOjQzMDQ6XHRpZiAoIWllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKVxubmV0L21hYzgwMjExL3R4LmMtNDMwNS1cdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDM0ND12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQzNTAtXHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSA9XG5uZXQvbWFjODAyMTEvdHguYzo0MzUxOlx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbm5ldC9tYWM4MDIxMS90eC5jLTQzNTItXHRpZiAobG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NTMKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFRYIFF1ZXVlIFNjaGVkdWxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IHRvdWNoaW5nIHNvbWUgY29yZSB3aXJlbGVzcyBuZXR3b3JrIHN0YWNrIGxvZ2ljIHdpdGhpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBpcyBpbnZvbHZlZCwgYWxvbmcgd2l0aCB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gYGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbXBhY3QuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCwgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIHRvIGJlIGVuYWJsZWQsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgdGhvc2UgYXJlIHRoZSBvbmVzIHRvIGNvbnNpZGVyLgoKVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgY3J1Y2lhbCBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbXMuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBsb2dpYyBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YC4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGBtYWM4MDIxMV9od3NpbWAgb3IgZXZlbiB0aGUgYG5sODAyMTEvdmlydHVhbCB3aWZpYCBpbnRlcmZhY2UgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZS4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFib3V0IHRyYWNraW5nIHRoZSBUWCBzY2hlZHVsaW5nIHJvdW5kcyBhbmQgdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIHN0YXRlIChgc2NoZWR1bGVfb3BlbmApLCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgcXVldWUgaXRlcmF0aW9uIGlzIHRlcm1pbmF0ZWQgYW5kIHByZXZlbnRzIGxvb3BzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgZXJyb3JzLgoKVG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgcmVxdWlyZWQgY29uZmlnczogYENGRzgwMjExYCwgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gSSYjMzk7bSBnb2luZyB0byBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgaWVlZTgwMjExX25leHRfdHhxYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCwgYW5kIGBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuCgpBZnRlciBhIGZpbmFsIHN3ZWVwIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZGV0YWlscywgaXQgbG9va3MgbGlrZSBJJiMzOTt2ZSBnb3QgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE9rYXksIGl0JiMzOTtzIHRpbWUgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfbmV4dF90eHEmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX25leHRfdHhxJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIHN0YXRlIHRyYWNraW5nIGluIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrIGJ5IGRlY291cGxpbmcgdGhlIGFjdGl2ZSBzY2hlZHVsZSByb3VuZCBjb3VudGVyIGZyb20gdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIGFpcnRpbWUgY2hlY2sgc3RhdHVzIChzY2hlZHVsZV9vcGVuKS4gbWFjODAyMTEgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc2ltdWxhdGVkIHJhZGlvIChtYWM4MDIxMV9od3NpbSkgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IFRYIHF1ZXVlIGl0ZXJhdGlvbiwgZGVxdWV1ZSwgYW5kIGFpcnRpbWUgc2NoZWR1bGluZyBsb29wIHRlcm1pbmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXG5cbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXG4zLiBDb250cm9sIGZsb3c6IFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIHF1ZXVlIHRyYXZlcnNhbCBhbmQgc2NoZWR1bGluZyBsb2dpYyAoYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCkgd2l0aG91dCBtb2RpZnlpbmcgZGF0YSBidWZmZXIgYm91bmRhcmllcywgcGFja2V0IHBhcnNpbmcsIG9yIG1lbW9yeSBjb3B5aW5nLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDdkZGE1Yzk2MDUzYjEyOTIxZWMyMmE5MmNmZjY1ODJjYmNjNGU0NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MDI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0xNDY4LDYgJiM0MzsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7CiAJc3BpbmxvY2tfdCBhY3RpdmVfdHhxX2xvY2tbSUVFRTgwMjExX05VTV9BQ1NdOwogCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdOwogCXUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107CiYjNDM7CWJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107CiAKIAkvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqLwogCXNwaW5sb2NrX3QgaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggYzMzMDkyOTYwZGYyNi4uYzY2NWNlZDljMDVjYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTQxMjIsNyAmIzQzOzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYykKIAogCXNwaW5fbG9ja19iaCgmYW1wO2xvY2FsLSZndDthY3RpdmVfdHhxX2xvY2tbYWNdKTsKIAotCWlmICghbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSkKJiM0MzsJaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY10pCiAJCWdvdG8gb3V0OwogCiAgYmVnaW46CkBAIC00MzQ3LDEyICYjNDM7NDM0NywxMiBAQCB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKQogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7bG9jYWwtJmd0O2FjdGl2ZV90eHFfbG9ja1thY10pOwogCi0JaWYgKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhsb2NhbCwgYWMpKSB7CiYjNDM7CWxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSA9CiYjNDM7CQlpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTsKJiM0MzsJaWYgKGxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXSkgewogCQlsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdJiM0MzsmIzQzOzsKIAkJaWYgKCFsb2NhbC0mZ3Q7c2NoZWR1bGVfcm91bmRbYWNdKQogCQkJbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7Ci0JfSBlbHNlIHsKLQkJbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXSA9IDA7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtsb2NhbC0mZ3Q7YWN0aXZlX3R4cV9sb2NrW2FjXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgdGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIGZpZ3VyaW5nIG91dCBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgYWZmZWN0ZWQgZmlsZXMsIGl0JiMzOTtzIGhpdHRpbmcgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBmbGFncyDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNtaXNzaW9uLCBpcyBhbiBhcmVhIHdoZXJlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgY2FuIGx1cmsuCgpOb3csIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBNeSBnby10byBhcHByb2FjaCBpcyBncmVwcGluZyBmb3IgcmVsZXZhbnQga2V5d29yZHMgYW5kLCBvZiBjb3Vyc2UsIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIGFueSBwb2ludGVyIG1hbmlwdWxhdGlvbiBpbiB0aG9zZSBmaWxlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlIHJlcXVpcmUgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoZWR1bGVfcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk3Ny0gKiBAc2NoZWR1bGVfb3JkZXI6IHVzZWQgd2l0aCBpZWVlODAyMTFfbG9jYWwtXHUwMDNlYWN0aXZlX3R4cXNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjk3ODogKiBAc2NoZWR1bGVfcm91bmQ6IGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvbiBUWFEgc2NoZWR1bGluZ1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc5LSAqIEBmbGFnczogVFhRIGZsYWdzIGZyb20gXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTk4Mj1zdHJ1Y3QgdHhxX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk4Ni1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjk4NzpcdHUxNiBzY2hlZHVsZV9yb3VuZDtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTk4OC1cdHN0cnVjdCBsaXN0X2hlYWQgc2NoZWR1bGVfb3JkZXI7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ1Nz1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVx0c3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNDcwOlx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE0NzEtXHRib29sIHNjaGVkdWxlX29wZW5bSUVFRTgwMjExX05VTV9BQ1NdO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQxMTU9c3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cbm5ldC9tYWM4MDIxMS90eC5jOjQxNjc6XHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG5uZXQvbWFjODAyMTEvdHguYy00MTY4LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyKTtcbm5ldC9tYWM4MDIxMS90eC5jOjQxNzE6XHR0eHFpLVx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdO1xubmV0L21hYzgwMjExL3R4LmMtNDE3Mi1cdHJldCA9IFx1MDAyNnR4cWktXHUwMDNldHhxO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQzNDQ9dm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVx0aWYgKGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xubmV0L21hYzgwMjExL3R4LmM6NDM1NDpcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1Olx0XHRcdGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSYjNDM7JiM0Mzs7XG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbiBvZiBgaWVlZTgwMjExX2xvY2FsYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjcml0aWNhbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSA4MDIuMTEgc3RhY2ssIGFuZCBJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBzb21lIGRyaXZlci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvciBhIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIHRoZSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBUaGF0IHBvaW50cyBtZSBkaXJlY3RseSB0b3dhcmQgYGllZWU4MDIxMV9hbGxvY19od2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGFuZCwgdGhlcmVmb3JlLCBpcyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGVzdGFibGlzaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGNoYWluIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHJlc291cmNlIGNvbnRlbnRpb24gd2l0aGluIG9yIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24sIGFuZCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBtaXNtYW5hZ2VkIHBvaW50ZXJzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4gSWYgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIG9idmlvdXMgdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBzZWUgd2hvIGNhbGxzIHRoYXQgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgbGlrZWx5IHJlc2lkZXMgYXJvdW5kIHRoYXQgZnVuY3Rpb24sIG9yIGluIGEgZnVuY3Rpb24gaXQgY2FsbHMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc3RydWN0IGllZWU4MDIxMV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgcmVuZGVyZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEhhcmR3YXJlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFsbG9jYXRpb24gaXNzdWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYmVpbmcgYnJvdWdodCBvbmxpbmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBlaXRoZXIgYGFsbG9jX2h3YCBvciBgaWVlZTgwMjExX2FsbG9jX2h3YC4gVGhlc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLCBnaXZlbiBteSBleHBlcmllbmNlLCBmb3IgdGhlIGNvcmUgYWxsb2NhdGlvbiByb3V0aW5lcyByZWxhdGVkIHRvIHdpcmVsZXNzIGhhcmR3YXJlIGluIHRoaXMgc3lzdGVtLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYz03NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCBtYWM4MDIxMV92aHRfY2FwYV9tb2RfbWFzayA9IHtcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTc5Mi1cbm5ldC9tYWM4MDIxMS9tYWluLmM6NzkzOnN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcbm5ldC9tYWM4MDIxMS9tYWluLmMtNzk0LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzLFxuLS1cbm5ldC9tYWM4MDIxMS9tYWluLmMtMTA1MC19XG5uZXQvbWFjODAyMTEvbWFpbi5jOjEwNTE6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHdfbm0pO1xubmV0L21hYzgwMjExL21haW4uYy0xMDUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbWFjODAyMTFgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGBsb2NhbGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0JiMzOTtzIHRoZSBjb3JlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL21haW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5MywgdGhlcmUgc2hvdWxkIGJlIHNvbWUgcmVsZXZhbnQgY29kZSBhcm91bmQgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGNydWNpYWwgYGxvY2FsYCB2YXJpYWJsZSBjb21lcyBpbnRvIGJlaW5nLi4uIEl0JiMzOTtzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgZHJpdmVyIGdldHMgc2V0IHVwLCBzbyBJIGNhbiBzZWUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBwcm9ibGVtcy4gSSYjMzk7bSBhZnRlciB0aGUgYWxsb2NhdGlvbiBpdHNlbGYsIHRoZSByZWxldmFudCBhcmd1bWVudHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkzOlx0c3RydWN0IGllZWU4MDIxMV9odyAqaWVlZTgwMjExX2FsbG9jX2h3X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLFxuIDc5NDpcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzLFxuIDc5NTpcdFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSlcbiA3OTY6XHR7XG4gNzk3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbiA3OTg6XHRcdGludCBwcml2X3NpemUsIGk7XG4gNzk5Olx0XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5O1xuIDgwMDpcdFx0Ym9vbCBlbXVsYXRlX2NoYW5jdHg7XG4gODAxOlx0XG4gODAyOlx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZXR4IHx8ICFvcHMtXHUwMDNlc3RhcnQgfHwgIW9wcy1cdTAwM2VzdG9wIHx8ICFvcHMtXHUwMDNlY29uZmlnIHx8XG4gODAzOlx0XHRcdCAgICAhb3BzLVx1MDAzZWFkZF9pbnRlcmZhY2UgfHwgIW9wcy1cdTAwM2VyZW1vdmVfaW50ZXJmYWNlIHx8XG4gODA0Olx0XHRcdCAgICAhb3BzLVx1MDAzZWNvbmZpZ3VyZV9maWx0ZXIgfHwgIW9wcy1cdTAwM2V3YWtlX3R4X3F1ZXVlKSlcbiA4MDU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODA2Olx0XG4gODA3Olx0XHRpZiAoV0FSTl9PTihvcHMtXHUwMDNlc3RhX3N0YXRlIFx1MDAyNlx1MDAyNiAob3BzLVx1MDAzZXN0YV9hZGQgfHwgb3BzLVx1MDAzZXN0YV9yZW1vdmUpKSlcbiA4MDg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODA5Olx0XG4gODEwOlx0XHRpZiAoV0FSTl9PTighIW9wcy1cdTAwM2VsaW5rX2luZm9fY2hhbmdlZCAhPSAhIW9wcy1cdTAwM2V2aWZfY2ZnX2NoYW5nZWQgfHxcbiA4MTE6XHRcdFx0ICAgIChvcHMtXHUwMDNlbGlua19pbmZvX2NoYW5nZWQgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2Vic3NfaW5mb19jaGFuZ2VkKSkpXG4gODEyOlx0XHRcdHJldHVybiBOVUxMO1xuIDgxMzpcdFxuIDgxNDpcdFx0LyogY2hlY2sgYWxsIG9yIG5vIGNoYW5uZWwgY29udGV4dCBvcGVyYXRpb25zIGV4aXN0ICovXG4gODE1Olx0XHRpZiAob3BzLVx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IFx1MDAyNlx1MDAyNlxuIDgxNjpcdFx0ICAgIG9wcy1cdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCBcdTAwMjZcdTAwMjZcbiA4MTc6XHRcdCAgICBvcHMtXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpIHtcbiA4MTg6XHRcdFx0aWYgKFdBUk5fT04ob3BzLVx1MDAzZWFzc2lnbl92aWZfY2hhbmN0eCB8fFxuIDgxOTpcdFx0XHRcdCAgICBvcHMtXHUwMDNldW5hc3NpZ25fdmlmX2NoYW5jdHgpKVxuIDgyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDgyMTpcdFx0XHRlbXVsYXRlX2NoYW5jdHggPSB0cnVlO1xuIDgyMjpcdFx0fSBlbHNlIHtcbiA4MjM6XHRcdFx0aWYgKFdBUk5fT04ob3BzLVx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IHx8XG4gODI0Olx0XHRcdFx0ICAgIG9wcy1cdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCB8fFxuIDgyNTpcdFx0XHRcdCAgICBvcHMtXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpKVxuIDgyNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDgyNzpcdFx0XHRpZiAoV0FSTl9PTighb3BzLVx1MDAzZWFkZF9jaGFuY3R4IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIElFRUUgODAyLjExIHN0YW5kYXJkIGFuZCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byBgaWVlZTgwMjExX2FsbG9jX2h3X25tYCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGBpZWVlODAyMTFfYWxsb2NfaHdfbm1gIGZ1bmN0aW9uLiBJJiMzOTt2ZSBsaWtlbHkgZW5jb3VudGVyZWQgdGhpcyBmdW5jdGlvbiBuYW1lIGJlZm9yZSBpbiB0aGUgY29udGV4dCBvZiBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gKGxpa2VseSBhIHN0cnVjdCBgaWVlZTgwMjExX2h3YCkgd2l0aGluIHRoZSBuZXR3b3JrIGRyaXZlciBmb3IgYW4gODAyLjExIGRldmljZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBiYXNpYyBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3MsIHJlc291cmNlIGFsbG9jYXRpb24gKG1lbW9yeSBmb3IgaW50ZXJuYWwgc3RydWN0dXJlcywgcG90ZW50aWFsIERNQSBidWZmZXJzLCBldGMuKSwgYW5kIG92ZXJhbGwgZXN0YWJsaXNoaW5nIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgd2lyZWxlc3MgZHJpdmVyIGFuZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGhhbmRsZSBhIGZldyBrZXkgYXNwZWN0cy4gRmlyc3QgaXQgbXVzdCBhbGxvY2F0ZSBtZW1vcnkuIE5leHQgaXQgbXVzdCBpbml0aWFsaXplIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJdCBtaWdodCBhbHNvIGhhdmUgdG8gZGVhbCB3aXRoIHJlZ2lzdGVyaW5nIHRoZSBuZXcgaGFyZHdhcmUgb2JqZWN0IHdpdGggdGhlIGFwcHJvcHJpYXRlIDgwMi4xMSBjb3JlIChsaWtlIG1hYzgwMjExKSwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O20gdXNlZCB0byBzZWVpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBkZXZpY2UmIzM5O3MgY2FwYWJpbGl0aWVzLCB3aGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGhhcmR3YXJlIHN0YXRlLCBhbmQgaG93IGl0IGhhbmRsZXMgaW5pdGlhbCBzZXR1cCByb3V0aW5lcyAobGlrZSBlbmFibGluZyBpbnRlcnJ1cHRzIG9yIGNvbmZpZ3VyaW5nIGJhc2ljIHJlZ2lzdGVycykuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIGVycm9yIGNvbmRpdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgaXMgY3JpdGljYWwgdG8ga25vd2luZyBob3cgYSBuZXcgODAyLjExIGRldmljZSBpcyBicm91Z2h0IG9ubGluZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODI4Olx0XHRcdFx0ICAgICFvcHMtXHUwMDNlcmVtb3ZlX2NoYW5jdHggfHxcbiA4Mjk6XHRcdFx0XHQgICAgIW9wcy1cdTAwM2VjaGFuZ2VfY2hhbmN0eCB8fFxuIDgzMDpcdFx0XHRcdCAgICAhb3BzLVx1MDAzZWFzc2lnbl92aWZfY2hhbmN0eCB8fFxuIDgzMTpcdFx0XHRcdCAgICAhb3BzLVx1MDAzZXVuYXNzaWduX3ZpZl9jaGFuY3R4KSlcbiA4MzI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA4MzM6XHRcdFx0ZW11bGF0ZV9jaGFuY3R4ID0gZmFsc2U7XG4gODM0Olx0XHR9XG4gODM1Olx0XG4gODM2Olx0XHQvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLlxuIDgzNzpcdFx0ICogV2UgdXNlIHRoZSB3aXBoeSBwcml2IGRhdGEgZm9yIGJvdGggb3VyIGllZWU4MDIxMV9sb2NhbCBhbmQgZm9yXG4gODM4Olx0XHQgKiB0aGUgZHJpdmVyJiMzOTtzIHByaXZhdGUgZGF0YVxuIDgzOTpcdFx0ICpcbiA4NDA6XHRcdCAqIEluIG1lbW9yeSBpdCYjMzk7bGwgYmUgbGlrZSB0aGlzOlxuIDg0MTpcdFx0ICpcbiA4NDI6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQzOlx0XHQgKiB8IHN0cnVjdCB3aXBoeVx0ICAgIHxcbiA4NDQ6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQ1Olx0XHQgKiB8IHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgIHxcbiA4NDY6XHRcdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4gODQ3Olx0XHQgKiB8IGRyaXZlciYjMzk7cyBwcml2YXRlIGRhdGEgICB8XG4gODQ4Olx0XHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuIDg0OTpcdFx0ICpcbiA4NTA6XHRcdCAqL1xuIDg1MTpcdFx0cHJpdl9zaXplID0gQUxJR04oc2l6ZW9mKCpsb2NhbCksIE5FVERFVl9BTElHTikgJiM0MzsgcHJpdl9kYXRhX2xlbjtcbiA4NTI6XHRcbiA4NTM6XHRcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFx1MDAyNm1hYzgwMjExX2NvbmZpZ19vcHMsIHByaXZfc2l6ZSwgcmVxdWVzdGVkX25hbWUpO1xuIDg1NDpcdFxuIDg1NTpcdFx0aWYgKCF3aXBoeSlcbiA4NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU3Olx0XG4gODU4Olx0XHR3aXBoeS1cdTAwM2VtZ210X3N0eXBlcyA9IGllZWU4MDIxMV9kZWZhdWx0X21nbXRfc3R5cGVzO1xuIDg1OTpcdFxuIDg2MDpcdFx0d2lwaHktXHUwMDNlcHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkO1xuIDg2MTpcdFxuIDg2MjpcdFx0d2lwaHktXHUwMDNlZmxhZ3MgfD0gV0lQSFlfRkxBR19ORVROU19PSyB8XG4gODYzOlx0XHRcdFx0V0lQSFlfRkxBR180QUREUl9BUCB8XG4gODY0Olx0XHRcdFx0V0lQSFlfRkxBR180QUREUl9TVEFUSU9OIHxcbiA4NjU6XHRcdFx0XHRXSVBIWV9GTEFHX1JFUE9SVFNfT0JTUyB8XG4gODY2Olx0XHRcdFx0V0lQSFlfRkxBR19PRkZDSEFOX1RYO1xuIDg2NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGB3aXBoeV9uZXdfbm1gIGZvciBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byB3aXJlbGVzcyBQSFlzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHdpcGh5X25ld19ubWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhhdCB0aGlzIGZ1bmN0aW9uLCBiYXNlZCBvbiBpdHMgbmFtZSBhbmQgdHlwaWNhbCBrZXJuZWwgbmFtaW5nIGNvbnZlbnRpb25zLCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBuZXcgd2lyZWxlc3MgUEhZLCBhbmQgdGhlICYjMzQ7bm0mIzM0OyBsaWtlbHkgcmVmZXJzIHRvIHRoZSAmIzM0O25ldGRldiBtYW5hZ2VyJiMzNDsgYXNwZWN0cyBhc3NvY2lhdGVkIHdpdGggaXQsIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBrbm93LgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBpdCBhbGxvY2F0ZXMgbWVtb3J5IOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZXNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIHVzZSBvZiAmIzM0O2t6YWxsb2MmIzM0OyBvciAmIzM0O2t6YWxsb2Nfbm9kZSYjMzQ7IGNvbmZpcm1zIHRoaXM7IHRoZSAmIzM0O2smIzM0OyBwcmVmaXggaW1wbGllcyBrZXJuZWwgbWVtb3J5LCB3aGlsZSBgemFsbG9jYCBzdWdnZXN0cyB0aGUgbWVtb3J5IHdpbGwgYmUgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmUgYSBjbGVhbiBzbGF0ZS4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgc2Vuc2libGUgYmVoYXZpb3IgZm9yIHRoaXMgc29ydCBvZiBhbGxvY2F0aW9uLgoKTm93LCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCYjMzk7cyBkb2luZyB0aGlzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0JiMzOTtzIGxvb2sgdXAgYHdpcGh5X25ld19ubWAgaW4gYG5ldC93aXJlbGVzcy9jb3JlLmNgLiBJIGV4cGVjdCBpdCB0byBiZSBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uLCBwcm9iYWJseSBkb2luZyBhIGBremFsbG9jYCBvbiBhIGBzdHJ1Y3Qgd2lwaHlgIChvciBzaW1pbGFyKSBhbmQgdGhlbiBpbml0aWFsaXppbmcgc29tZSBmaWVsZHMuIEhvd2V2ZXIsIEkgd2FudCB0byB2ZXJpZnkgYW55IHN1YnRsZSBkZXRhaWxzLCBlcnJvciBjaGVja2luZywgb3IgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIGVuc3VyZSBvcHRpbWFsIHJlc291cmNlIHV0aWxpemF0aW9uIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHNpemUgY2FsY3VsYXRpb25zLCBOVU1BIG5vZGUgaGFuZGxpbmcgKGlmIGBremFsbG9jX25vZGVgIGlzIGludm9sdmVkKSwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiBjYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dpcGh5X25ld19ubSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvY29yZS5jPTUxOD1zdGF0aWMgdm9pZCBjZmc4MDIxMV93aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvd2lyZWxlc3MvY29yZS5jLTU0OC1cbm5ldC93aXJlbGVzcy9jb3JlLmM6NTQ5OnN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NTAtXHRcdFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXG4tLVxubmV0L3dpcmVsZXNzL2NvcmUuYy03MDItfVxubmV0L3dpcmVsZXNzL2NvcmUuYzo3MDM6RVhQT1JUX1NZTUJPTCh3aXBoeV9uZXdfbm0pO1xubmV0L3dpcmVsZXNzL2NvcmUuYy03MDQtXG4tLVxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYz0xMz1pbnQgdF93aXBoeV9pbml0KHN0cnVjdCBrdW5pdF9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmN0eClcbi0tXG5uZXQvd2lyZWxlc3MvdGVzdHMvdXRpbC5jLTIyLVxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYzoyMzpcdHdpcGh5ID0gd2lwaHlfbmV3X25tKG9wcywgc2l6ZW9mKCpwcml2KSwgXCYjMzQ7a3VuaXRcJiMzNDspO1xubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYy0yNC1cdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCB3aXBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlbGVzcyBDb3JlKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgd2lyZWxlc3MgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcsIG15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSBjb3JlIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmUgNTQ5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGZ1bmRhbWVudGFsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIHdpcmVsZXNzIHN1YnN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgc3VzcGVjdGVkIG1hbGZ1bmN0aW9uIGJ5IGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0OTpcdHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxuIDU1MDpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lKVxuIDU1MTpcdHtcbiA1NTI6XHRcdHN0YXRpYyBhdG9taWNfdCB3aXBoeV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMCk7XG4gNTUzOlx0XG4gNTU0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gNTU1Olx0XHRpbnQgYWxsb2Nfc2l6ZTtcbiA1NTY6XHRcbiA1NTc6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWFkZF9rZXkgXHUwMDI2XHUwMDI2ICghb3BzLVx1MDAzZWRlbF9rZXkgfHwgIW9wcy1cdTAwM2VzZXRfZGVmYXVsdF9rZXkpKTtcbiA1NTg6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWF1dGggXHUwMDI2XHUwMDI2ICghb3BzLVx1MDAzZWFzc29jIHx8ICFvcHMtXHUwMDNlZGVhdXRoIHx8ICFvcHMtXHUwMDNlZGlzYXNzb2MpKTtcbiA1NTk6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWNvbm5lY3QgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGlzY29ubmVjdCk7XG4gNTYwOlx0XHRXQVJOX09OKG9wcy1cdTAwM2Vqb2luX2lic3MgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlbGVhdmVfaWJzcyk7XG4gNTYxOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VhZGRfdmlydHVhbF9pbnRmIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWRlbF92aXJ0dWFsX2ludGYpO1xuIDU2MjpcdFx0V0FSTl9PTihvcHMtXHUwMDNlYWRkX3N0YXRpb24gXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGVsX3N0YXRpb24pO1xuIDU2MzpcdFx0V0FSTl9PTihvcHMtXHUwMDNlYWRkX21wYXRoIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWRlbF9tcGF0aCk7XG4gNTY0Olx0XHRXQVJOX09OKG9wcy1cdTAwM2Vqb2luX21lc2ggXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlbGVhdmVfbWVzaCk7XG4gNTY1Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdGFydF9wMnBfZGV2aWNlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXN0b3BfcDJwX2RldmljZSk7XG4gNTY2Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdGFydF9hcCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VzdG9wX2FwKTtcbiA1Njc6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWpvaW5fb2NiIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZWxlYXZlX29jYik7XG4gNTY4Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzdXNwZW5kIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXJlc3VtZSk7XG4gNTY5Olx0XHRXQVJOX09OKG9wcy1cdTAwM2VzY2hlZF9zY2FuX3N0YXJ0IFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZXNjaGVkX3NjYW5fc3RvcCk7XG4gNTcwOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VjYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpO1xuIDU3MTpcdFx0V0FSTl9PTihvcHMtXHUwMDNldGRsc19jaGFubmVsX3N3aXRjaCBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2V0ZGxzX2NhbmNlbF9jaGFubmVsX3N3aXRjaCk7XG4gNTcyOlx0XHRXQVJOX09OKG9wcy1cdTAwM2VhZGRfdHhfdHMgXHUwMDI2XHUwMDI2ICFvcHMtXHUwMDNlZGVsX3R4X3RzKTtcbiA1NzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgd2lwaHlfbmV3X25tYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgY29udGV4dCBpcyBjbGVhcmx5IGEgZGl2ZSBpbnRvIHRoZSBgd2lwaHlfbmV3X25tYCBmdW5jdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjayBvciBhIHJlbGF0ZWQgbmV0d29yayBtYW5hZ2VtZW50IGNvbXBvbmVudC4gVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgYmFzaWNzIOKAkyB3aGF0IGEgV2ktRmkgUEhZIGlzLCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIG1hYzgwMjExIGZyYW1ld29yaywgYW5kIHRoZSByb2xlIG9mIG5ldGxpbmsgbWVzc2FnZXMuIFNvLCB0aGUgdGhpbmtpbmcgcHJvY2VzcyBoZXJlIGlzbiYjMzk7dCBhYm91dCAqd2hhdCogdGhlIGZ1bmN0aW9uIGRvZXMgaW4gYW4gYWJzdHJhY3Qgc2Vuc2UsIGJ1dCByYXRoZXIgYSBmb2N1c2VkIGF0dGVtcHQgdG8gdW5kZXJzdGFuZCB0aGUgKmRldGFpbHMqIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyB0byBncmFzcCB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQgaGFuZGxlcyByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIE5ldHdvcmtNYW5hZ2VyIG9yIHNpbWlsYXIgbmV0d29yayBtYW5hZ2VtZW50IGRhZW1vbnMgKGhlbmNlIHRoZSBgX25tYCBzdWZmaXgpLiBBbSBJIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgYnVnLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGF0dGVtcHRpbmcgdG8gaW1wbGVtZW50IGEgbmV3IGZlYXR1cmUgdGhhdCBuZWVkcyB0byBob29rIGluIGhlcmUsIG9yIGp1c3QgZG9pbmcgYSBjb2RlIHJldmlldz8gUHJvYmFibHkgdGhlIGxhdHRlciwgdGhlIHdvcmRpbmcgaW1wbGllcyB0aGF0IGEgY29tcGxldGUgdmlldyBvZiB0aGUgZnVuY3Rpb24gaXMgcmVxdWlyZWQuIFRoaXMga2luZCBvZiBkZWVwIGRpdmUgaXMgYnJlYWQgYW5kIGJ1dHRlciBmb3IgYW55IG5ldHdvcmsgZW5naW5lZXIuIEtub3dpbmcgdGhlIG51YW5jZXMgb2Ygd2lwaHkgY3JlYXRpb24gaXMgZXNzZW50aWFsIGZvciBldmVyeXRoaW5nIGZyb20gZHJpdmVyIGRldmVsb3BtZW50IHRvIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGNvbm5lY3Rpdml0eSBpc3N1ZXMuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0bywgd2VsbCwgcmVhZCB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc0Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSAmIzQzOyBzaXplb2ZfcHJpdjtcbiA1NzU6XHRcbiA1NzY6XHRcdHJkZXYgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpO1xuIDU3NzpcdFx0aWYgKCFyZGV2KVxuIDU3ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA1Nzk6XHRcbiA1ODA6XHRcdHJkZXYtXHUwMDNlb3BzID0gb3BzO1xuIDU4MTpcdFxuIDU4MjpcdFx0cmRldi1cdTAwM2V3aXBoeV9pZHggPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZ3aXBoeV9jb3VudGVyKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZXdpcGh5X2lkeCBcdTAwM2MgMCkpIHtcbiA1ODU6XHRcdFx0LyogdWdoLCB3cmFwcGVkISAqL1xuIDU4NjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNndpcGh5X2NvdW50ZXIpO1xuIDU4NzpcdFx0XHRrZnJlZShyZGV2KTtcbiA1ODg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTg5Olx0XHR9XG4gNTkwOlx0XG4gNTkxOlx0XHQvKiBhdG9taWNfaW5jX3JldHVybiBtYWtlcyBpdCBzdGFydCBhdCAxLCBtYWtlIGl0IHN0YXJ0IGF0IDAgKi9cbiA1OTI6XHRcdHJkZXYtXHUwMDNld2lwaHlfaWR4LS07XG4gNTkzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBUWCBRdWV1ZSBTY2hlZHVsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBgbWFjODAyMTFgIGludGVybmFscywgdGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIGxvZ2ljLiBJIHNlZSB0aGF0IGByZGV2YCBhbmQgYHNpemVvZl9wcml2YCwgd2hpY2ggaW5jbHVkZXMgdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCwgYXJlIGluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jYC4gVGhpcyBpbXBsaWVzIHRoYXQgYGxvY2FsLSZndDtzY2hlZHVsZV9vcGVuW2FjXWAgaXMgaW5pdGlhbGx5IHNldCB0byBgZmFsc2VgIOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCYjMzk7cyBhIGtub3duIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGRpZmYgaXRzZWxmLiAgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIGBpZWVlODAyMTFfaS5oYCB3aGVyZSBgYm9vbCBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgaXMgYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYC4gVGhpcyBpbmRpY2F0ZXMgYSBuZXcgc3RhdGUgdmFyaWFibGUgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBjb250cm9sIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nLgoKVGhlbiwgbG9va2luZyBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMiBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgSSBub3RpY2UgdGhlIGNoYW5nZSBmcm9tIGNoZWNraW5nIGAhbG9jYWwtJmd0O3NjaGVkdWxlX3JvdW5kW2FjXWAgdG8gYCFsb2NhbC0mZ3Q7c2NoZWR1bGVfb3BlblthY11gLiBUaGlzIGlzIHRoZSBrZXkg4oCTIHRoaXMgbmV3IGBzY2hlZHVsZV9vcGVuYCBib29sZWFuIGlzIG5vdyBkZXRlcm1pbmluZyBpZiB3ZSBlbnRlciB0aGUgVFggcXVldWUgc2VsZWN0aW9uIGxvb3AuICBJdCBzZWVtcyB0byBiZSBhIG1vcmUgZGlyZWN0IGFuZCBleHBsaWNpdCB3YXkgb2YgbWFuYWdpbmcgdGhlICYjMzQ7b3BlbiYjMzQ7IHN0YXRlIG9mIHRoZSBzY2hlZHVsZXIgZm9yIGEgZ2l2ZW4gQUMgKEFjY2VzcyBDYXRlZ29yeSkuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb24gKGFyb3VuZCBsaW5lIDQzNDcpLCB0aGUgY29kZSBub3cgZGlyZWN0bHkgYXNzaWducyB0aGUgcmVzdWx0IG9mIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiB0byBgbG9jYWwtJmd0O3NjaGVkdWxlX29wZW5bYWNdYC4gSWYgdGhhdCBjaGVjayByZXR1cm5zIHRydWUsIHRoZSBzY2hlZHVsZXIgaXMgZGVlbWVkICYjMzQ7b3BlbiwmIzM0OyB0aGUgcm91bmQgY291bnRlciAoYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gKSBpcyBpbmNyZW1lbnRlZCwgYW5kIGlmIHRoZSBjb3VudGVyIGlzIGFib3V0IHRvIG92ZXJmbG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1cGRhdGluZyBgc2NoZWR1bGVfcm91bmRgIGFmdGVyIHRoZSBhaXJ0aW1lIGNoZWNrLCBzbyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSBzdHJlYW1saW5lcyB0aGUgbG9naWMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgcmVsaWFuY2Ugb24gYHNjaGVkdWxlX3JvdW5kYCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBUWCBxdWV1ZSBpcyBzY2hlZHVsYWJsZSwgd2l0aCB0aGUgZXhwbGljaXQgdXNlIG9mIGEgYm9vbGVhbiBmbGFnLCBgc2NoZWR1bGVfb3BlbmAuIFRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiBwcm9iYWJseSBkZXRlcm1pbmVzIGlmIHRoZSBhaXJ0aW1lIGNvbmRpdGlvbiBmb3Igc2NoZWR1bGluZyBUWCBwYWNrZXRzIGhhcyBiZWVuIG1ldC4gVGhpcyBpcyBhIGNsZWFuZXIgYW5kIG1vcmUgcmVhZGFibGUgYXBwcm9hY2guIFRoZSBleHBsaWNpdCBgc2NoZWR1bGVfb3BlbmAgdmFyaWFibGUgbWFrZXMgdGhlIGludGVudCBtdWNoIGNsZWFyZXIsIHdoaWNoIHNob3VsZCBsZWFkIHRvIGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDExNTpcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDExNjpcdHtcbjQxMTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDExODpcdFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XG40MTE5Olx0XHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XG40MTIwOlx0XHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDEyMTpcdFx0Ym9vbCBhcWxfY2hlY2s7XG40MTIyOlx0XG40MTIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MTI0Olx0XG40MTI1Olx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxuNDEyNjpcdFx0XHRnb3RvIG91dDtcbjQxMjc6XHRcbjQxMjg6XHQgYmVnaW46XG40MTI5Olx0XHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW2FjXSxcbjQxMzA6XHRcdFx0XHRcdFx0c3RydWN0IHR4cV9pbmZvLFxuNDEzMTpcdFx0XHRcdFx0XHRzY2hlZHVsZV9vcmRlcik7XG40MTMyOlx0XHRpZiAoIXR4cWkpXG40MTMzOlx0XHRcdGdvdG8gb3V0O1xuNDEzNDpcdFxuNDEzNTpcdFx0aWYgKHR4cWkgPT0gaGVhZCkge1xuNDEzNjpcdFx0XHRpZiAoIWZvdW5kX2VsaWdpYmxlX3R4cSlcbjQxMzc6XHRcdFx0XHRnb3RvIG91dDtcbjQxMzg6XHRcdFx0ZWxzZVxuNDEzOTpcdFx0XHRcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xuNDE0MDpcdFx0fVxuNDE0MTpcdFxuNDE0MjpcdFx0aWYgKCFoZWFkKVxuNDE0MzpcdFx0XHRoZWFkID0gdHhxaTtcbjQxNDQ6XHRcbjQxNDU6XHRcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXHUwMDI2dHhxaS1cdTAwM2V0eHEpO1xuNDE0NjpcdFx0aWYgKGFxbF9jaGVjaylcbjQxNDc6XHRcdFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcbjQxNDg6XHRcbjQxNDk6XHRcdGlmICh0eHFpLVx1MDAzZXR4cS5zdGEpIHtcbjQxNTA6XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cdTAwM2V0eHEuc3RhLFxuNDE1MTpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG40MTUyOlx0XG40MTUzOlx0XHRcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVx1MDAzZXR4cS5hYykgXHUwMDNjIDApIHtcbjQxNTQ6XHRcdFx0XHRzdGEtXHUwMDNlYWlydGltZVt0eHFpLVx1MDAzZXR4cS5hY10uZGVmaWNpdCAmIzQzOz1cbjQxNTU6XHRcdFx0XHRcdHN0YS1cdTAwM2VhaXJ0aW1lX3dlaWdodDtcbjQxNTY6XHRcbjQxNTc6XHRcdFx0XHRhcWxfY2hlY2sgPSBmYWxzZTtcbjQxNTg6XHRcdFx0fVxuNDE1OTpcdFx0fVxuNDE2MDpcdFxuNDE2MTpcdFx0aWYgKCFhcWxfY2hlY2spIHtcbjQxNjI6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhxaS1cdTAwM2VzY2hlZHVsZV9vcmRlcixcbjQxNjM6XHRcdFx0XHRcdCAgIFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXHUwMDNldHhxLmFjXSk7XG40MTY0Olx0XHRcdGdvdG8gYmVnaW47XG40MTY1Olx0XHR9XG40MTY2Olx0XG40MTY3Olx0XHRpZiAodHhxaS1cdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG40MTY4Olx0XHRcdGdvdG8gb3V0O1xuNDE2OTpcdFxuNDE3MDpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0eHFpLVx1MDAzZXNjaGVkdWxlX29yZGVyKTtcbjQxNzE6XHRcdHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmQgPSBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY107XG40MTcyOlx0XHRyZXQgPSBcdTAwMjZ0eHFpLVx1MDAzZXR4cTtcbjQxNzM6XHRcbjQxNzQ6XHRvdXQ6XG40MTc1Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbjQxNzY6XHRcdHJldHVybiByZXQ7XG40MTc3Olx0fVxuNDE3ODpcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX25leHRfdHhxKTtcbjQxNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgVFggUXVldWUgU2NoZWR1bGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggcGFja2V0IHNjaGVkdWxpbmcgaW4gdGhlIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGVyIGtpY2tzIGludG8gZ2Vhci4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnM/IFdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbj8gV2hhdCYjMzk7cyBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIGEgdHJhbnNtaXNzaW9uIGlzc3VlIEkmIzM5O3ZlIGJlZW4gc2VlaW5nLiBJJiMzOTttIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBob3cgdGhpbmdzIGFyZSBzdXBwb3NlZCB0byB3b3JrIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmxvdyBpcyBkZXZpYXRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQgYW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgd2l0aCBlYWNoIG9mIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzNDA6XHRcdHJldHVybiB0cnVlO1xuNDM0MTpcdH1cbjQzNDI6XHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KTtcbjQzNDM6XHRcbjQzNDQ6XHR2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxuNDM0NTpcdHtcbjQzNDY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuNDM0NzpcdFxuNDM0ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxvY2FsLVx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xuNDM0OTpcdFxuNDM1MDpcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuNDM1MTpcdFx0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbjQzNTI6XHRcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuNDM1MzpcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xuNDM1NDpcdFx0XHRpZiAoIWxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcbjQzNTU6XHRcdFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10mIzQzOyYjNDM7O1xuNDM1NjpcdFx0fVxuNDM1NzpcdFxuNDM1ODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG40MzU5Olx0fVxuNDM2MDpcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XG40MzYxOlx0XG40MzYyOlx0dm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG40MzYzOlx0XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG40MzY0Olx0XHRcdFx0XHQgIHUzMiBpbmZvX2ZsYWdzLFxuNDM2NTpcdFx0XHRcdFx0ICB1MzIgY3RybF9mbGFncylcbjQzNjY6XHR7XG40MzY3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG40MzY4Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuNDM2OTpcdFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuNDM3MDpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG40MzcxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbjQzNzI6XHRcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuNDM3MzpcdFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG40Mzc0Olx0XG40Mzc1Olx0XHRpZiAodW5saWtlbHkoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzYyBFVEhfSExFTikpIHtcbjQzNzY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG40Mzc3Olx0XHRcdHJldHVybjtcbjQzNzg6XHRcdH1cbjQzNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjgKCQkJCQkJCW91dHB1dDogMjcyCgkJCQkJCQl0aG91Z2h0czogMzk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNjaGVkdWxpbmcgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHdhcyBjb25mbGF0aW5nIGEg4oCcbm90IG9wZW7igJ0gc3RhdGUgd2l0aCBhIHNjaGVkdWxpbmcgcm91bmQgY291bnRlciBvZiB6ZXJvIHdpdGhpbiB0aGUgYGxvY2FsLSZndDtzY2hlZHVsZV9yb3VuZFthY11gIHZhcmlhYmxlLiBUaGlzIGxlZCB0byBwcm9ibGVtYXRpYyBjb21wYXJpc29ucyAoIGAwID09IDBgIG9yIGAhMGAgKSBhbmQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzLCBlc3BlY2lhbGx5IGR1cmluZyB0aGUgaW5pdGlhbCBzdGF0ZSB3aGVuIGB0eHFpLSZndDtzY2hlZHVsZV9yb3VuZGAgbWlnaHQgYWxzbyBiZSB6ZXJvLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgY2xlYW5seSBieSBpbnRyb2R1Y2luZyBhIG5ldyBib29sZWFuIGFycmF5LCBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gLCB3aXRoaW4gdGhlIGBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZS4gVGhpcyBjbGVhbmx5IHNlcGFyYXRlcyB0aGUg4oCcb3BlbuKAnSBzdGF0dXMgZnJvbSB0aGUgYWN0dWFsIHJvdW5kIGNvdW50ZXIgdmFsdWUsIHdoaWNoIGlzIGEgbXVjaCBjbGVhbmVyIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCBjb25jZXJucyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgZXNwZWNpYWxseSBzaW5jZSB0aGlzIGludm9sdmVzIGEgbmV3IHZhcmlhYmxlLiBIZXJlJiMzOTtzIG15IGJyZWFrZG93bjoKCjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKClgLCB3aGljaCBpcyBnb29kLiBUaGlzIG1lYW5zIGBzY2hlZHVsZV9vcGVuYCBpcyBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgKHRvIGZhbHNlKS4gVGhpcyBpbW1lZGlhdGVseSBlbGltaW5hdGVzIHRoZSBtb3N0IGNvbW1vbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KMi4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGUgZ29vZCBuZXdzIGhlcmUgaXMgdGhhdCBgc2NoZWR1bGVfb3BlbmAgYW5kIGBzY2hlZHVsZV9yb3VuZGAgYXJlICpub3QqIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBvcGVyYXRlcyBlbnRpcmVseSB3aXRoaW4gdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHNjaGVkdWxpbmcgbG9naWMsIHdoaWNoIHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLgozLiAgKipEYXRhIEhhbmRsaW5nOioqIENydWNpYWxseSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhbHRlciBidWZmZXIgbGVuZ3RocywgdG91Y2ggYW55IGJvdW5kcyBjaGVja3MsIG1vZGlmeSBjb3B5IHNpemVzLCBvciBjaGFuZ2Ugc3RydWN0dXJlIHBhZGRpbmcgaW4gYSB3YXkgdGhhdCB3b3VsZCBiZSB2aXNpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgc3RyaWN0bHkgaW50ZXJuYWwgc2NoZWR1bGluZyBmaXguCjQuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEkmIzM5O20gYWxzbyBlbnN1cmluZyB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBjb3VsZCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBvZiB0aGUgbmV3IHZhcmlhYmxlLiBUaGUgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB2aWEgYGt6YWxsb2MoKWAgYW5kIGFueSBsYXRlciB3cml0ZXMgb2NjdXIgaW4gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCB3aGljaCBzZWVtcyBzYWZlLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gYW5hbHlzaXMgb3Igc2ltaWxhciB0b29scy4gSXQmIzM5O3MgYSB3ZWxsLXNjb3BlZCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgZml4IGZvciBhIHRyaWNreSBzY2hlZHVsaW5nIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxuXG4xLiBNZW1vcnkgYWxsb2NhdGlvbjogYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgZHVyaW5nIHdpcGh5IGluaXRpYWxpemF0aW9uIChgd2lwaHlfbmV3X25tKClgKSwgZW5zdXJpbmcgYWxsIG5ldyBhbmQgZXhpc3RpbmcgZmllbGRzIChpbmNsdWRpbmcgYHNjaGVkdWxlX29wZW5gKSBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxuXG4xLiBNZW1vcnkgYWxsb2NhdGlvbjogYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgZHVyaW5nIHdpcGh5IGluaXRpYWxpemF0aW9uIChgd2lwaHlfbmV3X25tKClgKSwgZW5zdXJpbmcgYWxsIG5ldyBhbmQgZXhpc3RpbmcgZmllbGRzIChpbmNsdWRpbmcgYHNjaGVkdWxlX29wZW5gKSBhcmUgemVyby1pbml0aWFsaXplZC5cbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTIuMDY1MjI1ODY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4NjU4NTM3NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfbmV4dF90eHFcIixcbiAgICBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRcIixcbiAgICBcImllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTIuMDY1MjMwODg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjEwNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDdkZGE1Yzk2MDUzYjEyOTIxZWMyMmE5MmNmZjY1ODJjYmNjNGU0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjAyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCA1M2IwYjA4ZDM0NTk3Li42NTMxMTM0MGRiNDA2IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMTQ2OCw2ICsxNDY4LDcgQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuIFxcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfdHhxc1tJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdHUxNiBzY2hlZHVsZV9yb3VuZFtJRUVFODAyMTFfTlVNX0FDU107XFxuK1xcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcbiBcXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xcbiBcXHRzcGlubG9ja190IGhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2s7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcXG5pbmRleCBjMzMwOTI5NjBkZjI2Li5jNjY1Y2VkOWMwNWNiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNDEyMiw3ICs0MTIyLDcgQEAgc3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG4gXFxuLVxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG4rXFx0aWYgKCFsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gIGJlZ2luOlxcbkBAIC00MzQ3LDEyICs0MzQ3LDEyIEBAIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG4gXFxuLVxcdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xcbitcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbitcXHRcXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcXG4rXFx0aWYgKGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuIFxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG4gXFx0XFx0XFx0bG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSsrO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdID0gMDtcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDI6NTMuNjYwMTM0NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc4MDczNDUwMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfbmV4dF90eHFcIixcbiAgICBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRcIixcbiAgICBcImllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBzdGF0ZSB0cmFja2luZyBpbiB0aGUgbWFjODAyMTEgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjayBieSBkZWNvdXBsaW5nIHRoZSBhY3RpdmUgc2NoZWR1bGUgcm91bmQgY291bnRlciBmcm9tIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBhaXJ0aW1lIGNoZWNrIHN0YXR1cyAoc2NoZWR1bGVfb3BlbikuIG1hYzgwMjExIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNpbXVsYXRlZCByYWRpbyAobWFjODAyMTFfaHdzaW0pIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBUWCBxdWV1ZSBpdGVyYXRpb24sIGRlcXVldWUsIGFuZCBhaXJ0aW1lIHNjaGVkdWxpbmcgbG9vcCB0ZXJtaW5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbitcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XG4gXG4gXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IGMzMzA5Mjk2MGRmMjYuLmM2NjVjZWQ5YzA1Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MTIyLDcgKzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuK1x0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gIGJlZ2luOlxuQEAgLTQzNDcsMTIgKzQzNDcsMTIgQEAgdm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xuK1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuK1x0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbitcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuIFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcbiBcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMjo1My42NjAxMzYxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODk2NTY5MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBNYWM4MDIxMSBUWCBTY2hlZHVsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIHNpbmNlIEknbSBmYW1pbGlhciB3aXRoIG1hYzgwMjExJ3MgVFggcGF0aC5cblxuU3BlY2lmaWNhbGx5LCBpbiB0aGUgaGVhZGVyIGZpbGUsIGl0J3MgaW50cm9kdWNpbmcgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIExvb2tzIGxpa2Ugd2UncmUgdHJhY2tpbmcgd2hldGhlciBhIHNjaGVkdWxlciBpcyBcIm9wZW5cIiBmb3IgZWFjaCBBY2Nlc3MgQ2F0ZWdvcnkgKEFDKS4gU2VlbXMgbGlrZSB3ZSBoYXZlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyBvciBub3QuXG5cblRoZSBtZWF0IG9mIGl0IGlzIGluIGB0eC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGllZWU4MDIxMV9uZXh0X3R4cWAgYW5kIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYSBzaW1wbGUgY2hhbmdlIGluIGBpZWVlODAyMTFfbmV4dF90eHFgIGlzIHN3YXBwaW5nIGBzY2hlZHVsZV9yb3VuZGAgZm9yIGBzY2hlZHVsZV9vcGVuYCB0byBtYWtlIHRoZSBjb25kaXRpb25hbCBjaGVjay4gVGhlIG5ldyBsb2dpYyBpbiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgaXMgc3RvcmluZyB0aGUgcmV0dXJuIG9mIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGluIGBzY2hlZHVsZV9vcGVuYC4gVGhlbiBpZiBpdCBpcyBvcGVuLCB3ZSBpbmNyZW1lbnQgdGhlIHJvdW5kLCBvdGhlcndpc2UsIHdlIGRvbid0LiBUaGF0IGxvb2tzIGZpbmUsIGJ1dCB0aGlzIG1heSBjYXVzZSBzb21lIHJlZ3Jlc3Npb25zIGlmIG5vdCBwcm9wZXJseSB0ZXN0ZWQuXG5cblNvLCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgdHguY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIFRYIHNjaGVkdWxpbmcgYmVoYXZpb3IuIEknbSBrZWVuIHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGBzY2hlZHVsZV9vcGVuYCB2YXJpYWJsZSBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIGFpcnRpbWUgY2hlY2sgYW5kIHJvdW5kIHNjaGVkdWxpbmcuIEhvcGVmdWxseSwgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBzY2hlZHVsaW5nIGltYmFsYW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzowNC41NTY3MDc1NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDExNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDExNTpcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG40MTE2OlxcdHtcXG40MTE3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbjQxMTg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eHEgKnJldCA9IE5VTEw7XFxuNDExOTpcXHRcXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSBOVUxMLCAqaGVhZCA9IE5VTEw7XFxuNDEyMDpcXHRcXHRib29sIGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbjQxMjE6XFx0XFx0Ym9vbCBhcWxfY2hlY2s7XFxuNDEyMjpcXHRcXG40MTIzOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQxMjQ6XFx0XFxuNDEyNTpcXHRcXHRpZiAoIWxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcXG40MTI2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQxMjc6XFx0XFxuNDEyODpcXHQgYmVnaW46XFxuNDEyOTpcXHRcXHR0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbYWNdLFxcbjQxMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHR4cV9pbmZvLFxcbjQxMzE6XFx0XFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfb3JkZXIpO1xcbjQxMzI6XFx0XFx0aWYgKCF0eHFpKVxcbjQxMzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEzNDpcXHRcXG40MTM1OlxcdFxcdGlmICh0eHFpID09IGhlYWQpIHtcXG40MTM2OlxcdFxcdFxcdGlmICghZm91bmRfZWxpZ2libGVfdHhxKVxcbjQxMzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEzODpcXHRcXHRcXHRlbHNlXFxuNDEzOTpcXHRcXHRcXHRcXHRmb3VuZF9lbGlnaWJsZV90eHEgPSBmYWxzZTtcXG40MTQwOlxcdFxcdH1cXG40MTQxOlxcdFxcbjQxNDI6XFx0XFx0aWYgKCFoZWFkKVxcbjQxNDM6XFx0XFx0XFx0aGVhZCA9IHR4cWk7XFxuNDE0NDpcXHRcXG40MTQ1OlxcdFxcdGFxbF9jaGVjayA9IGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhodywgXFx1MDAyNnR4cWktXFx1MDAzZXR4cSk7XFxuNDE0NjpcXHRcXHRpZiAoYXFsX2NoZWNrKVxcbjQxNDc6XFx0XFx0XFx0Zm91bmRfZWxpZ2libGVfdHhxID0gdHJ1ZTtcXG40MTQ4OlxcdFxcbjQxNDk6XFx0XFx0aWYgKHR4cWktXFx1MDAzZXR4cS5zdGEpIHtcXG40MTUwOlxcdFxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHR4cWktXFx1MDAzZXR4cS5zdGEsXFxuNDE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbjQxNTI6XFx0XFxuNDE1MzpcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3N0YV9kZWZpY2l0KHN0YSwgdHhxaS1cXHUwMDNldHhxLmFjKSBcXHUwMDNjIDApIHtcXG40MTU0OlxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZVt0eHFpLVxcdTAwM2V0eHEuYWNdLmRlZmljaXQgKz1cXG40MTU1OlxcdFxcdFxcdFxcdFxcdHN0YS1cXHUwMDNlYWlydGltZV93ZWlnaHQ7XFxuNDE1NjpcXHRcXG40MTU3OlxcdFxcdFxcdFxcdGFxbF9jaGVjayA9IGZhbHNlO1xcbjQxNTg6XFx0XFx0XFx0fVxcbjQxNTk6XFx0XFx0fVxcbjQxNjA6XFx0XFxuNDE2MTpcXHRcXHRpZiAoIWFxbF9jaGVjaykge1xcbjQxNjI6XFx0XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLFxcbjQxNjM6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxc1t0eHFpLVxcdTAwM2V0eHEuYWNdKTtcXG40MTY0OlxcdFxcdFxcdGdvdG8gYmVnaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA0LjU1Njk5MTczMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwODg0NTQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHR4LmNgKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZy4gQmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4gc28gZmFyLCBJIGhhdmUgYSBodW5jaCB3aGVyZSB0aGUgaXNzdWUgbWlnaHQgYmUgcm9vdGVkLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgdHguY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY29kZSBzZWdtZW50IGZyb20gcm91Z2hseSBsaW5lIDQzMzAgdG8gbGluZSA0MzcwLiBUaGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBzdGFydCBkaWdnaW5nIGludG8gYW5kIHRvIGxvb2sgZm9yIGNsdWVzLCBlZGdlIGNhc2VzIG9yIHRoZSByb290IGNhdXNlLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgYXBwcm9hY2gsIGFuZCBJJ20gaG9waW5nIHRoaXMgc3BlY2lmaWMgcmFuZ2UgaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA5LjY0NTQ1OTI5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzMwOlxcdFxcdHN0YS1cXHUwMDNlYWlydGltZVthY10uZGVmaWNpdCArPSBzdGEtXFx1MDAzZWFpcnRpbWVfd2VpZ2h0O1xcbjQzMzE6XFx0XFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW2FjXSk7XFxuNDMzMjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQzMzM6XFx0XFxuNDMzNDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDMzNTpcXHRvdXQ6XFxuNDMzNjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKSlcXG40MzM3OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG40MzM4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDMzOTpcXHRcXG40MzQwOlxcdFxcdHJldHVybiB0cnVlO1xcbjQzNDE6XFx0fVxcbjQzNDI6XFx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX21heV90cmFuc21pdCk7XFxuNDM0MzpcXHRcXG40MzQ0OlxcdHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuNDM0NTpcXHR7XFxuNDM0NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG40MzQ3OlxcdFxcbjQzNDg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDM0OTpcXHRcXG40MzUwOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSA9XFxuNDM1MTpcXHRcXHRcXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcXG40MzUyOlxcdFxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG40MzUzOlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG40MzU0OlxcdFxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG40MzU1OlxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG40MzU2OlxcdFxcdH1cXG40MzU3OlxcdFxcbjQzNTg6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG40MzU5OlxcdH1cXG40MzYwOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XFxuNDM2MTpcXHRcXG40MzYyOlxcdHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjQzNjM6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjQzNjQ6XFx0XFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG40MzY1OlxcdFxcdFxcdFxcdFxcdCAgdTMyIGN0cmxfZmxhZ3MpXFxuNDM2NjpcXHR7XFxuNDM2NzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG40MzY5OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG40MzcwOlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbjQzNzE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuNDM3MjpcXHRcXHRib29sIGdyb3VwX2FkZHJlc3NlZDtcXG40MzczOlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG40Mzc0OlxcdFxcbjQzNzU6XFx0XFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBFVEhfSExFTikpIHtcXG40Mzc2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjQzNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjQzNzg6XFx0XFx0fVxcbjQzNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjA5LjY0NjAxNzk1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTA1NTkxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgc2NoZWR1bGVfcm91bmRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoIG9mIHRoZSBgc2NoZWR1bGVfcm91bmRgIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBCZXN0IHdheSB0byBkbyB0aGF0LCBlc3BlY2lhbGx5IGluIGEgcHJvamVjdCBvZiB0aGlzIHNpemUsIGlzIHRvIHVzZSBhIGdyZXAtbGlrZSB0b29sLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYHNjaGVkdWxlX3JvdW5kYCBpcyBiZWluZyB1c2VkLiBUaGF0J3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBtYXAgb2YgaXRzIGNhbGwgc2l0ZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wYWN0IGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgbW9kaWZ5IHRoaXMgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgYSBmYWlybHkgZXh0ZW5zaXZlIGxpc3QsIHNvIEknbGwgbmVlZCB0byBzb3J0IGl0IGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MTEuNzM2NTgwMzY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc3OTU5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoZWR1bGVfcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc3LSAqIEBzY2hlZHVsZV9vcmRlcjogdXNlZCB3aXRoIGllZWU4MDIxMV9sb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzktICogQGZsYWdzOiBUWFEgZmxhZ3MgZnJvbSBcXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTgyPXN0cnVjdCB0eHFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTg3OlxcdHUxNiBzY2hlZHVsZV9yb3VuZDtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlZHVsZV9vcmRlcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVxcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0NzA6XFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVxcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3OlxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxNjgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlxcdHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcXG5uZXQvbWFjODAyMTEvdHguYy00MTcyLVxcdHJldCA9IFxcdTAwMjZ0eHFpLVxcdTAwM2V0eHE7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MTMuMzg0MzgyODE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1MTUyMzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1hYzgwMjExIFRYIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzY2hlZHVsZV9yb3VuZGAgcGxheXMgYSBrZXkgcm9sZSBpbiB0aGUgbWFjODAyMTEncyBUWCBzY2hlZHVsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAuIFRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBgc2NoZWR1bGVfcm91bmRgIHZhcmlhYmxlIGlzIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBzY2hlZHVsZV9vcGVuYCBmbGFnLCB3aGljaCBpcyByZWxhdGVkIHRvIGFpcnRpbWUgY2hlY2tzLiBQcmUtcGF0Y2gsIGlmIHRoZSBhaXJ0aW1lIGNoZWNrIGZhaWxlZCwgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXWAgd291bGQgYmUgcmVzZXQgdG8gMC4gVGhlIHByb2JsZW0gdGhlbiBhcmlzZXMgYmVjYXVzZSBgaWVlZTgwMjExX25leHRfdHhxYCB1c2VzIDAgYXMgYSBjbG9zZWQgc3RhdGUgaW5kaWNhdG9yIChgaWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pIGdvdG8gb3V0O2ApLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIGl0IGluY3JlbWVudHMgcGFzdCB6ZXJvIGlmIGl0J3MgYmVlbiByZXNldCB0byB6ZXJvIG9yIGluY3JlbWVudGVkPyBJdCBzZWVtcyB0aGF0IGlmIGl0J3MgMCBpdCBnZXRzIGluY3JlbWVudGVkIChgaWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pIGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSsrO2ApLlxuXG5UaGUgcGF0Y2ggZXNzZW50aWFsbHkgc2VwYXJhdGVzIHRoZSBib29sZWFuIGBzY2hlZHVsZV9vcGVuYCBmcm9tIHRoZSBjb3VudGVyIGBzY2hlZHVsZV9yb3VuZGAuIFRoZSBwdXJwb3NlIG9mIGBzY2hlZHVsZV9yb3VuZGAgaXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcywgc28gd2Ugbm8gbG9uZ2VyIHVzZSAwIGFzIGEgc3RhdGUgaW5kaWNhdG9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQuIElzIG1hYzgwMjExIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXA/IEFoLCB5ZXMsIG9mIGNvdXJzZSEgbWFjODAyMTEgaXMgdGhlIGZvdW5kYXRpb25hbCB3aXJlbGVzcyA4MDIuMTEgc3lzdGVtIGluIExpbnV4LiBJdCdzIGFjdGl2ZWx5IHRlc3RlZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCwgaW1wb3J0YW50bHksIHN5emthbGxlci4gVGhvc2UgYXJlIGJvdGggZXhjZWxsZW50IGZvciB0aGlzIGtpbmQgb2YgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSBrbm93IG1hYzgwMjExIGlzIGZ1enogdGVzdGVkLiBUaGV5IHVzZSB0aGUgYG1hYzgwMjExX2h3c2ltYCBtb2R1bGUsIGFsb25nIHdpdGggdmlydF93aWZpIG9yIFVTQiB3aWZpIGdhZGdldHMgLyBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5Ob3csIGEgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBtYWM4MDIxMV9od3NpbWAgb3Igb3RoZXIgcmVsZXZhbnQgZHJpdmVycyBhY3R1YWxseSAqdXNlKiB0aGUgZnVuY3Rpb25zIGJlaW5nIGRpc2N1c3NlZCBoZXJlLCBuYW1lbHkgYGllZWU4MDIxMV9uZXh0X3R4cWAgb3IgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLiBUbyBjb25maXJtIHRoZSByZWFjaGFiaWxpdHksIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgdG8gc2VlIHdoYXQgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjE4LjUzNTkwOTExOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTg2NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfbmV4dF90eHFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYz00NDc1PXN0YXRpYyBpbnQgYXRoMTBrX21hY19zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBhYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMtNDQ4MC1cXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCBhYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYzo0NDgxOlxcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDgyLVxcdFxcdHdoaWxlIChhdGgxMGtfbWFjX3R4X2Nhbl9wdXNoKGh3LCB0eHEpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcwLVxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3NzE6XFx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzcyLVxcdGlmICghdHhxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYz0xOTgwPXZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMtMTk5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jOjIwMDA6XFx0d2hpbGUgKChxdWV1ZSA9IGllZWU4MDIxMV9uZXh0X3R4cShodywgdHhxLVxcdTAwM2VtYWM4MDIxMV9xbnVtKSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jLTIwMDEtXFx0XFx0Ym9vbCBmb3JjZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz01NjQ9bXQ3Nl90eHFfc2NoZWR1bGVfbGlzdChzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNTc1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzo1NzY6XFx0XFx0dHhxID0gaWVlZTgwMjExX25leHRfdHhxKHBoeS1cXHUwMDNlaHcsIHFpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jLTU3Ny1cXHRcXHRpZiAoIXR4cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jPTQ4MjY9c3RhdGljIHZvaWQgcnR3ODlfY29yZV90eHFfc2NoZWR1bGUoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LCB1OCBhYywgYm9vbCAqcmVpbnZva2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODM3LVxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0ODM4OlxcdHdoaWxlICgodHhxID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCBhYykpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMtNDgzOS1cXHRcXHRydHd0eHEgPSAoc3RydWN0IHJ0dzg5X3R4cSAqKXR4cS1cXHUwMDNlZHJ2X3ByaXY7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExNi0gKiBvYnRhaW4gdGhlIG5leHQgcXVldWUgdG8gcHVsbCBmcmFtZXMgZnJvbSwgdGhlIGRyaXZlciBjYWxsc1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6MTE3OiAqIGllZWU4MDIxMV9uZXh0X3R4cSgpLiBUaGUgZHJpdmVyIGlzIHRoZW4gZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSB0eHEgdXNpbmdcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTExOC0gKiBpZWVlODAyMTFfcmV0dXJuX3R4cSgpLlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD03NzM2PXZvaWQgaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc0Mi0gKiBAdHhxOiBwb2ludGVyIG9idGFpbmVkIGZyb20gc3RhdGlvbiBvciB2aXJ0dWFsIGludGVyZmFjZSwgb3IgZnJvbVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzc0MzogKlxcdGllZWU4MDIxMV9uZXh0X3R4cSgpXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzQ0LSAqXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTc3NTg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03NzY5LSAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9uIG9yIHZpcnR1YWwgaW50ZXJmYWNlLCBvciBmcm9tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo3NzcwOiAqXFx0aWVlZTgwMjExX25leHRfdHhxKClcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc3NzEtICpcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzc5NT12b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzc5OC0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc3OTk6ICogaWVlZTgwMjExX25leHRfdHhxIC0gZ2V0IG5leHQgdHggcXVldWUgdG8gcHVsbCBwYWNrZXRzIGZyb21cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MDAtICpcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwNy0gKi9cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MDg6c3RydWN0IGllZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpO1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgwOS1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNS0gKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NzgxNjogKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBpZWVlODAyMTFfbmV4dF90eHEoKSBvciBpZWVlODAyMTFfcmV0dXJuX3R4cSgpLlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgxNy0gKiBUaGUgZHJpdmVyIG11c3Qgbm90IGNhbGwgbXVsdGlwbGUgVFhRIHNjaGVkdWxpbmcgcm91bmRzIGNvbmN1cnJlbnRseS5cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9Nzg0Mj1pZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ3LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6Nzg0ODogKiBpZWVlODAyMTFfcmV0dXJuX3R4cSAtIHJldHVybiBhIFRYUSBwcmV2aW91c2x5IGFjcXVpcmVkIGJ5IGllZWU4MDIxMV9uZXh0X3R4cSgpXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC03ODQ5LSAqXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTAxPWllZWU4MDIxMV90eHFfa2VlcF9hY3RpdmUoc3RydWN0IHR4cV9pbmZvICp0eHFpKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDExNC1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTE1OnN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxMTYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE3Ny19XFxubmV0L21hYzgwMjExL3R4LmM6NDE3ODpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XFxubmV0L21hYzgwMjExL3R4LmMtNDE3OS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTgwPXZvaWQgX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE5OS1cXHRcXHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcXG5uZXQvbWFjODAyMTEvdHguYzo0MjAwOlxcdFxcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXFxubmV0L21hYzgwMjExL3R4LmMtNDIwMS1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS91dGlsLmM9MzA1PXZvaWQgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3V0aWwuYy0zMTMtXFxubmV0L21hYzgwMjExL3V0aWwuYzozMTQ6XFx0LyogVXNlIGllZWU4MDIxMV9uZXh0X3R4cSgpIGZvciBhaXJ0aW1lIGZhaXJuZXNzIGFjY291bnRpbmcgKi9cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxNS1cXHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KGh3LCB0eHEtXFx1MDAzZWFjKTtcXG5uZXQvbWFjODAyMTEvdXRpbC5jOjMxNjpcXHR3aGlsZSAoKHF1ZXVlID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCB0eHEtXFx1MDAzZWFjKSkpIHtcXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxNy1cXHRcXHR3YWtlX3R4X3B1c2hfcXVldWUobG9jYWwsIHNkYXRhLCBxdWV1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjIwLjIyNzc4MTQ3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE0MzgzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUXVldWUgV2FrZS1VcCBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYG5ldC9tYWM4MDIxMS91dGlsLmM6MzA1YCwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgbWFjODAyMTEncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBzb2Z0d2FyZSBxdWV1aW5nIGFuZCB0aGUgc3Vic2VxdWVudCBhd2FrZW5pbmcgb2YgdGhlIHRyYW5zbWl0IHF1ZXVlLiBJdCBzZWVtcyB0byBjYWxsIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCBhbmQgYGllZWU4MDIxMV9uZXh0X3R4cWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLCBzbyBJJ2xsIGdvIGJhY2sgdG8gYG5ldC9tYWM4MDIxMS91dGlsLmNgIGFyb3VuZCBsaW5lIDMwNSBhbmQgdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gc2VlIGV4YWN0bHkgd2hlbiBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCBpcyBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnZvY2F0aW9uIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUWCBxdWV1ZSBtYW5hZ2VtZW50IHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjMuMDQyMTY4NTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdXRpbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHRkcnZfdHgobG9jYWwsIFxcdTAwMjZjb250cm9sLCBza2IpO1xcbiAzMDE6XFx0XFx0fVxcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHQvKiB3YWtlX3R4X3F1ZXVlIGhhbmRsZXIgZm9yIGRyaXZlciBub3QgaW1wbGVtZW50aW5nIGEgY3VzdG9tIG9uZSovXFxuIDMwNTpcXHR2b2lkIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbiAzMDc6XFx0e1xcbiAzMDg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuIDMwOTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh0eHEtXFx1MDAzZXZpZik7XFxuIDMxMDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcXVldWU7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZWhhbmRsZV93YWtlX3R4X3F1ZXVlX2xvY2spO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHQvKiBVc2UgaWVlZTgwMjExX25leHRfdHhxKCkgZm9yIGFpcnRpbWUgZmFpcm5lc3MgYWNjb3VudGluZyAqL1xcbiAzMTU6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChodywgdHhxLVxcdTAwM2VhYyk7XFxuIDMxNjpcXHRcXHR3aGlsZSAoKHF1ZXVlID0gaWVlZTgwMjExX25leHRfdHhxKGh3LCB0eHEtXFx1MDAzZWFjKSkpIHtcXG4gMzE3OlxcdFxcdFxcdHdha2VfdHhfcHVzaF9xdWV1ZShsb2NhbCwgc2RhdGEsIHF1ZXVlKTtcXG4gMzE4OlxcdFxcdFxcdGllZWU4MDIxMV9yZXR1cm5fdHhxKGh3LCBxdWV1ZSwgZmFsc2UpO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbiAzMjE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrKTtcXG4gMzIyOlxcdH1cXG4gMzIzOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlKTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIHZvaWQgX19pZWVlODAyMTFfd2FrZV90eHFzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgYWMpXFxuIDMyNjpcXHR7XFxuIDMyNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4gMzI4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZjtcXG4gMzI5OlxcdFxcdHN0cnVjdCBmcSAqZnEgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWZxO1xcbiAzMzA6XFx0XFx0c3RydWN0IHBzX2RhdGEgKnBzID0gTlVMTDtcXG4gMzMxOlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEw7XFxuIDMzMjpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4gMzMzOlxcdFxcdGludCBpO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIDMzNjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmZxLVxcdTAwM2Vsb2NrKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0aWYgKCF0ZXN0X2JpdChTREFUQV9TVEFURV9SVU5OSU5HLCBcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXRlKSlcXG4gMzM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzoyMy4wNDIzNDYzMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1NjUyMjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBMaW51eCBXaXJlbGVzcyBTdGFjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgbWFjODAyMTFgIGFnYWluLiBJdCdzIHRoZSBiZWF0aW5nIGhlYXJ0IG9mIExpbnV4J3Mgd2lyZWxlc3MgbmV0d29ya2luZywgcmlnaHQ/IEknbSBpbnRlcmFjdGluZyB3aXRoIGl0IHRocm91Z2ggdmFyaW91cyBpbnRlcmZhY2VzIOKAkyBgbWFjODAyMTFfaHdzaW1gLCBgbmw4MDIxMWAsIHBhY2tldCBzb2NrZXRzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZy4gVG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiwgYW5kIGhvdyBpdCdzIGVuYWJsZWQsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQncyBhbGwgcHV0IHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCBgbWFjODAyMTFgIGhhcyBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjUuMTk4ODcwOTI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1NDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjUuMjUxODMwODcxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTMxNTU1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBDT05GSUdfTUFDODAyMTEqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgQ09ORklHX01BQzgwMjExYCBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBhc3N1bWluZywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLCB0aGlzIGxpa2VseSBpbnZvbHZlcyBhIGNhc2NhZGluZyBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCdzIHByb2JhYmx5IG5vdCBhIHNpbXBsZSBcIm9uL29mZlwiIHN3aXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIGRyaXZlcnMsIHJlZ3VsYXRvcnkgc2V0dGluZ3MsIHZhcmlvdXMgbmV0d29ya2luZyBzdGFja3MsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgd2lyZWxlc3MtcmVsYXRlZCBjb21wb25lbnRzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MjcuMjA0OTg5MDY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzoyNy4yMDUwNzM4NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyNzEyMjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBDRkc4MDIxMWAgRGVwZW5kZW5jeSBUcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ0ZHODAyMTFgLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGhlcmUsIGdpdmVuIHRoZSBldm9sdXRpb24gb2YgdGhlIHdpcmVsZXNzIHN0YWNrLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzKio6IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgQ0ZHODAyMTFgLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBkcml2ZXJzLCBvciBnZW5lcmFsIHdpcmVsZXNzIGZlYXR1cmUgdG9nZ2xlcz9cbiogICAqKk1vZHVsZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMqKjogSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgdmFyaW91cyB3aXJlbGVzcyBtb2R1bGVzIChlLmcuLCBzcGVjaWZpYyByYWRpbyBmaXJtd2FyZSBzdXBwb3J0KSByZWx5IG9uIHRoaXMgZm91bmRhdGlvbmFsIGxheWVyLiBBIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGggaXMgZXNzZW50aWFsLlxuKiAgICoqQnVpbGQtdGltZSBpbXBsaWNhdGlvbnMqKjogSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhZmZlY3QgdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGZyb20gY29tcGlsYXRpb24gdGltZSB0byBpbWFnZSBzaXplLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiBgQ0ZHODAyMTFgIGFuZCBvdGhlciB3aXJlbGVzcyBzdWJzeXN0ZW1zIChlLmcuLCBkZXByZWNhdGVkIG9yIGxlZ2FjeSB3aXJlbGVzcyBzdGFja3MpLlxuKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIVxuXG5UaGlzIGRlZXAgZGl2ZSBpcyBqdXN0IGFub3RoZXIgZGF5IGF0IHRoZSBvZmZpY2UgdG8gZW5zdXJlIGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgY29yZSBjb21wb25lbnQgaXMgdXNlZCwgYW5kIHRvIGZvcmVzZWUgYW55IGZ1dHVyZSBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjMzLjUzMjE5ODI5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczODQyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGRzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6MzMuNTc5NTkyMTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Nzc4MDc2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgV2lyZWxlc3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGludGVyZXN0ZWQgaW4sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGNoYWluIEkgd2FudCB0byB1bmRlcnN0YW5kLiBMaW5lIDE3IGlzIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBncmFzcCB0aGUgY29udGV4dC4gS25vd2luZyB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbnRleHR1YWxpemUgdGhlIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIGl0J3MgYSBuZXcgZmVhdHVyZSwgYSBkcml2ZXIsIG9yIGEgZ2VuZXJhbCB3aXJlbGVzcyBmcmFtZXdvcmsgb3B0aW9uIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM1LjQ1NzQwNDA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdJUkVMRVNTX0VYVFxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgV0VYVF9DT1JFXFxuICAgNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBXRVhUX1BST0NcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkVcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFdFWFRfUFJJVlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM1LjQ1NzQ2NzMzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNjIwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYWM4MDIxMV9od3NpbWAgZm9yIEluc2lnaHRzIGludG8gTWFjODAyMTEgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgYG1hYzgwMjExYCBpcyBhY3R1YWxseSB0ZXN0ZWQgYW5kIHNpbXVsYXRlZC4gSSBrbm93IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IGBtYWM4MDIxMV9od3NpbWAgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhhdC4gSXQncyB0aGUgc3RhbmRhcmQsIHNvIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJ20gaG9waW5nIHRvIGZpbmQgb3V0IGhvdyB0aGV5IG1hbmFnZSB0byByZXBsaWNhdGUgdGhlIGhhcmR3YXJlIGVudmlyb25tZW50IHdpdGhpbiB0aGUga2VybmVsIGZvciB0aGUgYG1hYzgwMjExYCBzdGFjay4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHRlc3RpbmcgbWV0aG9kb2xvZ2llcyBpbiBwbGFjZSwgYW5kIHdoZXJlIHRoZXJlIG1pZ2h0IGJlIGdhcHMgb3IgYXJlYXMgZm9yIGltcHJvdmVkIGNvdmVyYWdlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjM3LjUxMDA5MDQyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTUyMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowMzozOS4wNjk2MTc0MzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Njg2Njc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgV2lyZWxlc3MgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0J3Mgc2VlLi4uIHRoZSB0ZXh0IG1lbnRpb25zIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgS2NvbmZpZ2Agbm93IHRvIHNlZSB3aGF0J3MgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhpcyBhbGwgcGllY2VzIHRvZ2V0aGVyLiBUaGF0J2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDEuNDM2NDg3MDk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjb25maWcgTUFDODAyMTFfSFdTSU1cXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxcbiAgIDY6XFx0XFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcXG4gICA3OlxcdFxcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcXG4gICA4OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xcbiAgIDk6XFx0XFx0ICB0byB1c2UgdGhpcyB0b29sLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgMTI6XFx0XFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgVklSVF9XSUZJXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XFxuICAxOTpcXHRcXHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDEuNDM2NjAxOTk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MjUyODY4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1BQzgwMjExIFRYIFNjaGVkdWxpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbiB0aGlzIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLlxuXG5SaWdodCwgbGV0J3MgZGlnIGludG8gdGhlIGRpZmZzIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVudCBoZXJlLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCBgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhgIGFkZHMgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBiZWhhdmlvcmFsIGNoYW5nZXMuXG5cblRoZW4sIGluIGBuZXQvbWFjODAyMTEvdHguY2AsIGBpZWVlODAyMTFfbmV4dF90eHFgIG5vdyBjaGVja3MgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdYCBpbnN0ZWFkIG9mIGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY11gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCdzIGEgY29uZGl0aW9uYWwgZ2F0ZSBmb3IgdHJhbnNtaXR0aW5nLiBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgYWxzbyBzZXRzIGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXWAgYmFzZWQgb24gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjaygpYCwgYW5kIGl0IG9ubHkgaW5jcmVtZW50cyBgc2NoZWR1bGVfcm91bmRbYWNdYCBpZiBgc2NoZWR1bGVfb3BlbmAgaXMgdHJ1ZS4gQWxzbywgY3J1Y2lhbGx5LCB0aGUgY29kZSBkb2VzICpub3QqIHplcm8gYHNjaGVkdWxlX3JvdW5kW2FjXWAgaWYgYHNjaGVkdWxlX29wZW5gIGlzIGZhbHNlLiBUaGF0J3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBUWCBxdWV1ZSBzY2hlZHVsaW5nIHdvcmtzLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBUWCBzY2hlZHVsaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIGFmZmVjdGVkPyBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc28gbGV0J3MgbG9vayBhdCBgaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCwgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLCBgaWVlZTgwMjExX3JldHVybl90eHFgLCBhbmQgYF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBmb2N1cyBzeW1ib2xzIG9yIGNhbGxlcnMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIGBuZXQvbWFjODAyMTEvdHguY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NDYuOTYxODkyMDk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTc1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTc1OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDE3NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjQxNzc6XFx0fVxcbjQxNzg6XFx0RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV4dF90eHEpO1xcbjQxNzk6XFx0XFxuNDE4MDpcXHR2b2lkIF9faWVlZTgwMjExX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG40MTgxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEsXFxuNDE4MjpcXHRcXHRcXHRcXHQgICAgICBib29sIGZvcmNlKVxcbjQxODM6XFx0e1xcbjQxODQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDE4NTpcXHRcXHRzdHJ1Y3QgdHhxX2luZm8gKnR4cWkgPSB0b190eHFfaW5mbyh0eHEpO1xcbjQxODY6XFx0XFx0Ym9vbCBoYXNfcXVldWU7XFxuNDE4NzpcXHRcXG40MTg4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1t0eHEtXFx1MDAzZWFjXSk7XFxuNDE4OTpcXHRcXG40MTkwOlxcdFxcdGhhc19xdWV1ZSA9IGZvcmNlIHx8XFxuNDE5MTpcXHRcXHRcXHQgICAgKCF0ZXN0X2JpdChJRUVFODAyMTFfVFhRX1NUT1AsIFxcdTAwMjZ0eHFpLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG40MTkyOlxcdFxcdFxcdCAgICAgdHhxX2hhc19xdWV1ZSh0eHEpKTtcXG40MTkzOlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0eHFpLVxcdTAwM2VzY2hlZHVsZV9vcmRlcikgXFx1MDAyNlxcdTAwMjZcXG40MTk0OlxcdFxcdCAgICAoaGFzX3F1ZXVlIHx8IGllZWU4MDIxMV90eHFfa2VlcF9hY3RpdmUodHhxaSkpKSB7XFxuNDE5NTpcXHRcXHRcXHQvKiBJZiBhaXJ0aW1lIGFjY291bnRpbmcgaXMgYWN0aXZlLCBhbHdheXMgZW5xdWV1ZSBTVEFzIGF0IHRoZVxcbjQxOTY6XFx0XFx0XFx0ICogaGVhZCBvZiB0aGUgbGlzdCB0byBlbnN1cmUgdGhhdCB0aGV5IG9ubHkgZ2V0IG1vdmVkIHRvIHRoZVxcbjQxOTc6XFx0XFx0XFx0ICogYmFjayBieSB0aGUgYWlydGltZSBEUlIgc2NoZWR1bGVyIG9uY2UgdGhleSBoYXZlIGEgbmVnYXRpdmVcXG40MTk4OlxcdFxcdFxcdCAqIGRlZmljaXQuIEEgc3RhdGlvbiB0aGF0IGFscmVhZHkgaGFzIGEgbmVnYXRpdmUgZGVmaWNpdCB3aWxsXFxuNDE5OTpcXHRcXHRcXHQgKiBnZXQgaW1tZWRpYXRlbHkgbW92ZWQgdG8gdGhlIGJhY2sgb2YgdGhlIGxpc3Qgb24gdGhlIG5leHRcXG40MjAwOlxcdFxcdFxcdCAqIGNhbGwgdG8gaWVlZTgwMjExX25leHRfdHhxKCkuXFxuNDIwMTpcXHRcXHRcXHQgKi9cXG40MjAyOlxcdFxcdFxcdGlmICh0eHFpLVxcdTAwM2V0eHEuc3RhIFxcdTAwMjZcXHUwMDI2IGxvY2FsLVxcdTAwM2VhaXJ0aW1lX2ZsYWdzIFxcdTAwMjZcXHUwMDI2IGhhc19xdWV1ZSBcXHUwMDI2XFx1MDAyNlxcbjQyMDM6XFx0XFx0XFx0ICAgIHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG40MjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0FJUlRJTUVfRkFJUk5FU1MpKVxcbjQyMDU6XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyLFxcbjQyMDY6XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNbdHhxLVxcdTAwM2VhY10pO1xcbjQyMDc6XFx0XFx0XFx0ZWxzZVxcbjQyMDg6XFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuNDIwOTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cS1cXHUwMDNlYWNdKTtcXG40MjEwOlxcdFxcdFxcdGlmIChoYXNfcXVldWUpXFxuNDIxMTpcXHRcXHRcXHRcXHRpZWVlODAyMTFfdHhxX3NldF9hY3RpdmUodHhxaSk7XFxuNDIxMjpcXHRcXHR9XFxuNDIxMzpcXHRcXG40MjE0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW3R4cS1cXHUwMDNlYWNdKTtcXG40MjE1OlxcdH1cXG40MjE2OlxcdEVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfc2NoZWR1bGVfdHhxKTtcXG40MjE3OlxcdFxcbjQyMTg6XFx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXFsX2Rpc2FibGUpO1xcbjQyMTk6XFx0XFxuNDIyMDpcXHRib29sIGllZWU4MDIxMV90eHFfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG40MjIxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKVxcbjQyMjI6XFx0e1xcbjQyMjM6XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuNDIyNDpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG40MjI1OlxcdFxcbjQyMjY6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC1cXHUwMDNlaHcud2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQVFMKSlcXG40MjI3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQyMjg6XFx0XFxuNDIyOTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXFsX2Rpc2FibGUpKVxcbjQyMzA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDIzMTpcXHRcXG40MjMyOlxcdFxcdGlmICghdHhxLVxcdTAwM2VzdGEpXFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2VhcWxfbWNfcGVuZGluZ19haXJ0aW1lKSBcXHUwMDNjXFxuNDIzNDpcXHRcXHRcXHQgICAgICAgbG9jYWwtXFx1MDAzZWFxbF90eHFfbGltaXRfbWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjQ2Ljk2MjE0NDQ2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjAwMDE3NDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBUWCBRdWV1ZSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGluZywgc3BlY2lmaWNhbGx5IHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG5hbWUgcG9wIHVwIGluIHRoZSBjb250ZXh0IG9mIHNvbWUgcmVjZW50IHBlcmZvcm1hbmNlIHR3ZWFrcyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBgdHguY2AgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxlciBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hlbiB0byBwdWxsIHBhY2tldHMgb2ZmIHRoZSBUWCBxdWV1ZSBhbmQgaGFuZCB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggaXMgdG8gb3B0aW1pemUgZm9yIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHNjaGVkdWxpbmcgb3ZlcmhlYWQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MuLi4gaG9wZWZ1bGx5IGl0J3Mgbm90IHRvbyBjb252b2x1dGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgYm90dGxlbmVja3MgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvdWxkIHJlYWxseSBoZWxwIGZpbmUtdHVuZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDM6NTguOTYyMzIyMjAyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cXHR9XFxubmV0L21hYzgwMjExL3V0aWwuYzozMjA6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzIxLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjAzOjU5LjAwOTg2NjQ4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzMwNzYzNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgRG93biBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmRgLiBJJ20gc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91czogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgc291cmNlIGZpbGUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBzb21ld2hlcmUgd2l0aGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0sIGxpa2VseSBpbiB0aGUgY29yZSA4MDIuMTEgY29kZSwgb3IgbWF5YmUgZXZlbiBpbiBhIGRyaXZlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpZiBpdCdzIGRlZXBseSB0aWVkIHRvIGhhcmR3YXJlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEknZCBleHBlY3QgdG8gc2VlIGl0IGluIGEgZmlsZSBsaWtlIGBpZWVlODAyMTFfdHhxLmNgLCBgbWFjODAyMTEuY2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IHVzZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUncyBcImZpbmQgZGVmaW5pdGlvblwiIGZlYXR1cmUgdG8gcGlucG9pbnQgaXQuIEtub3dpbmcgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIHRoZSBmaXJzdCBzdGVwIHRvIHVucGFja2luZyB0aGUgd2hvbGUgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MDEuNzQwNjM0MTU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5OTI1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmM9MzM3NT1zdGF0aWMgdm9pZCBhdGgxMGtfaHR0X3J4X3R4X2ZldGNoX2luZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMzQ4MC1cXHRcXHRpZWVlODAyMTFfcmV0dXJuX3R4cShodywgdHhxLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzozNDgxOlxcdFxcdGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKGh3LCB0eHEtXFx1MDAzZWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTM0ODItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ0NzU9c3RhdGljIGludCBhdGgxMGtfbWFjX3NjaGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGFjKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NDkxLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ0OTI6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ0OTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jPTQ3NTc9c3RhdGljIHZvaWQgYXRoMTBrX21hY19vcF93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYy00NzgyLW91dDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jOjQ3ODM6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jLTQ3ODQtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFyLVxcdTAwM2VxdWV1ZV9sb2NrW2FjXSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jPTE5ODA9dm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDEzLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlY2hhbl9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jOjIwMTQ6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlbWFjODAyMTFfcW51bSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYy0yMDE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYz02Mzg9dm9pZCBtdDc2X3R4cV9zY2hlZHVsZShzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSwgZW51bSBtdDc2X3R4cV9pZCBxaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUwLVxcdFxcdGxlbiA9IG10NzZfdHhxX3NjaGVkdWxlX2xpc3QocGh5LCBxaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzo2NTE6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQocGh5LVxcdTAwM2VodywgcWlkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmMtNjUyLVxcdH0gd2hpbGUgKGxlbiBcXHUwMDNlIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDgyNj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3R4cV9zY2hlZHVsZShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIHU4IGFjLCBib29sICpyZWludm9rZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQ4NjMtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jOjQ4NjQ6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIGFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00ODY1LX1cXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NzgxOT12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNzgyMS0vKiAoZGVwcmVjYXRlZCkgKi9cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjc4MjI6c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTc4MjMte1xcbi0tXFxubmV0L21hYzgwMjExL3V0aWwuYz0zMDU9dm9pZCBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdXRpbC5jLTMxOS1cXHR9XFxubmV0L21hYzgwMjExL3V0aWwuYzozMjA6XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoaHcsIHR4cS1cXHUwMDNlYWMpO1xcbm5ldC9tYWM4MDIxMS91dGlsLmMtMzIxLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlaGFuZGxlX3dha2VfdHhfcXVldWVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjAzLjI4MDU2NTQzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk1MjY0MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEZXByZWNhdGVkIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kYCBpcyBhIGRlcHJlY2F0ZWQgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gUmlnaHQsIGRlcHJlY2F0ZWQgbWVhbnMgd2UgbmVlZCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQncyByZXBsYWNpbmcgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBjdXJyZW50IGNvcmUgZnVuY3Rpb24gY2FsbHMgYXJlIHN1cnJvdW5kaW5nIGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBzZWVtIHRvIGJlOiBgaWVlZTgwMjExX25leHRfdHhxYCwgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLCBhbmQgYGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZWAuIFRoZXNlIGFsbCBsaXZlIGluIGBuZXQvbWFjODAyMTFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGZsb3cuIE5vdyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5CZXlvbmQgdGhlc2UgY29yZSBlbGVtZW50cywgSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3QgY2FsbGVycyBvciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgLiBJdCBsb29rcyByZWxhdGVkLCBsZXQncyB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgZnVuY3Rpb24gYXMgd2VsbC4gS25vd2luZyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9uIHVzZWQgdG8gYmVoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDowNS41NzU4MzIxOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTEzODExMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTQyNzI9c3RhdGljIGJvb2xcXG5uZXQvbWFjODAyMTEvdHguYzo0MjczOmllZWU4MDIxMV90eHFfc2NoZWR1bGVfYWlydGltZV9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggYWMpXFxubmV0L21hYzgwMjExL3R4LmMtNDI3NC17XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MjkxPWJvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzAzLVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzMDQ6XFx0aWYgKCFpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSlcXG5uZXQvbWFjODAyMTEvdHguYy00MzA1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDM0ND12b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDM1MC1cXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTE6XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XFxubmV0L21hYzgwMjExL3R4LmMtNDM1Mi1cXHRpZiAobG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjA3LjEyNzIxOTA4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTMxODM0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFRYIFF1ZXVlIFNjaGVkdWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgdG91Y2hpbmcgc29tZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmsgc3RhY2sgbG9naWMgd2l0aGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGlzIGludm9sdmVkLCBhbG9uZyB3aXRoIHRoZSBleHBvcnRlZCBmdW5jdGlvbiBgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCByaWdodCBhd2F5IEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbXBhY3QuXG5cbkJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAsIGFuZCBgQ09ORklHX01BQzgwMjExX0hXU0lNYCB0byBiZSBlbmFibGVkLCBhbmQgbXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIHRob3NlIGFyZSB0aGUgb25lcyB0byBjb25zaWRlci5cblxuVGhlIHJlYWxseSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgY3J1Y2lhbCBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbXMuIEl0J3MgdG91Y2hpbmcgdGhlIGxvZ2ljIGluIGBpZWVlODAyMTFfbmV4dF90eHFgLCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgLiBUaGUgZmFjdCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIHRoZSBgbmw4MDIxMS92aXJ0dWFsIHdpZmlgIGludGVyZmFjZSBtZWFucyBpdCdzIGFjY2Vzc2libGUuIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBhYm91dCB0cmFja2luZyB0aGUgVFggc2NoZWR1bGluZyByb3VuZHMgYW5kIHRoZSBxdWV1ZSBvcGVuL2Nsb3NlZCBzdGF0ZSAoYHNjaGVkdWxlX29wZW5gKSwgd2hpY2ggZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIHF1ZXVlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGFuZCBwcmV2ZW50cyBsb29wcy4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgZXJyb3JzLlxuXG5UbyBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHJldmlldyB0aGUgcmVxdWlyZWQgY29uZmlnczogYENGRzgwMjExYCwgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gSSdtIGdvaW5nIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBpZWVlODAyMTFfbmV4dF90eHFgLCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAsIGBpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVgLCBhbmQgYGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0YC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy5cblxuQWZ0ZXIgYSBmaW5hbCBzd2VlcCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZGV0YWlscywgaXQgbG9va3MgbGlrZSBJJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gT2theSwgaXQncyB0aW1lIHRvIGZsYWcgdGhpcyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NTMsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjExLjY1OTA1NTk2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTI2MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX25leHRfdHhxXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0XCIsXG4gICAgXCJpZWVlODAyMTFfaGFuZGxlX3dha2VfdHhfcXVldWVcIixcbiAgICBcImllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRYIHF1ZXVlIHNjaGVkdWxpbmcgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIG1hYzgwMjExIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3RhY2sgYnkgZGVjb3VwbGluZyB0aGUgYWN0aXZlIHNjaGVkdWxlIHJvdW5kIGNvdW50ZXIgZnJvbSB0aGUgcXVldWUgb3Blbi9jbG9zZWQgYWlydGltZSBjaGVjayBzdGF0dXMgKHNjaGVkdWxlX29wZW4pLiBtYWM4MDIxMSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzaW11bGF0ZWQgcmFkaW8gKG1hYzgwMjExX2h3c2ltKSBhbmQgdmlydHVhbCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZmZlY3QgVFggcXVldWUgaXRlcmF0aW9uLCBkZXF1ZXVlLCBhbmQgYWlydGltZSBzY2hlZHVsaW5nIGxvb3AgdGVybWluYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9uZXh0X3R4cVwiLFxuICAgIFwiaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydFwiLFxuICAgIFwiaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlXCIsXG4gICAgXCJpZWVlODAyMTFfdHhxX21heV90cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUWCBxdWV1ZSBzY2hlZHVsaW5nIHN0YXRlIHRyYWNraW5nIGluIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBuZXR3b3JraW5nIHN0YWNrIGJ5IGRlY291cGxpbmcgdGhlIGFjdGl2ZSBzY2hlZHVsZSByb3VuZCBjb3VudGVyIGZyb20gdGhlIHF1ZXVlIG9wZW4vY2xvc2VkIGFpcnRpbWUgY2hlY2sgc3RhdHVzIChzY2hlZHVsZV9vcGVuKS4gbWFjODAyMTEgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc2ltdWxhdGVkIHJhZGlvIChtYWM4MDIxMV9od3NpbSkgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IFRYIHF1ZXVlIGl0ZXJhdGlvbiwgZGVxdWV1ZSwgYW5kIGFpcnRpbWUgc2NoZWR1bGluZyBsb29wIHRlcm1pbmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoxMS43MzM1ODgzNTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTkwMTY0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTEuNzM0MDA3NDYzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDg5ODk3NDAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2RkYTVjOTYwNTNiMTI5MjFlYzIyYTkyY2ZmNjU4MmNiY2M0ZTQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxOTowMjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDUzYjBiMDhkMzQ1OTcuLjY1MzExMzQwZGI0MDYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0xNDY4LDYgKzE0NjgsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbiBcdHNwaW5sb2NrX3QgYWN0aXZlX3R4cV9sb2NrW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xuIFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcbitcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XG4gXG4gXHQvKiBzZXJpYWxpemVzIGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSAqL1xuIFx0c3BpbmxvY2tfdCBoYW5kbGVfd2FrZV90eF9xdWV1ZV9sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IGMzMzA5Mjk2MGRmMjYuLmM2NjVjZWQ5YzA1Y2IgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC00MTIyLDcgKzQxMjIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqaWVlZTgwMjExX25leHRfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmICghbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxuK1x0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gIGJlZ2luOlxuQEAgLTQzNDcsMTIgKzQzNDcsMTIgQEAgdm9pZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYylcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcbiBcbi1cdGlmIChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKSkge1xuK1x0bG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxuK1x0XHRpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2sobG9jYWwsIGFjKTtcbitcdGlmIChsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXSkge1xuIFx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcbiBcdFx0aWYgKCFsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXG4gXHRcdFx0bG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XG4tXHR9IGVsc2Uge1xuLVx0XHRsb2NhbC1cdTAwM2VzY2hlZHVsZV9yb3VuZFthY10gPSAwO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoxMS43MzQwMDgyOTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg1NDIxNjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBmaWd1cmluZyBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIExvb2tpbmcgYXQgdGhlIGFmZmVjdGVkIGZpbGVzLCBpdCdzIGhpdHRpbmcgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYCBhbmQgYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBmbGFncyDigJMgYW55dGhpbmcgdG91Y2hpbmcgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNtaXNzaW9uLCBpcyBhbiBhcmVhIHdoZXJlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgY2FuIGx1cmsuXG5cbk5vdywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIE15IGdvLXRvIGFwcHJvYWNoIGlzIGdyZXBwaW5nIGZvciByZWxldmFudCBrZXl3b3JkcyBhbmQsIG9mIGNvdXJzZSwgYSBnb29kIG9sZC1mYXNoaW9uZWQgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBhbnkgcG9pbnRlciBtYW5pcHVsYXRpb24gaW4gdGhvc2UgZmlsZXMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbiBlZHVjYXRlZCBhc3Nlc3NtZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlIHJlcXVpcmUgS01TQU4gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTYuNTg4MjI3Mzg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI5ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hlZHVsZV9yb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTYzPWVudW0gdHhxX2luZm9fZmxhZ3Mge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtOTc3LSAqIEBzY2hlZHVsZV9vcmRlcjogdXNlZCB3aXRoIGllZWU4MDIxMV9sb2NhbC1cXHUwMDNlYWN0aXZlX3R4cXNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo5Nzg6ICogQHNjaGVkdWxlX3JvdW5kOiBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb24gVFhRIHNjaGVkdWxpbmdcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05NzktICogQGZsYWdzOiBUWFEgZmxhZ3MgZnJvbSBcXHUwMDI2ZW51bSB0eHFfaW5mb19mbGFnc1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9OTgyPXN0cnVjdCB0eHFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODYtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6OTg3OlxcdHUxNiBzY2hlZHVsZV9yb3VuZDtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC05ODgtXFx0c3RydWN0IGxpc3RfaGVhZCBzY2hlZHVsZV9vcmRlcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTE0NTc9c3RydWN0IGllZWU4MDIxMV9sb2NhbCB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDY5LVxcdHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3R4cXNbSUVFRTgwMjExX05VTV9BQ1NdO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE0NzA6XFx0dTE2IHNjaGVkdWxlX3JvdW5kW0lFRUU4MDIxMV9OVU1fQUNTXTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNDcxLVxcdGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU107XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MTE1PXN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDE2Ni1cXG5uZXQvbWFjODAyMTEvdHguYzo0MTY3OlxcdGlmICh0eHFpLVxcdTAwM2VzY2hlZHVsZV9yb3VuZCA9PSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKVxcbm5ldC9tYWM4MDIxMS90eC5jLTQxNjgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MTcwLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnR4cWktXFx1MDAzZXNjaGVkdWxlX29yZGVyKTtcXG5uZXQvbWFjODAyMTEvdHguYzo0MTcxOlxcdHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID0gbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXTtcXG5uZXQvbWFjODAyMTEvdHguYy00MTcyLVxcdHJldCA9IFxcdTAwMjZ0eHFpLVxcdTAwM2V0eHE7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00MzQ0PXZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00MzUyLVxcdGlmIChsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10pIHtcXG5uZXQvbWFjODAyMTEvdHguYzo0MzUzOlxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXSlcXG5uZXQvbWFjODAyMTEvdHguYzo0MzU1OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10rKztcXG5uZXQvbWFjODAyMTEvdHguYy00MzU2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MTYuNjM4NTMwMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3NjI5MzI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGllZWU4MDIxMV9sb2NhbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEdpdmVuIHRoYXQgaXQncyBhIGNyaXRpY2FsIHN0cnVjdHVyZSB3aXRoaW4gdGhlIDgwMi4xMSBzdGFjaywgYW5kIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBkcml2ZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb3IgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLCB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBwaGFzZS4gVGhhdCBwb2ludHMgbWUgZGlyZWN0bHkgdG93YXJkIGBpZWVlODAyMTFfYWxsb2NfaHdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGFuZCwgdGhlcmVmb3JlLCBpcyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgdGhlIGhhcmR3YXJlIHN0YXRlIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGVzdGFibGlzaGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgY2hhaW4gYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcmVzb3VyY2UgY29udGVudGlvbiB3aXRoaW4gb3IgYXJvdW5kIHRoYXQgZnVuY3Rpb24uIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uLCBhbmQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgbWlzbWFuYWdlZCBwb2ludGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUgc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4gSWYgSSBkb24ndCBzZWUgYW55dGhpbmcgb2J2aW91cyB0aGVyZSwgSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gc2VlIHdobyBjYWxscyB0aGF0IGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGxpa2VseSByZXNpZGVzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLCBvciBpbiBhIGZ1bmN0aW9uIGl0IGNhbGxzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoyNS40MDE0NjYwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzI5MDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKnN0cnVjdCBpZWVlODAyMTFfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDoyNS40NjAwNDcyOTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzOTQxMDY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEhhcmR3YXJlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBhbGxvY2F0aW9uIGlzc3VlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZXJlIHRoZSBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGJlaW5nIGJyb3VnaHQgb25saW5lLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZWl0aGVyIGBhbGxvY19od2Agb3IgYGllZWU4MDIxMV9hbGxvY19od2AuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gcm91dGluZXMgcmVsYXRlZCB0byB3aXJlbGVzcyBoYXJkd2FyZSBpbiB0aGlzIHN5c3RlbS4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjI3LjI5OTQ1OTg2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5MDA2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tYWluLmM9Nzc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgbWFjODAyMTFfdmh0X2NhcGFfbW9kX21hc2sgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTc5Mi1cXG5uZXQvbWFjODAyMTEvbWFpbi5jOjc5MzpzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sXFxubmV0L21hYzgwMjExL21haW4uYy03OTQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmMtMTA1MC19XFxubmV0L21hYzgwMjExL21haW4uYzoxMDUxOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2FsbG9jX2h3X25tKTtcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEwNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjI3LjM2OTM2NzAyNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI0MTYyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1hYzgwMjExYCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGBsb2NhbGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBtYWM4MDIxMWAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0J3MgdGhlIGNvcmUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHBhcnRpY3VsYXIgd2lyZWxlc3MgZGV2aWNlLiBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9tYWM4MDIxMS9tYWluLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3OTMsIHRoZXJlIHNob3VsZCBiZSBzb21lIHJlbGV2YW50IGNvZGUgYXJvdW5kIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyB0aGF0IGNydWNpYWwgYGxvY2FsYCB2YXJpYWJsZSBjb21lcyBpbnRvIGJlaW5nLi4uIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBkcml2ZXIgZ2V0cyBzZXQgdXAsIHNvIEkgY2FuIHNlZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiBJJ20gYWZ0ZXIgdGhlIGFsbG9jYXRpb24gaXRzZWxmLCB0aGUgcmVsZXZhbnQgYXJndW1lbnRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MjkuMzkzNTMxNDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkzOlxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbixcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMsXFxuIDc5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSlcXG4gNzk2OlxcdHtcXG4gNzk3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsO1xcbiA3OTg6XFx0XFx0aW50IHByaXZfc2l6ZSwgaTtcXG4gNzk5OlxcdFxcdHN0cnVjdCB3aXBoeSAqd2lwaHk7XFxuIDgwMDpcXHRcXHRib29sIGVtdWxhdGVfY2hhbmN0eDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0aWYgKFdBUk5fT04oIW9wcy1cXHUwMDNldHggfHwgIW9wcy1cXHUwMDNlc3RhcnQgfHwgIW9wcy1cXHUwMDNlc3RvcCB8fCAhb3BzLVxcdTAwM2Vjb25maWcgfHxcXG4gODAzOlxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2VhZGRfaW50ZXJmYWNlIHx8ICFvcHMtXFx1MDAzZXJlbW92ZV9pbnRlcmZhY2UgfHxcXG4gODA0OlxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2Vjb25maWd1cmVfZmlsdGVyIHx8ICFvcHMtXFx1MDAzZXdha2VfdHhfcXVldWUpKVxcbiA4MDU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlc3RhX3N0YXRlIFxcdTAwMjZcXHUwMDI2IChvcHMtXFx1MDAzZXN0YV9hZGQgfHwgb3BzLVxcdTAwM2VzdGFfcmVtb3ZlKSkpXFxuIDgwODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0aWYgKFdBUk5fT04oISFvcHMtXFx1MDAzZWxpbmtfaW5mb19jaGFuZ2VkICE9ICEhb3BzLVxcdTAwM2V2aWZfY2ZnX2NoYW5nZWQgfHxcXG4gODExOlxcdFxcdFxcdCAgICAob3BzLVxcdTAwM2VsaW5rX2luZm9fY2hhbmdlZCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWJzc19pbmZvX2NoYW5nZWQpKSlcXG4gODEyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4MTM6XFx0XFxuIDgxNDpcXHRcXHQvKiBjaGVjayBhbGwgb3Igbm8gY2hhbm5lbCBjb250ZXh0IG9wZXJhdGlvbnMgZXhpc3QgKi9cXG4gODE1OlxcdFxcdGlmIChvcHMtXFx1MDAzZWFkZF9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4IFxcdTAwMjZcXHUwMDI2XFxuIDgxNjpcXHRcXHQgICAgb3BzLVxcdTAwM2VyZW1vdmVfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9yZW1vdmVfY2hhbmN0eCBcXHUwMDI2XFx1MDAyNlxcbiA4MTc6XFx0XFx0ICAgIG9wcy1cXHUwMDNlY2hhbmdlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgpIHtcXG4gODE4OlxcdFxcdFxcdGlmIChXQVJOX09OKG9wcy1cXHUwMDNlYXNzaWduX3ZpZl9jaGFuY3R4IHx8XFxuIDgxOTpcXHRcXHRcXHRcXHQgICAgb3BzLVxcdTAwM2V1bmFzc2lnbl92aWZfY2hhbmN0eCkpXFxuIDgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODIxOlxcdFxcdFxcdGVtdWxhdGVfY2hhbmN0eCA9IHRydWU7XFxuIDgyMjpcXHRcXHR9IGVsc2Uge1xcbiA4MjM6XFx0XFx0XFx0aWYgKFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfY2hhbmN0eCA9PSBpZWVlODAyMTFfZW11bGF0ZV9hZGRfY2hhbmN0eCB8fFxcbiA4MjQ6XFx0XFx0XFx0XFx0ICAgIG9wcy1cXHUwMDNlcmVtb3ZlX2NoYW5jdHggPT0gaWVlZTgwMjExX2VtdWxhdGVfcmVtb3ZlX2NoYW5jdHggfHxcXG4gODI1OlxcdFxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZWNoYW5nZV9jaGFuY3R4ID09IGllZWU4MDIxMV9lbXVsYXRlX2NoYW5nZV9jaGFuY3R4KSlcXG4gODI2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4Mjc6XFx0XFx0XFx0aWYgKFdBUk5fT04oIW9wcy1cXHUwMDNlYWRkX2NoYW5jdHggfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MjkuMzkzNjcyOThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMTM5NTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBJRUVFIDgwMi4xMSBzdGFuZGFyZCBhbmQgbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBgaWVlZTgwMjExX2FsbG9jX2h3X25tYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGllZWU4MDIxMV9hbGxvY19od19ubWAgZnVuY3Rpb24uIEkndmUgbGlrZWx5IGVuY291bnRlcmVkIHRoaXMgZnVuY3Rpb24gbmFtZSBiZWZvcmUgaW4gdGhlIGNvbnRleHQgb2YgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgbmV3IGhhcmR3YXJlIHJlcHJlc2VudGF0aW9uIChsaWtlbHkgYSBzdHJ1Y3QgYGllZWU4MDIxMV9od2ApIHdpdGhpbiB0aGUgbmV0d29yayBkcml2ZXIgZm9yIGFuIDgwMi4xMSBkZXZpY2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCByZXNvdXJjZSBhbGxvY2F0aW9uIChtZW1vcnkgZm9yIGludGVybmFsIHN0cnVjdHVyZXMsIHBvdGVudGlhbCBETUEgYnVmZmVycywgZXRjLiksIGFuZCBvdmVyYWxsIGVzdGFibGlzaGluZyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHdpcmVsZXNzIGRyaXZlciBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBJIGFudGljaXBhdGUgaXQgd2lsbCBoYW5kbGUgYSBmZXcga2V5IGFzcGVjdHMuIEZpcnN0IGl0IG11c3QgYWxsb2NhdGUgbWVtb3J5LiBOZXh0IGl0IG11c3QgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSXQgbWlnaHQgYWxzbyBoYXZlIHRvIGRlYWwgd2l0aCByZWdpc3RlcmluZyB0aGUgbmV3IGhhcmR3YXJlIG9iamVjdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSA4MDIuMTEgY29yZSAobGlrZSBtYWM4MDIxMSksIHdoaWNoIGlzIHNvbWV0aGluZyBJJ20gdXNlZCB0byBzZWVpbmcuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIGRldmljZSdzIGNhcGFiaWxpdGllcywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBoYXJkd2FyZSBzdGF0ZSwgYW5kIGhvdyBpdCBoYW5kbGVzIGluaXRpYWwgc2V0dXAgcm91dGluZXMgKGxpa2UgZW5hYmxpbmcgaW50ZXJydXB0cyBvciBjb25maWd1cmluZyBiYXNpYyByZWdpc3RlcnMpLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIGVycm9yIGNvbmRpdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBjcml0aWNhbCB0byBrbm93aW5nIGhvdyBhIG5ldyA4MDIuMTEgZGV2aWNlIGlzIGJyb3VnaHQgb25saW5lIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaG93IGl0J3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjMxLjg5NTA3MDYzOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjg6XFx0XFx0XFx0XFx0ICAgICFvcHMtXFx1MDAzZXJlbW92ZV9jaGFuY3R4IHx8XFxuIDgyOTpcXHRcXHRcXHRcXHQgICAgIW9wcy1cXHUwMDNlY2hhbmdlX2NoYW5jdHggfHxcXG4gODMwOlxcdFxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2Vhc3NpZ25fdmlmX2NoYW5jdHggfHxcXG4gODMxOlxcdFxcdFxcdFxcdCAgICAhb3BzLVxcdTAwM2V1bmFzc2lnbl92aWZfY2hhbmN0eCkpXFxuIDgzMjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODMzOlxcdFxcdFxcdGVtdWxhdGVfY2hhbmN0eCA9IGZhbHNlO1xcbiA4MzQ6XFx0XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHQvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLlxcbiA4Mzc6XFx0XFx0ICogV2UgdXNlIHRoZSB3aXBoeSBwcml2IGRhdGEgZm9yIGJvdGggb3VyIGllZWU4MDIxMV9sb2NhbCBhbmQgZm9yXFxuIDgzODpcXHRcXHQgKiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhXFxuIDgzOTpcXHRcXHQgKlxcbiA4NDA6XFx0XFx0ICogSW4gbWVtb3J5IGl0J2xsIGJlIGxpa2UgdGhpczpcXG4gODQxOlxcdFxcdCAqXFxuIDg0MjpcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcXG4gODQzOlxcdFxcdCAqIHwgc3RydWN0IHdpcGh5XFx0ICAgIHxcXG4gODQ0OlxcdFxcdCAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbiA4NDU6XFx0XFx0ICogfCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICB8XFxuIDg0NjpcXHRcXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcXG4gODQ3OlxcdFxcdCAqIHwgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhICAgfFxcbiA4NDg6XFx0XFx0ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuIDg0OTpcXHRcXHQgKlxcbiA4NTA6XFx0XFx0ICovXFxuIDg1MTpcXHRcXHRwcml2X3NpemUgPSBBTElHTihzaXplb2YoKmxvY2FsKSwgTkVUREVWX0FMSUdOKSArIHByaXZfZGF0YV9sZW47XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdHdpcGh5ID0gd2lwaHlfbmV3X25tKFxcdTAwMjZtYWM4MDIxMV9jb25maWdfb3BzLCBwcml2X3NpemUsIHJlcXVlc3RlZF9uYW1lKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKCF3aXBoeSlcXG4gODU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHR3aXBoeS1cXHUwMDNlbWdtdF9zdHlwZXMgPSBpZWVlODAyMTFfZGVmYXVsdF9tZ210X3N0eXBlcztcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0d2lwaHktXFx1MDAzZXByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDtcXG4gODYxOlxcdFxcbiA4NjI6XFx0XFx0d2lwaHktXFx1MDAzZWZsYWdzIHw9IFdJUEhZX0ZMQUdfTkVUTlNfT0sgfFxcbiA4NjM6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR180QUREUl9BUCB8XFxuIDg2NDpcXHRcXHRcXHRcXHRXSVBIWV9GTEFHXzRBRERSX1NUQVRJT04gfFxcbiA4NjU6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR19SRVBPUlRTX09CU1MgfFxcbiA4NjY6XFx0XFx0XFx0XFx0V0lQSFlfRkxBR19PRkZDSEFOX1RYO1xcbiA4Njc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjMxLjg5NTIzNjIxOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg4MjAyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYHdpcGh5X25ld19ubWAgZm9yIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byB3aXJlbGVzcyBQSFlzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgd2lwaHlfbmV3X25tYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRoaXMgZnVuY3Rpb24sIGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0eXBpY2FsIGtlcm5lbCBuYW1pbmcgY29udmVudGlvbnMsIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIG5ldyB3aXJlbGVzcyBQSFksIGFuZCB0aGUgXCJubVwiIGxpa2VseSByZWZlcnMgdG8gdGhlIFwibmV0ZGV2IG1hbmFnZXJcIiBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCBpdCwgd2hpY2ggaXMgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGtub3cuXG5cbk15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgYWxsb2NhdGVzIG1lbW9yeSDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZXNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIHVzZSBvZiBcImt6YWxsb2NcIiBvciBcImt6YWxsb2Nfbm9kZVwiIGNvbmZpcm1zIHRoaXM7IHRoZSBcImtcIiBwcmVmaXggaW1wbGllcyBrZXJuZWwgbWVtb3J5LCB3aGlsZSBgemFsbG9jYCBzdWdnZXN0cyB0aGUgbWVtb3J5IHdpbGwgYmUgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBlbnN1cmUgYSBjbGVhbiBzbGF0ZS4gVGhhdCdzIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSBiZWhhdmlvciBmb3IgdGhpcyBzb3J0IG9mIGFsbG9jYXRpb24uXG5cbk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgKmhvdyogaXQncyBkb2luZyB0aGlzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3MgbG9vayB1cCBgd2lwaHlfbmV3X25tYCBpbiBgbmV0L3dpcmVsZXNzL2NvcmUuY2AuIEkgZXhwZWN0IGl0IHRvIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24sIHByb2JhYmx5IGRvaW5nIGEgYGt6YWxsb2NgIG9uIGEgYHN0cnVjdCB3aXBoeWAgKG9yIHNpbWlsYXIpIGFuZCB0aGVuIGluaXRpYWxpemluZyBzb21lIGZpZWxkcy4gSG93ZXZlciwgSSB3YW50IHRvIHZlcmlmeSBhbnkgc3VidGxlIGRldGFpbHMsIGVycm9yIGNoZWNraW5nLCBvciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgaXQgbWlnaHQgYmUgdXNpbmcgdG8gZW5zdXJlIG9wdGltYWwgcmVzb3VyY2UgdXRpbGl6YXRpb24gYW5kIHByZXZlbnQgcG90ZW50aWFsIGlzc3Vlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBzaXplIGNhbGN1bGF0aW9ucywgTlVNQSBub2RlIGhhbmRsaW5nIChpZiBga3phbGxvY19ub2RlYCBpcyBpbnZvbHZlZCksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MzUuMjgzNDQxNzU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU1NjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3aXBoeV9uZXdfbm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmM9NTE4PXN0YXRpYyB2b2lkIGNmZzgwMjExX3dpcGh5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NDgtXFxubmV0L3dpcmVsZXNzL2NvcmUuYzo1NDk6c3RydWN0IHdpcGh5ICp3aXBoeV9uZXdfbm0oY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzLCBpbnQgc2l6ZW9mX3ByaXYsXFxubmV0L3dpcmVsZXNzL2NvcmUuYy01NTAtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXFxuLS1cXG5uZXQvd2lyZWxlc3MvY29yZS5jLTcwMi19XFxubmV0L3dpcmVsZXNzL2NvcmUuYzo3MDM6RVhQT1JUX1NZTUJPTCh3aXBoeV9uZXdfbm0pO1xcbm5ldC93aXJlbGVzcy9jb3JlLmMtNzA0LVxcbi0tXFxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYz0xMz1pbnQgdF93aXBoeV9pbml0KHN0cnVjdCBrdW5pdF9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmN0eClcXG4tLVxcbm5ldC93aXJlbGVzcy90ZXN0cy91dGlsLmMtMjItXFxubmV0L3dpcmVsZXNzL3Rlc3RzL3V0aWwuYzoyMzpcXHR3aXBoeSA9IHdpcGh5X25ld19ubShvcHMsIHNpemVvZigqcHJpdiksIFxcXCJrdW5pdFxcXCIpO1xcbm5ldC93aXJlbGVzcy90ZXN0cy91dGlsLmMtMjQtXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHdpcGh5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6MzUuMzM1MDAyMzk2WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjMwMjg0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFdpcmVsZXNzIENvcmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIHdpcmVsZXNzIGlzc3VlLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIG15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSBjb3JlIGhhbmRsaW5nLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvd2lyZWxlc3MvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZSA1NDkuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBmdW5kYW1lbnRhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgc3VzcGVjdGVkIG1hbGZ1bmN0aW9uIGJ5IGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDEuMjk4MDMzNjhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ5LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ5OlxcdHN0cnVjdCB3aXBoeSAqd2lwaHlfbmV3X25tKGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcywgaW50IHNpemVvZl9wcml2LFxcbiA1NTA6XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUpXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRzdGF0aWMgYXRvbWljX3Qgd2lwaHlfY291bnRlciA9IEFUT01JQ19JTklUKDApO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XFxuIDU1NTpcXHRcXHRpbnQgYWxsb2Nfc2l6ZTtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZWFkZF9rZXkgXFx1MDAyNlxcdTAwMjYgKCFvcHMtXFx1MDAzZWRlbF9rZXkgfHwgIW9wcy1cXHUwMDNlc2V0X2RlZmF1bHRfa2V5KSk7XFxuIDU1ODpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYXV0aCBcXHUwMDI2XFx1MDAyNiAoIW9wcy1cXHUwMDNlYXNzb2MgfHwgIW9wcy1cXHUwMDNlZGVhdXRoIHx8ICFvcHMtXFx1MDAzZWRpc2Fzc29jKSk7XFxuIDU1OTpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlY29ubmVjdCBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkaXNjb25uZWN0KTtcXG4gNTYwOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2Vqb2luX2lic3MgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlbGVhdmVfaWJzcyk7XFxuIDU2MTpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYWRkX3ZpcnR1YWxfaW50ZiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkZWxfdmlydHVhbF9pbnRmKTtcXG4gNTYyOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfc3RhdGlvbiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VkZWxfc3RhdGlvbik7XFxuIDU2MzpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlYWRkX21wYXRoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZWRlbF9tcGF0aCk7XFxuIDU2NDpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlam9pbl9tZXNoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZWxlYXZlX21lc2gpO1xcbiA1NjU6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZXN0YXJ0X3AycF9kZXZpY2UgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlc3RvcF9wMnBfZGV2aWNlKTtcXG4gNTY2OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VzdGFydF9hcCBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VzdG9wX2FwKTtcXG4gNTY3OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2Vqb2luX29jYiBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VsZWF2ZV9vY2IpO1xcbiA1Njg6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZXN1c3BlbmQgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlcmVzdW1lKTtcXG4gNTY5OlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VzY2hlZF9zY2FuX3N0YXJ0IFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZXNjaGVkX3NjYW5fc3RvcCk7XFxuIDU3MDpcXHRcXHRXQVJOX09OKG9wcy1cXHUwMDNlcmVtYWluX29uX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKTtcXG4gNTcxOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2V0ZGxzX2NoYW5uZWxfc3dpdGNoIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZXRkbHNfY2FuY2VsX2NoYW5uZWxfc3dpdGNoKTtcXG4gNTcyOlxcdFxcdFdBUk5fT04ob3BzLVxcdTAwM2VhZGRfdHhfdHMgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlZGVsX3R4X3RzKTtcXG4gNTczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDo0MS4yOTgyMDQ4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYyODAyMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHdpcGh5X25ld19ubWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBjb250ZXh0IGlzIGNsZWFybHkgYSBkaXZlIGludG8gdGhlIGB3aXBoeV9uZXdfbm1gIGZ1bmN0aW9uLCBwcm9iYWJseSB3aXRoaW4gdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrIG9yIGEgcmVsYXRlZCBuZXR3b3JrIG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgaW1wbGljaXQgYXNzdW1wdGlvbiBpcyB0aGF0IEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljcyDigJMgd2hhdCBhIFdpLUZpIFBIWSBpcywgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBtYWM4MDIxMSBmcmFtZXdvcmssIGFuZCB0aGUgcm9sZSBvZiBuZXRsaW5rIG1lc3NhZ2VzLiBTbywgdGhlIHRoaW5raW5nIHByb2Nlc3MgaGVyZSBpc24ndCBhYm91dCAqd2hhdCogdGhlIGZ1bmN0aW9uIGRvZXMgaW4gYW4gYWJzdHJhY3Qgc2Vuc2UsIGJ1dCByYXRoZXIgYSBmb2N1c2VkIGF0dGVtcHQgdG8gdW5kZXJzdGFuZCB0aGUgKmRldGFpbHMqIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdtIGxpa2VseSBsb29raW5nIHRvIGdyYXNwIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggTmV0d29ya01hbmFnZXIgb3Igc2ltaWxhciBuZXR3b3JrIG1hbmFnZW1lbnQgZGFlbW9ucyAoaGVuY2UgdGhlIGBfbm1gIHN1ZmZpeCkuIEFtIEkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBidWcsIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYXR0ZW1wdGluZyB0byBpbXBsZW1lbnQgYSBuZXcgZmVhdHVyZSB0aGF0IG5lZWRzIHRvIGhvb2sgaW4gaGVyZSwgb3IganVzdCBkb2luZyBhIGNvZGUgcmV2aWV3PyBQcm9iYWJseSB0aGUgbGF0dGVyLCB0aGUgd29yZGluZyBpbXBsaWVzIHRoYXQgYSBjb21wbGV0ZSB2aWV3IG9mIHRoZSBmdW5jdGlvbiBpcyByZXF1aXJlZC4gVGhpcyBraW5kIG9mIGRlZXAgZGl2ZSBpcyBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgbmV0d29yayBlbmdpbmVlci4gS25vd2luZyB0aGUgbnVhbmNlcyBvZiB3aXBoeSBjcmVhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBkcml2ZXIgZGV2ZWxvcG1lbnQgdG8gdHJvdWJsZXNob290aW5nIGNvbXBsZXggY29ubmVjdGl2aXR5IGlzc3Vlcy4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvLCB3ZWxsLCByZWFkIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDQuMjYxMDA5NjM0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NDpcXHRcXHRhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSArIHNpemVvZl9wcml2O1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHRyZGV2ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNTc3OlxcdFxcdGlmICghcmRldilcXG4gNTc4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyZGV2LVxcdTAwM2VvcHMgPSBvcHM7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJkZXYtXFx1MDAzZXdpcGh5X2lkeCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZ3aXBoeV9jb3VudGVyKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKHVubGlrZWx5KHJkZXYtXFx1MDAzZXdpcGh5X2lkeCBcXHUwMDNjIDApKSB7XFxuIDU4NTpcXHRcXHRcXHQvKiB1Z2gsIHdyYXBwZWQhICovXFxuIDU4NjpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZ3aXBoeV9jb3VudGVyKTtcXG4gNTg3OlxcdFxcdFxcdGtmcmVlKHJkZXYpO1xcbiA1ODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDU4OTpcXHRcXHR9XFxuIDU5MDpcXHRcXG4gNTkxOlxcdFxcdC8qIGF0b21pY19pbmNfcmV0dXJuIG1ha2VzIGl0IHN0YXJ0IGF0IDEsIG1ha2UgaXQgc3RhcnQgYXQgMCAqL1xcbiA1OTI6XFx0XFx0cmRldi1cXHUwMDNld2lwaHlfaWR4LS07XFxuIDU5MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NDQuMjYxMjA3MTU0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxODg1NDMzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBUWCBRdWV1ZSBTY2hlZHVsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgYG1hYzgwMjExYCBpbnRlcm5hbHMsIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgVFggcXVldWUgc2NoZWR1bGluZyBsb2dpYy4gSSBzZWUgdGhhdCBgcmRldmAgYW5kIGBzaXplb2ZfcHJpdmAsIHdoaWNoIGluY2x1ZGVzIHRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAsIGFyZSBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgaW1wbGllcyB0aGF0IGBsb2NhbC1cdTAwM2VzY2hlZHVsZV9vcGVuW2FjXWAgaXMgaW5pdGlhbGx5IHNldCB0byBgZmFsc2VgIOKAkyB0aGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFzIGl0J3MgYSBrbm93biBzdGF0ZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgZGlmZiBpdHNlbGYuICBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byBgaWVlZTgwMjExX2kuaGAgd2hlcmUgYGJvb2wgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAuIFRoaXMgaW5kaWNhdGVzIGEgbmV3IHN0YXRlIHZhcmlhYmxlIGlzIGJlaW5nIGludHJvZHVjZWQgdG8gY29udHJvbCB0aGUgVFggcXVldWUgc2NoZWR1bGluZy5cblxuVGhlbiwgbG9va2luZyBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMiBpbiBgaWVlZTgwMjExX25leHRfdHhxYCwgSSBub3RpY2UgdGhlIGNoYW5nZSBmcm9tIGNoZWNraW5nIGAhbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdYCB0byBgIWxvY2FsLVx1MDAzZXNjaGVkdWxlX29wZW5bYWNdYC4gVGhpcyBpcyB0aGUga2V5IOKAkyB0aGlzIG5ldyBgc2NoZWR1bGVfb3BlbmAgYm9vbGVhbiBpcyBub3cgZGV0ZXJtaW5pbmcgaWYgd2UgZW50ZXIgdGhlIFRYIHF1ZXVlIHNlbGVjdGlvbiBsb29wLiAgSXQgc2VlbXMgdG8gYmUgYSBtb3JlIGRpcmVjdCBhbmQgZXhwbGljaXQgd2F5IG9mIG1hbmFnaW5nIHRoZSBcIm9wZW5cIiBzdGF0ZSBvZiB0aGUgc2NoZWR1bGVyIGZvciBhIGdpdmVuIEFDIChBY2Nlc3MgQ2F0ZWdvcnkpLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGAgZnVuY3Rpb24gKGFyb3VuZCBsaW5lIDQzNDcpLCB0aGUgY29kZSBub3cgZGlyZWN0bHkgYXNzaWducyB0aGUgcmVzdWx0IG9mIHRoZSBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrYCBmdW5jdGlvbiB0byBgbG9jYWwtXHUwMDNlc2NoZWR1bGVfb3BlblthY11gLiBJZiB0aGF0IGNoZWNrIHJldHVybnMgdHJ1ZSwgdGhlIHNjaGVkdWxlciBpcyBkZWVtZWQgXCJvcGVuLFwiIHRoZSByb3VuZCBjb3VudGVyIChgbG9jYWwtXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdYCkgaXMgaW5jcmVtZW50ZWQsIGFuZCBpZiB0aGUgY291bnRlciBpcyBhYm91dCB0byBvdmVyZmxvdyBpdCdzIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1cGRhdGluZyBgc2NoZWR1bGVfcm91bmRgIGFmdGVyIHRoZSBhaXJ0aW1lIGNoZWNrLCBzbyB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSBzdHJlYW1saW5lcyB0aGUgbG9naWMuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIHJlcGxhY2VzIHRoZSByZWxpYW5jZSBvbiBgc2NoZWR1bGVfcm91bmRgIGZvciBkZXRlcm1pbmluZyBpZiBhIFRYIHF1ZXVlIGlzIHNjaGVkdWxhYmxlLCB3aXRoIHRoZSBleHBsaWNpdCB1c2Ugb2YgYSBib29sZWFuIGZsYWcsIGBzY2hlZHVsZV9vcGVuYC4gVGhlIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2FpcnRpbWVfY2hlY2tgIGZ1bmN0aW9uIHByb2JhYmx5IGRldGVybWluZXMgaWYgdGhlIGFpcnRpbWUgY29uZGl0aW9uIGZvciBzY2hlZHVsaW5nIFRYIHBhY2tldHMgaGFzIGJlZW4gbWV0LiBUaGlzIGlzIGEgY2xlYW5lciBhbmQgbW9yZSByZWFkYWJsZSBhcHByb2FjaC4gVGhlIGV4cGxpY2l0IGBzY2hlZHVsZV9vcGVuYCB2YXJpYWJsZSBtYWtlcyB0aGUgaW50ZW50IG11Y2ggY2xlYXJlciwgd2hpY2ggc2hvdWxkIGxlYWQgdG8gZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UsIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NTAuNDQ5NzUzMTkxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTE1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTE1OlxcdHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVlODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbjQxMTY6XFx0e1xcbjQxMTc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDExODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqcmV0ID0gTlVMTDtcXG40MTE5OlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IE5VTEwsICpoZWFkID0gTlVMTDtcXG40MTIwOlxcdFxcdGJvb2wgZm91bmRfZWxpZ2libGVfdHhxID0gZmFsc2U7XFxuNDEyMTpcXHRcXHRib29sIGFxbF9jaGVjaztcXG40MTIyOlxcdFxcbjQxMjM6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDEyNDpcXHRcXG40MTI1OlxcdFxcdGlmICghbG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKVxcbjQxMjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDEyNzpcXHRcXG40MTI4OlxcdCBiZWdpbjpcXG40MTI5OlxcdFxcdHR4cWkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxc1thY10sXFxuNDEzMDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdHhxX2luZm8sXFxuNDEzMTpcXHRcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV9vcmRlcik7XFxuNDEzMjpcXHRcXHRpZiAoIXR4cWkpXFxuNDEzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG40MTM0OlxcdFxcbjQxMzU6XFx0XFx0aWYgKHR4cWkgPT0gaGVhZCkge1xcbjQxMzY6XFx0XFx0XFx0aWYgKCFmb3VuZF9lbGlnaWJsZV90eHEpXFxuNDEzNzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40MTM4OlxcdFxcdFxcdGVsc2VcXG40MTM5OlxcdFxcdFxcdFxcdGZvdW5kX2VsaWdpYmxlX3R4cSA9IGZhbHNlO1xcbjQxNDA6XFx0XFx0fVxcbjQxNDE6XFx0XFxuNDE0MjpcXHRcXHRpZiAoIWhlYWQpXFxuNDE0MzpcXHRcXHRcXHRoZWFkID0gdHhxaTtcXG40MTQ0OlxcdFxcbjQxNDU6XFx0XFx0YXFsX2NoZWNrID0gaWVlZTgwMjExX3R4cV9haXJ0aW1lX2NoZWNrKGh3LCBcXHUwMDI2dHhxaS1cXHUwMDNldHhxKTtcXG40MTQ2OlxcdFxcdGlmIChhcWxfY2hlY2spXFxuNDE0NzpcXHRcXHRcXHRmb3VuZF9lbGlnaWJsZV90eHEgPSB0cnVlO1xcbjQxNDg6XFx0XFxuNDE0OTpcXHRcXHRpZiAodHhxaS1cXHUwMDNldHhxLnN0YSkge1xcbjQxNTA6XFx0XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS1cXHUwMDNldHhxLnN0YSxcXG40MTUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuNDE1MjpcXHRcXG40MTUzOlxcdFxcdFxcdGlmIChpZWVlODAyMTFfc3RhX2RlZmljaXQoc3RhLCB0eHFpLVxcdTAwM2V0eHEuYWMpIFxcdTAwM2MgMCkge1xcbjQxNTQ6XFx0XFx0XFx0XFx0c3RhLVxcdTAwM2VhaXJ0aW1lW3R4cWktXFx1MDAzZXR4cS5hY10uZGVmaWNpdCArPVxcbjQxNTU6XFx0XFx0XFx0XFx0XFx0c3RhLVxcdTAwM2VhaXJ0aW1lX3dlaWdodDtcXG40MTU2OlxcdFxcbjQxNTc6XFx0XFx0XFx0XFx0YXFsX2NoZWNrID0gZmFsc2U7XFxuNDE1ODpcXHRcXHRcXHR9XFxuNDE1OTpcXHRcXHR9XFxuNDE2MDpcXHRcXG40MTYxOlxcdFxcdGlmICghYXFsX2NoZWNrKSB7XFxuNDE2MjpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIsXFxuNDE2MzpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFzW3R4cWktXFx1MDAzZXR4cS5hY10pO1xcbjQxNjQ6XFx0XFx0XFx0Z290byBiZWdpbjtcXG40MTY1OlxcdFxcdH1cXG40MTY2OlxcdFxcbjQxNjc6XFx0XFx0aWYgKHR4cWktXFx1MDAzZXNjaGVkdWxlX3JvdW5kID09IGxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXFxuNDE2ODpcXHRcXHRcXHRnb3RvIG91dDtcXG40MTY5OlxcdFxcbjQxNzA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dHhxaS1cXHUwMDNlc2NoZWR1bGVfb3JkZXIpO1xcbjQxNzE6XFx0XFx0dHhxaS1cXHUwMDNlc2NoZWR1bGVfcm91bmQgPSBsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdO1xcbjQxNzI6XFx0XFx0cmV0ID0gXFx1MDAyNnR4cWktXFx1MDAzZXR4cTtcXG40MTczOlxcdFxcbjQxNzQ6XFx0b3V0OlxcbjQxNzU6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY3RpdmVfdHhxX2xvY2tbYWNdKTtcXG40MTc2OlxcdFxcdHJldHVybiByZXQ7XFxuNDE3NzpcXHR9XFxuNDE3ODpcXHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9uZXh0X3R4cSk7XFxuNDE3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDQ6NTAuNDUwMTMwNDMxWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDg2ODQwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBUWCBRdWV1ZSBTY2hlZHVsZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggcGFja2V0IHNjaGVkdWxpbmcgaW4gdGhlIDgwMi4xMSBzdGFjay4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0cmFuc21pc3Npb24gcXVldWUgc2NoZWR1bGVyIGtpY2tzIGludG8gZ2Vhci4gV2hhdCBhcmUgdGhlIHByZWNvbmRpdGlvbnM/IFdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbj8gV2hhdCdzIGl0cyBvdmVyYWxsIHJvbGUgaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGVidWcgYSB0cmFuc21pc3Npb24gaXNzdWUgSSd2ZSBiZWVuIHNlZWluZy4gSSdtIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBob3cgdGhpbmdzIGFyZSBzdXBwb3NlZCB0byB3b3JrIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmxvdyBpcyBkZXZpYXRpbmcuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkb2luZyB3aXRoIGVhY2ggb2YgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA0OjUyLjM5ODgxNzgzOVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM0MDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MzQxOlxcdH1cXG40MzQyOlxcdEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNtaXQpO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHR2b2lkIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKVxcbjQzNDU6XFx0e1xcbjQzNDY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuNDM0NzpcXHRcXG40MzQ4OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWFjdGl2ZV90eHFfbG9ja1thY10pO1xcbjQzNDk6XFx0XFxuNDM1MDpcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfb3BlblthY10gPVxcbjQzNTE6XFx0XFx0XFx0aWVlZTgwMjExX3R4cV9zY2hlZHVsZV9haXJ0aW1lX2NoZWNrKGxvY2FsLCBhYyk7XFxuNDM1MjpcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXNjaGVkdWxlX29wZW5bYWNdKSB7XFxuNDM1MzpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuNDM1NDpcXHRcXHRcXHRpZiAoIWxvY2FsLVxcdTAwM2VzY2hlZHVsZV9yb3VuZFthY10pXFxuNDM1NTpcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc2NoZWR1bGVfcm91bmRbYWNdKys7XFxuNDM1NjpcXHRcXHR9XFxuNDM1NzpcXHRcXG40MzU4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWN0aXZlX3R4cV9sb2NrW2FjXSk7XFxuNDM1OTpcXHR9XFxuNDM2MDpcXHRFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpO1xcbjQzNjE6XFx0XFxuNDM2MjpcXHR2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40MzYzOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40MzY0OlxcdFxcdFxcdFxcdFxcdCAgdTMyIGluZm9fZmxhZ3MsXFxuNDM2NTpcXHRcXHRcXHRcXHRcXHQgIHUzMiBjdHJsX2ZsYWdzKVxcbjQzNjY6XFx0e1xcbjQzNjc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xcbjQzNjg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuNDM2OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuNDM3MDpcXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG40MzcxOlxcdFxcdHN0cnVjdCBza19idWZmICpuZXh0O1xcbjQzNzI6XFx0XFx0Ym9vbCBncm91cF9hZGRyZXNzZWQ7XFxuNDM3MzpcXHRcXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNDM3NDpcXHRcXG40Mzc1OlxcdFxcdGlmICh1bmxpa2VseSghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8IHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgRVRIX0hMRU4pKSB7XFxuNDM3NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG40Mzc3OlxcdFxcdFxcdHJldHVybjtcXG40Mzc4OlxcdFxcdH1cXG40Mzc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowNDo1Mi4zOTkwNTU3MDlaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODMyNDY3NDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTY2hlZHVsaW5nIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHdhcyBjb25mbGF0aW5nIGEg4oCcbm90IG9wZW7igJ0gc3RhdGUgd2l0aCBhIHNjaGVkdWxpbmcgcm91bmQgY291bnRlciBvZiB6ZXJvIHdpdGhpbiB0aGUgYGxvY2FsLVx1MDAzZXNjaGVkdWxlX3JvdW5kW2FjXWAgdmFyaWFibGUuIFRoaXMgbGVkIHRvIHByb2JsZW1hdGljIGNvbXBhcmlzb25zICggYDAgPT0gMGAgb3IgYCEwYCApIGFuZCBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMsIGVzcGVjaWFsbHkgZHVyaW5nIHRoZSBpbml0aWFsIHN0YXRlIHdoZW4gYHR4cWktXHUwMDNlc2NoZWR1bGVfcm91bmRgIG1pZ2h0IGFsc28gYmUgemVyby4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGNsZWFubHkgYnkgaW50cm9kdWNpbmcgYSBuZXcgYm9vbGVhbiBhcnJheSwgYHNjaGVkdWxlX29wZW5bSUVFRTgwMjExX05VTV9BQ1NdYCwgd2l0aGluIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFRoaXMgY2xlYW5seSBzZXBhcmF0ZXMgdGhlIOKAnG9wZW7igJ0gc3RhdHVzIGZyb20gdGhlIGFjdHVhbCByb3VuZCBjb3VudGVyIHZhbHVlLCB3aGljaCBpcyBhIG11Y2ggY2xlYW5lciBhcHByb2FjaC5cblxuTm93LCBsZXQncyBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBpbml0aWFsIGNvbmNlcm5zIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IHNpbmNlIHRoaXMgaW52b2x2ZXMgYSBuZXcgdmFyaWFibGUuIEhlcmUncyBteSBicmVha2Rvd246XG5cbjEuICAqKkluaXRpYWxpemF0aW9uOioqIFRoZSBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKClgLCB3aGljaCBpcyBnb29kLiBUaGlzIG1lYW5zIGBzY2hlZHVsZV9vcGVuYCBpcyBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgKHRvIGZhbHNlKS4gVGhpcyBpbW1lZGlhdGVseSBlbGltaW5hdGVzIHRoZSBtb3N0IGNvbW1vbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cbjIuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogVGhlIGdvb2QgbmV3cyBoZXJlIGlzIHRoYXQgYHNjaGVkdWxlX29wZW5gIGFuZCBgc2NoZWR1bGVfcm91bmRgIGFyZSAqbm90KiBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggb3BlcmF0ZXMgZW50aXJlbHkgd2l0aGluIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBzY2hlZHVsaW5nIGxvZ2ljLCB3aGljaCByZWR1Y2VzIHRoZSBhdHRhY2sgc3VyZmFjZS5cbjMuICAqKkRhdGEgSGFuZGxpbmc6KiogQ3J1Y2lhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMsIHRvdWNoIGFueSBib3VuZHMgY2hlY2tzLCBtb2RpZnkgY29weSBzaXplcywgb3IgY2hhbmdlIHN0cnVjdHVyZSBwYWRkaW5nIGluIGEgd2F5IHRoYXQgd291bGQgYmUgdmlzaWJsZSB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmljdGx5IGludGVybmFsIHNjaGVkdWxpbmcgZml4LlxuNC4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogSSdtIGFsc28gZW5zdXJpbmcgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgY291bGQgZGVwZW5kIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgb2YgdGhlIG5ldyB2YXJpYWJsZS4gVGhlIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgdmlhIGBremFsbG9jKClgIGFuZCBhbnkgbGF0ZXIgd3JpdGVzIG9jY3VyIGluIGBpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0YCwgd2hpY2ggc2VlbXMgc2FmZS5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGFuYWx5c2lzIG9yIHNpbWlsYXIgdG9vbHMuIEl0J3MgYSB3ZWxsLXNjb3BlZCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgZml4IGZvciBhIHRyaWNreSBzY2hlZHVsaW5nIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjY4LCJPdXRwdXRUb2tlbnMiOjI3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA1OjAwLjcyMzczMTk3M1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG1hYzgwMjExIFRYIHF1ZXVlIHNjaGVkdWxpbmcgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBib29sZWFuIGFycmF5IGBzY2hlZHVsZV9vcGVuW0lFRUU4MDIxMV9OVU1fQUNTXWAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIHRvIGRlY291cGxlIHRoZSBzY2hlZHVsZSBvcGVuL2Nsb3NlZCBzdGF0ZSBmcm9tIHRoZSBgc2NoZWR1bGVfcm91bmRgIGNvdW50ZXIuXFxuXFxuMS4gTWVtb3J5IGFsbG9jYXRpb246IGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGR1cmluZyB3aXBoeSBpbml0aWFsaXphdGlvbiAoYHdpcGh5X25ld19ubSgpYCksIGVuc3VyaW5nIGFsbCBuZXcgYW5kIGV4aXN0aW5nIGZpZWxkcyAoaW5jbHVkaW5nIGBzY2hlZHVsZV9vcGVuYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQuXFxuMi4gVXNlci1zcGFjZSBleHBvc3VyZTogTmVpdGhlciBgc2NoZWR1bGVfb3BlbmAgbm9yIGBzY2hlZHVsZV9yb3VuZGAgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2U7IHRoZXkgYXJlIGludGVybmFsIFRYIHF1ZXVlIHNjaGVkdWxlciBzdGF0ZXMuXFxuMy4gQ29udHJvbCBmbG93OiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBxdWV1ZSB0cmF2ZXJzYWwgYW5kIHNjaGVkdWxpbmcgbG9naWMgKGBpZWVlODAyMTFfbmV4dF90eHFgIGFuZCBgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydGApIHdpdGhvdXQgbW9kaWZ5aW5nIGRhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIHBhY2tldCBwYXJzaW5nLCBvciBtZW1vcnkgY29weWluZy5cXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtYWM4MDIxMSBUWCBxdWV1ZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiBhcnJheSBgc2NoZWR1bGVfb3BlbltJRUVFODAyMTFfTlVNX0FDU11gIHRvIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCB0byBkZWNvdXBsZSB0aGUgc2NoZWR1bGUgb3Blbi9jbG9zZWQgc3RhdGUgZnJvbSB0aGUgYHNjaGVkdWxlX3JvdW5kYCBjb3VudGVyLlxcblxcbjEuIE1lbW9yeSBhbGxvY2F0aW9uOiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBkdXJpbmcgd2lwaHkgaW5pdGlhbGl6YXRpb24gKGB3aXBoeV9uZXdfbm0oKWApLCBlbnN1cmluZyBhbGwgbmV3IGFuZCBleGlzdGluZyBmaWVsZHMgKGluY2x1ZGluZyBgc2NoZWR1bGVfb3BlbmApIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbjIuIFVzZXItc3BhY2UgZXhwb3N1cmU6IE5laXRoZXIgYHNjaGVkdWxlX29wZW5gIG5vciBgc2NoZWR1bGVfcm91bmRgIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlOyB0aGV5IGFyZSBpbnRlcm5hbCBUWCBxdWV1ZSBzY2hlZHVsZXIgc3RhdGVzLlxcbjMuIENvbnRyb2wgZmxvdzogVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgcXVldWUgdHJhdmVyc2FsIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIChgaWVlZTgwMjExX25leHRfdHhxYCBhbmQgYGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnRgKSB3aXRob3V0IG1vZGlmeWluZyBkYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBwYWNrZXQgcGFyc2luZywgb3IgbWVtb3J5IGNvcHlpbmcuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9kx6x[1] Phase: Succeeded StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 19:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 19:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2] Phase: Succeeded StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 19:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 19:05:11 +0000 UTC FinishedAt: 2026-09-08 19:05:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow9kx6x/series-workflow9kx6x-convert-artifact-1467921910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 19:05:21 +0000 UTC FinishedAt: 2026-09-08 19:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 19:05:21 +0000 UTC FinishedAt: 2026-09-08 19:21:27 +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:*8098266b-e552-48ba-8963-84f83e40c0cf,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-workflow9kx6x/series-workflow9kx6x-convert-artifact-1467921910/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": "8aad2533-ddac-46c0-b016-187f5671bce0", "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-workflow9kx6x/series-workflow9kx6x-build-action-2330251532/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 19:05:21 +0000 UTC FinishedAt: 2026-09-08 19:21:17 +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:*8098266b-e552-48ba-8963-84f83e40c0cf,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-workflow9kx6x/series-workflow9kx6x-convert-artifact-1467921910/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": "8aad2533-ddac-46c0-b016-187f5671bce0", "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-workflow9kx6x/series-workflow9kx6x-build-action-2330251532/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 19:21:27 +0000 UTC FinishedAt: 2026-09-08 19:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 19:21:27 +0000 UTC FinishedAt: 2026-09-08 19:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 19:21:27 +0000 UTC FinishedAt: 2026-09-08 19:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 19:21:27 +0000 UTC FinishedAt: 2026-09-08 19:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow9kx6x/series-workflow9kx6x-convert-artifact-362903433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 19:21:37 +0000 UTC FinishedAt: 2026-09-08 19:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 19:21:37 +0000 UTC FinishedAt: 2026-09-08 19:23:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8aad2533-ddac-46c0-b016-187f5671bce0,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-workflow9kx6x/series-workflow9kx6x-build-action-2330251532/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-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 19:23:25 +0000 UTC FinishedAt: 2026-09-08 19:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 19:23:25 +0000 UTC FinishedAt: 2026-09-08 19:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 19:23:25 +0000 UTC FinishedAt: 2026-09-08 19:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 19:23:25 +0000 UTC FinishedAt: 2026-09-08 19:42:51 +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:*8098266b-e552-48ba-8963-84f83e40c0cf,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-workflow9kx6x/series-workflow9kx6x-convert-artifact-362903433/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": "cd8bd300-62a8-457c-be0e-0cba1ab564da", "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-workflow9kx6x/series-workflow9kx6x-build-action-1802402149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 19:23:25 +0000 UTC FinishedAt: 2026-09-08 19:42:40 +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:*8098266b-e552-48ba-8963-84f83e40c0cf,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-workflow9kx6x/series-workflow9kx6x-convert-artifact-362903433/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": "cd8bd300-62a8-457c-be0e-0cba1ab564da", "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-workflow9kx6x/series-workflow9kx6x-build-action-1802402149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 19:42:51 +0000 UTC FinishedAt: 2026-09-08 19:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 19:42:51 +0000 UTC FinishedAt: 2026-09-08 19:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 19:42:51 +0000 UTC FinishedAt: 2026-09-08 19:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 19:42:51 +0000 UTC FinishedAt: 2026-09-08 19:44:31 +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:*cd8bd300-62a8-457c-be0e-0cba1ab564da,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-workflow9kx6x/series-workflow9kx6x-build-action-1802402149/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-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 19:44:46 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 19:44:46 +0000 UTC FinishedAt: 2026-09-08 19:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 19:44:46 +0000 UTC FinishedAt: 2026-09-08 19:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 19:44:47 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"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:*8aad2533-ddac-46c0-b016-187f5671bce0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd8bd300-62a8-457c-be0e-0cba1ab564da,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-workflow9kx6x/series-workflow9kx6x-build-action-2330251532/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-workflow9kx6x/series-workflow9kx6x-build-action-1802402149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 19:44:47 +0000 UTC FinishedAt: 2026-09-08 19:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 19:44:47 +0000 UTC FinishedAt: 2026-09-08 19:44:54 +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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"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-workflow9kx6x/series-workflow9kx6x-convert-artifact-514372062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 19:44:47 +0000 UTC FinishedAt: 2026-09-08 19:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 19:44:59 +0000 UTC FinishedAt: 2026-09-08 22:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kx6x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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":["ieee80211_next_txq","ieee80211_txq_schedule_start","ieee80211_handle_wake_tx_queue","ieee80211_txq_may_transmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"e66fb3ff-701b-4e41-9bd2-53537b4b61af","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 19:44:59 +0000 UTC FinishedAt: 2026-09-08 22:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8aad2533-ddac-46c0-b016-187f5671bce0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd8bd300-62a8-457c-be0e-0cba1ab564da,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-workflow9kx6x/series-workflow9kx6x-build-action-2330251532/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-workflow9kx6x/series-workflow9kx6x-build-action-1802402149/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-workflow9kx6x/series-workflow9kx6x-convert-artifact-514372062/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,}