Name: series-workflowp5b68 Phase: Succeeded StartedAt: 2026-08-01 07:16:11 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[0] Phase: Succeeded StartedAt: 2026-08-01 07:16:11 +0000 UTC FinishedAt: 2026-08-01 07:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 07:16:11 +0000 UTC FinishedAt: 2026-08-01 07:38:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NETFILTER", "IP_SET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NET", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETPORTNET", "IP_SET_LIST_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NETFILTER", "IP_SET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NET", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETPORTNET", "IP_SET_LIST_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT" ], "series_id": "5e169718-4c75-4bec-a028-4858d1af2cb7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_set_create", "ip_set_destroy", "ip_set_flush", "ip_set_uadd", "ip_set_udel", "ip_set_utest", "ip_set_destroy_set_work", "ip_set_init_comment", "ip_set_comment_free", "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_kadt", "hash_netnet4_kadt", "hash_netport4_kadt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwX3NldF9kZXN0cm95JiMzNDssCiAgICAmIzM0O2lwX3NldF9mbHVzaCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWRlbCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdXRlc3QmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2thZHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXG5pbmRleCBiOTgzMzE1NzJhZDI5Li5jNDY4NjRjYzY2MjM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXG5AQCAtMjQ0LDggJiM0MzsyNDQsOCBAQCBleHRlcm4gdm9pZCBpcF9zZXRfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBpcF9zZXRfdHlwZSAqc2V0X3R5cGUpO1xuIFxuIC8qIEEgZ2VuZXJpYyBJUCBzZXQgKi9cbiBzdHJ1Y3QgaXBfc2V0IHtcbi1cdC8qIEZvciBjYWxsX2NydSBpbiBkZXN0cm95ICovXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4gXHQvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovXG4gXHRjaGFyIG5hbWVbSVBTRVRfTUFYTkFNRUxFTl07XG4gXHQvKiBMb2NrIHByb3RlY3RpbmcgdGhlIHNldCBkYXRhICovXG5AQCAtMjczLDcgJiM0MzsyNzMsNyBAQCBzdHJ1Y3QgaXBfc2V0IHtcbiBcdC8qIE51bWJlciBvZiBlbGVtZW50cyAodnMgdGltZW91dCkgKi9cbiBcdHUzMiBlbGVtZW50cztcbiBcdC8qIFNpemUgb2YgdGhlIGR5bmFtaWMgZXh0ZW5zaW9ucyAodnMgdGltZW91dCkgKi9cbi1cdHNpemVfdCBleHRfc2l6ZTtcbiYjNDM7XHRhdG9taWM2NF90IGV4dF9zaXplO1xuIFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cbiBcdHNpemVfdCBkc2l6ZTtcbiBcdC8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtNzcsNyAmIzQzOzc3LDcgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0XHRtdHlwZV9leHRfY2xlYW51cChzZXQpO1xuIFx0Yml0bWFwX3plcm8obWFwLVx1MDAzZW1lbWJlcnMsIG1hcC1cdTAwM2VlbGVtZW50cyk7XG4gXHRzZXQtXHUwMDNlZWxlbWVudHMgPSAwO1xuLVx0c2V0LVx1MDAzZWV4dF9zaXplID0gMDtcbiYjNDM7XHRhdG9taWM2NF9zZXQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplLCAwKTtcbiB9XG4gXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXG5AQCAtOTMsNyAmIzQzOzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5pbmRleCA2Y2ZhZDE1MmQ3ZDFiLi41NDM4NTFhOTIzZDBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuIHN0YXRpYyBMSVNUX0hFQUQoaXBfc2V0X3R5cGVfbGlzdCk7XHRcdC8qIGFsbCByZWdpc3RlcmVkIHNldCB0eXBlcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgoaXBfc2V0X3R5cGVfbXV0ZXgpO1x0XHQvKiBwcm90ZWN0cyBpcF9zZXRfdHlwZV9saXN0ICovXG4gc3RhdGljIERFRklORV9SV0xPQ0soaXBfc2V0X3JlZl9sb2NrKTtcdFx0LyogcHJvdGVjdHMgdGhlIHNldCByZWZzICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXBzZXRfZGVzdHJveV93cTtcbiBcbiBzdHJ1Y3QgaXBfc2V0X25ldCB7XG4gXHRzdHJ1Y3QgaXBfc2V0ICogX19yY3UgKmlwX3NldF9saXN0O1x0LyogYWxsIGluZGl2aWR1YWwgc2V0cyAqL1xuQEAgLTM1MCw3ICYjNDM7MzUxLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIFxuIFx0aWYgKHVubGlrZWx5KGMpKSB7XG4tXHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMTtcbiYjNDM7XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gXHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIFx0fVxuQEAgLTM2Miw3ICYjNDM7MzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbiBcdHN0cnNjcHkoYy1cdTAwM2VzdHIsIGV4dC1cdTAwM2Vjb21tZW50LCBsZW4gJiM0MzsgMSk7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgJiM0Mzs9IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxO1xuJiM0MztcdGF0b21pYzY0X2FkZChzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIGMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbkBAIC0zOTIsNyAmIzQzOzM5Myw3IEBAIGlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXG4gXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVx1MDAzZWMsIDEpO1xuIFx0aWYgKHVubGlrZWx5KCFjKSlcbiBcdFx0cmV0dXJuO1xuLVx0c2V0LVx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxO1xuJiM0MztcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIFx0a2ZyZWVfcmN1KGMsIHJjdSk7XG4gfVxuQEAgLTExNzgsMjIgJiM0MzsxMTc5LDI2IEBAIGlwX3NldF9zZXRuYW1lX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4gXHRcdFx0XHQgICAgLmxlbiA9IElQU0VUX01BWE5BTUVMRU4gLSAxIH0sXG4gfTtcbiBcbi0vKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LCBpdCBpcyBzcGxpdFxuLSAqIGludG8gdHdvIHN0YWdlczpcbi0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvclxuLSAqIC0gRGVzdHJveSB0aGUgc2V0IGl0c2VsZiB2aWEgY2FsbF9yY3UoKVxuLSAqL1xuLVxuIHN0YXRpYyB2b2lkXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4mIzQzO2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4tXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTtcbi1cbiBcdHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWRlc3Ryb3koc2V0KTtcbiBcdG1vZHVsZV9wdXQoc2V0LVx1MDAzZXR5cGUtXHUwMDNlbWUpO1xuIFx0a2ZyZWUoc2V0KTtcbiB9XG4gXG4mIzQzOy8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsXG4mIzQzOyAqIGRlc3RydWN0aW9uIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgdmlhIHdvcmsgcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwX3NldCAqc2V0ID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfc2V0LCByd29yayk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfYW5kX2ZyZWVfc2V0KHNldCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBfZGVzdHJveV9hbGxfc2V0cyhzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdClcbiB7XG5AQCAtMTI4Myw3ICYjNDM7MTI4OCw4IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHQvKiBNdXN0IHdhaXQgZm9yIGZsdXNoIHRvIGJlIHJlYWxseSBmaW5pc2hlZCAgKi9cbiBcdFx0XHRyY3VfYmFycmllcigpO1xuIFx0XHR9XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTtcbiYjNDM7XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2cy1cdTAwM2Vyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXHUwMDI2cy1cdTAwM2Vyd29yayk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBvdXQ6XG5AQCAtMjQyMSwxOCAmIzQzOzI0MjcsMjMgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF9zZXRfbmV0X29wcyA9IHtcbiBzdGF0aWMgaW50IF9faW5pdFxuIGlwX3NldF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlwc2V0X2Rlc3Ryb3lfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtpcHNldF9kZXN0cm95X3dxXCYjMzQ7LCAwKTtcbiYjNDM7XHRpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2lwX3NldDogY2Fubm90IHJlZ2lzdGVyIHBlcm5ldF9zdWJzeXMuXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3dxO1xuIFx0fVxuIFxuIFx0cmV0ID0gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0aWYgKHJldCAhPSAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciB3aXRoIG5mbmV0bGluay5cXG5cJiMzNDspO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfd3E7XG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KFx1MDAyNnNvX3NldCk7XG5AQCAtMjQ0MCwxMCAmIzQzOzI0NTEsMTMgQEAgaXBfc2V0X2luaXQodm9pZClcbiBcdFx0cHJfZXJyKFwmIzM0O1NPX1NFVCByZWdpc3RyeSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcbiBcdFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3dxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO291dF93cTpcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXRcbkBAIC0yNDUzLDkgJiM0MzsyNDY3LDcgQEAgaXBfc2V0X2Zpbmkodm9pZClcbiBcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcbi1cdC8qIFdhaXQgZm9yIGNhbGxfcmN1KCkgaW4gZGVzdHJveSAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcbiBcdHByX2RlYnVnKFwmIzM0O3RoZXNlIGFyZSB0aGUgZmFtb3VzIGxhc3Qgd29yZHNcXG5cJiMzNDspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC05OSw5ICYjNDM7OTksMTUgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzO3N0cnVjdCBuZXRfcHJlZml4IHtcbiYjNDM7XHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4mIzQzO1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHU4IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XG4gfTtcbiBcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cbkBAIC0xMjcsMTEgJiM0MzsxMzMsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcbiAjZWxzZVxuICNkZWZpbmUgX19DSURSKGNpZHIsIGkpXHRcdChjaWRyKVxuICNlbmRpZlxuLVxuLS8qIGNpZHIgJiM0MzsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cbi0jZGVmaW5lIE5DSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpICYjNDM7IDEpXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG4tXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG5AQCAtMTQxLDIxICYjNDM7MTQyLDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXHRfX0NJRFIoY2lkciwgaSlcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spXHRcXFxuLVx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxuLVxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDBcbi0vKiBjaWRyIGZyb20gMCB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICYjNDM7IDEgKi9cbi0jZGVmaW5lIE5MRU5cdFx0XHQoSE9TVF9NQVNLICYjNDM7IDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqL1xuLSNkZWZpbmUgTkxFTlx0XHRcdEhPU1RfTUFTS1xuLSNkZWZpbmUgQ0lEUl9QT1MoYylcdFx0KChjKSAtIDIpXG4tI2VuZGlmXG4mIzQzOyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcdFx0XHRcdFxcXG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1x0XHRcXFxuJiM0MztcdERDSURSX1BVVCgoX19uKS1cdTAwM2VsZW4gPyAoX19uKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spO1xcXG4mIzQzO30pXG4gXG4tI2Vsc2Vcbi0jZGVmaW5lIE5MRU5cdFx0XHQwXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuIFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXHRcXFxuQEAgLTIwNCwxMiAmIzQzOzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG4gI3VuZGVmIG10eXBlX2FkZF9jaWRyXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4mIzQzOyN1bmRlZiBtdHlwZV9kZWxfY2lkcl9hbGxcbiAjdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZVxuICN1bmRlZiBtdHlwZV9mbHVzaFxuICN1bmRlZiBtdHlwZV9kZXN0cm95XG4gI3VuZGVmIG10eXBlX3NhbWVfc2V0XG4gI3VuZGVmIG10eXBlX2thZHRcbiAjdW5kZWYgbXR5cGVfdWFkdFxuJiM0MzsjdW5kZWYgbXR5cGVfYnVja2V0X3NpemVcbiYjNDM7I3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxuIFxuICN1bmRlZiBtdHlwZV9hZGRcbiAjdW5kZWYgbXR5cGVfZGVsXG5AQCAtMjQ5LDEyICYjNDM7MjQzLDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxuICNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbiAjZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4mIzQzOyNkZWZpbmUgbXR5cGVfZGVsX2NpZHJfYWxsXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbClcbiAjZGVmaW5lIG10eXBlX2FoYXNoX21lbXNpemVcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcbiAjZGVmaW5lIG10eXBlX2ZsdXNoXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZmx1c2gpXG4gI2RlZmluZSBtdHlwZV9kZXN0cm95XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVzdHJveSlcbiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfc2FtZV9zZXQpXG4gI2RlZmluZSBtdHlwZV9rYWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfa2FkdClcbiAjZGVmaW5lIG10eXBlX3VhZHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KVxuJiM0MzsjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxuJiM0MzsjZGVmaW5lIG10eXBlX2hhc2hfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2hhc2hfc2l6ZSlcbiBcbiAjZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbiAjZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbkBAIC0yOTIsNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xuIHN0cnVjdCBodHlwZSB7XG4gXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovXG4gXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1x0LyogZ2Mgd29ya3F1ZXVlICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXG4gXHR1MzIgaW5pdHZhbDtcdFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cbkBAIC0zMDIsOSAmIzQzOzMwMCw2IEBAIHN0cnVjdCBodHlwZSB7XG4gI2lmIGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9ORVRNQVNLKSB8fCBkZWZpbmVkKElQX1NFVF9IQVNIX1dJVEhfQklUTUFTSylcbiBcdHU4IG5ldG1hc2s7XHRcdC8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi9cbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrO1x0Lyogc3RvcmVzIGJpdG1hc2sgKi9cbi0jZW5kaWZcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqL1xuICNlbmRpZlxuIFx0LyogQmVjYXVzZSAmIzM5O25leHQmIzM5OyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzXG4gXHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LlxuQEAgLTMyNiw1NSAmIzQzOzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciAmIzQzOyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdGludCBpLCBqO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbi1cdGZvciAoaSA9IDAsIGogPSAtMTsgaSBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dJiM0MzsmIzQzOztcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChqICE9IC0xKSB7XG4tXHRcdGZvciAoOyBpIFx1MDAzZSBqOyBpLS0pXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XG4mIzQzO1x0bGVuJiM0MzsmIzQzOztcbiYjNDM7XHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXRtcCkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSA9PSBmb3VuZCkge1xuJiM0MztcdFx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbiYjNDM7XHRcdFx0dG1wLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4mIzQzO1x0aWYgKGZvdW5kID09IC0xKSB7XG4mIzQzO1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbbl0sIHRtcCk7XG4mIzQzO1x0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0dTggaSwgaiwgbGVuID0gMDtcbiYjNDM7XHRpbnQgZm91bmQ7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkxFTjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dICE9IGNpZHIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dIFx1MDAzZSAwKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0XHRmb3IgKGogPSBpOyBqIFx1MDAzYyBuZXRfZW5kIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkcltuXTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2pdLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaiAmIzQzOyAxXS5jaWRyW25dO1xuLVx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IDA7XG4mIzQzO1x0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cdTAwM2VybmV0c1tuXSk7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4mIzQzO1x0XHRcdGZvdW5kID0gaTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvdW5kID09IC0xKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4mIzQzO1x0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRsZW4tLTtcbiYjNDM7XHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXRtcClcbiYjNDM7XHRcdC8qIExlYXZlIGEgaG9sZSAqL1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttdHlwZV9kZWxfY2lkcl9hbGwoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRpbnQgaztcbiYjNDM7XG4mIzQzO1x0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgayksIGspO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBtZW1vcnkgc2l6ZSBvZiB0aGUgc2V0IGRhdGEgKi9cbiBzdGF0aWMgc2l6ZV90XG4gbXR5cGVfYWhhc2hfbWVtc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBodGFibGUgKnQpXG5AQCAtNDAyLDYgJiM0Mzs0NTAsOSBAQCBzdGF0aWMgdm9pZFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzOyNlbmRpZlxuIFx0c3RydWN0IGh0YWJsZSAqdDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIHIsIGk7XG5AQCAtNDI1LDcgJiM0Mzs0NzYsMTkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHR9XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0bWVtc2V0KGgtXHUwMDNlbmV0cywgMCwgc2l6ZW9mKGgtXHUwMDNlbmV0cykpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuJiM0MztcdFx0dG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIXRtcCkge1xuJiM0MztcdFx0XHR1OCBqO1xuJiM0MztcbiYjNDM7XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRcdG5ldHMtXHUwMDNlbmV0c1tqXS5jb3VudCA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tpXSwgdG1wKTtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuICNlbmRpZlxuIH1cbiBcbkBAIC00MzMsNiAmIzQzOzQ5Niw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBzdGF0aWMgdm9pZFxuIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIHtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIGk7XG4gXG5AQCAtNDQ2LDYgJiM0Mzs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXG4gXHRcdGtmcmVlKG4pO1xuIFx0fVxuIFxuJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4mIzQzO1x0aWYgKGV4dF9kZXN0cm95KVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzW2ldKSk7XG4mIzQzOyNlbmRpZlxuIFx0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiBcdGlwX3NldF9mcmVlKHQpO1xuIH1cbkBAIC00OTMsOSAmIzQzOzU2NCw2IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbiBcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xuIFx0dTMyIGksIGosIGQ7XG4gXHRzaXplX3QgZHNpemUgPSBzZXQtXHUwMDNlZHNpemU7XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0dTggaztcbi0jZW5kaWZcbiBcdHU4IHBvcywgaHRhYmxlX2JpdHMgPSB0LVx1MDAzZWh0YWJsZV9iaXRzO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbkBAIC01MTYsMTIgJiM0Mzs1ODQsNyBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZXhwaXJlZCAldS8ldVxcblwmIzM0OywgaSwgaik7XG4gXHRcdFx0Y2xlYXJfYml0KGosIG4tXHUwMDNldXNlZCk7XG4gXHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4tI2VuZGlmXG4mIzQzO1x0XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdGQmIzQzOyYjNDM7O1xuQEAgLTk0NywxMiAmIzQzOzEwMTAsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0XHRqID0gMDtcbiBcdFx0ZGF0YSA9IGFoYXNoX2RhdGEobiwgaiwgc2V0LVx1MDAzZWRzaXplKTtcbiBcdFx0aWYgKCFkZWxldGVkKSB7XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4tXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuLSNlbmRpZlxuJiM0MztcdFx0XHRtdHlwZV9kZWxfY2lkcl9hbGwoc2V0LCBoLCBkYXRhKTtcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbiBcdFx0fVxuQEAgLTk5Niw3ICYjNDM7MTA1NCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuJiM0MztcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4gb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG5AQCAtMTEwNywxMSAmIzQzOzExNjUsNyBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0aWYgKGkgJiM0MzsgMSA9PSBwb3MpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbiBcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuLVx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbi0jZW5kaWZcbiYjNDM7XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGQpO1xuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuQEAgLTExOTMsMjggJiM0MzsxMjQ3LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2V0YWJsZSk7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czA7XG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4mIzQzO1x0aW50IHJldCwgaSwgaiwgaztcbiAjZWxzZVxuLVx0aW50IHJldCwgaSwgaiA9IDA7XG4mIzQzO1x0aW50IHJldCwgaSwgajtcbiAjZW5kaWZcbiBcdHUzMiBrZXksIG11bHRpID0gMDtcbiBcdHU4IHBvcztcbiBcbiBcdHByX2RlYnVnKFwmIzM0O3Rlc3QgYnkgbmV0c1xcblwmIzM0Oyk7XG4tXHRmb3IgKDsgaiBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2pdLmNpZHJbMF0gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1swXSk7XG4mIzQzOyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuJiM0MztcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4gXHRcdG10eXBlX2RhdGFfcmVzZXRfZWxlbShkLCBcdTAwMjZvcmlnKTtcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSksIGZhbHNlKTtcbi1cdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0gXHUwMDI2XHUwMDI2ICFtdWx0aTtcbi1cdFx0ICAgICBrJiM0MzsmIzQzOykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbiYjNDM7XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cdTAwM2VuZXRzW2pdLmNpZHIsIGZhbHNlKTtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5ldHMxLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBrJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuICNlbHNlXG4tXHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2pdLmNpZHJbMF0pKTtcbiYjNDM7XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cdTAwM2VuZXRzW2pdLmNpZHIpO1xuICNlbmRpZlxuIFx0XHRrZXkgPSBIS0VZKGQsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTtcbkBAIC0xMjI5LDcgJiM0MzsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdFx0Z290byB1bmxvY2s7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcbiBcdFx0XHQvKiBObyBtYXRjaCwgcmVzZXQgbXVsdGlwbGUgbWF0Y2ggZmxhZyAqL1xuIFx0XHRcdG11bHRpID0gMDtcbkBAIC0xMjM5LDcgJiM0MzsxMzAyLDEwIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbiBcdFx0fVxuICNlbmRpZlxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEyOTQsNiAmIzQzOzEzNjAsMjQgQEAgbXR5cGVfdGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgbXR5cGVfaGFzaF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBodGFibGUgKnQ7XG4mIzQzO1x0dTggaHRhYmxlX2JpdHM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR0ID0gcmN1X2RlcmVmZXJlbmNlKGgtXHUwMDNldGFibGUpO1xuJiM0MztcdGh0YWJsZV9iaXRzID0gdC1cdTAwM2VodGFibGVfYml0cztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoLVx1MDAzZWJ1Y2tldHNpemU7XG4mIzQzO31cbiYjNDM7XG4gLyogUmVwbHkgYSBIRUFERVIgcmVxdWVzdDogZmlsbCBvdXQgdGhlIGhlYWRlciBwYXJ0IG9mIHRoZSBzZXQgKi9cbiBzdGF0aWMgaW50XG4gbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMTMwNCwyMSAmIzQzOzEzODgsMjAgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzaXplX3QgbWVtc2l6ZTtcbiBcdHUzMiBlbGVtZW50cyA9IDA7XG4gXHRzaXplX3QgZXh0X3NpemUgPSAwO1xuLVx0dTggaHRhYmxlX2JpdHM7XG4gXG4gXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4gXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNldGFibGUpO1xuIFx0bXR5cGVfZXh0X3NpemUoc2V0LCBcdTAwMjZlbGVtZW50cywgXHUwMDI2ZXh0X3NpemUpO1xuLVx0bWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgJiM0MzsgZXh0X3NpemUgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuLVx0aHRhYmxlX2JpdHMgPSB0LVx1MDAzZWh0YWJsZV9iaXRzO1xuJiM0MztcdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICYjNDM7IGV4dF9zaXplICYjNDM7IGF0b21pYzY0X3JlYWQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLVx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0hBU0hTSVpFLFxuLVx0XHRcdCAgaHRvbmwoamhhc2hfc2l6ZShodGFibGVfYml0cykpKSB8fFxuLVx0ICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXHUwMDNlbWF4ZWxlbSkpKVxuJiM0MztcbiYjNDM7XHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKVxuJiM0MztcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1x0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXHUwMDNlbWF4ZWxlbSkpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLXG4gXHQvKiBpZiBuZXRtYXNrIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIEhPU1RfTUFTSyB3ZSBrbm93IHRoYXQgdGhlIHVzZXIgc3VwcGxpZWQgbmV0bWFza1xuQEAgLTEzNDIsOCAmIzQzOzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNFVF9DUkVBVEVfRkxBR19CVUNLRVRTSVpFKSB7XG4tXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBoLVx1MDAzZWJ1Y2tldHNpemUpIHx8XG4tXHRcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVx1MDAzZWluaXR2YWwpKSlcbiYjNDM7XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtXHUwMDNlaW5pdHZhbCkpKVxuIFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0fVxuIFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC1cdTAwM2VyZWYpKSB8fFxuQEAgLTE1MDQsNiAmIzQzOzE1ODgsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRpbnQgcmV0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDtcbiBcdHU4IG5ldG1hc2sgPSBzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCA/IDMyIDogMTI4O1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2sgPSBvbmVzbWFzaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuICNlbmRpZlxuIFx0c2l6ZV90IGhzaXplO1xuIFx0c3RydWN0IGh0eXBlICpoO1xuQEAgLTE2MDQsMjEgJiM0MzsxNjkxLDI1IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcdGlmIChoc2l6ZSA9PSAwKVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0ID0gaXBfc2V0X2FsbG9jKGhzaXplKTtcbi1cdGlmICghdCkge1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0LVx1MDAzZWhyZWdpb24pXG4mIzQzO1x0XHRnb3RvIGZyZWVfdDtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7XG4mIzQzO1x0XHRpZiAoIW5ldHMpIHtcbiYjNDM7XHRcdFx0d2hpbGUgKGkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xuIFx0fVxuJiM0MzsjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSYjNDM7JiM0MzspXG5AQCAtMTY1MCw2ICYjNDM7MTc0MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXRhYmxlLCB0KTtcbiBcdHNldC1cdTAwM2VkYXRhID0gaDtcbiYjNDM7XG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuICNlbmRpZlxuQEAgLTE2NzgsMTAgJiM0MzsxNzcwLDIwIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiAjZW5kaWZcbiBcdH1cbiBcdHByX2RlYnVnKFwmIzM0O2NyZWF0ZSAlcyBoYXNoc2l6ZSAldSAoJXUpIG1heGVsZW0gJXU6ICVwKCVwKVxcblwmIzM0Oyxcbi1cdFx0IHNldC1cdTAwM2VuYW1lLCBqaGFzaF9zaXplKHQtXHUwMDNlaHRhYmxlX2JpdHMpLFxuJiM0MztcdFx0IHNldC1cdTAwM2VuYW1lLCBtdHlwZV9oYXNoX3NpemUoaCksXG4gXHRcdCB0LVx1MDAzZWh0YWJsZV9iaXRzLCBoLVx1MDAzZW1heGVsZW0sIHNldC1cdTAwM2VkYXRhLCB0KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztmcmVlX2hyZWdpb246XG4mIzQzO1x0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiYjNDM7I2VuZGlmXG4mIzQzO2ZyZWVfdDpcbiYjNDM7XHRpcF9zZXRfZnJlZSh0KTtcbiYjNDM7ZnJlZV9oOlxuJiM0MztcdGtmcmVlKGgpO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbmluZGV4IDJkNjY1MmQ0MzE5OWEuLjE5NTg1M2EyNWIwNjAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMS4uMDkyZjNjOTI4MWI4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIGhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuaW5kZXggMzBhNjU1ZTVjNGZkYy4uYjQ0Yjk1Zjc2NmI3YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5AQCAtMzgyLDcgJiM0MzszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbmluZGV4IDhmYmU2NDljOWRkM2QuLmY3YzhhMWNjMzBmYzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5AQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjMuLjVkZTRiNTExZGU3NjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGhhc2hfbmV0cG9ydDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMzUzLDcgJiM0MzszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IGJmNGY5MWI3OGUxZGMuLjYyOTE1MzJiZTdhNWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0xNTcsOCAmIzQzOzE1NywxMCBAQCBoYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbkBAIC00NTIsOCAmIzQzOzQ1NCwxMCBAQCBoYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCAxY2VmODRmMTVlOGM3Li5jYTNlZjk0NzllODM4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTQyMSw3ICYjNDM7NDIxLDcgQEAgbGlzdF9zZXRfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KVxuIFx0XHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuJiM0MztcdGF0b21pYzY0X3NldChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwX3NldF9kZXN0cm95JiMzNDssCiAgICAmIzM0O2lwX3NldF9mbHVzaCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWRlbCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdXRlc3QmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2thZHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKaW5kZXggYjk4MzMxNTcyYWQyOS4uYzQ2ODY0Y2M2NjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKQEAgLTI0NCw4ICYjNDM7MjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTsKIAogLyogQSBnZW5lcmljIElQIHNldCAqLwogc3RydWN0IGlwX3NldCB7Ci0JLyogRm9yIGNhbGxfY3J1IGluIGRlc3Ryb3kgKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwkvKiBmb3Igc2V0IGRlc3RydWN0aW9uICovCiYjNDM7CXN0cnVjdCByY3Vfd29yayByd29yazsKIAkvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovCiAJY2hhciBuYW1lW0lQU0VUX01BWE5BTUVMRU5dOwogCS8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi8KQEAgLTI3Myw3ICYjNDM7MjczLDcgQEAgc3RydWN0IGlwX3NldCB7CiAJLyogTnVtYmVyIG9mIGVsZW1lbnRzICh2cyB0aW1lb3V0KSAqLwogCXUzMiBlbGVtZW50czsKIAkvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovCi0Jc2l6ZV90IGV4dF9zaXplOwomIzQzOwlhdG9taWM2NF90IGV4dF9zaXplOwogCS8qIEVsZW1lbnQgZGF0YSBzaXplICovCiAJc2l6ZV90IGRzaXplOwogCS8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCmluZGV4IGJiOWI1YmVkMTBlMTkuLjIyNmZkZjE3YjY4MzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKQEAgLTc3LDcgJiM0Mzs3Nyw3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAkJbXR5cGVfZXh0X2NsZWFudXAoc2V0KTsKIAliaXRtYXBfemVybyhtYXAtJmd0O21lbWJlcnMsIG1hcC0mZ3Q7ZWxlbWVudHMpOwogCXNldC0mZ3Q7ZWxlbWVudHMgPSAwOwotCXNldC0mZ3Q7ZXh0X3NpemUgPSAwOwomIzQzOwlhdG9taWM2NF9zZXQoJmFtcDtzZXQtJmd0O2V4dF9zaXplLCAwKTsKIH0KIAogLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovCkBAIC05Myw3ICYjNDM7OTMsNyBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC0mZ3Q7ZGF0YTsKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0ZWQ7Ci0Jc2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LSZndDtkc2l6ZSkgJiM0Mzsgc2V0LSZndDtleHRfc2l6ZTsKJiM0MzsJc2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LSZndDtkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZCgmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCiAJbmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpOwogCWlmICghbmVzdGVkKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IDZjZmFkMTUyZDdkMWIuLjU0Mzg1MWE5MjNkMGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiBzdGF0aWMgTElTVF9IRUFEKGlwX3NldF90eXBlX2xpc3QpOwkJLyogYWxsIHJlZ2lzdGVyZWQgc2V0IHR5cGVzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGlwX3NldF90eXBlX211dGV4KTsJCS8qIHByb3RlY3RzIGlwX3NldF90eXBlX2xpc3QgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwX3NldF9yZWZfbG9jayk7CQkvKiBwcm90ZWN0cyB0aGUgc2V0IHJlZnMgKi8KJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwc2V0X2Rlc3Ryb3lfd3E7CiAKIHN0cnVjdCBpcF9zZXRfbmV0IHsKIAlzdHJ1Y3QgaXBfc2V0ICogX19yY3UgKmlwX3NldF9saXN0OwkvKiBhbGwgaW5kaXZpZHVhbCBzZXRzICovCkBAIC0zNTAsNyAmIzQzOzM1MSw3IEBAIGlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsCiAJc2l6ZV90IGxlbiA9IGV4dC0mZ3Q7Y29tbWVudCA/IHN0cmxlbihleHQtJmd0O2NvbW1lbnQpIDogMDsKIAogCWlmICh1bmxpa2VseShjKSkgewotCQlzZXQtJmd0O2V4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMTsKJiM0MzsJCWF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLSZndDtzdHIpICYjNDM7IDEsICZhbXA7c2V0LSZndDtleHRfc2l6ZSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LSZndDtjLCBOVUxMKTsKIAkJa2ZyZWVfcmN1KGMsIHJjdSk7CiAJfQpAQCAtMzYyLDcgJiM0MzszNjMsNyBAQCBpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LAogCWlmICh1bmxpa2VseSghYykpCiAJCXJldHVybjsKIAlzdHJzY3B5KGMtJmd0O3N0ciwgZXh0LSZndDtjb21tZW50LCBsZW4gJiM0MzsgMSk7Ci0Jc2V0LSZndDtleHRfc2l6ZSAmIzQzOz0gc2l6ZW9mKCpjKSAmIzQzOyBzdHJsZW4oYy0mZ3Q7c3RyKSAmIzQzOyAxOwomIzQzOwlhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSAmIzQzOyBzdHJsZW4oYy0mZ3Q7c3RyKSAmIzQzOyAxLCAmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LSZndDtjLCBjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpOwpAQCAtMzkyLDcgJiM0MzszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKQogCWMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtJmd0O2MsIDEpOwogCWlmICh1bmxpa2VseSghYykpCiAJCXJldHVybjsKLQlzZXQtJmd0O2V4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMTsKJiM0MzsJYXRvbWljNjRfc3ViKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMSwgJmFtcDtzZXQtJmd0O2V4dF9zaXplKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC0mZ3Q7YywgTlVMTCk7CiAJa2ZyZWVfcmN1KGMsIHJjdSk7CiB9CkBAIC0xMTc4LDIyICYjNDM7MTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0gewogCQkJCSAgICAubGVuID0gSVBTRVRfTUFYTkFNRUxFTiAtIDEgfSwKIH07CiAKLS8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsIGl0IGlzIHNwbGl0Ci0gKiBpbnRvIHR3byBzdGFnZXM6Ci0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvcgotICogLSBEZXN0cm95IHRoZSBzZXQgaXRzZWxmIHZpYSBjYWxsX3JjdSgpCi0gKi8KLQogc3RhdGljIHZvaWQKLWlwX3NldF9kZXN0cm95X3NldF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldCkKIHsKLQlzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTsKLQogCXNldC0mZ3Q7dmFyaWFudC0mZ3Q7ZGVzdHJveShzZXQpOwogCW1vZHVsZV9wdXQoc2V0LSZndDt0eXBlLSZndDttZSk7CiAJa2ZyZWUoc2V0KTsKIH0KIAomIzQzOy8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsCiYjNDM7ICogZGVzdHJ1Y3Rpb24gaXMgZG9uZSBhc3luY2hyb25vdXNseSB2aWEgd29yayBxdWV1ZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0MztpcF9zZXRfZGVzdHJveV9zZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksCiYjNDM7CQkJCQkgIHN0cnVjdCBpcF9zZXQsIHJ3b3JrKTsKJiM0MzsKJiM0MzsJZGVzdHJveV9hbmRfZnJlZV9zZXQoc2V0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogX2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpCiB7CkBAIC0xMjgzLDcgJiM0MzsxMjg4LDggQEAgc3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJLyogTXVzdCB3YWl0IGZvciBmbHVzaCB0byBiZSByZWFsbHkgZmluaXNoZWQgICovCiAJCQlyY3VfYmFycmllcigpOwogCQl9Ci0JCWNhbGxfcmN1KCZhbXA7cy0mZ3Q7cmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTsKJiM0MzsJCUlOSVRfUkNVX1dPUksoJmFtcDtzLSZndDtyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgJmFtcDtzLSZndDtyd29yayk7CiAJfQogCXJldHVybiAwOwogb3V0OgpAQCAtMjQyMSwxOCAmIzQzOzI0MjcsMjMgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF9zZXRfbmV0X29wcyA9IHsKIHN0YXRpYyBpbnQgX19pbml0CiBpcF9zZXRfaW5pdCh2b2lkKQogewotCWludCByZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpcHNldF9kZXN0cm95X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtpcHNldF9kZXN0cm95X3dxJiMzNDssIDApOwomIzQzOwlpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCYjMzQ7aXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgcGVybmV0X3N1YnN5cy5cbiYjMzQ7KTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3dxOwogCX0KIAogCXJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoJmFtcDtpcF9zZXRfbmV0bGlua19zdWJzeXMpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcl9lcnIoJiMzNDtpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciB3aXRoIG5mbmV0bGluay5cbiYjMzQ7KTsKIAkJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfd3E7CiAJfQogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmYW1wO3NvX3NldCk7CkBAIC0yNDQwLDEwICYjNDM7MjQ1MSwxMyBAQCBpcF9zZXRfaW5pdCh2b2lkKQogCQlwcl9lcnIoJiMzNDtTT19TRVQgcmVnaXN0cnkgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiAJCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmYW1wO2lwX3NldF9uZXRsaW5rX3N1YnN5cyk7CiAJCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO2lwX3NldF9uZXRfb3BzKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3dxOwogCX0KIAogCXJldHVybiAwOwomIzQzO291dF93cToKJiM0MzsJZGVzdHJveV93b3JrcXVldWUoaXBzZXRfZGVzdHJveV93cSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdApAQCAtMjQ1Myw5ICYjNDM7MjQ2Nyw3IEBAIGlwX3NldF9maW5pKHZvaWQpCiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZhbXA7aXBfc2V0X25ldGxpbmtfc3Vic3lzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcF9zZXRfbmV0X29wcyk7CiAKLQkvKiBXYWl0IGZvciBjYWxsX3JjdSgpIGluIGRlc3Ryb3kgKi8KLQlyY3VfYmFycmllcigpOwotCiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpOwogCXByX2RlYnVnKCYjMzQ7dGhlc2UgYXJlIHRoZSBmYW1vdXMgbGFzdCB3b3Jkc1xuJiMzNDspOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCBiMmQ3Nzk3MzI3MmQyLi5mMDBjODJhY2Q3ZjA1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTk5LDkgJiM0Mzs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNlbmRpZgogCiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi8KJiM0MztzdHJ1Y3QgbmV0X3ByZWZpeCB7CiYjNDM7CXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KJiM0MzsJdTMyIGNvdW50OwkJCS8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IG5ldF9wcmVmaXhlcyB7Ci0JdTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi8KLQl1OCBjaWRyW0lQU0VUX05FVF9DT1VOVF07ICAvKiB0aGUgY2lkciB2YWx1ZSAqLwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwl1OCBsZW47CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTsKIH07CiAKIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqLwpAQCAtMTI3LDExICYjNDM7MTMzLDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZWxzZQogI2RlZmluZSBfX0NJRFIoY2lkciwgaSkJCShjaWRyKQogI2VuZGlmCi0KLS8qIGNpZHIgJiM0MzsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi8KLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpCQkoKGNpZHIpICYjNDM7IDEpCi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKQkJKChjaWRyKSAtIDEpCi0KICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VECiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovCiAjZGVmaW5lIERDSURSX1BVVChjaWRyKQkJKChjaWRyKSAtIDEpCkBAIC0xNDEsMjEgJiM0MzsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZGVmaW5lIERDSURSX0dFVChjaWRyLCBpKQlfX0NJRFIoY2lkciwgaSkKICNlbmRpZgogCi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spCVwKLQlEQ0lEUl9QVVQoKChjaWRyKSA/IE5DSURSX0dFVChjaWRyKSA6IGhvc3RfbWFzaykpCi0KLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDAKLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqLwotI2RlZmluZSBOTEVOCQkJKEhPU1RfTUFTSyAmIzQzOyAxKQotI2RlZmluZSBDSURSX1BPUyhjKQkJKChjKSAtIDEpCi0jZWxzZQotLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovCi0jZGVmaW5lIE5MRU4JCQlIT1NUX01BU0sKLSNkZWZpbmUgQ0lEUl9QT1MoYykJCSgoYykgLSAyKQotI2VuZGlmCiYjNDM7I2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoewkJCQlcCiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTsJCVwKJiM0MzsJRENJRFJfUFVUKChfX24pLSZndDtsZW4gPyAoX19uKS0mZ3Q7bmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcCiYjNDM7fSkKIAotI2Vsc2UKLSNkZWZpbmUgTkxFTgkJCTAKICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi8KIAogI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZCkJXApAQCAtMjA0LDEyICYjNDM7MTk1LDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTsKICN1bmRlZiBtdHlwZV9leHRfY2xlYW51cAogI3VuZGVmIG10eXBlX2FkZF9jaWRyCiAjdW5kZWYgbXR5cGVfZGVsX2NpZHIKJiM0MzsjdW5kZWYgbXR5cGVfZGVsX2NpZHJfYWxsCiAjdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZQogI3VuZGVmIG10eXBlX2ZsdXNoCiAjdW5kZWYgbXR5cGVfZGVzdHJveQogI3VuZGVmIG10eXBlX3NhbWVfc2V0CiAjdW5kZWYgbXR5cGVfa2FkdAogI3VuZGVmIG10eXBlX3VhZHQKJiM0MzsjdW5kZWYgbXR5cGVfYnVja2V0X3NpemUKJiM0MzsjdW5kZWYgbXR5cGVfaGFzaF9zaXplCiAKICN1bmRlZiBtdHlwZV9hZGQKICN1bmRlZiBtdHlwZV9kZWwKQEAgLTI0OSwxMiAmIzQzOzI0MywxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307CiAjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwCUlQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApCiAjZGVmaW5lIG10eXBlX2FkZF9jaWRyCQlJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKQogI2RlZmluZSBtdHlwZV9kZWxfY2lkcgkJSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcikKJiM0MzsjZGVmaW5lIG10eXBlX2RlbF9jaWRyX2FsbAlJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbCkKICNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZQlJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpCiAjZGVmaW5lIG10eXBlX2ZsdXNoCQlJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKQogI2RlZmluZSBtdHlwZV9kZXN0cm95CQlJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpCiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0CQlJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KQogI2RlZmluZSBtdHlwZV9rYWR0CQlJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpCiAjZGVmaW5lIG10eXBlX3VhZHQJCUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkKJiM0MzsjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplCUlQU0VUX1RPS0VOKE1UWVBFLCBfYnVja2V0X3NpemUpCiYjNDM7I2RlZmluZSBtdHlwZV9oYXNoX3NpemUJCUlQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKQogCiAjZGVmaW5lIG10eXBlX2FkZAkJSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpCiAjZGVmaW5lIG10eXBlX2RlbAkJSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpCkBAIC0yOTIsNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTsKIC8qIFRoZSBnZW5lcmljIGhhc2ggc3RydWN0dXJlICovCiBzdHJ1Y3QgaHR5cGUgewogCXN0cnVjdCBodGFibGUgX19yY3UgKnRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovCiAJc3RydWN0IGh0YWJsZV9nYyBnYzsJLyogZ2Mgd29ya3F1ZXVlICovCiAJdTMyIG1heGVsZW07CQkvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi8KIAl1MzIgaW5pdHZhbDsJCS8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovCkBAIC0zMDIsOSAmIzQzOzMwMCw2IEBAIHN0cnVjdCBodHlwZSB7CiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKQogCXU4IG5ldG1hc2s7CQkvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovCiAJdW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7CS8qIHN0b3JlcyBiaXRtYXNrICovCi0jZW5kaWYKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQlzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqLwogI2VuZGlmCiAJLyogQmVjYXVzZSAmIzM5O25leHQmIzM5OyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzCiAJICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAmIzM5O25leHQmIzM5Oy4KQEAgLTMyNiw1NSAmIzQzOzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiAvKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50CiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgogICovCi1zdGF0aWMgdm9pZAomIzQzO3N0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCWludCBpLCBqOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiAJLyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqLwotCWZvciAoaSA9IDAsIGogPSAtMTsgaSAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChqICE9IC0xKSB7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gJmx0OyBjaWRyKSB7Ci0JCQlqID0gaTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikgewotCQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciAmbHQ7IGNpZHIpIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKSB7CiYjNDM7CQkJbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCX0KLQlpZiAoaiAhPSAtMSkgewotCQlmb3IgKDsgaSAmZ3Q7IGo7IGktLSkKLQkJCWgtJmd0O25ldHNbaV0uY2lkcltuXSA9IGgtJmd0O25ldHNbaSAtIDFdLmNpZHJbbl07CiYjNDM7CWxlbiYjNDM7JiM0Mzs7CiYjNDM7CXRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXRtcCkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChpID09IGZvdW5kKSB7CiYjNDM7CQkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBjaWRyOwomIzQzOwkJCXRtcC0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSAxOwomIzQzOwkJfQomIzQzOwkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBuZXRzLSZndDtuZXRzW2ldLmNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudDsKIAl9Ci0JaC0mZ3Q7bmV0c1tpXS5jaWRyW25dID0gY2lkcjsKLQloLSZndDtuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTsKJiM0MzsJaWYgKGZvdW5kID09IC0xKSB7CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY2lkciA9IGNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY291bnQgPSAxOwomIzQzOwl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tuXSwgdG1wKTsKJiM0MzsJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZAogbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pCiB7Ci0JdTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwl1OCBpLCBqLCBsZW4gPSAwOwomIzQzOwlpbnQgZm91bmQ7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwotCWZvciAoaSA9IDA7IGkgJmx0OyBOTEVOOyBpJiM0MzsmIzQzOykgewotCQlpZiAoaC0mZ3Q7bmV0c1tpXS5jaWRyW25dICE9IGNpZHIpCi0JCQljb250aW51ZTsKLQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tOwotCQlpZiAoaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSAmZ3Q7IDApCi0JCQlnb3RvIHVubG9jazsKLQkJZm9yIChqID0gaTsgaiAmbHQ7IG5ldF9lbmQgJmFtcDsmYW1wOyBoLSZndDtuZXRzW2pdLmNpZHJbbl07IGomIzQzOyYjNDM7KQotCQkJaC0mZ3Q7bmV0c1tqXS5jaWRyW25dID0gaC0mZ3Q7bmV0c1tqICYjNDM7IDFdLmNpZHJbbl07Ci0JCWgtJmd0O25ldHNbal0uY2lkcltuXSA9IDA7CiYjNDM7CW5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtJmd0O3JuZXRzW25dKTsKJiM0MzsJZm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWxlbiYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jaWRyID09IGNpZHIpCiYjNDM7CQkJZm91bmQgPSBpOwomIzQzOwl9CiYjNDM7CWlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbmV0cy0mZ3Q7bmV0c1tmb3VuZF0uY291bnQtLTsKJiM0MzsJaWYgKG5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CWxlbi0tOwomIzQzOwl0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQkvKiBMZWF2ZSBhIGhvbGUgKi8KIAkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBuZXRzLSZndDtuZXRzW2ldLmNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudDsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tuXSwgdG1wKTsKJiM0MzsJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO210eXBlX2RlbF9jaWRyX2FsbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmRhdGEpCiYjNDM7ewomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWZvciAoayA9IDA7IGsgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KQomIzQzOwkJbXR5cGVfZGVsX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZGF0YS0mZ3Q7Y2lkciwgayksIGspOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIG1lbW9yeSBzaXplIG9mIHRoZSBzZXQgZGF0YSAqLwogc3RhdGljIHNpemVfdAogbXR5cGVfYWhhc2hfbWVtc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBodGFibGUgKnQpCkBAIC00MDIsNiAmIzQzOzQ1MCw5IEBAIHN0YXRpYyB2b2lkCiBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgaHRhYmxlICp0OwogCXN0cnVjdCBoYnVja2V0ICpuOwogCXUzMiByLCBpOwpAQCAtNDI1LDcgJiM0Mzs0NzYsMTkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KQogCQlzcGluX3VubG9ja19iaCgmYW1wO3QtJmd0O2hyZWdpb25bcl0ubG9jayk7CiAJfQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCW1lbXNldChoLSZndDtuZXRzLCAwLCBzaXplb2YoaC0mZ3Q7bmV0cykpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwomIzQzOwkJdG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXRtcCkgewomIzQzOwkJCXU4IGo7CiYjNDM7CiYjNDM7CQkJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMtJmd0O2xlbjsgaiYjNDM7JiM0MzspCiYjNDM7CQkJCW5ldHMtJmd0O25ldHNbal0uY291bnQgPSAwOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIoaC0mZ3Q7cm5ldHNbaV0sIHRtcCk7CiYjNDM7CQkJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiYjNDM7CQl9CiYjNDM7CX0KICNlbmRpZgogfQogCkBAIC00MzMsNiAmIzQzOzQ5Niw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIHN0YXRpYyB2b2lkCiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSkKIHsKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CXN0cnVjdCBodHlwZSAqaCA9IHNldC0mZ3Q7ZGF0YTsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgaGJ1Y2tldCAqbjsKIAl1MzIgaTsKIApAQCAtNDQ2LDYgJiM0Mzs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpCiAJCWtmcmVlKG4pOwogCX0KIAomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJaWYgKGV4dF9kZXN0cm95KQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1tpXSkpOwomIzQzOyNlbmRpZgogCWlwX3NldF9mcmVlKHQtJmd0O2hyZWdpb24pOwogCWlwX3NldF9mcmVlKHQpOwogfQpAQCAtNDkzLDkgJiM0Mzs1NjQsNiBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpCiAJc3RydWN0IG10eXBlX2VsZW0gKmRhdGE7CiAJdTMyIGksIGosIGQ7CiAJc2l6ZV90IGRzaXplID0gc2V0LSZndDtkc2l6ZTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQl1OCBrOwotI2VuZGlmCiAJdTggcG9zLCBodGFibGVfYml0cyA9IHQtJmd0O2h0YWJsZV9iaXRzOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKQEAgLTUxNiwxMiAmIzQzOzU4NCw3IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcikKIAkJCXByX2RlYnVnKCYjMzQ7ZXhwaXJlZCAldS8ldVxuJiMzNDssIGksIGopOwogCQkJY2xlYXJfYml0KGosIG4tJmd0O3VzZWQpOwogCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJCWZvciAoayA9IDA7IGsgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KQotCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBrKSksCi0JCQkJCWspOwotI2VuZGlmCiYjNDM7CQkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7CiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAkJCWQmIzQzOyYjNDM7OwpAQCAtOTQ3LDEyICYjNDM7MTAxMCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQkJaiA9IDA7CiAJCWRhdGEgPSBhaGFzaF9kYXRhKG4sIGosIHNldC0mZ3Q7ZHNpemUpOwogCQlpZiAoIWRlbGV0ZWQpIHsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQotCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBpKSksCi0JCQkJCWkpOwotI2VuZGlmCiYjNDM7CQkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAkJCXQtJmd0O2hyZWdpb25bcl0uZWxlbWVudHMtLTsKIAkJfQpAQCAtOTk2LDcgJiM0MzsxMDU0LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJdC0mZ3Q7aHJlZ2lvbltyXS5lbGVtZW50cyYjNDM7JiM0Mzs7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCi0JCW10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLSZndDtjaWRyLCBpKSksIGkpOwomIzQzOwkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaSksIGkpOwogI2VuZGlmCiAJbWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpOwogb3ZlcndyaXRlX2V4dGVuc2lvbnM6CkBAIC0xMTA3LDExICYjNDM7MTE2NSw3IEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQlpZiAoaSAmIzQzOyAxID09IHBvcykKIAkJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bi0mZ3Q7cG9zLCAtLXBvcyk7CiAJCXQtJmd0O2hyZWdpb25bcl0uZWxlbWVudHMtLTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJZm9yIChqID0gMDsgaiAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspCi0JCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCi0JCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKLSNlbmRpZgomIzQzOwkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZCk7CiAJCWlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpOwogCiAJCWlmICh0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0KSB7CkBAIC0xMTkzLDI4ICYjNDM7MTI0NywzNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwogCXN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7dGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDsKIAlzdHJ1Y3QgaGJ1Y2tldCAqbjsKIAlzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTsKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMTsKIAlzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7Ci0JaW50IHJldCwgaSwgaiA9IDAsIGs7CiYjNDM7CWludCByZXQsIGksIGosIGs7CiAjZWxzZQotCWludCByZXQsIGksIGogPSAwOwomIzQzOwlpbnQgcmV0LCBpLCBqOwogI2VuZGlmCiAJdTMyIGtleSwgbXVsdGkgPSAwOwogCXU4IHBvczsKIAogCXByX2RlYnVnKCYjMzQ7dGVzdCBieSBuZXRzXG4mIzM0Oyk7Ci0JZm9yICg7IGogJmx0OyBOTEVOICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdICZhbXA7JmFtcDsgIW11bHRpOyBqJiM0MzsmIzQzOykgewomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CW5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtJmd0O3JuZXRzWzBdKTsKJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKJiM0MzsJbmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMV0pOwomIzQzOyNlbmRpZgomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgbmV0czAtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmV0czAtJmd0O25ldHNbal0uY291bnQpCiYjNDM7CQkJY29udGludWU7CiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKIAkJbXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsICZhbXA7b3JpZyk7Ci0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpOwotCQlmb3IgKGsgPSAwOyBrICZsdDsgTkxFTiAmYW1wOyZhbXA7IGgtJmd0O25ldHNba10uY2lkclsxXSAmYW1wOyZhbXA7ICFtdWx0aTsKLQkJICAgICBrJiM0MzsmIzQzOykgewotCQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLSZndDtuZXRzW2tdLmNpZHJbMV0pLAotCQkJCQkgICB0cnVlKTsKJiM0MzsJCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC0mZ3Q7bmV0c1tqXS5jaWRyLCBmYWxzZSk7CiYjNDM7CQlmb3IgKGsgPSAwOyBrICZsdDsgbmV0czEtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgayYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIW5ldHMxLSZndDtuZXRzW2tdLmNvdW50KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtJmd0O25ldHNba10uY2lkciwgdHJ1ZSk7CiAjZWxzZQotCQltdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtJmd0O25ldHNbal0uY2lkclswXSkpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIpOwogI2VuZGlmCiAJCWtleSA9IEhLRVkoZCwgaC0mZ3Q7aW5pdHZhbCwgdC0mZ3Q7aHRhYmxlX2JpdHMpOwogCQluID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7CkBAIC0xMjI5LDcgJiM0MzsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLAogCQkJCWNvbnRpbnVlOwogCQkJcmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpOwogCQkJaWYgKHJldCAhPSAwKQotCQkJCXJldHVybiByZXQ7CiYjNDM7CQkJCWdvdG8gdW5sb2NrOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVEkKIAkJCS8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovCiAJCQltdWx0aSA9IDA7CkBAIC0xMjM5LDcgJiM0MzsxMzAyLDEwIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIAkJfQogI2VuZGlmCiAJfQotCXJldHVybiAwOwomIzQzOwlyZXQgPSAwOwomIzQzO3VubG9jazoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtMTI5NCw2ICYjNDM7MTM2MCwyNCBAQCBtdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB1MzIgbXR5cGVfaGFzaF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBodGFibGUgKnQ7CiYjNDM7CXU4IGh0YWJsZV9iaXRzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXQgPSByY3VfZGVyZWZlcmVuY2UoaC0mZ3Q7dGFibGUpOwomIzQzOwlodGFibGVfYml0cyA9IHQtJmd0O2h0YWJsZV9iaXRzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBoLSZndDtidWNrZXRzaXplOwomIzQzO30KJiM0MzsKIC8qIFJlcGx5IGEgSEVBREVSIHJlcXVlc3Q6IGZpbGwgb3V0IHRoZSBoZWFkZXIgcGFydCBvZiB0aGUgc2V0ICovCiBzdGF0aWMgaW50CiBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEzMDQsMjEgJiM0MzsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNpemVfdCBtZW1zaXplOwogCXUzMiBlbGVtZW50cyA9IDA7CiAJc2l6ZV90IGV4dF9zaXplID0gMDsKLQl1OCBodGFibGVfYml0czsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAl0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtJmd0O3RhYmxlKTsKIAltdHlwZV9leHRfc2l6ZShzZXQsICZhbXA7ZWxlbWVudHMsICZhbXA7ZXh0X3NpemUpOwotCW1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICYjNDM7IGV4dF9zaXplICYjNDM7IHNldC0mZ3Q7ZXh0X3NpemU7Ci0JaHRhYmxlX2JpdHMgPSB0LSZndDtodGFibGVfYml0czsKJiM0MzsJbWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgJiM0MzsgZXh0X3NpemUgJiM0MzsgYXRvbWljNjRfcmVhZCgmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAJbmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpOwogCWlmICghbmVzdGVkKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsCi0JCQkgIGh0b25sKGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpKSkgfHwKLQkgICAgbmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC0mZ3Q7bWF4ZWxlbSkpKQomIzQzOwomIzQzOwlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CWlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9NQVhFTEVNLCBodG9ubChoLSZndDttYXhlbGVtKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTSwogCS8qIGlmIG5ldG1hc2sgaXMgc2V0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gSE9TVF9NQVNLIHdlIGtub3cgdGhhdCB0aGUgdXNlciBzdXBwbGllZCBuZXRtYXNrCkBAIC0xMzQyLDggJiM0MzsxNDI1LDkgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogI2VuZGlmCiAJaWYgKHNldC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBTRVRfQ1JFQVRFX0ZMQUdfQlVDS0VUU0laRSkgewotCQlpZiAobmxhX3B1dF91OChza2IsIElQU0VUX0FUVFJfQlVDS0VUU0laRSwgaC0mZ3Q7YnVja2V0c2l6ZSkgfHwKLQkJICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtJmd0O2luaXR2YWwpKSkKJiM0MzsJCWlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSU5JVFZBTCwgaHRvbmwoaC0mZ3Q7aW5pdHZhbCkpKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQogCWlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtJmd0O3JlZikpIHx8CkBAIC0xNTA0LDYgJiM0MzsxNTg4LDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LAogCWludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwOwogCXU4IG5ldG1hc2sgPSBzZXQtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzayA9IG9uZXNtYXNrOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czsKICNlbmRpZgogCXNpemVfdCBoc2l6ZTsKIAlzdHJ1Y3QgaHR5cGUgKmg7CkBAIC0xNjA0LDIxICYjNDM7MTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJICovCiAJaGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTsKIAloc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTsKLQlpZiAoaHNpemUgPT0gMCkgewotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwlpZiAoaHNpemUgPT0gMCkKJiM0MzsJCWdvdG8gZnJlZV9oOwogCXQgPSBpcF9zZXRfYWxsb2MoaHNpemUpOwotCWlmICghdCkgewotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwlpZiAoIXQpCiYjNDM7CQlnb3RvIGZyZWVfaDsKIAl0LSZndDtocmVnaW9uID0gaXBfc2V0X2FsbG9jKGFoYXNoX3NpemVvZl9yZWdpb25zKGhiaXRzKSk7Ci0JaWYgKCF0LSZndDtocmVnaW9uKSB7Ci0JCWlwX3NldF9mcmVlKHQpOwotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghdC0mZ3Q7aHJlZ2lvbikKJiM0MzsJCWdvdG8gZnJlZV90OwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7CiYjNDM7CQlpZiAoIW5ldHMpIHsKJiM0MzsJCQl3aGlsZSAoaSAmZ3Q7IDApCiYjNDM7CQkJCWtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC0mZ3Q7cm5ldHNbLS1pXSkpOwomIzQzOwkJCWdvdG8gZnJlZV9ocmVnaW9uOwomIzQzOwkJfQomIzQzOwkJUkNVX0lOSVRfUE9JTlRFUihoLSZndDtybmV0c1tpXSwgbmV0cyk7CiAJfQomIzQzOyNlbmRpZgogCWgtJmd0O2djLnNldCA9IHNldDsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2gtJmd0O2djLmxvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkmIzQzOyYjNDM7KQpAQCAtMTY1MCw2ICYjNDM7MTc0MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3QtJmd0O2FkKTsKIAlSQ1VfSU5JVF9QT0lOVEVSKGgtJmd0O3RhYmxlLCB0KTsKIAlzZXQtJmd0O2RhdGEgPSBoOwomIzQzOwogI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUYKIAlpZiAoc2V0LSZndDtmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7CiAjZW5kaWYKQEAgLTE2NzgsMTAgJiM0MzsxNzcwLDIwIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKICNlbmRpZgogCX0KIAlwcl9kZWJ1ZygmIzM0O2NyZWF0ZSAlcyBoYXNoc2l6ZSAldSAoJXUpIG1heGVsZW0gJXU6ICVwKCVwKVxuJiMzNDssCi0JCSBzZXQtJmd0O25hbWUsIGpoYXNoX3NpemUodC0mZ3Q7aHRhYmxlX2JpdHMpLAomIzQzOwkJIHNldC0mZ3Q7bmFtZSwgbXR5cGVfaGFzaF9zaXplKGgpLAogCQkgdC0mZ3Q7aHRhYmxlX2JpdHMsIGgtJmd0O21heGVsZW0sIHNldC0mZ3Q7ZGF0YSwgdCk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7ZnJlZV9ocmVnaW9uOgomIzQzOwlpcF9zZXRfZnJlZSh0LSZndDtocmVnaW9uKTsKJiM0MzsjZW5kaWYKJiM0MztmcmVlX3Q6CiYjNDM7CWlwX3NldF9mcmVlKHQpOwomIzQzO2ZyZWVfaDoKJiM0MzsJa2ZyZWUoaCk7CiYjNDM7CXJldHVybiAtRU5PTUVNOwogfQogI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqLwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwppbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKQEAgLTEzOCw3ICYjNDM7MTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jCmluZGV4IGNlMGE5Y2U1YTkxZjEuLjA5MmYzYzkyODFiODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApAQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCmluZGV4IDMwYTY1NWU1YzRmZGMuLmI0NGI5NWY3NjZiN2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMKQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0aWZhY2U0ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAkJLmVsZW0gPSAxLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAkJLmVsZW0gPSAxLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jCmluZGV4IDhmYmU2NDljOWRkM2QuLmY3YzhhMWNjMzBmYzcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYwpAQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7CiAKQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCi0JZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTsKLQllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKTsKJiM0MzsJZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlpZiAoYWR0ID09IElQU0VUX1RFU1QpCiAJCWUuY2NtcCA9IChIT1NUX01BU0sgJmx0OyZsdDsgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKaW5kZXggZDFhMDYyOGRmNGVmMy4uNWRlNGI1MTFkZTc2MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKaW5kZXggYmY0ZjkxYjc4ZTFkYy4uNjI5MTUzMmJlN2E1YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKQEAgLTE1Nyw4ICYjNDM7MTU3LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7CiAKQEAgLTQ1Miw4ICYjNDM7NDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSzsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKaW5kZXggMWNlZjg0ZjE1ZThjNy4uY2EzZWY5NDc5ZTgzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCkBAIC00MjEsNyAmIzQzOzQyMSw3IEBAIGxpc3Rfc2V0X2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgJmFtcDttYXAtJmd0O21lbWJlcnMsIGxpc3QpCiAJCWxpc3Rfc2V0X2RlbChzZXQsIGUpOwogCXNldC0mZ3Q7ZWxlbWVudHMgPSAwOwotCXNldC0mZ3Q7ZXh0X3NpemUgPSAwOwomIzQzOwlhdG9taWM2NF9zZXQoJmFtcDtzZXQtJmd0O2V4dF9zaXplLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtJmd0O2RhdGE7CiAJc3RydWN0IG5sYXR0ciAqbmVzdGVkOwotCXNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC0mZ3Q7ZHNpemUpICYjNDM7IHNldC0mZ3Q7ZXh0X3NpemU7CiYjNDM7CXNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC0mZ3Q7ZHNpemUpICYjNDM7IGF0b21pYzY0X3JlYWQoJmFtcDtzZXQtJmd0O2V4dF9zaXplKTsKIAogCW5lc3RlZCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSVBTRVRfQVRUUl9EQVRBKTsKIAlpZiAoIW5lc3RlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIElQIFNldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvdmVyaGF1bCBvZiBzb21lIGNvcmUgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgaXNzdWVzIG9yIG1heWJlIGEgcmVkZXNpZ24gcmVsYXRlZCB0byBDSURSIHByZWZpeCBoYW5kbGluZyBhbmQgaG93IHNldHMgYXJlIGNsZWFuZWQgdXAuICBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGRpdmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZpcnN0LCB0aGUgYGlwX3NldGAgc3RydWN0IGlzIHR3ZWFrZWQ6IGByY3VfaGVhZGAgaXMgc3dhcHBlZCBmb3IgYHJjdV93b3JrYCwgYW5kIHRoZSBgZXh0X3NpemVgIGZpZWxkIGlzIG5vdyBhbiBgYXRvbWljNjRfdGAuIFRoYXQgc2NyZWFtcyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMgYmVpbmcgYWRkcmVzc2VkLiAgVGhlIGJpZyBvbmUgc2VlbXMgdG8gYmUgdGhlIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiBvZiBzZXRzIHVzaW5nIGEgd29ya3F1ZXVlIChgaXBzZXRfZGVzdHJveV93cWApIGFuZCBgcXVldWVfcmN1X3dvcmtgIHJlcGxhY2luZyB0aGUgc3luY2hyb25vdXMgYGlwX3NldF9kZXN0cm95X3NldF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIG1pbmltaXplIGxvY2sgY29udGVudGlvbiBkdXJpbmcgY2xlYW51cC4KClRoZSBzZWNvbmQgYXJlYSBvZiBmb2N1cyBpcyB3aXRoIENJRFIgcHJlZml4ZXMuICBUaGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBgbmV0X3ByZWZpeGVzYCBzdHJ1Y3QgaW4gYGlwX3NldF9oYXNoX2dlbi5oYCB0byB1c2UgYF9fY291bnRlZF9ieShsZW4pYCBhbmQgaXQmIzM5O3Mgbm93IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gTW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIFJDVSBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGZvciBgbmV0X3ByZWZpeGVzYCBhcmUgYWxzbyBwcmVzZW50LiBUaGVzZSBjaGFuZ2VzIGluZGljYXRlIG9wdGltaXphdGlvbiBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwcmVmaXggZGF0YS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdGhpcyBwYXRjaCB0b3VjaGVzLiAgQmVzaWRlcyB0aGUgc3RydWN0IGNoYW5nZXMsIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgYGlwX3NldF9pbml0X2NvbW1lbnRgLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAsIGBpcF9zZXRfZGVzdHJveWAsIGFuZCB0aGVuIGEgc2xldyBvZiBmdW5jdGlvbnMgc3RhcnRpbmcgd2l0aCBgbXR5cGVfKmAuICBMb29raW5nIGZ1cnRoZXIsIEkgc2VlIGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIHNldmVyYWwgaGFzaCB0eXBlLXNwZWNpZmljIGZ1bmN0aW9ucyAoSVB2NCBhbmQgSVB2NiB2YXJpYW50cyk6IGBoYXNoX2lwcG9ydG5ldDRfa2FkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGV0Yy4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgbWFjcm9zLiBUaGV5IGFyZSBnZW5lcmF0ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gQWhhISBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhpbmdzIGxpa2UgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgZXRjLiBUaGUgZnVuY3Rpb25zIGFjdHVhbGx5IGdlbmVyYXRlZCB3aWxsIHRoZW4gaGF2ZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBhbmQgc28gb24uCgpPa2F5LCBsZXQmIzM5O3MgaHVudCBkb3duIHRob3NlIGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFuZCBhZmZlY3RlZC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgaXQgbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgaW1wcm92aW5nIElQIHNldCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIG10eXBlX2FkZCAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIE1hY3JvIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGEgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkIElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYG10eXBlX2FkZGAgaXMgdGhlIHJlc3VsdGluZyBtYWNybywgYW5kIGl0JiMzOTtzIGJlaW5nIGNvbnN0cnVjdGVkIHVzaW5nIGBJUFNFVF9UT0tFTmAgd2l0aCBgTVRZUEVgIGFuZCBgX2FkZGAgYXMgYXJndW1lbnRzLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHRva2VuIGdlbmVyYXRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBJUCBzZXQgbWFuYWdlbWVudCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLgoKVGhlIGtleSBwb2ludCBoZXJlLCB0aG91Z2gsIGlzIHJlY29nbml6aW5nIHRoYXQgYE1UWVBFYCBpcyBkZWZpbmVkICpiZWZvcmUqIHRoZSBpbmNsdXNpb24gb2YgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCYjMzk7cyBjcml0aWNhbC4gVGhlIHZhbHVlIG9mIGBNVFlQRWAgZGljdGF0ZXMgaG93IGBtdHlwZV9hZGRgIHJlc29sdmVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0aGF0IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgY29kZSB0aGF0IHV0aWxpemVzIGBtdHlwZV9hZGRgLiBJdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGdlbmVyYXRlZCBjb2RlIHNpZ25pZmljYW50bHksIHByb2JhYmx5IGJ5IGluamVjdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBpZGVudGlmaWVyLgoKTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBNVFlQRWAgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGJlaW5nIHNldCB0byBpbiB0aGUgY29kZS4gVGhhdCB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgdHlwZSBvciBmdW5jdGlvbmFsaXR5IHRoaXMgbWFjcm8gaXMgbWVhbnQgdG8gZW5jYXBzdWxhdGUuIEFuZCB0aGVuIEkgd291bGQgZXhhbWluZSBgSVBTRVRfVE9LRU5gIGl0c2VsZi4gSXRzIGRlZmluaXRpb24gaXMgdml0YWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmluYWwgZXhwYW5zaW9uIG9mIHRoZSBgbXR5cGVfYWRkYCBtYWNyby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIE1UWVBFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI2PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM2LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYz0xNjAwPXN0YXRpYyB1MTYgYm9vdF9sb2FkZXJfY29uZmlnX2VtaWYoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLCBpbnQgZHNwX2luZGV4KVxuLS1cbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jLTE2MjAtI2RlZmluZSBSU1RfT0ZTIDhcbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jOjE2MjE6I2RlZmluZSBNVFlQRV9PRlMgNFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMtMTYyMi0jZGVmaW5lIFJIX09GUyAwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGdlbmVyYXRlZCBmdW5jdGlvbnMuIEkgc2VlIG5hbWVzIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9u4oCUY3JlYXRlLCBkZXN0cm95LCBmbHVzaCwgaGVhZCwgYW5kIHNvIG9uLiBCdXQgaG9sZCBvbiwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGEgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyBwcmVmaXhlZCB3aXRoIGBtdHlwZV9gLCBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGFuZCBgbXR5cGVfZmx1c2hgLiBJdCYjMzk7cyBhIHJhdGhlciBleHRlbnNpdmUgbGlzdCwgaW5jbHVkaW5nIGRlbGV0aW9uLCB0ZXN0aW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG90aGVyIHV0aWxpdGllcyB0aGF0IHNlZW0gdG8gYmUgY3J1Y2lhbCBmb3IgdGhpcy4KClRoZXNlIGBtdHlwZV9gIGZ1bmN0aW9ucy4uLiBhaCwgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLCB3aGljaCBpcyBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcyEgSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgbWFjcm8gbWFnaWMgZ29pbmcgb24gaGVyZS4gVGhlIGRlZmluaXRpb24gY29uZmlybXMgaXQ6IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBTbywgYGhhc2hfbmV0NF9hZGRgICppcyogdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lLgoKU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSBtYXkgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBtb2R1bGUuIFRoZXkgbWlnaHQgYmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBNYWNybyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAgaXMgZ29pbmcgdG8gcmVzb2x2ZSB0byBgaGFzaF9uZXQ0X2FkZGAuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXBzZXRzLCBhbmQgdGhlIGBfYWRkYCBzdWZmaXggc3Ryb25nbHkgc3VnZ2VzdHMgYW4gYWRkaXRpb24gZnVuY3Rpb24uIENvbnNpZGVyaW5nIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IElQIGFkZHJlc3NlcywgYG5ldDRgIHNlZW1zIGEgaGlnaGx5IGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlLgoKVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIHJhdGhlciwgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm8gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBuYW1lZCBgX2FkZGAuIE15IGV4cGVydCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgcGF0dGVybiBpbiB0aGUgaXBzZXQgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGhvbGRzIHRydWUgYW5kIGlmIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMTM9c3RydWN0IGhhc2hfbmV0Nl9lbGVtIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjE0Olx0dW5pb24gbmZfaW5ldF9hZGRyIGlwO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMTUtXHR1MTYgcGFkZGluZzA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMjM9aGFzaF9uZXQ2X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0Nl9lbGVtICppcDEsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMjYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyMjc6XHRyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmlwMS1cdTAwM2VpcC5pbjYsIFx1MDAyNmlwMi1cdTAwM2VpcC5pbjYpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMjgtXHQgICAgICAgaXAxLVx1MDAzZWNpZHIgPT0gaXAyLVx1MDAzZWNpZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEhhc2ggTmV0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGhhc2hfbmV0NF9hZGRgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY29kZWQgaW4gYGlwX3NldF9oYXNoX25ldC5jYC4gSW50ZXJlc3RpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGVzZSB0aGluZ3MgY2FuIGJlIGdlbmVyYXRlZC4gVGhlIGNsdWVzIGFyZSB0ZWxsaW5nIG1lIHRoYXQgdGhpcyBpcyBiZWluZyBhdXRvZ2VuZXJhdGVkIGJ5IGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0LiBUbyB1bmRlcnN0YW5kIGhvdyBgaGFzaF9uZXQ0X2FkZGAgd29ya3MsIEkgbmVlZCB0byBzZWUgaG93IGBtdHlwZV9hZGRgIChvciB3aGF0ZXZlciB0aGUgbWFjcm8vdGVtcGxhdGUgaXMpIGlzIGRlZmluZWQgaW4gdGhhdCBoZWFkZXIuIFRpbWUgdG8gb3BlbiB1cCBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBvZiB0aGlzIGdlbmVyYXRlZCBmdW5jdGlvbi4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHdpbGwgcHJvYmFibHkgcmV2ZWFsIHNvbWUgbWV0YXByb2dyYW1taW5nIHRlY2huaXF1ZXMgZm9yIGdlbmVyYXRpbmcgbXVsdGlwbGUgc3BlY2lhbGl6ZWQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjQ9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk1LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTY6I3VuZGVmIG10eXBlX2FkZF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5Ny0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjA4OiN1bmRlZiBtdHlwZV9hZGRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA5LSN1bmRlZiBtdHlwZV9kZWxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0My0jZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDQ6I2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU1LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTY6I2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Ny0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMyND1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMyNTptdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY4Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY4NDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY5NT1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NDctXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDg6XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODQ5LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTMwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTMxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MzItXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDU2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA1NzpcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNTgtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2MS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTYyOlx0XHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2My1cdFx0W0lQU0VUX0RFTF0gPSBtdHlwZV9kZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgbXR5cGUgU3RydWN0dXJlcyoqCgpBbHJpZ2h0LCBzbyBgbXR5cGVfYWRkYCBpcyBkZWZpbml0ZWx5IGxpbmtlZCB0byBgW0lQU0VUX0FERF1gIHdpdGhpbiB0aGUgYG10eXBlX3ZhcmlhbnRgIHN0cnVjdHVyZSwgdGhhdCYjMzk7cyBjbGVhci4gTm93LCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIGJlaW5nIHVzZWQgaW4gdGhlIGBtdHlwZV9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbXR5cGVfY3JlYXRlYCBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgc2VlIHdoYXQgYG10eXBlX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCB0aGF0IHZhcmlhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpSaWdodCwgbGV0IG1lIHNlZS4gVGhhdCBmdW5jdGlvbiBjYWxsIGxvb2tzIGZhbWlsaWFyLi4uICpJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkqLiBPa2F5LCBzbyAqSFRZUEUqIGlzIHByb2JhYmx5IGEgdHlwZSBzcGVjaWZpZXIsIGFuZCAqXF9jcmVhdGUqIGlzIHRoZSBpbXBvcnRhbnQgcGFydCBoZXJlLiBJdCYjMzk7cyBhIGNvbnN0cnVjdG9yIG9yIGluaXRpYWxpemVyIGZ1bmN0aW9uLiBUbyB1bmRlcnN0YW5kIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBkb2luZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzICpcX2NyZWF0ZSogZnVuY3Rpb24gaXMgZG9pbmcuIExldCBtZSBqdW1wIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggc3BlY2lmaWNhbGx5IGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9jcmVhdGVgIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzIGFuZCBpdHMgZXhwZWN0ZWQgYXJndW1lbnRzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTc4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTU3OTpJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1ODAtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHUzMiBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBoYXNoX25ldDRfY3JlYXRlYCwgYGhhc2hfbmV0Nl9jcmVhdGVgIHN0eWxlIGZ1bmN0aW9ucywgcmlnaHQ/IEJ1dCB0aGUgcmVhbCB3b3JrLCB0aGUgc3R1ZmYgdGhhdCYjMzk7cyBhY3R1YWxseSAqbW9kaWZpZWQqIGFuZCB0aGVyZWZvcmUgdGhlIGp1aWN5IGJpdHMgZm9yIGZ1enppbmcsIGlzIGluIHRoZXNlIG90aGVyIGZ1bmN0aW9ucy4gSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0IGhlcmU6IGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2Agb25lLCB0aGUgYGRlc3Ryb3lfYW5kX2ZyZWVfc2V0YCBvbmUsIGFuZCB0aGVuIGEgd2hvbGUgc2xldyBvZiBgbXR5cGVfKmAgZnVuY3Rpb25zIHRoYXQgYXJlICp2ZXJ5KiBpbnRlcmVzdGluZy4gV2UmIzM5O3ZlIGdvdCBzdHVmZiB0byBhZGQsIGRlbGV0ZSwgZmx1c2gsIGFuZCB0ZXN0IENJRFJzIGFuZCBhaGFzaCByZWxhdGVkIHJvdXRpbmVzLiBUaGVyZSYjMzk7cyBldmVuIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRoIGBtdHlwZV9nY19kb2AuIFdlJiMzOTt2ZSBhbHNvIGdvdCBga2FkdGAgcm91dGluZXMuCgpIb2xkIG9uLi4uIHRoZSBgbXR5cGVfKmAgZnVuY3Rpb25zIGFyZSAqZ2VuZXJhdGVkKiBiYXNlZCBvbiB0aGUgaGFzaCB0eXBlLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBub3QgdGhlICplbnRyeSogcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGZyb20gdGhlIHRvcCwgYW5kIG5vdCB0aGUgc3RhdGljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpdCEgV2UgbmVlZCB0byBmb2N1cyBvbiB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSB0aGUgdHJpZ2dlciBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhhdCBtZWFucyBgaXBfc2V0X2NvcmUuY2AgaXMgdGhlIHBsYWNlIHRvIGxvb2suIExldCYjMzk7cyBoZWFkIHRoZXJlIGFuZCBzZWUgd2hhdCBuZXRsaW5rIG9wZXJhdGlvbnMgYXJlIGhhcHBlbmluZyB0aGF0IGxlYWQgdG8gdGhvc2UgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmxfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTAyMD1maW5kX2ZyZWVfaWQoc3RydWN0IGlwX3NldF9uZXQgKmluc3QsIGNvbnN0IGNoYXIgKm5hbWUsIGlwX3NldF9pZF90ICppbmRleCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0My1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDQ0OnN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ1LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMDM9X2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyMzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTIzMjpzdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTIzMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEzMDM9aXBfc2V0X2ZsdXNoX3NldChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTMxMjpzdGF0aWMgaW50IGlwX3NldF9mbHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTMtXHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTM0Mj1pcF9zZXRfc2V0bmFtZTJfcG9saWN5W0lQU0VUX0FUVFJfQ01EX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTM0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMzUwOnN0YXRpYyBpbnQgaXBfc2V0X3JlbmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzOTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTM5ODpzdGF0aWMgaW50IGlwX3NldF9zd2FwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTM5OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1Nzc9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNzE3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE3MTg6c3RhdGljIGludCBpcF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3MTktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg4MTpzdGF0aWMgaW50IGlwX3NldF91ZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg4Mi1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg4ODpzdGF0aWMgaW50IGlwX3NldF91dGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODktXHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkyMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTIzOnN0YXRpYyBpbnQgaXBfc2V0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MjQtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF90eXBlX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5NzItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTk3MzpzdGF0aWMgaW50IGlwX3NldF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTk3NC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIwMjI9aXBfc2V0X3Byb3RvY29sX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwMjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjAyNjpzdGF0aWMgaW50IGlwX3NldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwMjctXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA1OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMDYwOnN0YXRpYyBpbnQgaXBfc2V0X2J5bmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwNjEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF9pbmRleF9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTA0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxMDU6c3RhdGljIGludCBpcF9zZXRfYnlpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxMDYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUHJvcG9zZWQgaXBzZXQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgY29yZSBvZiBgaXBzZXRgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBuZXRsaW5rIG9wZXJhdGlvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcy4gTXkgaW5pdGlhbCByZWFkIG9mIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24gc2hvd3MgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBgbmV0bGlua2Agb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5OiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBgaXBfc2V0X3V0ZXN0YCwgYW5kIGBpcF9zZXRfZHVtcGAuIFdlIGtub3cgdGhhdCB0aGVzZSBhcmUgYWxsIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIGBpcHNldGAgdGhyb3VnaCB0aGUgbmV0d29yayBzdGFjay4gSSBhbHNvIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBzb21lIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1hbmFnaW5nIGBpcHNldGAgZGF0YSwgaW5jbHVkaW5nOiBgaXBfc2V0X2luaXRfY29tbWVudGAsIGBpcF9zZXRfY29tbWVudF9mcmVlYCwgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyX2FsbGAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2djX2RvYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV90ZXN0YCwgYG10eXBlX2hlYWRgLCBgbXR5cGVfaGFzaF9zaXplYCwgYW5kIGBtdHlwZV9idWNrZXRfc2l6ZWAuIEkgc2VlIHRoYXQgdGhlc2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBuZXRsaW5rIG9wZXJhdGlvbnMgKmFuZCogZnJvbSB0aGUgZGF0YXBhdGgsIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgaGF2ZSBjYXNjYWRpbmcgaW1wbGljYXRpb25zIGZvciBgaXB0YWJsZXNgIGFuZCBgbmZ0YWJsZXNgIHVzZXJzLgoKVGhpbmtpbmcgbW9yZSBkZWVwbHksIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdG8gYGlwX3NldF9kZXN0cm95YCB0byB1c2UgYHF1ZXVlX3JjdV93b3JrYCB3YXJyYW50cyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uOyBhbnkgdGltaW5nLXNlbnNpdGl2ZSBvcGVyYXRpb25zIGNvdWxkIGhhdmUgdGhlaXIgYmVoYXZpb3VyIGNoYW5nZWQgYnkgdGhpcyBtb2RpZmljYXRpb24uIFRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21tZW50IGhhbmRsaW5nIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RpbmcsIGFzIGNvbW1lbnQgaW5mb3JtYXRpb24gbWlnaHQgYmUgbG9zdCBvciBiZWNvbWUgaW5jb25zaXN0ZW50LiAKCk9rYXksIGxldCYjMzk7cyBmb2xsb3cgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIGBtdHlwZV9hZGRfY2lkcmAgaXMgY2FsbGVkIGZyb20gYG10eXBlX2FkZGAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZnJvbSBgaXBfc2V0X3VhZGRgLiBTaW1pbGFybHksIGBtdHlwZV9kZWxfY2lkcmAgaXMgY2FsbGVkIGZyb20gYG10eXBlX2RlbGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpcF9zZXRfdWRlbGAuIFRoZSBgbXR5cGVfdGVzdF9jaWRyc2AgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBgbXR5cGVfdGVzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpcF9zZXRfdXRlc3RgIGFuZCwgY3JpdGljYWxseSwgZnJvbSB0aGUgZGF0YXBhdGguICBgbXR5cGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgaXBfc2V0X2ZsdXNoYC4gYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGNhbGxlZCBieSBgaXBfc2V0X2Rlc3Ryb3lgLCBhbmQgYG10eXBlX2djX2RvYCBpcyBpbnZva2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBidWlsZGluZyBibG9ja3MuCgpUbyBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIHRoZSBjb2RlIHNob3VsZCBiZSB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2AgZGlyZWN0b3J5LCBhbmQgSSYjMzk7ZCBleHBlY3QgaXQgdG8gYmUgZ3VhcmRlZCBieSBgQ09ORklHX0lQX1NFVGAuIEEgcXVpY2sgc2NhbiBvZiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgdGhpcyBpcyBhY2N1cmF0ZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEkgd2lsbCB1c2UgdGhpcyBhcyBteSBmcmFtZXdvcmsgdG8gYW5hbHl6ZSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIElQIHNldHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIElQIFNldCBNb2R1bGVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBidW5jaCBvZiBgaXBfc2V0X2hhc2hfKi5jYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9pcHBvcnRuZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXRpZmFjZS5jYCwgYGlwX3NldF9oYXNoX25ldG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldHBvcnQuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gIFRoYXQgbWVhbnMgd2UgbmVlZCB0byBlbmFibGUgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiAgQW5kIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYElQX1NFVGAgaXRzZWxmIHRvIGJlIGVuYWJsZWQuCgpJIGFsc28gc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGlwX3NldF9saXN0X3NldC5jYCwgc28gYElQX1NFVF9MSVNUX1NFVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyB0b3VjaCBgSVBfU0VUX0JJVE1BUF9HRU5gLCB3aGljaCBjYXNjYWRlcyB0byBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBTbywgdG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIGp1c3QgZW5hYmxlICphbGwqIG9mIHRoZSBJUCBzZXQgbW9kdWxlcy4KCkxldCBtZSBsaXN0IG91dCB0aGUgY29uZmlncyBJJiMzOTttIHBsYW5uaW5nIHRvIGVuYWJsZSBmb3IgY2xhcml0eToKCiogICBgSVBfU0VUYAoqICAgYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgCiogICBgSVBfU0VUX0hBU0hfTkVUTkVUYAoqICAgYElQX1NFVF9IQVNIX05FVFBPUlRgCiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAKKiAgIGBJUF9TRVRfTElTVF9TRVRgCiogICBgSVBfU0VUX0JJVE1BUF9JUGAKKiAgIGBJUF9TRVRfQklUTUFQX0lQTUFDYAoqICAgYElQX1NFVF9CSVRNQVBfUE9SVGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIElQIFNldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBJUF9TRVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBJdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB5b3UmIzM5O2QgZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUCBzZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGF0IGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgSVBfU0VUYCBiZWNvbWVzIGF2YWlsYWJsZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGlzLCBob3cgdG8gZW5hYmxlIGl0IGFuZCB3aGF0IGVsc2UgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTI9bWVudWNvbmZpZyBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE2PWNvbmZpZyBJUF9TRVRfTUFYXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE5LVx0cmFuZ2UgMiA2NTUzNFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjIwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yMS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mjg9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjMwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zMS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mzc9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDAtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTQ2PWNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz01NT1jb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NzpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTgtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTY1PWNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02OC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NzQ9Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc3LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz04Mz1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjg1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9OTM9Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTAzPWNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTExMj1jb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTQ6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTIxPWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjM6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyNC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTMwPWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMjpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMzLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzk9Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0MTpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQyLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNDg9Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTUwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTEtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2MDpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTYxLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNjg9Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTcwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNzEtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE3OD1jb25maWcgR0NPVl9QUk9GSUxFX0lQU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTc5LVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIGlwc2V0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTgwOlx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE4MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhpcyBrZXJuZWwgbW9kdWxlIGNvbmZpZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGRlcGVuZGVuY2llcyByaWdodCBmb3IgYElQX1NFVGAuIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCByZWxpZXMgaGVhdmlseSBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCBzbyB0aG9zZSBhcmUgZ29pbmcgc3RyYWlnaHQgaW50byB0aGUgY29uZmlnIGxpc3Qgd2l0aG91dCBhIHNlY29uZCB0aG91Z2h0LiBJJiMzOTtsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiwgb2YgY291cnNlLCBhbmQgdGhlbiBhbGwgdGhlIGRpZmZlcmVudCBoYXNoIGFuZCBiaXRtYXAgc2V0IHR5cGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYCwgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzeW1ib2xzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGNydWNpYWwuIFRoaW5raW5nIGFib3V0IHRoZSBuZXRsaW5rIGludGVyZmFjZSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBpbmNsdWRpbmcgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGRlZmluZWQgaW4gYGlwX3NldF9jb3JlLmNgOiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBhbmQgYGlwX3NldF91dGVzdGAuIFRob3NlIGFyZSB0aGUgY29yZSBvcGVyYXRpb25zIEkmIzM5O2xsIGJlIHJlbHlpbmcgb24uCgpUaGVuIHRoZXJlIGFyZSB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGNyaXRpY2FsLCBnaXZlbiBob3cgbXVjaCB0aGV5IHNlZW0gdG8gZ2VuZXJhdGUuIFNvLCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9jcmVhdGVgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0NF9oZWFkYCB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIHRoZWlyIGV4cG9ydCBzdGF0dXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBvciBzdGF0aWMsIHRvIGVuc3VyZSBJJiMzOTttIGluY2x1ZGluZyBldmVyeXRoaW5nIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50LiptdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbiBvZiBTdGF0aWMgRnVuY3Rpb25zIGluIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSYjMzk7dmUgc2VlbiB0aGF0IGBtdHlwZV9hZGRgIGZ1bmN0aW9uIHNpZ25hdHVyZSBiZWZvcmU6IGBzdGF0aWMgaW50IG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LCBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBiZWNhdXNlIGl0JiMzOTtzICpzdGF0aWMqLCBpdCBtaWdodCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhhdCB3b3VsZCBtZWFuIHdlIHdvdWxkbiYjMzk7dCBzZWUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlmIHdlJiMzOTtyZSBkZWJ1Z2dpbmcuCgpCdXQgdGhlbiwgSSByZW1lbWJlciBzZWVpbmcgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYG10eXBlX3ZhcmlhbnRgLiBTb21ldGhpbmcgbGlrZSBgW0lQU0VUX0FERF0gPSBtdHlwZV9hZGRgLiBBbmQgdGhhdCBjaGFuZ2VzIGV2ZXJ5dGhpbmcuIElmIHlvdSYjMzk7cmUgYXNzaWduaW5nIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gYSBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogZnVsbHkgaW5saW5lIGl0LiBJdCAqaGFzKiB0byBleGlzdCBhcyBhIGRpc3RpbmN0IHN5bWJvbC4gVGhpcyBpbXBsaWVzIHRoZXNlIGZ1bmN0aW9ucywgZXZlbiB0aG91Z2ggZGVjbGFyZWQgYHN0YXRpY2AsIHdpbGwsIGluIGZhY3QsIGhhdmUgdW5pcXVlIGFkZHJlc3NlcyDigJMgc2ltaWxhciB0byBob3cgYGhhc2hfbmV0NF9hZGRgIGlzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgaG93IGl0IGlzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQuKm10eXBlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzE2OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBtdHlwZV9hZGRgIG1hY3JvLiBMZXQmIzM5O3Mgc2VlLi4uIGFjY29yZGluZyB0byBgaXBfc2V0X2hhc2hfZ2VuLmhgIGF0IGxpbmUgOTMwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgYHN0YXRpYyBpbnQgbXR5cGVfYWRkYC4gVGhpcyBleHBhbmRzIHRvIGBzdGF0aWMgaW50IGhhc2hfbmV0NF9hZGQoLi4uKWAuIFRoZSBmYWN0IHRoYXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4gd2l0aGluIGBtdHlwZV92YXJpYW50YCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMgdG8gYSB1bmlxdWUgc3ltYm9sLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGluY2x1ZGUgYSBmZXcgb2YgdGhlc2UgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIGBuZXQ0YCwgbmFtZWx5IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2NyZWF0ZWAsIGBoYXNoX25ldDRfZGVzdHJveWAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF9oZWFkYC4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gaW5jbHVkZSBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IgYG5ldDZgLgoKSG93ZXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbW9yZSBmcnVpdGZ1bCB0byBwcmlvcml0aXplIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50cy4gVGhvc2UgYXJlLCBhZnRlciBhbGwsIHRoZSBub24tc3RhdGljIG1haW4gYWNjZXNzIHBvaW50cyB0byB0aGUgaXBfc2V0IGZ1bmN0aW9uYWxpdHkuIFRoZXNlIHdvdWxkIGluY2x1ZGUgdGhpbmdzIGxpa2UgYGlwX3NldF9jcmVhdGVgLCBgaXBfc2V0X2Rlc3Ryb3lgLCBgaXBfc2V0X2ZsdXNoYCwgYGlwX3NldF91YWRkYCwgYGlwX3NldF91ZGVsYCwgYGlwX3NldF91dGVzdGAsIGFuZCBgaXBfc2V0X2R1bXBgLgoKQW5kLCBvaCB5ZXMsIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYGlwX3NldF9kZXN0cm95X3NldF93b3JrYC4gVGhhdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggbWFrZXMgaXQgYSByZWFsbHkgZ29vZCBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBkZXN0cm95X2FuZF9mcmVlX3NldGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbi4gVGltZSB0byBjaGVjayBgaXBfc2V0X2NvcmUuY2AgZm9yIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9kZXN0cm95X3NldF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMTkzPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTE5NDppcF9zZXRfZGVzdHJveV9zZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTE5NS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMzI9c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjkwLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI5MTpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZzLVx1MDAzZXJ3b3JrLCBpcF9zZXRfZGVzdHJveV9zZXRfd29yayk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5Mi1cdFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXHUwMDI2cy1cdTAwM2Vyd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBgaXBfc2V0YCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gaXRzIG93biByaWdodCDigJMgYSBkZWRpY2F0ZWQgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZXQgaXMgbWFuYWdlZCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBjb21tZW50cyBhcmUgaGFuZGxlZC4gTGV0IG1lIGRpdmUgaW50byBgaXBfc2V0X2luaXRfY29tbWVudGAgYW5kLCBuYXR1cmFsbHksIGBpcF9zZXRfY29tbWVudF9mcmVlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgcGllY2VzIGludGVycmVsYXRlIGFuZCBwbGF5IHRoZWlyIHBhcnQgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBJUCBzZXQmIzM5O3MgbWV0YWRhdGEgYW5kIGFzc29jaWF0ZWQgY29tbWVudHMuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2NTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEtleSBTeW1ib2xzKioKCk9rYXksIHllcywgSSYjMzk7bSBjb25maXJtaW5nIHRoZXNlIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBgaXBfc2V0X2R1bXBgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBgaXBfc2V0X2luaXRfY29tbWVudGAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBvbmVzIGZvciB0aGlzIGFuYWx5c2lzLgoKTm93LCBhIGNyaXRpY2FsIHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIGFueSBvZiB0aG9zZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgd291bGQgY2hhbmdlIHRoZSBnYW1lIGNvbnNpZGVyYWJseSwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBpcF9zZXRfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMDQ0PXN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIE5ldGxpbmsgUG9saWN5IEFycmF5KioKCkFscmlnaHQsIHNvIHRoZXNlIHBhcnRpY3VsYXIgZGF0YSBwb2ludHMgb3IgJiMzNDt0aG91Z2h0cyYjMzQ7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGNvbmNlcHR1YWxseSBzdGF0aWMg4oCTIHRoZXkmIzM5O3JlIG5vdCBkeW5hbWljIGluIHRoZWlyIGluaGVyZW50IG5hdHVyZSDigJMgYXJlIGFjdHVhbGx5ICphc3NpZ25lZCogdG8gdGhlIG5ldGxpbmsgcG9saWN5IG9yIGNhbGxiYWNrIGFycmF5LiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYXNzaWdubWVudCBmdWxseS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXM6IGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBhcnJheS4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIHN0cnVjdHVyZSwgY29udGVudCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2Ugc3RhdGljIGVsZW1lbnRzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoYXQgYWN0aXZlLCBjYWxsYmFjay1kcml2ZW4gZW52aXJvbm1lbnQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBvbGljeSBlbmZvcmNlbWVudCwgYW5kIGhvdyBkb2VzIHRoaXMgc3RhdGljIGRhdGEgaW5mbHVlbmNlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG9mIHRob3NlIGNhbGxiYWNrcz8gVGltZSB0byBkaXNzZWN0IHRoYXQgYXJyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIzNT1FWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV9yZWdpc3Rlcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM2LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIzNzovKiBVbnJlZ2lzdGVyIGEgc2V0IHR5cGUuIFRoZXJlJiMzOTtzIGEgc21hbGwgcmFjZSB3aXRoIGlwX3NldF9jcmVhdGUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMzgtdm9pZFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05NzM9c3RhcnRfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtOTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXBfc2V0X2NyZWF0ZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk4NC1cdFtJUFNFVF9BVFRSX1BST1RPQ09MXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEwNDQ9c3RhdGljIGludCBpcF9zZXRfbm9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEwNTA6c3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjE0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiW0lQU0VUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTUzLVx0W0lQU0VUX0NNRF9DUkVBVEVdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU0Olx0XHQuY2FsbFx0XHQ9IGlwX3NldF9jcmVhdGUsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE1NS1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX01VVEVYLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNTYtXHRcdC5hdHRyX2NvdW50XHQ9IElQU0VUX0FUVFJfQ01EX01BWCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU3Olx0XHQucG9saWN5XHRcdD0gaXBfc2V0X2NyZWF0ZV9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE1OC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDc2CgkJCQkJCQlvdXRwdXQ6IDM3MwoJCQkJCQkJdGhvdWdodHM6IDE5MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sICZhbXA7IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMgZm9yIElQIFNldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtYXAgb2Ygd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG1vc3QgY29uY2VudHJhdGVkLiAgU2luY2UgdGhlIGFkZHJlc3NlcyBvZiB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFyZSB0YWtlbiwgdGhleSBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzIGFuZCBhcmUgdGh1cyBnb29kIGZvY3VzIHN5bWJvbHMuICAKCkkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBhcyB3ZWxsIGFzIGEgbGFyZ2UgbnVtYmVyIG9mIGdlbmVyYXRlZCBoYXNoIGZ1bmN0aW9ucyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGFuZCBgbXR5cGVfZGVsX2NpZHJgLiBHaXZlbiB0aGUgaGlnaCBudW1iZXIgb2YgdGhlc2UgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzIHRoYXQgY2FsbCB0aGVtLCBhbmQgcG9zc2libHkgYSBoYW5kZnVsIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBgaGFzaF9uZXQ0X2FkZGAsIGFzIGl0IGRpcmVjdGx5IGNvbnRhaW5zIG9yIGNhbGxzIGxvZ2ljIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIAoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGV4aXN0cyBpbiB0aGUgb2JqZWN0IGZpbGUgYmVjYXVzZSBpdCBpcyBhc3NpZ25lZCB0byBgbXR5cGVfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAsIGFzIHdlbGwgYXMgYSBsaXN0IG9mIG5ldGxpbmsgZW50cnkgcG9pbnQgYW5kIGdlbmVyYXRlZCBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgdGhlIGluaXRpYWwgZm9jdXMgc3ltYm9scy4gVGhpcyBpcyB0aGUgbGlzdDoKCiogICBgaXBfc2V0X2NyZWF0ZWAKKiAgIGBpcF9zZXRfZGVzdHJveWAKKiAgIGBpcF9zZXRfZmx1c2hgCiogICBgaXBfc2V0X3VhZGRgCiogICBgaXBfc2V0X3VkZWxgCiogICBgaXBfc2V0X3V0ZXN0YAoqICAgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYAoqICAgYGlwX3NldF9pbml0X2NvbW1lbnRgCiogICBgaXBfc2V0X2NvbW1lbnRfZnJlZWAKKiAgIGBoYXNoX25ldDRfYWRkYAoqICAgYGhhc2hfbmV0NF9kZWxgCiogICBgaGFzaF9uZXQ0X3Rlc3RgCiogICBgaGFzaF9uZXQ2X2FkZGAKKiAgIGBoYXNoX25ldDZfZGVsYAoqICAgYGhhc2hfbmV0Nl90ZXN0YAoKSSYjMzk7bSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiBvZiBgbXR5cGVfYWRkYCwgd2hpY2ggZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAgYXMgZXhwZWN0ZWQuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgdGhlIGRhdGFwYXRoIGZ1bmN0aW9ucyAoYGthZHRgIGZ1bmN0aW9ucykgY2FsbGVkIGluIGBpcHRhYmxlc2AsIGFzIHRoZXkgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFNwZWNpZmljYWxseSwgdGhlc2U6CgoqICAgYGhhc2hfaXBwb3J0bmV0NF9rYWR0YAoqICAgYGhhc2hfbmV0NF9rYWR0YAoqICAgYGhhc2hfbmV0aWZhY2U0X2thZHRgCiogICBgaGFzaF9uZXRuZXQ0X2thZHRgCiogICBgaGFzaF9uZXRwb3J0NF9rYWR0YAoqICAgYGhhc2hfbmV0cG9ydG5ldDRfa2FkdGAKCk5leHQsIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBhZmZlY3RlZCBjb25maWd1cmF0aW9ucy4gIFRoZSBjaGFuZ2VzIHNlZW0gdG8gdGFyZ2V0IHNldmVyYWwgaGFzaCB0eXBlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFzIHdlbGwgYXMgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBgSVBfU0VUX0JJVE1BUF9QT1JUYCwgYW5kIHRoZSBiYXNpYyBgSVBfU0VUYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUmAgY29uZmlncy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwbGljaXRseSBtb2RpZmllZCBvbmVzOgoKKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUYAoqICAgYElQX1NFVF9IQVNIX05FVElGQUNFYAoqICAgYElQX1NFVF9IQVNIX05FVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRQT1JUYAoqICAgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgCiogICBgSVBfU0VUX0xJU1RfU0VUYAoqICAgYElQX1NFVF9CSVRNQVBfSVBgCiogICBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AKKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgCiogICBgSVBfU0VUYAoqICAgYElORVRgCiogICBgTkVURklMVEVSYAoKTm93LCByZWZpbmluZyB0aGUgZm9jdXMgc3ltYm9sIGxpc3QgYmFzZWQgb24gdGhlIHBhdGNoJiMzOTtzIGV4cGxpY2l0IG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgdGhlIGZpbmFsIGxpc3Q6CgoqICAgYGlwX3NldF9jcmVhdGVgCiogICBgaXBfc2V0X2Rlc3Ryb3lgCiogICBgaXBfc2V0X2ZsdXNoYAoqICAgYGlwX3NldF91YWRkYAoqICAgYGlwX3NldF91ZGVsYAoqICAgYGlwX3NldF91dGVzdGAKKiAgIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AKKiAgIGBpcF9zZXRfaW5pdF9jb21tZW50YAoqICAgYGlwX3NldF9jb21tZW50X2ZyZWVgCiogICBgaGFzaF8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aXBfc2V0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91ZGVsJiMzNDssCiAgICAmIzM0O2lwX3NldF91dGVzdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZGVzdHJveV9zZXRfd29yayYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfa2FkdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aXBfc2V0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91ZGVsJiMzNDssCiAgICAmIzM0O2lwX3NldF91dGVzdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZGVzdHJveV9zZXRfd29yayYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfa2FkdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM2OjQxLjA5NTI1MjExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQxMDkwMzEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9MSVNUX1NFVFwiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9JUFwiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9JUE1BQ1wiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9QT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2NyZWF0ZVwiLFxuICAgIFwiaXBfc2V0X2Rlc3Ryb3lcIixcbiAgICBcImlwX3NldF9mbHVzaFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIixcbiAgICBcImlwX3NldF91ZGVsXCIsXG4gICAgXCJpcF9zZXRfdXRlc3RcIixcbiAgICBcImlwX3NldF9kZXN0cm95X3NldF93b3JrXCIsXG4gICAgXCJpcF9zZXRfaW5pdF9jb21tZW50XCIsXG4gICAgXCJpcF9zZXRfY29tbWVudF9mcmVlXCIsXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0bmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2thZHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuMDk1MjU3ODU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ1MTEwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDc6MzY6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcbmluZGV4IGI5ODMzMTU3MmFkMjkuLmM0Njg2NGNjNjYyMzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcbkBAIC0yNDQsOCArMjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTtcXG4gXFxuIC8qIEEgZ2VuZXJpYyBJUCBzZXQgKi9cXG4gc3RydWN0IGlwX3NldCB7XFxuLVxcdC8qIEZvciBjYWxsX2NydSBpbiBkZXN0cm95ICovXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cXG4rXFx0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xcbiBcXHQvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovXFxuIFxcdGNoYXIgbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTtcXG4gXFx0LyogTG9jayBwcm90ZWN0aW5nIHRoZSBzZXQgZGF0YSAqL1xcbkBAIC0yNzMsNyArMjczLDcgQEAgc3RydWN0IGlwX3NldCB7XFxuIFxcdC8qIE51bWJlciBvZiBlbGVtZW50cyAodnMgdGltZW91dCkgKi9cXG4gXFx0dTMyIGVsZW1lbnRzO1xcbiBcXHQvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovXFxuLVxcdHNpemVfdCBleHRfc2l6ZTtcXG4rXFx0YXRvbWljNjRfdCBleHRfc2l6ZTtcXG4gXFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cXG4gXFx0c2l6ZV90IGRzaXplO1xcbiBcXHQvKiBPZmZzZXRzIHRvIGV4dGVuc2lvbnMgaW4gZWxlbWVudHMgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcXG5AQCAtNzcsNyArNzcsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdG10eXBlX2V4dF9jbGVhbnVwKHNldCk7XFxuIFxcdGJpdG1hcF96ZXJvKG1hcC1cXHUwMDNlbWVtYmVycywgbWFwLVxcdTAwM2VlbGVtZW50cyk7XFxuIFxcdHNldC1cXHUwMDNlZWxlbWVudHMgPSAwO1xcbi1cXHRzZXQtXFx1MDAzZWV4dF9zaXplID0gMDtcXG4rXFx0YXRvbWljNjRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplLCAwKTtcXG4gfVxcbiBcXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXFxuQEAgLTkzLDcgKzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcXG4tXFx0c2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LVxcdTAwM2Vkc2l6ZSkgKyBzZXQtXFx1MDAzZWV4dF9zaXplO1xcbitcXHRzaXplX3QgbWVtc2l6ZSA9IG10eXBlX21lbXNpemUobWFwLCBzZXQtXFx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXG4gXFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xcbiBcXHRpZiAoIW5lc3RlZClcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXFxuaW5kZXggNmNmYWQxNTJkN2QxYi4uNTQzODUxYTkyM2QwZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiBzdGF0aWMgTElTVF9IRUFEKGlwX3NldF90eXBlX2xpc3QpO1xcdFxcdC8qIGFsbCByZWdpc3RlcmVkIHNldCB0eXBlcyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKGlwX3NldF90eXBlX211dGV4KTtcXHRcXHQvKiBwcm90ZWN0cyBpcF9zZXRfdHlwZV9saXN0ICovXFxuIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwX3NldF9yZWZfbG9jayk7XFx0XFx0LyogcHJvdGVjdHMgdGhlIHNldCByZWZzICovXFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXBzZXRfZGVzdHJveV93cTtcXG4gXFxuIHN0cnVjdCBpcF9zZXRfbmV0IHtcXG4gXFx0c3RydWN0IGlwX3NldCAqIF9fcmN1ICppcF9zZXRfbGlzdDtcXHQvKiBhbGwgaW5kaXZpZHVhbCBzZXRzICovXFxuQEAgLTM1MCw3ICszNTEsNyBAQCBpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbiBcXHRzaXplX3QgbGVuID0gZXh0LVxcdTAwM2Vjb21tZW50ID8gc3RybGVuKGV4dC1cXHUwMDNlY29tbWVudCkgOiAwO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGMpKSB7XFxuLVxcdFxcdHNldC1cXHUwMDNlZXh0X3NpemUgLT0gc2l6ZW9mKCpjKSArIHN0cmxlbihjLVxcdTAwM2VzdHIpICsgMTtcXG4rXFx0XFx0YXRvbWljNjRfc3ViKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXFx1MDAzZWMsIE5VTEwpO1xcbiBcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gXFx0fVxcbkBAIC0zNjIsNyArMzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG4gXFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRzdHJzY3B5KGMtXFx1MDAzZXN0ciwgZXh0LVxcdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcXG4tXFx0c2V0LVxcdTAwM2VleHRfc2l6ZSArPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxO1xcbitcXHRhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVxcdTAwM2VzdHIpICsgMSwgXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2luaXRfY29tbWVudCk7XFxuQEAgLTM5Miw3ICszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxcbiBcXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRzZXQtXFx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDE7XFxuK1xcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBOVUxMKTtcXG4gXFx0a2ZyZWVfcmN1KGMsIHJjdSk7XFxuIH1cXG5AQCAtMTE3OCwyMiArMTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxuIFxcdFxcdFxcdFxcdCAgICAubGVuID0gSVBTRVRfTUFYTkFNRUxFTiAtIDEgfSxcXG4gfTtcXG4gXFxuLS8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsIGl0IGlzIHNwbGl0XFxuLSAqIGludG8gdHdvIHN0YWdlczpcXG4tICogLSBDYW5jZWwgZ2FyYmFnZSBjb2xsZWN0b3JcXG4tICogLSBEZXN0cm95IHRoZSBzZXQgaXRzZWxmIHZpYSBjYWxsX3JjdSgpXFxuLSAqL1xcbi1cXG4gc3RhdGljIHZvaWRcXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTtcXG4tXFxuIFxcdHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlZGVzdHJveShzZXQpO1xcbiBcXHRtb2R1bGVfcHV0KHNldC1cXHUwMDNldHlwZS1cXHUwMDNlbWUpO1xcbiBcXHRrZnJlZShzZXQpO1xcbiB9XFxuIFxcbisvKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LFxcbisgKiBkZXN0cnVjdGlvbiBpcyBkb25lIGFzeW5jaHJvbm91c2x5IHZpYSB3b3JrIHF1ZXVlcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK2lwX3NldF9kZXN0cm95X3NldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlwX3NldCwgcndvcmspO1xcbitcXG4rXFx0ZGVzdHJveV9hbmRfZnJlZV9zZXQoc2V0KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gX2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpXFxuIHtcXG5AQCAtMTI4Myw3ICsxMjg4LDggQEAgc3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHQvKiBNdXN0IHdhaXQgZm9yIGZsdXNoIHRvIGJlIHJlYWxseSBmaW5pc2hlZCAgKi9cXG4gXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRjYWxsX3JjdShcXHUwMDI2cy1cXHUwMDNlcmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTtcXG4rXFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2cy1cXHUwMDNlcndvcmssIGlwX3NldF9kZXN0cm95X3NldF93b3JrKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXFx1MDAyNnMtXFx1MDAzZXJ3b3JrKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gb3V0OlxcbkBAIC0yNDIxLDE4ICsyNDI3LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfc2V0X25ldF9vcHMgPSB7XFxuIHN0YXRpYyBpbnQgX19pbml0XFxuIGlwX3NldF9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlwc2V0X2Rlc3Ryb3lfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwiaXBzZXRfZGVzdHJveV93cVxcXCIsIDApO1xcbitcXHRpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgcGVybmV0X3N1YnN5cy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIG91dF93cTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0aWYgKHJldCAhPSAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgd2l0aCBuZm5ldGxpbmsuXFxcXG5cXFwiKTtcXG4gXFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3dxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KFxcdTAwMjZzb19zZXQpO1xcbkBAIC0yNDQwLDEwICsyNDUxLDEzIEBAIGlwX3NldF9pbml0KHZvaWQpXFxuIFxcdFxcdHByX2VycihcXFwiU09fU0VUIHJlZ2lzdHJ5IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3dxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rb3V0X3dxOlxcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0XFxuQEAgLTI0NTMsOSArMjQ2Nyw3IEBAIGlwX3NldF9maW5pKHZvaWQpXFxuIFxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuIFxcbi1cXHQvKiBXYWl0IGZvciBjYWxsX3JjdSgpIGluIGRlc3Ryb3kgKi9cXG4tXFx0cmN1X2JhcnJpZXIoKTtcXG4tXFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwidGhlc2UgYXJlIHRoZSBmYW1vdXMgbGFzdCB3b3Jkc1xcXFxuXFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbkBAIC05OSw5ICs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2VuZGlmXFxuIFxcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cXG4rc3RydWN0IG5ldF9wcmVmaXgge1xcbitcXHR1OCBjaWRyO1xcdFxcdFxcdC8qIHRoZSBjaWRyIHZhbHVlICovXFxuK1xcdHUzMiBjb3VudDtcXHRcXHRcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhpcyBjaWRyICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4tXFx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cXG4tXFx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cXG4rXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0dTggbGVuO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XFxuIH07XFxuIFxcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cXG5AQCAtMTI3LDExICsxMzMsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcXG4gI2Vsc2VcXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcXHRcXHQoY2lkcilcXG4gI2VuZGlmXFxuLVxcbi0vKiBjaWRyICsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cXG4tI2RlZmluZSBOQ0lEUl9QVVQoY2lkcilcXHRcXHQoKGNpZHIpICsgMSlcXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcXHRcXHQoKGNpZHIpIC0gMSlcXG4tXFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VEXFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcXHRcXHQoKGNpZHIpIC0gMSlcXG5AQCAtMTQxLDIxICsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXFx0X19DSURSKGNpZHIsIGkpXFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVxcdFxcXFxcXG4tXFx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxcbi1cXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbi0vKiBjaWRyIGZyb20gMCB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICsgMSAqL1xcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQoSE9TVF9NQVNLICsgMSlcXG4tI2RlZmluZSBDSURSX1BPUyhjKVxcdFxcdCgoYykgLSAxKVxcbi0jZWxzZVxcbi0vKiBjaWRyIGZyb20gMSB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICsgMSAqL1xcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHRIT1NUX01BU0tcXG4tI2RlZmluZSBDSURSX1BPUyhjKVxcdFxcdCgoYykgLSAyKVxcbi0jZW5kaWZcXG4rI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoe1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1xcdFxcdFxcXFxcXG4rXFx0RENJRFJfUFVUKChfX24pLVxcdTAwM2VsZW4gPyAoX19uKS1cXHUwMDNlbmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcXFxcXFxuK30pXFxuIFxcbi0jZWxzZVxcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQwXFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cXG4gXFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXFx0XFxcXFxcbkBAIC0yMDQsMTIgKzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuICN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbiAjdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuKyN1bmRlZiBtdHlwZV9kZWxfY2lkcl9hbGxcXG4gI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4gI3VuZGVmIG10eXBlX2ZsdXNoXFxuICN1bmRlZiBtdHlwZV9kZXN0cm95XFxuICN1bmRlZiBtdHlwZV9zYW1lX3NldFxcbiAjdW5kZWYgbXR5cGVfa2FkdFxcbiAjdW5kZWYgbXR5cGVfdWFkdFxcbisjdW5kZWYgbXR5cGVfYnVja2V0X3NpemVcXG4rI3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxcbiBcXG4gI3VuZGVmIG10eXBlX2FkZFxcbiAjdW5kZWYgbXR5cGVfZGVsXFxuQEAgLTI0OSwxMiArMjQzLDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4gI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxuICNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbiAjZGVmaW5lIG10eXBlX2RlbF9jaWRyXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcXG4rI2RlZmluZSBtdHlwZV9kZWxfY2lkcl9hbGxcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbClcXG4gI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9haGFzaF9tZW1zaXplKVxcbiAjZGVmaW5lIG10eXBlX2ZsdXNoXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9mbHVzaClcXG4gI2RlZmluZSBtdHlwZV9kZXN0cm95XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxcbiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9zYW1lX3NldClcXG4gI2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbiAjZGVmaW5lIG10eXBlX3VhZHRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpXFxuKyNkZWZpbmUgbXR5cGVfYnVja2V0X3NpemVcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxcbisjZGVmaW5lIG10eXBlX2hhc2hfc2l6ZVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKVxcbiBcXG4gI2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG4gI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5AQCAtMjkyLDYgKzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cXG4gc3RydWN0IGh0eXBlIHtcXG4gXFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgX19yY3UgKnJuZXRzW0lQU0VUX05FVF9DT1VOVF07IC8qIGNpZHIgcHJlZml4ZXMgKi9cXG4gXFx0c3RydWN0IGh0YWJsZV9nYyBnYztcXHQvKiBnYyB3b3JrcXVldWUgKi9cXG4gXFx0dTMyIG1heGVsZW07XFx0XFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXFxuIFxcdHUzMiBpbml0dmFsO1xcdFxcdC8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovXFxuQEAgLTMwMiw5ICszMDAsNiBAQCBzdHJ1Y3QgaHR5cGUge1xcbiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKVxcbiBcXHR1OCBuZXRtYXNrO1xcdFxcdC8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi9cXG4gXFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7XFx0Lyogc3RvcmVzIGJpdG1hc2sgKi9cXG4tI2VuZGlmXFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0c3RydWN0IG5ldF9wcmVmaXhlcyBuZXRzW05MRU5dOyAvKiBib29rLWtlZXBpbmcgb2YgcHJlZml4ZXMgKi9cXG4gI2VuZGlmXFxuIFxcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcXG4gXFx0ICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAnbmV4dCcuXFxuQEAgLTMyNiw1NSArMzIxLDEwOCBAQCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcXG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxcbiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXFxuICAqL1xcbi1zdGF0aWMgdm9pZFxcbitzdGF0aWMgaW50XFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXJuZXRzW25dKTtcXG4gXFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xcbi1cXHRmb3IgKGkgPSAwLCBqID0gLTE7IGkgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXTsgaSsrKSB7XFxuLVxcdFxcdGlmIChqICE9IC0xKSB7XFxuK1xcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4rXFx0XFx0XFx0bGVuKys7XFxuK1xcdFxcdGlmIChmb3VuZCAhPSAtMSkge1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gXFx1MDAzYyBjaWRyKSB7XFxuLVxcdFxcdFxcdGogPSBpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XFxuLVxcdFxcdFxcdGgtXFx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0rKztcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgXFx1MDAzYyBjaWRyKSB7XFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xcbitcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50Kys7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKGogIT0gLTEpIHtcXG4tXFx0XFx0Zm9yICg7IGkgXFx1MDAzZSBqOyBpLS0pXFxuLVxcdFxcdFxcdGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSA9IGgtXFx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XFxuK1xcdGxlbisrO1xcbitcXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHRtcC1cXHUwMDNlbGVuID0gbGVuO1xcbitcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmIChpID09IGZvdW5kKSB7XFxuK1xcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcXG4rXFx0XFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSAxO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyO1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQ7XFxuIFxcdH1cXG4tXFx0aC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcXG4tXFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XFxuK1xcdGlmIChmb3VuZCA9PSAtMSkge1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jb3VudCA9IDE7XFxuK1xcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW25dLCB0bXApO1xcbitcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxuIHtcXG4tXFx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHR1OCBpLCBqLCBsZW4gPSAwO1xcbitcXHRpbnQgZm91bmQ7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOTEVOOyBpKyspIHtcXG4tXFx0XFx0aWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSAhPSBjaWRyKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xcbi1cXHRcXHRpZiAoaC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2MgbmV0X2VuZCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2pdLmNpZHJbbl07IGorKylcXG4tXFx0XFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cXHUwMDNlbmV0c1tqICsgMV0uY2lkcltuXTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcXG4rXFx0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cXHUwMDNlcm5ldHNbbl0pO1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XFxuK1xcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdGxlbi0tO1xcbitcXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApXFxuK1xcdFxcdC8qIExlYXZlIGEgaG9sZSAqL1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHRtcC1cXHUwMDNlbGVuID0gbGVuO1xcbitcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudDtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cXHUwMDNlcm5ldHNbbl0sIHRtcCk7XFxuK1xcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xcbiB1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIHZvaWRcXG4rbXR5cGVfZGVsX2NpZHJfYWxsKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YSlcXG4re1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGludCBrO1xcbitcXG4rXFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxcbitcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsIERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSwgayk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBtZW1vcnkgc2l6ZSBvZiB0aGUgc2V0IGRhdGEgKi9cXG4gc3RhdGljIHNpemVfdFxcbiBtdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcXG5AQCAtNDAyLDYgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkXFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBodGFibGUgKnQ7XFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgciwgaTtcXG5AQCAtNDI1LDcgKzQ3NiwxOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW3JdLmxvY2spO1xcbiBcXHR9XFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0bWVtc2V0KGgtXFx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVxcdTAwM2VuZXRzKSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuK1xcdFxcdHRtcCA9IGt6YWxsb2Nfb2JqKCp0bXAsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIXRtcCkge1xcbitcXHRcXHRcXHR1OCBqO1xcbitcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaisrKVxcbitcXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbitcXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC00MzMsNiArNDk2LDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG4ge1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTQ0Niw2ICs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXFxuIFxcdFxcdGtmcmVlKG4pO1xcbiBcXHR9XFxuIFxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGlmIChleHRfZGVzdHJveSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbitcXHRcXHRcXHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXFx1MDAzZXJuZXRzW2ldKSk7XFxuKyNlbmRpZlxcbiBcXHRpcF9zZXRfZnJlZSh0LVxcdTAwM2VocmVnaW9uKTtcXG4gXFx0aXBfc2V0X2ZyZWUodCk7XFxuIH1cXG5AQCAtNDkzLDkgKzU2NCw2IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4gXFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxuIFxcdHUzMiBpLCBqLCBkO1xcbiBcXHRzaXplX3QgZHNpemUgPSBzZXQtXFx1MDAzZWRzaXplO1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHU4IGs7XFxuLSNlbmRpZlxcbiBcXHR1OCBwb3MsIGh0YWJsZV9iaXRzID0gdC1cXHUwMDNlaHRhYmxlX2JpdHM7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxuQEAgLTUxNiwxMiArNTg0LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXhwaXJlZCAldS8ldVxcXFxuXFxcIiwgaSwgaik7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdChqLCBuLVxcdTAwM2V1c2VkKTtcXG4gXFx0XFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi1cXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrKyspXFxuLVxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4tXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLVxcdFxcdFxcdFxcdFxcdGspO1xcbi0jZW5kaWZcXG4rXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7XFxuIFxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4gXFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcdFxcdFxcdGQrKztcXG5AQCAtOTQ3LDEyICsxMDEwLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdFxcdGogPSAwO1xcbiBcXHRcXHRkYXRhID0gYWhhc2hfZGF0YShuLCBqLCBzZXQtXFx1MDAzZWRzaXplKTtcXG4gXFx0XFx0aWYgKCFkZWxldGVkKSB7XFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbi1cXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxuLVxcdFxcdFxcdFxcdFxcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cXHUwMDNlY2lkciwgaSkpLFxcbi1cXHRcXHRcXHRcXHRcXHRpKTtcXG4tI2VuZGlmXFxuK1xcdFxcdFxcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xcbiBcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG4gXFx0XFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbiBcXHRcXHR9XFxuQEAgLTk5Niw3ICsxMDU0LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMrKztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLVxcdFxcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSksIGkpO1xcbitcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxcbkBAIC0xMTA3LDExICsxMTY1LDcgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdGlmIChpICsgMSA9PSBwb3MpXFxuIFxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuLVxcdTAwM2Vwb3MsIC0tcG9zKTtcXG4gXFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4tXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBqKSksIGopO1xcbi0jZW5kaWZcXG4rXFx0XFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZCk7XFxuIFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbiBcXG4gXFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbkBAIC0xMTkzLDI4ICsxMjQ3LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4tXFx0aW50IHJldCwgaSwgaiA9IDAsIGs7XFxuK1xcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuLVxcdGludCByZXQsIGksIGogPSAwO1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbiAjZW5kaWZcXG4gXFx0dTMyIGtleSwgbXVsdGkgPSAwO1xcbiBcXHR1OCBwb3M7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwidGVzdCBieSBuZXRzXFxcXG5cXFwiKTtcXG4tXFx0Zm9yICg7IGogXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbal0uY2lkclswXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7IGorKykge1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzFdKTtcXG4rI2VuZGlmXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuK1xcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVxcdTAwM2VuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7XFxuLVxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNba10uY2lkclsxXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7XFxuLVxcdFxcdCAgICAgaysrKSB7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1trXS5jaWRyWzFdKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdHJ1ZSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuZXRzMS1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaysrKSB7XFxuK1xcdFxcdFxcdGlmICghbmV0czEtXFx1MDAzZW5ldHNba10uY291bnQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtXFx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XFxuICNlbHNlXFxuLVxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEyMjksNyArMTI5Miw3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJldCA9IG10eXBlX2RhdGFfbWF0Y2goZGF0YSwgZXh0LCBtZXh0LCBzZXQsIGZsYWdzKTtcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcXG4gXFx0XFx0XFx0LyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi9cXG4gXFx0XFx0XFx0bXVsdGkgPSAwO1xcbkBAIC0xMjM5LDcgKzEzMDIsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiBcXHRcXHR9XFxuICNlbmRpZlxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXQgPSAwO1xcbit1bmxvY2s6XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMTI5NCw2ICsxMzYwLDI0IEBAIG10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBtdHlwZV9oYXNoX3NpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBodGFibGUgKnQ7XFxuK1xcdHU4IGh0YWJsZV9iaXRzO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR0ID0gcmN1X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXRhYmxlKTtcXG4rXFx0aHRhYmxlX2JpdHMgPSB0LVxcdTAwM2VodGFibGVfYml0cztcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gamhhc2hfc2l6ZShodGFibGVfYml0cyk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgbXR5cGVfYnVja2V0X3NpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoKVxcbit7XFxuK1xcdHJldHVybiBoLVxcdTAwM2VidWNrZXRzaXplO1xcbit9XFxuK1xcbiAvKiBSZXBseSBhIEhFQURFUiByZXF1ZXN0OiBmaWxsIG91dCB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIHNldCAqL1xcbiBzdGF0aWMgaW50XFxuIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xMzA0LDIxICsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzaXplX3QgbWVtc2l6ZTtcXG4gXFx0dTMyIGVsZW1lbnRzID0gMDtcXG4gXFx0c2l6ZV90IGV4dF9zaXplID0gMDtcXG4tXFx0dTggaHRhYmxlX2JpdHM7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIFxcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbiBcXHRtdHlwZV9leHRfc2l6ZShzZXQsIFxcdTAwMjZlbGVtZW50cywgXFx1MDAyNmV4dF9zaXplKTtcXG4tXFx0bWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgKyBleHRfc2l6ZSArIHNldC1cXHUwMDNlZXh0X3NpemU7XFxuLVxcdGh0YWJsZV9iaXRzID0gdC1cXHUwMDNlaHRhYmxlX2JpdHM7XFxuK1xcdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICsgZXh0X3NpemUgKyBhdG9taWM2NF9yZWFkKFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcbiBcXHRuZXN0ZWQgPSBubGFfbmVzdF9zdGFydChza2IsIElQU0VUX0FUVFJfREFUQSk7XFxuIFxcdGlmICghbmVzdGVkKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tXFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0hBU0hTSVpFLFxcbi1cXHRcXHRcXHQgIGh0b25sKGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpKSkgfHxcXG4tXFx0ICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXFx1MDAzZW1heGVsZW0pKSlcXG4rXFxuK1xcdGlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9IQVNIU0laRSwgaHRvbmwobXR5cGVfaGFzaF9zaXplKGgpKSkpXFxuK1xcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC1cXHUwMDNlbWF4ZWxlbSkpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTS1xcbiBcXHQvKiBpZiBuZXRtYXNrIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIEhPU1RfTUFTSyB3ZSBrbm93IHRoYXQgdGhlIHVzZXIgc3VwcGxpZWQgbmV0bWFza1xcbkBAIC0xMzQyLDggKzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuICNlbmRpZlxcbiBcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQU0VUX0NSRUFURV9GTEFHX0JVQ0tFVFNJWkUpIHtcXG4tXFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJUFNFVF9BVFRSX0JVQ0tFVFNJWkUsIGgtXFx1MDAzZWJ1Y2tldHNpemUpIHx8XFxuLVxcdFxcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVxcdTAwM2Vpbml0dmFsKSkpXFxuK1xcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXHRcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSU5JVFZBTCwgaHRvbmwoaC1cXHUwMDNlaW5pdHZhbCkpKVxcbiBcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFx0fVxcbiBcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywgaHRvbmwoc2V0LVxcdTAwM2VyZWYpKSB8fFxcbkBAIC0xNTA0LDYgKzE1ODgsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xcbiBcXHR1OCBuZXRtYXNrID0gc2V0LVxcdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XFxuKyNlbmRpZlxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XFxuICNlbmRpZlxcbiBcXHRzaXplX3QgaHNpemU7XFxuIFxcdHN0cnVjdCBodHlwZSAqaDtcXG5AQCAtMTYwNCwyMSArMTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdCAqL1xcbiBcXHRoYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpO1xcbiBcXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcXG4tXFx0aWYgKGhzaXplID09IDApIHtcXG4tXFx0XFx0a2ZyZWUoaCk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuK1xcdGlmIChoc2l6ZSA9PSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XFxuLVxcdGlmICghdCkge1xcbi1cXHRcXHRrZnJlZShoKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFx0aWYgKCF0KVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dC1cXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xcbi1cXHRpZiAoIXQtXFx1MDAzZWhyZWdpb24pIHtcXG4tXFx0XFx0aXBfc2V0X2ZyZWUodCk7XFxuLVxcdFxcdGtmcmVlKGgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VocmVnaW9uKVxcbitcXHRcXHRnb3RvIGZyZWVfdDtcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcXG4rXFx0XFx0aWYgKCFuZXRzKSB7XFxuK1xcdFxcdFxcdHdoaWxlIChpIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVxcdTAwM2VybmV0c1stLWldKSk7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9ocmVnaW9uO1xcbitcXHRcXHR9XFxuK1xcdFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xcbiBcXHR9XFxuKyNlbmRpZlxcbiBcXHRoLVxcdTAwM2VnYy5zZXQgPSBzZXQ7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSsrKVxcbkBAIC0xNjUwLDYgKzE3NDEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0LVxcdTAwM2VhZCk7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNldGFibGUsIHQpO1xcbiBcXHRzZXQtXFx1MDAzZWRhdGEgPSBoO1xcbitcXG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcXG4gXFx0aWYgKHNldC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbiAjZW5kaWZcXG5AQCAtMTY3OCwxMCArMTc3MCwyMCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCJjcmVhdGUgJXMgaGFzaHNpemUgJXUgKCV1KSBtYXhlbGVtICV1OiAlcCglcClcXFxcblxcXCIsXFxuLVxcdFxcdCBzZXQtXFx1MDAzZW5hbWUsIGpoYXNoX3NpemUodC1cXHUwMDNlaHRhYmxlX2JpdHMpLFxcbitcXHRcXHQgc2V0LVxcdTAwM2VuYW1lLCBtdHlwZV9oYXNoX3NpemUoaCksXFxuIFxcdFxcdCB0LVxcdTAwM2VodGFibGVfYml0cywgaC1cXHUwMDNlbWF4ZWxlbSwgc2V0LVxcdTAwM2VkYXRhLCB0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitmcmVlX2hyZWdpb246XFxuK1xcdGlwX3NldF9mcmVlKHQtXFx1MDAzZWhyZWdpb24pO1xcbisjZW5kaWZcXG4rZnJlZV90OlxcbitcXHRpcF9zZXRfZnJlZSh0KTtcXG4rZnJlZV9oOlxcbitcXHRrZnJlZShoKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcXG5pbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXFxuQEAgLTEzOCw3ICsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zOTgsNyArMzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG5pbmRleCBjZTBhOWNlNWE5MWYxLi4wOTJmM2M5MjgxYjgwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0yOTEsNyArMjkxLDcgQEAgaGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXFxuaW5kZXggMzBhNjU1ZTVjNGZkYy4uYjQ0Yjk1Zjc2NmI3YSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG5AQCAtMTYxLDcgKzE2MSw3IEBAIGhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHtcXG4tXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxcbitcXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcXG4gXFx0XFx0LmVsZW0gPSAxLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbkBAIC0zODIsNyArMzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHRcXHQuZWxlbSA9IDEsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXFxuaW5kZXggOGZiZTY0OWM5ZGQzZC4uZjdjOGExY2MzMGZjNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xcbkBAIC0xNDksOCArMTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcXG4gXFxuQEAgLTM4OCw4ICszOTAsMTAgQEAgaGFzaF9uZXRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuaW5kZXggZDFhMDYyOGRmNGVmMy4uNWRlNGI1MTFkZTc2MyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBoYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zNTMsNyArMzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbmluZGV4IGJmNGY5MWI3OGUxZGMuLjYyOTE1MzJiZTdhNWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbkBAIC0xNTcsOCArMTU3LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5AQCAtNDUyLDggKzQ1NCwxMCBAQCBoYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5pbmRleCAxY2VmODRmMTVlOGM3Li5jYTNlZjk0NzllODM4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXFxuQEAgLTQyMSw3ICs0MjEsNyBAQCBsaXN0X3NldF9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuLCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBsaXN0KVxcbiBcXHRcXHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcXG4gXFx0c2V0LVxcdTAwM2VlbGVtZW50cyA9IDA7XFxuLVxcdHNldC1cXHUwMDNlZXh0X3NpemUgPSAwO1xcbitcXHRhdG9taWM2NF9zZXQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZFxcbkBAIC00NTUsNyArNDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcXG4tXFx0c2l6ZV90IG1lbXNpemUgPSBsaXN0X3NldF9tZW1zaXplKG1hcCwgc2V0LVxcdTAwM2Vkc2l6ZSkgKyBzZXQtXFx1MDAzZWV4dF9zaXplO1xcbitcXHRzaXplX3QgbWVtc2l6ZSA9IGxpc3Rfc2V0X21lbXNpemUobWFwLCBzZXQtXFx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXG4gXFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xcbiBcXHRpZiAoIW5lc3RlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuNzMwODE3MzA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI2Nzc1MzIxOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9zZXRfY3JlYXRlXCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveVwiLFxuICAgIFwiaXBfc2V0X2ZsdXNoXCIsXG4gICAgXCJpcF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VkZWxcIixcbiAgICBcImlwX3NldF91dGVzdFwiLFxuICAgIFwiaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIixcbiAgICBcImlwX3NldF9jb21tZW50X2ZyZWVcIixcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfa2FkdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQIHNldCBkZXN0cnVjdGlvbiBsb2dpYyB0byB1c2UgYSB3b3JrcXVldWUgaW5zdGVhZCBvZiBSQ1UgZGlyZWN0bHksIGNoYW5nZXMgdGhlIGV4dGVuc2lvbiBzaXplIHRyYWNraW5nIHRvIHVzZSBhdG9taWM2NF90LCBhbmQgcmVmYWN0b3JzIHRoZSBDSURSIHByZWZpeCB0cmFja2luZyBpbiBoYXNoIHNldHMgdG8gdXNlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheXMgYW5kIFJDVS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIElQIHNldCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3Qgc2V0IGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgZWxlbWVudCBhZGRpdGlvbi9kZWxldGlvbiwgYW5kIG1hdGNoaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbmluZGV4IGI5ODMzMTU3MmFkMjkuLmM0Njg2NGNjNjYyMzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbkBAIC0yNDQsOCArMjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTtcbiBcbiAvKiBBIGdlbmVyaWMgSVAgc2V0ICovXG4gc3RydWN0IGlwX3NldCB7XG4tXHQvKiBGb3IgY2FsbF9jcnUgaW4gZGVzdHJveSAqL1xuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbitcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cbitcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiBcdC8qIFRoZSBuYW1lIG9mIHRoZSBzZXQgKi9cbiBcdGNoYXIgbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTtcbiBcdC8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi9cbkBAIC0yNzMsNyArMjczLDcgQEAgc3RydWN0IGlwX3NldCB7XG4gXHQvKiBOdW1iZXIgb2YgZWxlbWVudHMgKHZzIHRpbWVvdXQpICovXG4gXHR1MzIgZWxlbWVudHM7XG4gXHQvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovXG4tXHRzaXplX3QgZXh0X3NpemU7XG4rXHRhdG9taWM2NF90IGV4dF9zaXplO1xuIFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cbiBcdHNpemVfdCBkc2l6ZTtcbiBcdC8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtNzcsNyArNzcsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gXHRcdG10eXBlX2V4dF9jbGVhbnVwKHNldCk7XG4gXHRiaXRtYXBfemVybyhtYXAtXHUwMDNlbWVtYmVycywgbWFwLVx1MDAzZWVsZW1lbnRzKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuK1x0YXRvbWljNjRfc2V0KFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSwgMCk7XG4gfVxuIFxuIC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIG1lbW9yeSBzaXplIG9mIHRoZSBzZXQgZGF0YSAqL1xuQEAgLTkzLDcgKzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgKyBzZXQtXHUwMDNlZXh0X3NpemU7XG4rXHRzaXplX3QgbWVtc2l6ZSA9IG10eXBlX21lbXNpemUobWFwLCBzZXQtXHUwMDNlZHNpemUpICsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5pbmRleCA2Y2ZhZDE1MmQ3ZDFiLi41NDM4NTFhOTIzZDBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0yNSw2ICsyNSw3IEBAXG4gc3RhdGljIExJU1RfSEVBRChpcF9zZXRfdHlwZV9saXN0KTtcdFx0LyogYWxsIHJlZ2lzdGVyZWQgc2V0IHR5cGVzICovXG4gc3RhdGljIERFRklORV9NVVRFWChpcF9zZXRfdHlwZV9tdXRleCk7XHRcdC8qIHByb3RlY3RzIGlwX3NldF90eXBlX2xpc3QgKi9cbiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcF9zZXRfcmVmX2xvY2spO1x0XHQvKiBwcm90ZWN0cyB0aGUgc2V0IHJlZnMgKi9cbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwc2V0X2Rlc3Ryb3lfd3E7XG4gXG4gc3RydWN0IGlwX3NldF9uZXQge1xuIFx0c3RydWN0IGlwX3NldCAqIF9fcmN1ICppcF9zZXRfbGlzdDtcdC8qIGFsbCBpbmRpdmlkdWFsIHNldHMgKi9cbkBAIC0zNTAsNyArMzUxLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIFxuIFx0aWYgKHVubGlrZWx5KGMpKSB7XG4tXHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDEsIFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIFx0XHRrZnJlZV9yY3UoYywgcmN1KTtcbiBcdH1cbkBAIC0zNjIsNyArMzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbiBcdHN0cnNjcHkoYy1cdTAwM2VzdHIsIGV4dC1cdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcbi1cdHNldC1cdTAwM2VleHRfc2l6ZSArPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVx1MDAzZXN0cikgKyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuQEAgLTM5Miw3ICszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxuIFx0YyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbi1cdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRhdG9taWM2NF9zdWIoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVx1MDAzZXN0cikgKyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gXHRrZnJlZV9yY3UoYywgcmN1KTtcbiB9XG5AQCAtMTE3OCwyMiArMTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XG4gXHRcdFx0XHQgICAgLmxlbiA9IElQU0VUX01BWE5BTUVMRU4gLSAxIH0sXG4gfTtcbiBcbi0vKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LCBpdCBpcyBzcGxpdFxuLSAqIGludG8gdHdvIHN0YWdlczpcbi0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvclxuLSAqIC0gRGVzdHJveSB0aGUgc2V0IGl0c2VsZiB2aWEgY2FsbF9yY3UoKVxuLSAqL1xuLVxuIHN0YXRpYyB2b2lkXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4rZGVzdHJveV9hbmRfZnJlZV9zZXQoc3RydWN0IGlwX3NldCAqc2V0KVxuIHtcbi1cdHN0cnVjdCBpcF9zZXQgKnNldCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaXBfc2V0LCByY3UpO1xuLVxuIFx0c2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlZGVzdHJveShzZXQpO1xuIFx0bW9kdWxlX3B1dChzZXQtXHUwMDNldHlwZS1cdTAwM2VtZSk7XG4gXHRrZnJlZShzZXQpO1xuIH1cbiBcbisvKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LFxuKyAqIGRlc3RydWN0aW9uIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgdmlhIHdvcmsgcXVldWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkXG4raXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBpcF9zZXQgKnNldCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfc2V0LCByd29yayk7XG4rXG4rXHRkZXN0cm95X2FuZF9mcmVlX3NldChzZXQpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIF9kZXN0cm95X2FsbF9zZXRzKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0KVxuIHtcbkBAIC0xMjgzLDcgKzEyODgsOCBAQCBzdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0LyogTXVzdCB3YWl0IGZvciBmbHVzaCB0byBiZSByZWFsbHkgZmluaXNoZWQgICovXG4gXHRcdFx0cmN1X2JhcnJpZXIoKTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZzLVx1MDAzZXJjdSwgaXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdSk7XG4rXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2cy1cdTAwM2Vyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhpcHNldF9kZXN0cm95X3dxLCBcdTAwMjZzLVx1MDAzZXJ3b3JrKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIG91dDpcbkBAIC0yNDIxLDE4ICsyNDI3LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfc2V0X25ldF9vcHMgPSB7XG4gc3RhdGljIGludCBfX2luaXRcbiBpcF9zZXRfaW5pdCh2b2lkKVxuIHtcbi1cdGludCByZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbitcdGludCByZXQ7XG4rXG4rXHRpcHNldF9kZXN0cm95X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJpcHNldF9kZXN0cm95X3dxXCIsIDApO1xuK1x0aWYgKCFpcHNldF9kZXN0cm95X3dxKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciBwZXJuZXRfc3Vic3lzLlxcblwiKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfd3E7XG4gXHR9XG4gXG4gXHRyZXQgPSBuZm5ldGxpbmtfc3Vic3lzX3JlZ2lzdGVyKFx1MDAyNmlwX3NldF9uZXRsaW5rX3N1YnN5cyk7XG4gXHRpZiAocmV0ICE9IDApIHtcbiBcdFx0cHJfZXJyKFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgd2l0aCBuZm5ldGxpbmsuXFxuXCIpO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIG91dF93cTtcbiBcdH1cbiBcbiBcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXHUwMDI2c29fc2V0KTtcbkBAIC0yNDQwLDEwICsyNDUxLDEzIEBAIGlwX3NldF9pbml0KHZvaWQpXG4gXHRcdHByX2VycihcIlNPX1NFVCByZWdpc3RyeSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXHRcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIG91dF93cTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK291dF93cTpcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19leGl0XG5AQCAtMjQ1Myw5ICsyNDY3LDcgQEAgaXBfc2V0X2Zpbmkodm9pZClcbiBcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcbi1cdC8qIFdhaXQgZm9yIGNhbGxfcmN1KCkgaW4gZGVzdHJveSAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cbitcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xuIFx0cHJfZGVidWcoXCJ0aGVzZSBhcmUgdGhlIGZhbW91cyBsYXN0IHdvcmRzXFxuXCIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC05OSw5ICs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHtcbiAjZW5kaWZcbiBcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cbitzdHJ1Y3QgbmV0X3ByZWZpeCB7XG4rXHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4rXHR1MzIgY291bnQ7XHRcdFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xuK307XG4rXG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBsZW47XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XG4gfTtcbiBcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cbkBAIC0xMjcsMTEgKzEzMyw2IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbHNlXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcdFx0KGNpZHIpXG4gI2VuZGlmXG4tXG4tLyogY2lkciArIDEgaXMgc3RvcmVkIGluIG5ldF9wcmVmaXhlcyB0byBzdXBwb3J0IC8wICovXG4tI2RlZmluZSBOQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSArIDEpXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG4tXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG5AQCAtMTQxLDIxICsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2RlZmluZSBEQ0lEUl9HRVQoY2lkciwgaSlcdF9fQ0lEUihjaWRyLCBpKVxuICNlbmRpZlxuIFxuLSNkZWZpbmUgSU5JVF9DSURSKGNpZHIsIGhvc3RfbWFzaylcdFxcXG4tXHREQ0lEUl9QVVQoKChjaWRyKSA/IE5DSURSX0dFVChjaWRyKSA6IGhvc3RfbWFzaykpXG4tXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0KEhPU1RfTUFTSyArIDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbisjZGVmaW5lIElOSVRfQ0lEUihuLCBob3N0X21hc2spICh7XHRcdFx0XHRcXFxuK1x0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1x0XHRcXFxuK1x0RENJRFJfUFVUKChfX24pLVx1MDAzZWxlbiA/IChfX24pLVx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XFxcbit9KVxuIFxuLSNlbHNlXG4tI2RlZmluZSBOTEVOXHRcdFx0MFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cbiBcbiAjZGVmaW5lIFNFVF9FTEVNX0VYUElSRUQoc2V0LCBkKVx0XFxcbkBAIC0yMDQsMTIgKzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG4gI3VuZGVmIG10eXBlX2FkZF9jaWRyXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4rI3VuZGVmIG10eXBlX2RlbF9jaWRyX2FsbFxuICN1bmRlZiBtdHlwZV9haGFzaF9tZW1zaXplXG4gI3VuZGVmIG10eXBlX2ZsdXNoXG4gI3VuZGVmIG10eXBlX2Rlc3Ryb3lcbiAjdW5kZWYgbXR5cGVfc2FtZV9zZXRcbiAjdW5kZWYgbXR5cGVfa2FkdFxuICN1bmRlZiBtdHlwZV91YWR0XG4rI3VuZGVmIG10eXBlX2J1Y2tldF9zaXplXG4rI3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxuIFxuICN1bmRlZiBtdHlwZV9hZGRcbiAjdW5kZWYgbXR5cGVfZGVsXG5AQCAtMjQ5LDEyICsyNDMsMTUgQEAgc3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuICNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG4gI2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxuICNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbisjZGVmaW5lIG10eXBlX2RlbF9jaWRyX2FsbFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcl9hbGwpXG4gI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpXG4gI2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxuICNkZWZpbmUgbXR5cGVfZGVzdHJveVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpXG4gI2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxuICNkZWZpbmUgbXR5cGVfa2FkdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpXG4gI2RlZmluZSBtdHlwZV91YWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdClcbisjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxuKyNkZWZpbmUgbXR5cGVfaGFzaF9zaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKVxuIFxuICNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxuICNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuQEAgLTI5Miw2ICsyODksNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cbiBzdHJ1Y3QgaHR5cGUge1xuIFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovXG4gXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1x0LyogZ2Mgd29ya3F1ZXVlICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXG4gXHR1MzIgaW5pdHZhbDtcdFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cbkBAIC0zMDIsOSArMzAwLDYgQEAgc3RydWN0IGh0eXBlIHtcbiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKVxuIFx0dTggbmV0bWFzaztcdFx0LyogbmV0bWFzayB2YWx1ZSBmb3Igc3VibmV0cyB0byBzdG9yZSAqL1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7XHQvKiBzdG9yZXMgYml0bWFzayAqL1xuLSNlbmRpZlxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXG4gI2VuZGlmXG4gXHQvKiBCZWNhdXNlICduZXh0JyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzXG4gXHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICduZXh0Jy5cbkBAIC0zMjYsNTUgKzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciArIDEgdG8gc3VwcG9ydCAvMC5cbiAgKi9cbi1zdGF0aWMgdm9pZFxuK3N0YXRpYyBpbnRcbiBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHRpbnQgaSwgajtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuK1x0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cdTAwM2VybmV0c1tuXSk7XG4gXHQvKiBBZGQgaW4gaW5jcmVhc2luZyBwcmVmaXggb3JkZXIsIHNvIGxhcmdlciBjaWRyIGZpcnN0ICovXG4tXHRmb3IgKGkgPSAwLCBqID0gLTE7IGkgXHUwMDNjIE5MRU4gXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dOyBpKyspIHtcbi1cdFx0aWYgKGogIT0gLTEpIHtcbitcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRsZW4rKztcbitcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dKys7XG4rXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xuK1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4tXHRpZiAoaiAhPSAtMSkge1xuLVx0XHRmb3IgKDsgaSBcdTAwM2UgajsgaS0tKVxuLVx0XHRcdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gaC1cdTAwM2VuZXRzW2kgLSAxXS5jaWRyW25dO1xuK1x0bGVuKys7XG4rXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdG1wKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbitcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4rXHRcdGlmIChpID09IGZvdW5kKSB7XG4rXHRcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IDE7XG4rXHRcdH1cbitcdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbitcdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4rXHRpZiAoZm91bmQgPT0gLTEpIHtcbitcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbitcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW25dLCB0bXApO1xuK1x0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHR1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuK1x0dTggaSwgaiwgbGVuID0gMDtcbitcdGludCBmb3VuZDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOTEVOOyBpKyspIHtcbi1cdFx0aWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dICE9IGNpZHIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dIFx1MDAzZSAwKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0XHRmb3IgKGogPSBpOyBqIFx1MDAzYyBuZXRfZW5kIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkcltuXTsgaisrKVxuLVx0XHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cdTAwM2VuZXRzW2ogKyAxXS5jaWRyW25dO1xuLVx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IDA7XG4rXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbitcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRsZW4rKztcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4rXHRcdFx0Zm91bmQgPSBpO1xuK1x0fVxuK1x0aWYgKHVubGlrZWx5KGZvdW5kID09IC0xKSlcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4rXHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbitcdFx0Z290byB1bmxvY2s7XG4rXHRsZW4tLTtcbitcdHRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCF0bXApXG4rXHRcdC8qIExlYXZlIGEgaG9sZSAqL1xuIFx0XHRnb3RvIHVubG9jaztcbitcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWRcbittdHlwZV9kZWxfY2lkcl9hbGwoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhKVxuK3tcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRpbnQgaztcbitcbitcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxuK1x0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsIERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspLCBrKTtcbisjZW5kaWZcbit9XG4rXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXG4gc3RhdGljIHNpemVfdFxuIG10eXBlX2FoYXNoX21lbXNpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoLCBjb25zdCBzdHJ1Y3QgaHRhYmxlICp0KVxuQEAgLTQwMiw2ICs0NTAsOSBAQCBzdGF0aWMgdm9pZFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuKyNlbmRpZlxuIFx0c3RydWN0IGh0YWJsZSAqdDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIHIsIGk7XG5AQCAtNDI1LDcgKzQ3NiwxOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbiBcdH1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRtZW1zZXQoaC1cdTAwM2VuZXRzLCAwLCBzaXplb2YoaC1cdTAwM2VuZXRzKSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xuK1x0XHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVx1MDAzZXJuZXRzW2ldKTtcbitcdFx0dG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghdG1wKSB7XG4rXHRcdFx0dTggajtcbitcbitcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaisrKVxuK1x0XHRcdFx0bmV0cy1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tpXSwgdG1wKTtcbitcdFx0XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbitcdFx0fVxuK1x0fVxuICNlbmRpZlxuIH1cbiBcbkBAIC00MzMsNiArNDk2LDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXG4ge1xuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuKyNlbmRpZlxuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHR1MzIgaTtcbiBcbkBAIC00NDYsNiArNTEyLDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIFx0XHRrZnJlZShuKTtcbiBcdH1cbiBcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRpZiAoZXh0X2Rlc3Ryb3kpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxuK1x0XHRcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cdTAwM2VybmV0c1tpXSkpO1xuKyNlbmRpZlxuIFx0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiBcdGlwX3NldF9mcmVlKHQpO1xuIH1cbkBAIC00OTMsOSArNTY0LDYgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuIFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG4gXHR1MzIgaSwgaiwgZDtcbiBcdHNpemVfdCBkc2l6ZSA9IHNldC1cdTAwM2Vkc2l6ZTtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHR1OCBrO1xuLSNlbmRpZlxuIFx0dTggcG9zLCBodGFibGVfYml0cyA9IHQtXHUwMDNlaHRhYmxlX2JpdHM7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuQEAgLTUxNiwxMiArNTg0LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuIFx0XHRcdHByX2RlYnVnKFwiZXhwaXJlZCAldS8ldVxcblwiLCBpLCBqKTtcbiBcdFx0XHRjbGVhcl9iaXQoaiwgbi1cdTAwM2V1c2VkKTtcbiBcdFx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcbi1cdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4tI2VuZGlmXG4rXHRcdFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7XG4gXHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4gXHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4gXHRcdFx0ZCsrO1xuQEAgLTk0NywxMiArMTAxMCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdGogPSAwO1xuIFx0XHRkYXRhID0gYWhhc2hfZGF0YShuLCBqLCBzZXQtXHUwMDNlZHNpemUpO1xuIFx0XHRpZiAoIWRlbGV0ZWQpIHtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG4tXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuLSNlbmRpZlxuK1x0XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHR9XG5AQCAtOTk2LDcgKzEwNTQsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cysrO1xuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuK1x0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbiAjZW5kaWZcbiBcdG1lbWNweShkYXRhLCBkLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcbiBvdmVyd3JpdGVfZXh0ZW5zaW9uczpcbkBAIC0xMTA3LDExICsxMTY1LDcgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdGlmIChpICsgMSA9PSBwb3MpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbiBcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcbi1cdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4tI2VuZGlmXG4rXHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGQpO1xuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuQEAgLTExOTMsMjggKzEyNDcsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwO1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4rXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbitcdGludCByZXQsIGksIGo7XG4gI2VuZGlmXG4gXHR1MzIga2V5LCBtdWx0aSA9IDA7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4rI2VuZGlmXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaisrKSB7XG4rXHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsrKykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaysrKSB7XG4rXHRcdFx0aWYgKCFuZXRzMS1cdTAwM2VuZXRzW2tdLmNvdW50KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuK1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbiAjZW5kaWZcbiBcdFx0a2V5ID0gSEtFWShkLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtMTIyOSw3ICsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMzksNyArMTMwMiwxMCBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdH1cbiAjZW5kaWZcbiBcdH1cbi1cdHJldHVybiAwO1xuK1x0cmV0ID0gMDtcbit1bmxvY2s6XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbitcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEyOTQsNiArMTM2MCwyNCBAQCBtdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdTMyIG10eXBlX2hhc2hfc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGh0YWJsZSAqdDtcbitcdHU4IGh0YWJsZV9iaXRzO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShoLVx1MDAzZXRhYmxlKTtcbitcdGh0YWJsZV9iaXRzID0gdC1cdTAwM2VodGFibGVfYml0cztcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpO1xuK31cbitcbitzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbit7XG4rXHRyZXR1cm4gaC1cdTAwM2VidWNrZXRzaXplO1xuK31cbitcbiAvKiBSZXBseSBhIEhFQURFUiByZXF1ZXN0OiBmaWxsIG91dCB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIHNldCAqL1xuIHN0YXRpYyBpbnRcbiBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xMzA0LDIxICsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2l6ZV90IG1lbXNpemU7XG4gXHR1MzIgZWxlbWVudHMgPSAwO1xuIFx0c2l6ZV90IGV4dF9zaXplID0gMDtcbi1cdHU4IGh0YWJsZV9iaXRzO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19iaCgpO1xuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbiBcdG10eXBlX2V4dF9zaXplKHNldCwgXHUwMDI2ZWxlbWVudHMsIFx1MDAyNmV4dF9zaXplKTtcbi1cdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICsgZXh0X3NpemUgKyBzZXQtXHUwMDNlZXh0X3NpemU7XG4tXHRodGFibGVfYml0cyA9IHQtXHUwMDNlaHRhYmxlX2JpdHM7XG4rXHRtZW1zaXplID0gbXR5cGVfYWhhc2hfbWVtc2l6ZShoLCB0KSArIGV4dF9zaXplICsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXG4gXHRuZXN0ZWQgPSBubGFfbmVzdF9zdGFydChza2IsIElQU0VUX0FUVFJfREFUQSk7XG4gXHRpZiAoIW5lc3RlZClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsXG4tXHRcdFx0ICBodG9ubChqaGFzaF9zaXplKGh0YWJsZV9iaXRzKSkpIHx8XG4tXHQgICAgbmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC1cdTAwM2VtYXhlbGVtKSkpXG4rXG4rXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdGlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9NQVhFTEVNLCBodG9ubChoLVx1MDAzZW1heGVsZW0pKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTS1xuIFx0LyogaWYgbmV0bWFzayBpcyBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBIT1NUX01BU0sgd2Uga25vdyB0aGF0IHRoZSB1c2VyIHN1cHBsaWVkIG5ldG1hc2tcbkBAIC0xMzQyLDggKzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNFVF9DUkVBVEVfRkxBR19CVUNLRVRTSVpFKSB7XG4tXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBoLVx1MDAzZWJ1Y2tldHNpemUpIHx8XG4tXHRcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVx1MDAzZWluaXR2YWwpKSlcbitcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJUFNFVF9BVFRSX0JVQ0tFVFNJWkUsIG10eXBlX2J1Y2tldF9zaXplKGgpKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtXHUwMDNlaW5pdHZhbCkpKVxuIFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0fVxuIFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC1cdTAwM2VyZWYpKSB8fFxuQEAgLTE1MDQsNiArMTU4OCw5IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xuIFx0dTggbmV0bWFzayA9IHNldC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzayA9IG9uZXNtYXNrO1xuKyNlbmRpZlxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzaXplX3QgaHNpemU7XG4gXHRzdHJ1Y3QgaHR5cGUgKmg7XG5AQCAtMTYwNCwyMSArMTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHQgKi9cbiBcdGhiaXRzID0gZmxzKGhhc2hzaXplIC0gMSk7XG4gXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcbi1cdGlmIChoc2l6ZSA9PSAwKSB7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcdGlmIChoc2l6ZSA9PSAwKVxuK1x0XHRnb3RvIGZyZWVfaDtcbiBcdHQgPSBpcF9zZXRfYWxsb2MoaHNpemUpO1xuLVx0aWYgKCF0KSB7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcdGlmICghdClcbitcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoIXQtXHUwMDNlaHJlZ2lvbilcbitcdFx0Z290byBmcmVlX3Q7XG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcbitcdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcbitcdFx0aWYgKCFuZXRzKSB7XG4rXHRcdFx0d2hpbGUgKGkgXHUwMDNlIDApXG4rXHRcdFx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXHUwMDNlcm5ldHNbLS1pXSkpO1xuK1x0XHRcdGdvdG8gZnJlZV9ocmVnaW9uO1xuK1x0XHR9XG4rXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4rI2VuZGlmXG4gXHRoLVx1MDAzZWdjLnNldCA9IHNldDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkrKylcbkBAIC0xNjUwLDYgKzE3NDEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0LVx1MDAzZWFkKTtcbiBcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2V0YWJsZSwgdCk7XG4gXHRzZXQtXHUwMDNlZGF0YSA9IGg7XG4rXG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuICNlbmRpZlxuQEAgLTE2NzgsMTAgKzE3NzAsMjAgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuICNlbmRpZlxuIFx0fVxuIFx0cHJfZGVidWcoXCJjcmVhdGUgJXMgaGFzaHNpemUgJXUgKCV1KSBtYXhlbGVtICV1OiAlcCglcClcXG5cIixcbi1cdFx0IHNldC1cdTAwM2VuYW1lLCBqaGFzaF9zaXplKHQtXHUwMDNlaHRhYmxlX2JpdHMpLFxuK1x0XHQgc2V0LVx1MDAzZW5hbWUsIG10eXBlX2hhc2hfc2l6ZShoKSxcbiBcdFx0IHQtXHUwMDNlaHRhYmxlX2JpdHMsIGgtXHUwMDNlbWF4ZWxlbSwgc2V0LVx1MDAzZWRhdGEsIHQpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK2ZyZWVfaHJlZ2lvbjpcbitcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4rI2VuZGlmXG4rZnJlZV90OlxuK1x0aXBfc2V0X2ZyZWUodCk7XG4rZnJlZV9oOlxuK1x0a2ZyZWUoaCk7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5pbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xuQEAgLTEzOCw3ICsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMzk4LDcgKzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4rXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMS4uMDkyZjNjOTI4MWI4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyArMTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTI5MSw3ICsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjLi5iNDRiOTVmNzY2YjdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0xNjEsNyArMTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5AQCAtMzgyLDcgKzM4Miw3IEBAIGhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4rXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5pbmRleCA4ZmJlNjQ5YzlkZDNkLi5mN2M4YTFjYzMwZmM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xuQEAgLTE0OSw4ICsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XG4gXG5AQCAtMzg4LDggKzM5MCwxMCBAQCBoYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjMuLjVkZTRiNTExZGU3NjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM1Myw3ICszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkYy4uNjI5MTUzMmJlN2E1YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuQEAgLTE1Nyw4ICsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbkBAIC00NTIsOCArNDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuaW5kZXggMWNlZjg0ZjE1ZThjNy4uY2EzZWY5NDc5ZTgzOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbkBAIC00MjEsNyArNDIxLDcgQEAgbGlzdF9zZXRfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KVxuIFx0XHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuK1x0YXRvbWljNjRfc2V0KFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtNDU1LDcgKzQ1NSw3IEBAIGxpc3Rfc2V0X2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbmxhdHRyICpuZXN0ZWQ7XG4tXHRzaXplX3QgbWVtc2l6ZSA9IGxpc3Rfc2V0X21lbXNpemUobWFwLCBzZXQtXHUwMDNlZHNpemUpICsgc2V0LVx1MDAzZWV4dF9zaXplO1xuK1x0c2l6ZV90IG1lbXNpemUgPSBsaXN0X3NldF9tZW1zaXplKG1hcCwgc2V0LVx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcbiBcdG5lc3RlZCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSVBTRVRfQVRUUl9EQVRBKTtcbiBcdGlmICghbmVzdGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuNzMwODE5NDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3MjY1Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgSVAgU2V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvdmVyaGF1bCBvZiBzb21lIGNvcmUgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbWF5YmUgYSByZWRlc2lnbiByZWxhdGVkIHRvIENJRFIgcHJlZml4IGhhbmRsaW5nIGFuZCBob3cgc2V0cyBhcmUgY2xlYW5lZCB1cC4gIERlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgZGl2ZSwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZpcnN0LCB0aGUgYGlwX3NldGAgc3RydWN0IGlzIHR3ZWFrZWQ6IGByY3VfaGVhZGAgaXMgc3dhcHBlZCBmb3IgYHJjdV93b3JrYCwgYW5kIHRoZSBgZXh0X3NpemVgIGZpZWxkIGlzIG5vdyBhbiBgYXRvbWljNjRfdGAuIFRoYXQgc2NyZWFtcyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMgYmVpbmcgYWRkcmVzc2VkLiAgVGhlIGJpZyBvbmUgc2VlbXMgdG8gYmUgdGhlIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiBvZiBzZXRzIHVzaW5nIGEgd29ya3F1ZXVlIChgaXBzZXRfZGVzdHJveV93cWApIGFuZCBgcXVldWVfcmN1X3dvcmtgIHJlcGxhY2luZyB0aGUgc3luY2hyb25vdXMgYGlwX3NldF9kZXN0cm95X3NldF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIG1pbmltaXplIGxvY2sgY29udGVudGlvbiBkdXJpbmcgY2xlYW51cC5cblxuVGhlIHNlY29uZCBhcmVhIG9mIGZvY3VzIGlzIHdpdGggQ0lEUiBwcmVmaXhlcy4gIFRoZXkndmUgY2hhbmdlZCB0aGUgYG5ldF9wcmVmaXhlc2Agc3RydWN0IGluIGBpcF9zZXRfaGFzaF9nZW4uaGAgdG8gdXNlIGBfX2NvdW50ZWRfYnkobGVuKWAgYW5kIGl0J3Mgbm93IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gTW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIFJDVSBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGZvciBgbmV0X3ByZWZpeGVzYCBhcmUgYWxzbyBwcmVzZW50LiBUaGVzZSBjaGFuZ2VzIGluZGljYXRlIG9wdGltaXphdGlvbiBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwcmVmaXggZGF0YS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGFyZWFzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gIEJlc2lkZXMgdGhlIHN0cnVjdCBjaGFuZ2VzLCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgaXBfc2V0X2Rlc3Ryb3lgLCBhbmQgdGhlbiBhIHNsZXcgb2YgZnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggYG10eXBlXypgLiAgTG9va2luZyBmdXJ0aGVyLCBJIHNlZSBpdCdzIGFsc28gaW1wYWN0aW5nIHNldmVyYWwgaGFzaCB0eXBlLXNwZWNpZmljIGZ1bmN0aW9ucyAoSVB2NCBhbmQgSVB2NiB2YXJpYW50cyk6IGBoYXNoX2lwcG9ydG5ldDRfa2FkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGV0Yy4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgbWFjcm9zLiBUaGV5IGFyZSBnZW5lcmF0ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gQWhhISBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhpbmdzIGxpa2UgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgZXRjLiBUaGUgZnVuY3Rpb25zIGFjdHVhbGx5IGdlbmVyYXRlZCB3aWxsIHRoZW4gaGF2ZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBhbmQgc28gb24uXG5cbk9rYXksIGxldCdzIGh1bnQgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSdyZSBiZWluZyB1c2VkIGFuZCBhZmZlY3RlZC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgaXQgbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgaW1wcm92aW5nIElQIHNldCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTEuMzAzNDc5ODU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAyMzY4MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbXR5cGVfYWRkIFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTMuNzkzNzIyODI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTU1MDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIE1hY3JvIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBhIG1hY3JvIGRlZmluaXRpb246IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYG10eXBlX2FkZGAgaXMgdGhlIHJlc3VsdGluZyBtYWNybywgYW5kIGl0J3MgYmVpbmcgY29uc3RydWN0ZWQgdXNpbmcgYElQU0VUX1RPS0VOYCB3aXRoIGBNVFlQRWAgYW5kIGBfYWRkYCBhcyBhcmd1bWVudHMuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiB0b2tlbiBnZW5lcmF0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gSVAgc2V0IG1hbmFnZW1lbnQsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi5cblxuVGhlIGtleSBwb2ludCBoZXJlLCB0aG91Z2gsIGlzIHJlY29nbml6aW5nIHRoYXQgYE1UWVBFYCBpcyBkZWZpbmVkICpiZWZvcmUqIHRoZSBpbmNsdXNpb24gb2YgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCdzIGNyaXRpY2FsLiBUaGUgdmFsdWUgb2YgYE1UWVBFYCBkaWN0YXRlcyBob3cgYG10eXBlX2FkZGAgcmVzb2x2ZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgdGhhdCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIGNvZGUgdGhhdCB1dGlsaXplcyBgbXR5cGVfYWRkYC4gSXQncyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGdlbmVyYXRlZCBjb2RlIHNpZ25pZmljYW50bHksIHByb2JhYmx5IGJ5IGluamVjdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBpZGVudGlmaWVyLlxuXG5NeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYE1UWVBFYCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBiZWluZyBzZXQgdG8gaW4gdGhlIGNvZGUuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIHR5cGUgb3IgZnVuY3Rpb25hbGl0eSB0aGlzIG1hY3JvIGlzIG1lYW50IHRvIGVuY2Fwc3VsYXRlLiBBbmQgdGhlbiBJIHdvdWxkIGV4YW1pbmUgYElQU0VUX1RPS0VOYCBpdHNlbGYuIEl0cyBkZWZpbml0aW9uIGlzIHZpdGFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmFsIGV4cGFuc2lvbiBvZiB0aGUgYG10eXBlX2FkZGAgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjM5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTcuNTg1Mjc1NzI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTA4MzQ0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBtYWNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDpwb3J0XFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjI5OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfcG9ydFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlxcdFxcdDRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xODA9aGFzaF9pcG1hYzZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MTkwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xOTEtI2RlZmluZSBQRlxcdFxcdDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9Njk9aGFzaF9pcG1hcms0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMDU9aGFzaF9pcG1hcms2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIxMzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Nzk9aGFzaF9pcHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6ODY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yNDk9aGFzaF9pcHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI1ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz03Nz1oYXNoX2lwcG9ydGlwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODQtLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo4NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTI0OD1oYXNoX2lwcG9ydGlwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNTc6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1OC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMjE9aGFzaF9pcHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEyOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzAtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNzk9aGFzaF9pcHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjM4ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NjE9aGFzaF9tYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6NjY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMDI9aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yNzM9aGFzaF9uZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjk9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM2Mz1oYXNoX25ldGlmYWNlNl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xMjU9aGFzaF9uZXRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjEzMTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzItI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zNjM9aGFzaF9uZXRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM3MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTExNz1oYXNoX25ldHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTIzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEyNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zMzQ9aGFzaF9uZXRwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNDM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTEzMj1oYXNoX25ldHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjEzOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE0MC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00MjY9aGFzaF9uZXRwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0MzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzYtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jPTE2MDA9c3RhdGljIHUxNiBib290X2xvYWRlcl9jb25maWdfZW1pZihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sIGludCBkc3BfaW5kZXgpXFxuLS1cXG5zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYy0xNjIwLSNkZWZpbmUgUlNUX09GUyA4XFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmM6MTYyMTojZGVmaW5lIE1UWVBFX09GUyA0XFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMtMTYyMi0jZGVmaW5lIFJIX09GUyAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM2OjU5Ljk5NjExNDgyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDA0ODMwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIHNlZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGEgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbuKAlGNyZWF0ZSwgZGVzdHJveSwgZmx1c2gsIGhlYWQsIGFuZCBzbyBvbi4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIHdob2xlIHNldCBvZiBmdW5jdGlvbnMgcHJlZml4ZWQgd2l0aCBgbXR5cGVfYCwgbGlrZSBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX2ZsdXNoYC4gSXQncyBhIHJhdGhlciBleHRlbnNpdmUgbGlzdCwgaW5jbHVkaW5nIGRlbGV0aW9uLCB0ZXN0aW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG90aGVyIHV0aWxpdGllcyB0aGF0IHNlZW0gdG8gYmUgY3J1Y2lhbCBmb3IgdGhpcy5cblxuVGhlc2UgYG10eXBlX2AgZnVuY3Rpb25zLi4uIGFoLCB0aGV5J3JlIGFsbCBkZWZpbmVkIGFzIHN0YXRpYyB3aXRoaW4gYGlwX3NldF9oYXNoX2dlbi5oYCwgd2hpY2ggaXMgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMhIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGtpbmQgb2YgbWFjcm8gbWFnaWMgZ29pbmcgb24gaGVyZS4gVGhlIGRlZmluaXRpb24gY29uZmlybXMgaXQ6IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBTbywgYGhhc2hfbmV0NF9hZGRgICppcyogdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lLlxuXG5TaW5jZSB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgbm90IGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgbWF5IGJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgbW9kdWxlLiBUaGV5IG1pZ2h0IGJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MDYuMzk2NjAxMzczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTcxNTMzNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2hfbmV0NF9hZGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjA4Ljk5Mzc2MTk5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njc2Mzk1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBNYWNybyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgIGlzIGdvaW5nIHRvIHJlc29sdmUgdG8gYGhhc2hfbmV0NF9hZGRgLiBXZSdyZSBkZWFsaW5nIHdpdGggaXBzZXRzLCBhbmQgdGhlIGBfYWRkYCBzdWZmaXggc3Ryb25nbHkgc3VnZ2VzdHMgYW4gYWRkaXRpb24gZnVuY3Rpb24uIENvbnNpZGVyaW5nIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSVAgYWRkcmVzc2VzLCBgbmV0NGAgc2VlbXMgYSBoaWdobHkgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfbmV0LmNgLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIHJhdGhlciwgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm8gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBuYW1lZCBgX2FkZGAuIE15IGV4cGVydCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgcGF0dGVybiBpbiB0aGUgaXBzZXQgY29kZWJhc2UuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaG9sZHMgdHJ1ZSBhbmQgaWYgdGhhdCdzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjQ5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MTIuNjYxNDA0NTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUwMjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMTM9c3RydWN0IGhhc2hfbmV0Nl9lbGVtIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjIxNDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgaXA7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMTUtXFx0dTE2IHBhZGRpbmcwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMjM9aGFzaF9uZXQ2X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0Nl9lbGVtICppcDEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTIyNi17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyMjc6XFx0cmV0dXJuIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2aXAxLVxcdTAwM2VpcC5pbjYsIFxcdTAwMjZpcDItXFx1MDAzZWlwLmluNikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTIyOC1cXHQgICAgICAgaXAxLVxcdTAwM2VjaWRyID09IGlwMi1cXHUwMDNlY2lkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MTIuNzUyOTEzNTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE2NTk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEhhc2ggTmV0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBoYXNoX25ldDRfYWRkYCBmdW5jdGlvbiwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCdzIG5vdCBkaXJlY3RseSBjb2RlZCBpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLiBJbnRlcmVzdGluZy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXNlIHRoaW5ncyBjYW4gYmUgZ2VuZXJhdGVkLiBUaGUgY2x1ZXMgYXJlIHRlbGxpbmcgbWUgdGhhdCB0aGlzIGlzIGJlaW5nIGF1dG9nZW5lcmF0ZWQgYnkgYGlwX3NldF9oYXNoX2dlbi5oYC4gUmlnaHQsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gVG8gdW5kZXJzdGFuZCBob3cgYGhhc2hfbmV0NF9hZGRgIHdvcmtzLCBJIG5lZWQgdG8gc2VlIGhvdyBgbXR5cGVfYWRkYCAob3Igd2hhdGV2ZXIgdGhlIG1hY3JvL3RlbXBsYXRlIGlzKSBpcyBkZWZpbmVkIGluIHRoYXQgaGVhZGVyLiBUaW1lIHRvIG9wZW4gdXAgYGlwX3NldF9oYXNoX2dlbi5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBvZiB0aGlzIGdlbmVyYXRlZCBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgd2lsbCBwcm9iYWJseSByZXZlYWwgc29tZSBtZXRhcHJvZ3JhbW1pbmcgdGVjaG5pcXVlcyBmb3IgZ2VuZXJhdGluZyBtdWx0aXBsZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjE2LjYyNTY2MTIwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MTY5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjQ9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTUtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTY6I3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTctI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwODojdW5kZWYgbXR5cGVfYWRkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDktI3VuZGVmIG10eXBlX2RlbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDMtI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDQ6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1NjojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU3LSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMyND1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMjU6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMjYte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02ODM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Njg0Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY5NT1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0Ny1cXHRcXHRpZiAoeC1cXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDg6XFx0XFx0XFx0bXR5cGVfYWRkKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIFxcdTAwMjZ4LVxcdTAwM2VleHQsIFxcdTAwMjZ4LVxcdTAwM2VtZXh0LCB4LVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NDktXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTMwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkzMTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkzMi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA1NzpcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDU4LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTYxLVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NjI6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTYzLVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzoxNi43MDExODU0NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDgyNTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgbXR5cGUgU3RydWN0dXJlcyoqXG5cbkFscmlnaHQsIHNvIGBtdHlwZV9hZGRgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIGBbSVBTRVRfQUREXWAgd2l0aGluIHRoZSBgbXR5cGVfdmFyaWFudGAgc3RydWN0dXJlLCB0aGF0J3MgY2xlYXIuIE5vdywgdGhpcyBgbXR5cGVfdmFyaWFudGAgaXMgdGhlbiBiZWluZyB1c2VkIGluIHRoZSBgbXR5cGVfY3JlYXRlYCBmdW5jdGlvbi4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG10eXBlX2NyZWF0ZWAgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgc2VlIHdoYXQgYG10eXBlX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCB0aGF0IHZhcmlhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzoyMC4wOTIwMTQ3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTE0MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MjAuMjAyOTM1ODYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzM1ODUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuUmlnaHQsIGxldCBtZSBzZWUuIFRoYXQgZnVuY3Rpb24gY2FsbCBsb29rcyBmYW1pbGlhci4uLiAqSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKi4gT2theSwgc28gKkhUWVBFKiBpcyBwcm9iYWJseSBhIHR5cGUgc3BlY2lmaWVyLCBhbmQgKlxcX2NyZWF0ZSogaXMgdGhlIGltcG9ydGFudCBwYXJ0IGhlcmUuIEl0J3MgYSBjb25zdHJ1Y3RvciBvciBpbml0aWFsaXplciBmdW5jdGlvbi4gVG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZG9pbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyAqXFxfY3JlYXRlKiBmdW5jdGlvbiBpcyBkb2luZy4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX2NyZWF0ZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MgYW5kIGl0cyBleHBlY3RlZCBhcmd1bWVudHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjIzLjI3NjUyNDQ3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4NDAzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTU3OD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTc5OklQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1ODAtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHUzMiBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MjMuMzQ5MzcyMzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzE4MDU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgaGFzaF9uZXQ0X2NyZWF0ZWAsIGBoYXNoX25ldDZfY3JlYXRlYCBzdHlsZSBmdW5jdGlvbnMsIHJpZ2h0PyBCdXQgdGhlIHJlYWwgd29yaywgdGhlIHN0dWZmIHRoYXQncyBhY3R1YWxseSAqbW9kaWZpZWQqIGFuZCB0aGVyZWZvcmUgdGhlIGp1aWN5IGJpdHMgZm9yIGZ1enppbmcsIGlzIGluIHRoZXNlIG90aGVyIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBnb29kIGxpc3QgaGVyZTogYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAsIHRoYXQgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCBvbmUsIHRoZSBgZGVzdHJveV9hbmRfZnJlZV9zZXRgIG9uZSwgYW5kIHRoZW4gYSB3aG9sZSBzbGV3IG9mIGBtdHlwZV8qYCBmdW5jdGlvbnMgdGhhdCBhcmUgKnZlcnkqIGludGVyZXN0aW5nLiBXZSd2ZSBnb3Qgc3R1ZmYgdG8gYWRkLCBkZWxldGUsIGZsdXNoLCBhbmQgdGVzdCBDSURScyBhbmQgYWhhc2ggcmVsYXRlZCByb3V0aW5lcy4gVGhlcmUncyBldmVuIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRoIGBtdHlwZV9nY19kb2AuIFdlJ3ZlIGFsc28gZ290IGBrYWR0YCByb3V0aW5lcy5cblxuSG9sZCBvbi4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgKmdlbmVyYXRlZCogYmFzZWQgb24gdGhlIGhhc2ggdHlwZSwgd2hpY2ggbWVhbnMgdGhleSdyZSBub3QgdGhlICplbnRyeSogcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGZyb20gdGhlIHRvcCwgYW5kIG5vdCB0aGUgc3RhdGljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGl0ISBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50cywgd2hpY2ggYXJlIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIGBpcF9zZXRfY29yZS5jYCBpcyB0aGUgcGxhY2UgdG8gbG9vay4gTGV0J3MgaGVhZCB0aGVyZSBhbmQgc2VlIHdoYXQgbmV0bGluayBvcGVyYXRpb25zIGFyZSBoYXBwZW5pbmcgdGhhdCBsZWFkIHRvIHRob3NlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzozMC4yODExODA3NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzEwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mbmxfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEwMjA9ZmluZF9mcmVlX2lkKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0LCBjb25zdCBjaGFyICpuYW1lLCBpcF9zZXRfaWRfdCAqaW5kZXgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA0NDpzdGF0aWMgaW50IGlwX3NldF9ub25lKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNDUtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMjAzPV9kZXN0cm95X2FsbF9zZXRzKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEyMzI6c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjMzLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMzAzPWlwX3NldF9mbHVzaF9zZXQoc3RydWN0IGlwX3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEzMTI6c3RhdGljIGludCBpcF9zZXRfZmx1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTMxMy1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEzNDI9aXBfc2V0X3NldG5hbWUyX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMzUwOnN0YXRpYyBpbnQgaXBfc2V0X3JlbmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzUxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzOTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEzOTg6c3RhdGljIGludCBpcF9zZXRfc3dhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzk5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1Nzc9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3MTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE3MTg6c3RhdGljIGludCBpcF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNzE5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4MTg9c3RhdGljIGludCBpcF9zZXRfYWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODczLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODc0OnN0YXRpYyBpbnQgaXBfc2V0X3VhZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODgxOnN0YXRpYyBpbnQgaXBfc2V0X3VkZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg4Mi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODg4OnN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTIyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTIzOnN0YXRpYyBpbnQgaXBfc2V0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTI0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF90eXBlX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTcyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTczOnN0YXRpYyBpbnQgaXBfc2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTk3NC1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMDIyPWlwX3NldF9wcm90b2NvbF9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjAyNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjAyNjpzdGF0aWMgaW50IGlwX3NldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMDI3LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA1OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjA2MDpzdGF0aWMgaW50IGlwX3NldF9ieW5hbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA2MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcF9zZXRfaW5kZXhfcG9saWN5W0lQU0VUX0FUVFJfQ01EX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxMDQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxMDU6c3RhdGljIGludCBpcF9zZXRfYnlpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTA2LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MzAuMzM1NDk4NTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNzk3NjIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIGlwc2V0IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIGBpcHNldGAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5ldGxpbmsgb3BlcmF0aW9ucyBhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiBzaG93cyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGBuZXRsaW5rYCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBhbmQgYGlwX3NldF9kdW1wYC4gV2Uga25vdyB0aGF0IHRoZXNlIGFyZSBhbGwgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGludGVyYWN0aW5nIHdpdGggYGlwc2V0YCB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFsc28gc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHNvbWUgb2YgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdpbmcgYGlwc2V0YCBkYXRhLCBpbmNsdWRpbmc6IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJfYWxsYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3Rlc3RgLCBgbXR5cGVfaGVhZGAsIGBtdHlwZV9oYXNoX3NpemVgLCBhbmQgYG10eXBlX2J1Y2tldF9zaXplYC4gSSBzZWUgdGhhdCB0aGVzZSBhcmUgY2FsbGVkIGZyb20gdGhlIG5ldGxpbmsgb3BlcmF0aW9ucyAqYW5kKiBmcm9tIHRoZSBkYXRhcGF0aCwgd2hpY2ggbWVhbnMgdGhpcyBjb3VsZCBoYXZlIGNhc2NhZGluZyBpbXBsaWNhdGlvbnMgZm9yIGBpcHRhYmxlc2AgYW5kIGBuZnRhYmxlc2AgdXNlcnMuXG5cblRoaW5raW5nIG1vcmUgZGVlcGx5LCBpdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdG8gYGlwX3NldF9kZXN0cm95YCB0byB1c2UgYHF1ZXVlX3JjdV93b3JrYCB3YXJyYW50cyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uOyBhbnkgdGltaW5nLXNlbnNpdGl2ZSBvcGVyYXRpb25zIGNvdWxkIGhhdmUgdGhlaXIgYmVoYXZpb3VyIGNoYW5nZWQgYnkgdGhpcyBtb2RpZmljYXRpb24uIFRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21tZW50IGhhbmRsaW5nIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RpbmcsIGFzIGNvbW1lbnQgaW5mb3JtYXRpb24gbWlnaHQgYmUgbG9zdCBvciBiZWNvbWUgaW5jb25zaXN0ZW50LiBcblxuT2theSwgbGV0J3MgZm9sbG93IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBgbXR5cGVfYWRkX2NpZHJgIGlzIGNhbGxlZCBmcm9tIGBtdHlwZV9hZGRgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGZyb20gYGlwX3NldF91YWRkYC4gU2ltaWxhcmx5LCBgbXR5cGVfZGVsX2NpZHJgIGlzIGNhbGxlZCBmcm9tIGBtdHlwZV9kZWxgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfc2V0X3VkZWxgLiBUaGUgYG10eXBlX3Rlc3RfY2lkcnNgIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgYG10eXBlX3Rlc3RgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfc2V0X3V0ZXN0YCBhbmQsIGNyaXRpY2FsbHksIGZyb20gdGhlIGRhdGFwYXRoLiAgYG10eXBlX2ZsdXNoYCBpcyBjYWxsZWQgYnkgYGlwX3NldF9mbHVzaGAuIGBtdHlwZV9haGFzaF9kZXN0cm95YCBpcyBjYWxsZWQgYnkgYGlwX3NldF9kZXN0cm95YCwgYW5kIGBtdHlwZV9nY19kb2AgaXMgaW52b2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgdGhlIGNvZGUgc2hvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBkaXJlY3RvcnksIGFuZCBJJ2QgZXhwZWN0IGl0IHRvIGJlIGd1YXJkZWQgYnkgYENPTkZJR19JUF9TRVRgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgYWNjdXJhdGUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgdXNlIHRoaXMgYXMgbXkgZnJhbWV3b3JrIHRvIGFuYWx5emUgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzozOS40MTUyNjUwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjEzNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY6Y29uZmlnIElQX1NFVF9NQVhcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo3NDpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTAzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTMwOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzgtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjM5LjQ4NDg4NTYxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk4MDM3OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVuYWJsaW5nIElQIFNldCBNb2R1bGVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGJ1bmNoIG9mIGBpcF9zZXRfaGFzaF8qLmNgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHkgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgLCBgaXBfc2V0X2hhc2hfbmV0bmV0LmNgLCBgaXBfc2V0X2hhc2hfbmV0cG9ydC5jYCwgYW5kIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLiAgVGhhdCBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuICBBbmQgb2YgY291cnNlLCB3ZSdsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiB0byBiZSBlbmFibGVkLlxuXG5JIGFsc28gc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGlwX3NldF9saXN0X3NldC5jYCwgc28gYElQX1NFVF9MSVNUX1NFVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyB0b3VjaCBgSVBfU0VUX0JJVE1BUF9HRU5gLCB3aGljaCBjYXNjYWRlcyB0byBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBTbywgdG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIGp1c3QgZW5hYmxlICphbGwqIG9mIHRoZSBJUCBzZXQgbW9kdWxlcy5cblxuTGV0IG1lIGxpc3Qgb3V0IHRoZSBjb25maWdzIEknbSBwbGFubmluZyB0byBlbmFibGUgZm9yIGNsYXJpdHk6XG5cbiogICBgSVBfU0VUYFxuKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgXG4qICAgYElQX1NFVF9IQVNIX05FVE5FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGBcbiogICBgSVBfU0VUX0xJU1RfU0VUYFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQYFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQTUFDYFxuKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzo0Ni4yODI5MjU5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODQ0NDYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDYuMzkwNzc3MTQzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODYxMjg5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUCBTZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYElQX1NFVGAgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMuIEl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIGluIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgeW91J2QgZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUCBzZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGF0IGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgSVBfU0VUYCBiZWNvbWVzIGF2YWlsYWJsZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGlzLCBob3cgdG8gZW5hYmxlIGl0IGFuZCB3aGF0IGVsc2UgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTc4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDkuNzc2OTExMTE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0ODIyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTI9bWVudWNvbmZpZyBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE2PWNvbmZpZyBJUF9TRVRfTUFYXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTktXFx0cmFuZ2UgMiA2NTUzNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yMS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mjg9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTM3PWNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz01NT1jb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU3OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz02NT1jb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY4LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz03ND1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz04Mz1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODU6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTkzPWNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMDM9Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwNTpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTExMj1jb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExNDpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTEyMT1jb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjM6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI0LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzA9Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzI6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMzLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzk9Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQxOlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTUwOlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1MS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTU4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTYxLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNjg9Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNzA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTcxLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNzg9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFNFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNzktXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTgwOlxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTgxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDkuODg5Mzk3NzUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjM2NDM2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoaXMga2VybmVsIG1vZHVsZSBjb25maWcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgZm9yIGBJUF9TRVRgLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgc28gdGhvc2UgYXJlIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGNvbmZpZyBsaXN0IHdpdGhvdXQgYSBzZWNvbmQgdGhvdWdodC4gSSdsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiwgb2YgY291cnNlLCBhbmQgdGhlbiBhbGwgdGhlIGRpZmZlcmVudCBoYXNoIGFuZCBiaXRtYXAgc2V0IHR5cGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYCwgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHN5bWJvbHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gVGhpbmtpbmcgYWJvdXQgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBpbmNsdWRpbmcgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGRlZmluZWQgaW4gYGlwX3NldF9jb3JlLmNgOiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBhbmQgYGlwX3NldF91dGVzdGAuIFRob3NlIGFyZSB0aGUgY29yZSBvcGVyYXRpb25zIEknbGwgYmUgcmVseWluZyBvbi5cblxuVGhlbiB0aGVyZSBhcmUgdGhvc2UgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGV5J3JlIHByb2JhYmx5IGNyaXRpY2FsLCBnaXZlbiBob3cgbXVjaCB0aGV5IHNlZW0gdG8gZ2VuZXJhdGUuIFNvLCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9jcmVhdGVgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0NF9oZWFkYCB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIHRoZWlyIGV4cG9ydCBzdGF0dXMuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIGV4cG9ydGVkIHN5bWJvbHMgb3Igc3RhdGljLCB0byBlbnN1cmUgSSdtIGluY2x1ZGluZyBldmVyeXRoaW5nIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4ODgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NTYuMTUzMDQ0NDc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI0NjE5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludC4qbXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjU2LjIxMTI5Njk0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk5NDkxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb24gb2YgU3RhdGljIEZ1bmN0aW9ucyBpbiB0aGUgSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSd2ZSBzZWVuIHRoYXQgYG10eXBlX2FkZGAgZnVuY3Rpb24gc2lnbmF0dXJlIGJlZm9yZTogYHN0YXRpYyBpbnQgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGJlY2F1c2UgaXQncyAqc3RhdGljKiwgaXQgbWlnaHQgYmUgaW5saW5lZCBkdXJpbmcgY29tcGlsYXRpb24uIFRoYXQgd291bGQgbWVhbiB3ZSB3b3VsZG4ndCBzZWUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlmIHdlJ3JlIGRlYnVnZ2luZy5cblxuQnV0IHRoZW4sIEkgcmVtZW1iZXIgc2VlaW5nIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBtdHlwZV92YXJpYW50YC4gU29tZXRoaW5nIGxpa2UgYFtJUFNFVF9BRERdID0gbXR5cGVfYWRkYC4gQW5kIHRoYXQgY2hhbmdlcyBldmVyeXRoaW5nLiBJZiB5b3UncmUgYXNzaWduaW5nIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gYSBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbid0KiBmdWxseSBpbmxpbmUgaXQuIEl0ICpoYXMqIHRvIGV4aXN0IGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBUaGlzIGltcGxpZXMgdGhlc2UgZnVuY3Rpb25zLCBldmVuIHRob3VnaCBkZWNsYXJlZCBgc3RhdGljYCwgd2lsbCwgaW4gZmFjdCwgaGF2ZSB1bmlxdWUgYWRkcmVzc2VzIOKAkyBzaW1pbGFyIHRvIGhvdyBgaGFzaF9uZXQ0X2FkZGAgaXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgdmVyaWZ5IHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgaG93IGl0IGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowMS4wMTA3OTA4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxOTM3MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQuKm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowMS4xMDI5OTgzNjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MTUwMDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbXR5cGVfYWRkYCBtYWNyby4gTGV0J3Mgc2VlLi4uIGFjY29yZGluZyB0byBgaXBfc2V0X2hhc2hfZ2VuLmhgIGF0IGxpbmUgOTMwLCBpdCdzIGRlZmluZWQgYXMgYSBgc3RhdGljIGludCBtdHlwZV9hZGRgLiBUaGlzIGV4cGFuZHMgdG8gYHN0YXRpYyBpbnQgaGFzaF9uZXQ0X2FkZCguLi4pYC4gVGhlIGZhY3QgdGhhdCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiB3aXRoaW4gYG10eXBlX3ZhcmlhbnRgIGltcGxpZXMgdGhpcyBmdW5jdGlvbiByZXNvbHZlcyB0byBhIHVuaXF1ZSBzeW1ib2wuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgaW5jbHVkZSBhIGZldyBvZiB0aGVzZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgYG5ldDRgLCBuYW1lbHkgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfY3JlYXRlYCwgYGhhc2hfbmV0NF9kZXN0cm95YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGFuZCBgaGFzaF9uZXQ0X2hlYWRgLiBBbmQgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIGBuZXQ2YC5cblxuSG93ZXZlciwgaXQncyBwcm9iYWJseSBtb3JlIGZydWl0ZnVsIHRvIHByaW9yaXRpemUgdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzLiBUaG9zZSBhcmUsIGFmdGVyIGFsbCwgdGhlIG5vbi1zdGF0aWMgbWFpbiBhY2Nlc3MgcG9pbnRzIHRvIHRoZSBpcF9zZXQgZnVuY3Rpb25hbGl0eS4gVGhlc2Ugd291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBgaXBfc2V0X3V0ZXN0YCwgYW5kIGBpcF9zZXRfZHVtcGAuXG5cbkFuZCwgb2ggeWVzLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG9uIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AuIFRoYXQncyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggbWFrZXMgaXQgYSByZWFsbHkgZ29vZCBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBkZXN0cm95X2FuZF9mcmVlX3NldGAgaXMgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgYGlwX3NldF9jb3JlLmNgIGZvciBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE2OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowNy45NDQ1MDQ2MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTQxNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9kZXN0cm95X3NldF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTE5Mz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMTk0OmlwX3NldF9kZXN0cm95X3NldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTE5NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTIzMj1zdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5MC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEyOTE6XFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2cy1cXHUwMDNlcndvcmssIGlwX3NldF9kZXN0cm95X3NldF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5Mi1cXHRcXHRxdWV1ZV9yY3Vfd29yayhpcHNldF9kZXN0cm95X3dxLCBcXHUwMDI2cy1cXHUwMDNlcndvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowOC4wMTIwNTUzMThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkxOTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgYGlwX3NldGAgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gaXRzIG93biByaWdodCDigJMgYSBkZWRpY2F0ZWQgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZXQgaXMgbWFuYWdlZCwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGNvbW1lbnRzIGFyZSBoYW5kbGVkLiBMZXQgbWUgZGl2ZSBpbnRvIGBpcF9zZXRfaW5pdF9jb21tZW50YCBhbmQsIG5hdHVyYWxseSwgYGlwX3NldF9jb21tZW50X2ZyZWVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBwaWVjZXMgaW50ZXJyZWxhdGUgYW5kIHBsYXkgdGhlaXIgcGFydCB3aWxsIGxpa2VseSBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBsaWZlY3ljbGUgb2YgdGhlIElQIHNldCdzIG1ldGFkYXRhIGFuZCBhc3NvY2lhdGVkIGNvbW1lbnRzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoxMS40NTM5NzgxMTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDY0ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9pbml0X2NvbW1lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDc6aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzQ4LVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoxMS41MTA0NDk2OThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MTYyMjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgS2V5IFN5bWJvbHMqKlxuXG5Pa2F5LCB5ZXMsIEknbSBjb25maXJtaW5nIHRoZXNlIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBgaXBfc2V0X2R1bXBgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBgaXBfc2V0X2luaXRfY29tbWVudGAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBvbmVzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5Ob3csIGEgY3JpdGljYWwgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYW55IG9mIHRob3NlIGNvcmUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGdhbWUgY29uc2lkZXJhYmx5LCBzbyBsZXQncyBtYWtlIHN1cmUgdGhhdCdzIG5vdCB0aGUgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MTUuNDAyMDc0MzczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxODUzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCBpcF9zZXRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTA0ND1zdGF0aWMgaW50IGlwX3NldF9ub25lKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MTUuNTAyMjcxNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTgzNjQ5MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0bGluayBQb2xpY3kgQXJyYXkqKlxuXG5BbHJpZ2h0LCBzbyB0aGVzZSBwYXJ0aWN1bGFyIGRhdGEgcG9pbnRzIG9yIFwidGhvdWdodHNcIiB3ZSdyZSBkZWFsaW5nIHdpdGgsIGV2ZW4gdGhvdWdoIHRoZXkncmUgY29uY2VwdHVhbGx5IHN0YXRpYyDigJMgdGhleSdyZSBub3QgZHluYW1pYyBpbiB0aGVpciBpbmhlcmVudCBuYXR1cmUg4oCTIGFyZSBhY3R1YWxseSAqYXNzaWduZWQqIHRvIHRoZSBuZXRsaW5rIHBvbGljeSBvciBjYWxsYmFjayBhcnJheS4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYXNzaWdubWVudCBmdWxseS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXM6IGxldCdzIGRpdmUgaW50byB0aGF0IGFycmF5LiBJIG5lZWQgdG8gZXhhbWluZSBpdHMgc3RydWN0dXJlLCBjb250ZW50LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBzdGF0aWMgZWxlbWVudHMgYmVpbmcgaW5jb3Jwb3JhdGVkIGludG8gdGhhdCBhY3RpdmUsIGNhbGxiYWNrLWRyaXZlbiBlbnZpcm9ubWVudC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcG9saWN5IGVuZm9yY2VtZW50LCBhbmQgaG93IGRvZXMgdGhpcyBzdGF0aWMgZGF0YSBpbmZsdWVuY2UgdGhlIGR5bmFtaWMgYmVoYXZpb3Igb2YgdGhvc2UgY2FsbGJhY2tzPyBUaW1lIHRvIGRpc3NlY3QgdGhhdCBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoyNi40ODU5MjM3NzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQwODY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90eXBlX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMzc6LyogVW5yZWdpc3RlciBhIHNldCB0eXBlLiBUaGVyZSdzIGEgc21hbGwgcmFjZSB3aXRoIGlwX3NldF9jcmVhdGUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM4LXZvaWRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05NzM9c3RhcnRfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05ODItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXBfc2V0X2NyZWF0ZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk4NC1cXHRbSVBTRVRfQVRUUl9QUk9UT0NPTF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMDQ0PXN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDUxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTUzLVxcdFtJUFNFVF9DTURfQ1JFQVRFXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU0OlxcdFxcdC5jYWxsXFx0XFx0PSBpcF9zZXRfY3JlYXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTU1LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTU2LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBJUFNFVF9BVFRSX0NNRF9NQVgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxNTc6XFx0XFx0LnBvbGljeVxcdFxcdD0gaXBfc2V0X2NyZWF0ZV9wb2xpY3ksXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNTgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MjYuNTk1MzM2MzY3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzcyNzQ0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBcdTAwMjYgQ29uZmlndXJhdGlvbiBBbmFseXNpcyBmb3IgSVAgU2V0IFBhdGNoKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtYXAgb2Ygd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG1vc3QgY29uY2VudHJhdGVkLiAgU2luY2UgdGhlIGFkZHJlc3NlcyBvZiB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFyZSB0YWtlbiwgdGhleSBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzIGFuZCBhcmUgdGh1cyBnb29kIGZvY3VzIHN5bWJvbHMuICBcblxuSSd2ZSBub3RlZCB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfc2V0X2luaXRfY29tbWVudGAsIGBpcF9zZXRfY29tbWVudF9mcmVlYCwgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCwgYXMgd2VsbCBhcyBhIGxhcmdlIG51bWJlciBvZiBnZW5lcmF0ZWQgaGFzaCBmdW5jdGlvbnMgbGlrZSBgbXR5cGVfYWRkX2NpZHJgLCBhbmQgYG10eXBlX2RlbF9jaWRyYC4gR2l2ZW4gdGhlIGhpZ2ggbnVtYmVyIG9mIHRoZXNlIGdlbmVyYXRlZCBmdW5jdGlvbnMsIEknbGwgZm9jdXMgb24gdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzIHRoYXQgY2FsbCB0aGVtLCBhbmQgcG9zc2libHkgYSBoYW5kZnVsIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBgaGFzaF9uZXQ0X2FkZGAsIGFzIGl0IGRpcmVjdGx5IGNvbnRhaW5zIG9yIGNhbGxzIGxvZ2ljIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFxuXG5JJ20gY29uZmlybWluZyB0aGF0IGBoYXNoX25ldDRfYWRkYCBleGlzdHMgaW4gdGhlIG9iamVjdCBmaWxlIGJlY2F1c2UgaXQgaXMgYXNzaWduZWQgdG8gYG10eXBlX3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiBuZXRsaW5rIGVudHJ5IHBvaW50IGFuZCBnZW5lcmF0ZWQgZnVuY3Rpb25zLCB3aGljaCB3aWxsIGJlIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbHMuIFRoaXMgaXMgdGhlIGxpc3Q6XG5cbiogICBgaXBfc2V0X2NyZWF0ZWBcbiogICBgaXBfc2V0X2Rlc3Ryb3lgXG4qICAgYGlwX3NldF9mbHVzaGBcbiogICBgaXBfc2V0X3VhZGRgXG4qICAgYGlwX3NldF91ZGVsYFxuKiAgIGBpcF9zZXRfdXRlc3RgXG4qICAgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYFxuKiAgIGBpcF9zZXRfaW5pdF9jb21tZW50YFxuKiAgIGBpcF9zZXRfY29tbWVudF9mcmVlYFxuKiAgIGBoYXNoX25ldDRfYWRkYFxuKiAgIGBoYXNoX25ldDRfZGVsYFxuKiAgIGBoYXNoX25ldDRfdGVzdGBcbiogICBgaGFzaF9uZXQ2X2FkZGBcbiogICBgaGFzaF9uZXQ2X2RlbGBcbiogICBgaGFzaF9uZXQ2X3Rlc3RgXG5cbkknbSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiBvZiBgbXR5cGVfYWRkYCwgd2hpY2ggZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAgYXMgZXhwZWN0ZWQuIEknbSBhbHNvIGluY2x1ZGluZyB0aGUgZGF0YXBhdGggZnVuY3Rpb25zIChga2FkdGAgZnVuY3Rpb25zKSBjYWxsZWQgaW4gYGlwdGFibGVzYCwgYXMgdGhleSBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LiBTcGVjaWZpY2FsbHksIHRoZXNlOlxuXG4qICAgYGhhc2hfaXBwb3J0bmV0NF9rYWR0YFxuKiAgIGBoYXNoX25ldDRfa2FkdGBcbiogICBgaGFzaF9uZXRpZmFjZTRfa2FkdGBcbiogICBgaGFzaF9uZXRuZXQ0X2thZHRgXG4qICAgYGhhc2hfbmV0cG9ydDRfa2FkdGBcbiogICBgaGFzaF9uZXRwb3J0bmV0NF9rYWR0YFxuXG5OZXh0LCBJJ20gcmV2aWV3aW5nIHRoZSBhZmZlY3RlZCBjb25maWd1cmF0aW9ucy4gIFRoZSBjaGFuZ2VzIHNlZW0gdG8gdGFyZ2V0IHNldmVyYWwgaGFzaCB0eXBlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFzIHdlbGwgYXMgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBgSVBfU0VUX0JJVE1BUF9QT1JUYCwgYW5kIHRoZSBiYXNpYyBgSVBfU0VUYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUmAgY29uZmlncy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBleHBsaWNpdGx5IG1vZGlmaWVkIG9uZXM6XG5cbiogICBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVElGQUNFYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgXG4qICAgYElQX1NFVF9MSVNUX1NFVGBcbiogICBgSVBfU0VUX0JJVE1BUF9JUGBcbiogICBgSVBfU0VUX0JJVE1BUF9JUE1BQ2BcbiogICBgSVBfU0VUX0JJVE1BUF9QT1JUYFxuKiAgIGBJUF9TRVRgXG4qICAgYElORVRgXG4qICAgYE5FVEZJTFRFUmBcblxuTm93LCByZWZpbmluZyB0aGUgZm9jdXMgc3ltYm9sIGxpc3QgYmFzZWQgb24gdGhlIHBhdGNoJ3MgZXhwbGljaXQgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyB0aGUgZmluYWwgbGlzdDpcblxuKiAgIGBpcF9zZXRfY3JlYXRlYFxuKiAgIGBpcF9zZXRfZGVzdHJveWBcbiogICBgaXBfc2V0X2ZsdXNoYFxuKiAgIGBpcF9zZXRfdWFkZGBcbiogICBgaXBfc2V0X3VkZWxgXG4qICAgYGlwX3NldF91dGVzdGBcbiogICBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgXG4qICAgYGlwX3NldF9pbml0X2NvbW1lbnRgXG4qICAgYGlwX3NldF9jb21tZW50X2ZyZWVgXG4qICAgYGhhc2hfXG5cbiIsIklucHV0VG9rZW5zIjozNjA3NiwiT3V0cHV0VG9rZW5zIjozNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM4OjQ4LjM2ODA4NDMxM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA1MjEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9jcmVhdGVcIixcbiAgICBcImlwX3NldF9kZXN0cm95XCIsXG4gICAgXCJpcF9zZXRfZmx1c2hcIixcbiAgICBcImlwX3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWRlbFwiLFxuICAgIFwiaXBfc2V0X3V0ZXN0XCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveV9zZXRfd29ya1wiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9rYWR0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9jcmVhdGVcIixcbiAgICBcImlwX3NldF9kZXN0cm95XCIsXG4gICAgXCJpcF9zZXRfZmx1c2hcIixcbiAgICBcImlwX3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWRlbFwiLFxuICAgIFwiaXBfc2V0X3V0ZXN0XCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveV9zZXRfd29ya1wiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9rYWR0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 07:16:12 +0000 UTC FinishedAt: 2026-08-01 07:38:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NETFILTER", "IP_SET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NET", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETPORTNET", "IP_SET_LIST_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NETFILTER", "IP_SET", "IP_SET_HASH_IPPORTNET", "IP_SET_HASH_NET", "IP_SET_HASH_NETIFACE", "IP_SET_HASH_NETNET", "IP_SET_HASH_NETPORT", "IP_SET_HASH_NETPORTNET", "IP_SET_LIST_SET", "IP_SET_BITMAP_IP", "IP_SET_BITMAP_IPMAC", "IP_SET_BITMAP_PORT" ], "series_id": "5e169718-4c75-4bec-a028-4858d1af2cb7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_set_create", "ip_set_destroy", "ip_set_flush", "ip_set_uadd", "ip_set_udel", "ip_set_utest", "ip_set_destroy_set_work", "ip_set_init_comment", "ip_set_comment_free", "hash_net4_add", "hash_net4_del", "hash_net4_test", "hash_net4_kadt", "hash_netnet4_kadt", "hash_netport4_kadt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwX3NldF9kZXN0cm95JiMzNDssCiAgICAmIzM0O2lwX3NldF9mbHVzaCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWRlbCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdXRlc3QmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2thZHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXG5pbmRleCBiOTgzMzE1NzJhZDI5Li5jNDY4NjRjYzY2MjM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oXG5AQCAtMjQ0LDggJiM0MzsyNDQsOCBAQCBleHRlcm4gdm9pZCBpcF9zZXRfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBpcF9zZXRfdHlwZSAqc2V0X3R5cGUpO1xuIFxuIC8qIEEgZ2VuZXJpYyBJUCBzZXQgKi9cbiBzdHJ1Y3QgaXBfc2V0IHtcbi1cdC8qIEZvciBjYWxsX2NydSBpbiBkZXN0cm95ICovXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4gXHQvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovXG4gXHRjaGFyIG5hbWVbSVBTRVRfTUFYTkFNRUxFTl07XG4gXHQvKiBMb2NrIHByb3RlY3RpbmcgdGhlIHNldCBkYXRhICovXG5AQCAtMjczLDcgJiM0MzsyNzMsNyBAQCBzdHJ1Y3QgaXBfc2V0IHtcbiBcdC8qIE51bWJlciBvZiBlbGVtZW50cyAodnMgdGltZW91dCkgKi9cbiBcdHUzMiBlbGVtZW50cztcbiBcdC8qIFNpemUgb2YgdGhlIGR5bmFtaWMgZXh0ZW5zaW9ucyAodnMgdGltZW91dCkgKi9cbi1cdHNpemVfdCBleHRfc2l6ZTtcbiYjNDM7XHRhdG9taWM2NF90IGV4dF9zaXplO1xuIFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cbiBcdHNpemVfdCBkc2l6ZTtcbiBcdC8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtNzcsNyAmIzQzOzc3LDcgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0XHRtdHlwZV9leHRfY2xlYW51cChzZXQpO1xuIFx0Yml0bWFwX3plcm8obWFwLVx1MDAzZW1lbWJlcnMsIG1hcC1cdTAwM2VlbGVtZW50cyk7XG4gXHRzZXQtXHUwMDNlZWxlbWVudHMgPSAwO1xuLVx0c2V0LVx1MDAzZWV4dF9zaXplID0gMDtcbiYjNDM7XHRhdG9taWM2NF9zZXQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplLCAwKTtcbiB9XG4gXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXG5AQCAtOTMsNyAmIzQzOzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5pbmRleCA2Y2ZhZDE1MmQ3ZDFiLi41NDM4NTFhOTIzZDBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQFxuIHN0YXRpYyBMSVNUX0hFQUQoaXBfc2V0X3R5cGVfbGlzdCk7XHRcdC8qIGFsbCByZWdpc3RlcmVkIHNldCB0eXBlcyAqL1xuIHN0YXRpYyBERUZJTkVfTVVURVgoaXBfc2V0X3R5cGVfbXV0ZXgpO1x0XHQvKiBwcm90ZWN0cyBpcF9zZXRfdHlwZV9saXN0ICovXG4gc3RhdGljIERFRklORV9SV0xPQ0soaXBfc2V0X3JlZl9sb2NrKTtcdFx0LyogcHJvdGVjdHMgdGhlIHNldCByZWZzICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXBzZXRfZGVzdHJveV93cTtcbiBcbiBzdHJ1Y3QgaXBfc2V0X25ldCB7XG4gXHRzdHJ1Y3QgaXBfc2V0ICogX19yY3UgKmlwX3NldF9saXN0O1x0LyogYWxsIGluZGl2aWR1YWwgc2V0cyAqL1xuQEAgLTM1MCw3ICYjNDM7MzUxLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIFxuIFx0aWYgKHVubGlrZWx5KGMpKSB7XG4tXHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMTtcbiYjNDM7XHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gXHRcdGtmcmVlX3JjdShjLCByY3UpO1xuIFx0fVxuQEAgLTM2Miw3ICYjNDM7MzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbiBcdHN0cnNjcHkoYy1cdTAwM2VzdHIsIGV4dC1cdTAwM2Vjb21tZW50LCBsZW4gJiM0MzsgMSk7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgJiM0Mzs9IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxO1xuJiM0MztcdGF0b21pYzY0X2FkZChzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIGMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcbkBAIC0zOTIsNyAmIzQzOzM5Myw3IEBAIGlwX3NldF9jb21tZW50X2ZyZWUoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICpwdHIpXG4gXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVx1MDAzZWMsIDEpO1xuIFx0aWYgKHVubGlrZWx5KCFjKSlcbiBcdFx0cmV0dXJuO1xuLVx0c2V0LVx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtXHUwMDNlc3RyKSAmIzQzOyAxO1xuJiM0MztcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLVx1MDAzZXN0cikgJiM0MzsgMSwgXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIFx0a2ZyZWVfcmN1KGMsIHJjdSk7XG4gfVxuQEAgLTExNzgsMjIgJiM0MzsxMTc5LDI2IEBAIGlwX3NldF9zZXRuYW1lX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4gXHRcdFx0XHQgICAgLmxlbiA9IElQU0VUX01BWE5BTUVMRU4gLSAxIH0sXG4gfTtcbiBcbi0vKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LCBpdCBpcyBzcGxpdFxuLSAqIGludG8gdHdvIHN0YWdlczpcbi0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvclxuLSAqIC0gRGVzdHJveSB0aGUgc2V0IGl0c2VsZiB2aWEgY2FsbF9yY3UoKVxuLSAqL1xuLVxuIHN0YXRpYyB2b2lkXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4mIzQzO2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4tXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTtcbi1cbiBcdHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWRlc3Ryb3koc2V0KTtcbiBcdG1vZHVsZV9wdXQoc2V0LVx1MDAzZXR5cGUtXHUwMDNlbWUpO1xuIFx0a2ZyZWUoc2V0KTtcbiB9XG4gXG4mIzQzOy8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsXG4mIzQzOyAqIGRlc3RydWN0aW9uIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgdmlhIHdvcmsgcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwX3NldCAqc2V0ID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfc2V0LCByd29yayk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfYW5kX2ZyZWVfc2V0KHNldCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBfZGVzdHJveV9hbGxfc2V0cyhzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdClcbiB7XG5AQCAtMTI4Myw3ICYjNDM7MTI4OCw4IEBAIHN0YXRpYyBpbnQgaXBfc2V0X2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHQvKiBNdXN0IHdhaXQgZm9yIGZsdXNoIHRvIGJlIHJlYWxseSBmaW5pc2hlZCAgKi9cbiBcdFx0XHRyY3VfYmFycmllcigpO1xuIFx0XHR9XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTtcbiYjNDM7XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2cy1cdTAwM2Vyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspO1xuJiM0MztcdFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXHUwMDI2cy1cdTAwM2Vyd29yayk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBvdXQ6XG5AQCAtMjQyMSwxOCAmIzQzOzI0MjcsMjMgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF9zZXRfbmV0X29wcyA9IHtcbiBzdGF0aWMgaW50IF9faW5pdFxuIGlwX3NldF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlwc2V0X2Rlc3Ryb3lfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtpcHNldF9kZXN0cm95X3dxXCYjMzQ7LCAwKTtcbiYjNDM7XHRpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2lwX3NldDogY2Fubm90IHJlZ2lzdGVyIHBlcm5ldF9zdWJzeXMuXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3dxO1xuIFx0fVxuIFxuIFx0cmV0ID0gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0aWYgKHJldCAhPSAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciB3aXRoIG5mbmV0bGluay5cXG5cJiMzNDspO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfd3E7XG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KFx1MDAyNnNvX3NldCk7XG5AQCAtMjQ0MCwxMCAmIzQzOzI0NTEsMTMgQEAgaXBfc2V0X2luaXQodm9pZClcbiBcdFx0cHJfZXJyKFwmIzM0O1NPX1NFVCByZWdpc3RyeSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcbiBcdFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3dxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO291dF93cTpcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXRcbkBAIC0yNDUzLDkgJiM0MzsyNDY3LDcgQEAgaXBfc2V0X2Zpbmkodm9pZClcbiBcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcbi1cdC8qIFdhaXQgZm9yIGNhbGxfcmN1KCkgaW4gZGVzdHJveSAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcbiBcdHByX2RlYnVnKFwmIzM0O3RoZXNlIGFyZSB0aGUgZmFtb3VzIGxhc3Qgd29yZHNcXG5cJiMzNDspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC05OSw5ICYjNDM7OTksMTUgQEAgc3RydWN0IGh0YWJsZSB7XG4gI2VuZGlmXG4gXG4gLyogQm9vay1rZWVwaW5nIG9mIHRoZSBwcmVmaXhlcyBhZGRlZCB0byB0aGUgc2V0ICovXG4mIzQzO3N0cnVjdCBuZXRfcHJlZml4IHtcbiYjNDM7XHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4mIzQzO1x0dTMyIGNvdW50O1x0XHRcdC8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuJiM0MztcdHU4IGxlbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XG4gfTtcbiBcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cbkBAIC0xMjcsMTEgJiM0MzsxMzMsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcbiAjZWxzZVxuICNkZWZpbmUgX19DSURSKGNpZHIsIGkpXHRcdChjaWRyKVxuICNlbmRpZlxuLVxuLS8qIGNpZHIgJiM0MzsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cbi0jZGVmaW5lIE5DSURSX1BVVChjaWRyKVx0XHQoKGNpZHIpICYjNDM7IDEpXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG4tXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG5AQCAtMTQxLDIxICYjNDM7MTQyLDExIEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXHRfX0NJRFIoY2lkciwgaSlcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spXHRcXFxuLVx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxuLVxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDBcbi0vKiBjaWRyIGZyb20gMCB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICYjNDM7IDEgKi9cbi0jZGVmaW5lIE5MRU5cdFx0XHQoSE9TVF9NQVNLICYjNDM7IDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqL1xuLSNkZWZpbmUgTkxFTlx0XHRcdEhPU1RfTUFTS1xuLSNkZWZpbmUgQ0lEUl9QT1MoYylcdFx0KChjKSAtIDIpXG4tI2VuZGlmXG4mIzQzOyNkZWZpbmUgSU5JVF9DSURSKG4sIGhvc3RfbWFzaykgKHtcdFx0XHRcdFxcXG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1x0XHRcXFxuJiM0MztcdERDSURSX1BVVCgoX19uKS1cdTAwM2VsZW4gPyAoX19uKS1cdTAwM2VuZXRzWzBdLmNpZHIgOiBob3N0X21hc2spO1xcXG4mIzQzO30pXG4gXG4tI2Vsc2Vcbi0jZGVmaW5lIE5MRU5cdFx0XHQwXG4gI2VuZGlmIC8qIElQX1NFVF9IQVNIX1dJVEhfTkVUUyAqL1xuIFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXHRcXFxuQEAgLTIwNCwxMiAmIzQzOzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG4gI3VuZGVmIG10eXBlX2FkZF9jaWRyXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4mIzQzOyN1bmRlZiBtdHlwZV9kZWxfY2lkcl9hbGxcbiAjdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZVxuICN1bmRlZiBtdHlwZV9mbHVzaFxuICN1bmRlZiBtdHlwZV9kZXN0cm95XG4gI3VuZGVmIG10eXBlX3NhbWVfc2V0XG4gI3VuZGVmIG10eXBlX2thZHRcbiAjdW5kZWYgbXR5cGVfdWFkdFxuJiM0MzsjdW5kZWYgbXR5cGVfYnVja2V0X3NpemVcbiYjNDM7I3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxuIFxuICN1bmRlZiBtdHlwZV9hZGRcbiAjdW5kZWYgbXR5cGVfZGVsXG5AQCAtMjQ5LDEyICYjNDM7MjQzLDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxuICNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGRfY2lkcilcbiAjZGVmaW5lIG10eXBlX2RlbF9jaWRyXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXG4mIzQzOyNkZWZpbmUgbXR5cGVfZGVsX2NpZHJfYWxsXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbClcbiAjZGVmaW5lIG10eXBlX2FoYXNoX21lbXNpemVcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWhhc2hfbWVtc2l6ZSlcbiAjZGVmaW5lIG10eXBlX2ZsdXNoXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZmx1c2gpXG4gI2RlZmluZSBtdHlwZV9kZXN0cm95XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVzdHJveSlcbiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfc2FtZV9zZXQpXG4gI2RlZmluZSBtdHlwZV9rYWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfa2FkdClcbiAjZGVmaW5lIG10eXBlX3VhZHRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF91YWR0KVxuJiM0MzsjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxuJiM0MzsjZGVmaW5lIG10eXBlX2hhc2hfc2l6ZVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2hhc2hfc2l6ZSlcbiBcbiAjZGVmaW5lIG10eXBlX2FkZFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcbiAjZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbkBAIC0yOTIsNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcbiAvKiBUaGUgZ2VuZXJpYyBoYXNoIHN0cnVjdHVyZSAqL1xuIHN0cnVjdCBodHlwZSB7XG4gXHRzdHJ1Y3QgaHRhYmxlIF9fcmN1ICp0YWJsZTsgLyogdGhlIGhhc2ggdGFibGUgKi9cbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovXG4gXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1x0LyogZ2Mgd29ya3F1ZXVlICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXG4gXHR1MzIgaW5pdHZhbDtcdFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cbkBAIC0zMDIsOSAmIzQzOzMwMCw2IEBAIHN0cnVjdCBodHlwZSB7XG4gI2lmIGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9ORVRNQVNLKSB8fCBkZWZpbmVkKElQX1NFVF9IQVNIX1dJVEhfQklUTUFTSylcbiBcdHU4IG5ldG1hc2s7XHRcdC8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi9cbiBcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrO1x0Lyogc3RvcmVzIGJpdG1hc2sgKi9cbi0jZW5kaWZcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqL1xuICNlbmRpZlxuIFx0LyogQmVjYXVzZSAmIzM5O25leHQmIzM5OyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzXG4gXHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICYjMzk7bmV4dCYjMzk7LlxuQEAgLTMyNiw1NSAmIzQzOzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciAmIzQzOyAxIHRvIHN1cHBvcnQgLzAuXG4gICovXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxuIHtcbi1cdGludCBpLCBqO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0aW50IGksIGosIGZvdW5kLCBsZW4gPSAwLCByZXQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbiBcdC8qIEFkZCBpbiBpbmNyZWFzaW5nIHByZWZpeCBvcmRlciwgc28gbGFyZ2VyIGNpZHIgZmlyc3QgKi9cbi1cdGZvciAoaSA9IDAsIGogPSAtMTsgaSBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChqICE9IC0xKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dJiM0MzsmIzQzOztcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbiYjNDM7XHRcdFx0Zm91bmQgPSBpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXRzLVx1MDAzZW5ldHNbaV0uY2lkciA9PSBjaWRyKSB7XG4mIzQzO1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChqICE9IC0xKSB7XG4tXHRcdGZvciAoOyBpIFx1MDAzZSBqOyBpLS0pXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XG4mIzQzO1x0bGVuJiM0MzsmIzQzOztcbiYjNDM7XHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXRtcCkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSA9PSBmb3VuZCkge1xuJiM0MztcdFx0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbiYjNDM7XHRcdFx0dG1wLVx1MDAzZW5ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghbmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4mIzQzO1x0aWYgKGZvdW5kID09IC0xKSB7XG4mIzQzO1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXHUwMDNlcm5ldHNbbl0sIHRtcCk7XG4mIzQzO1x0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXG4ge1xuLVx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzO1x0dTggaSwgaiwgbGVuID0gMDtcbiYjNDM7XHRpbnQgZm91bmQ7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkxFTjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dICE9IGNpZHIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dIFx1MDAzZSAwKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0XHRmb3IgKGogPSBpOyBqIFx1MDAzYyBuZXRfZW5kIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkcltuXTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0aC1cdTAwM2VuZXRzW2pdLmNpZHJbbl0gPSBoLVx1MDAzZW5ldHNbaiAmIzQzOyAxXS5jaWRyW25dO1xuLVx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IDA7XG4mIzQzO1x0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cdTAwM2VybmV0c1tuXSk7XG4mIzQzO1x0Zm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNvdW50KVxuJiM0MztcdFx0XHRsZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4mIzQzO1x0XHRcdGZvdW5kID0gaTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvdW5kID09IC0xKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4mIzQzO1x0aWYgKG5ldHMtXHUwMDNlbmV0c1tmb3VuZF0uY291bnQpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRsZW4tLTtcbiYjNDM7XHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXRtcClcbiYjNDM7XHRcdC8qIExlYXZlIGEgaG9sZSAqL1xuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbiYjNDM7XHRcdHRtcC1cdTAwM2VuZXRzW2omIzQzOyYjNDM7XS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbiYjNDM7XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbiB1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttdHlwZV9kZWxfY2lkcl9hbGwoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRpbnQgaztcbiYjNDM7XG4mIzQzO1x0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCwgRENJRFJfR0VUKGRhdGEtXHUwMDNlY2lkciwgayksIGspO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBtZW1vcnkgc2l6ZSBvZiB0aGUgc2V0IGRhdGEgKi9cbiBzdGF0aWMgc2l6ZV90XG4gbXR5cGVfYWhhc2hfbWVtc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBodGFibGUgKnQpXG5AQCAtNDAyLDYgJiM0Mzs0NTAsOSBAQCBzdGF0aWMgdm9pZFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4mIzQzOyNlbmRpZlxuIFx0c3RydWN0IGh0YWJsZSAqdDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIHIsIGk7XG5AQCAtNDI1LDcgJiM0Mzs0NzYsMTkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWhyZWdpb25bcl0ubG9jayk7XG4gXHR9XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0bWVtc2V0KGgtXHUwMDNlbmV0cywgMCwgc2l6ZW9mKGgtXHUwMDNlbmV0cykpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBpcHNldF9kZXJlZmVyZW5jZV9uZm5sKGgtXHUwMDNlcm5ldHNbaV0pO1xuJiM0MztcdFx0dG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIXRtcCkge1xuJiM0MztcdFx0XHR1OCBqO1xuJiM0MztcbiYjNDM7XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRcdG5ldHMtXHUwMDNlbmV0c1tqXS5jb3VudCA9IDA7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tpXSwgdG1wKTtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuICNlbmRpZlxuIH1cbiBcbkBAIC00MzMsNiAmIzQzOzQ5Niw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiBzdGF0aWMgdm9pZFxuIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIHtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuJiM0MzsjZW5kaWZcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIGk7XG4gXG5AQCAtNDQ2LDYgJiM0Mzs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXG4gXHRcdGtmcmVlKG4pO1xuIFx0fVxuIFxuJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4mIzQzO1x0aWYgKGV4dF9kZXN0cm95KVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzW2ldKSk7XG4mIzQzOyNlbmRpZlxuIFx0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiBcdGlwX3NldF9mcmVlKHQpO1xuIH1cbkBAIC00OTMsOSAmIzQzOzU2NCw2IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcbiBcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xuIFx0dTMyIGksIGosIGQ7XG4gXHRzaXplX3QgZHNpemUgPSBzZXQtXHUwMDNlZHNpemU7XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0dTggaztcbi0jZW5kaWZcbiBcdHU4IHBvcywgaHRhYmxlX2JpdHMgPSB0LVx1MDAzZWh0YWJsZV9iaXRzO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbkBAIC01MTYsMTIgJiM0Mzs1ODQsNyBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpXG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZXhwaXJlZCAldS8ldVxcblwmIzM0OywgaSwgaik7XG4gXHRcdFx0Y2xlYXJfYml0KGosIG4tXHUwMDNldXNlZCk7XG4gXHRcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4tI2VuZGlmXG4mIzQzO1x0XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdGQmIzQzOyYjNDM7O1xuQEAgLTk0NywxMiAmIzQzOzEwMTAsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0XHRqID0gMDtcbiBcdFx0ZGF0YSA9IGFoYXNoX2RhdGEobiwgaiwgc2V0LVx1MDAzZWRzaXplKTtcbiBcdFx0aWYgKCFkZWxldGVkKSB7XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4tXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuLSNlbmRpZlxuJiM0MztcdFx0XHRtdHlwZV9kZWxfY2lkcl9hbGwoc2V0LCBoLCBkYXRhKTtcbiBcdFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcdFx0XHR0LVx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcbiBcdFx0fVxuQEAgLTk5Niw3ICYjNDM7MTA1NCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzJiM0MzsmIzQzOztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuJiM0MztcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XG4gb3ZlcndyaXRlX2V4dGVuc2lvbnM6XG5AQCAtMTEwNywxMSAmIzQzOzExNjUsNyBAQCBtdHlwZV9kZWwoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdFx0aWYgKGkgJiM0MzsgMSA9PSBwb3MpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbiBcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGomIzQzOyYjNDM7KVxuLVx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdCAgICAgICBOQ0lEUl9QVVQoRENJRFJfR0VUKGQtXHUwMDNlY2lkciwgaikpLCBqKTtcbi0jZW5kaWZcbiYjNDM7XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGQpO1xuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuQEAgLTExOTMsMjggJiM0MzsxMjQ3LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2V0YWJsZSk7XG4mIzQzO1x0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czA7XG4gXHRzdHJ1Y3QgaGJ1Y2tldCAqbjtcbiBcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xuICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuJiM0MztcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4mIzQzO1x0aW50IHJldCwgaSwgaiwgaztcbiAjZWxzZVxuLVx0aW50IHJldCwgaSwgaiA9IDA7XG4mIzQzO1x0aW50IHJldCwgaSwgajtcbiAjZW5kaWZcbiBcdHUzMiBrZXksIG11bHRpID0gMDtcbiBcdHU4IHBvcztcbiBcbiBcdHByX2RlYnVnKFwmIzM0O3Rlc3QgYnkgbmV0c1xcblwmIzM0Oyk7XG4tXHRmb3IgKDsgaiBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2pdLmNpZHJbMF0gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0bmV0czAgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1swXSk7XG4mIzQzOyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuJiM0MztcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMV0pO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXG4gXHRcdG10eXBlX2RhdGFfcmVzZXRfZWxlbShkLCBcdTAwMjZvcmlnKTtcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSksIGZhbHNlKTtcbi1cdFx0Zm9yIChrID0gMDsgayBcdTAwM2MgTkxFTiBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0gXHUwMDI2XHUwMDI2ICFtdWx0aTtcbi1cdFx0ICAgICBrJiM0MzsmIzQzOykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbiYjNDM7XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cdTAwM2VuZXRzW2pdLmNpZHIsIGZhbHNlKTtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5ldHMxLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjYgIW11bHRpOyBrJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoIW5ldHMxLVx1MDAzZW5ldHNba10uY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMS1cdTAwM2VuZXRzW2tdLmNpZHIsIHRydWUpO1xuICNlbHNlXG4tXHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2pdLmNpZHJbMF0pKTtcbiYjNDM7XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cdTAwM2VuZXRzW2pdLmNpZHIpO1xuICNlbmRpZlxuIFx0XHRrZXkgPSBIS0VZKGQsIGgtXHUwMDNlaW5pdHZhbCwgdC1cdTAwM2VodGFibGVfYml0cyk7XG4gXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgoaGJ1Y2tldCh0LCBrZXkpKTtcbkBAIC0xMjI5LDcgJiM0MzsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdFx0Z290byB1bmxvY2s7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcbiBcdFx0XHQvKiBObyBtYXRjaCwgcmVzZXQgbXVsdGlwbGUgbWF0Y2ggZmxhZyAqL1xuIFx0XHRcdG11bHRpID0gMDtcbkBAIC0xMjM5LDcgJiM0MzsxMzAyLDEwIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcbiBcdFx0fVxuICNlbmRpZlxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEyOTQsNiAmIzQzOzEzNjAsMjQgQEAgbXR5cGVfdGVzdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgbXR5cGVfaGFzaF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBodGFibGUgKnQ7XG4mIzQzO1x0dTggaHRhYmxlX2JpdHM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR0ID0gcmN1X2RlcmVmZXJlbmNlKGgtXHUwMDNldGFibGUpO1xuJiM0MztcdGh0YWJsZV9iaXRzID0gdC1cdTAwM2VodGFibGVfYml0cztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoLVx1MDAzZWJ1Y2tldHNpemU7XG4mIzQzO31cbiYjNDM7XG4gLyogUmVwbHkgYSBIRUFERVIgcmVxdWVzdDogZmlsbCBvdXQgdGhlIGhlYWRlciBwYXJ0IG9mIHRoZSBzZXQgKi9cbiBzdGF0aWMgaW50XG4gbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMTMwNCwyMSAmIzQzOzEzODgsMjAgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzaXplX3QgbWVtc2l6ZTtcbiBcdHUzMiBlbGVtZW50cyA9IDA7XG4gXHRzaXplX3QgZXh0X3NpemUgPSAwO1xuLVx0dTggaHRhYmxlX2JpdHM7XG4gXG4gXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4gXHR0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNldGFibGUpO1xuIFx0bXR5cGVfZXh0X3NpemUoc2V0LCBcdTAwMjZlbGVtZW50cywgXHUwMDI2ZXh0X3NpemUpO1xuLVx0bWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgJiM0MzsgZXh0X3NpemUgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuLVx0aHRhYmxlX2JpdHMgPSB0LVx1MDAzZWh0YWJsZV9iaXRzO1xuJiM0MztcdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICYjNDM7IGV4dF9zaXplICYjNDM7IGF0b21pYzY0X3JlYWQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLVx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0hBU0hTSVpFLFxuLVx0XHRcdCAgaHRvbmwoamhhc2hfc2l6ZShodGFibGVfYml0cykpKSB8fFxuLVx0ICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXHUwMDNlbWF4ZWxlbSkpKVxuJiM0MztcbiYjNDM7XHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKVxuJiM0MztcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1x0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXHUwMDNlbWF4ZWxlbSkpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLXG4gXHQvKiBpZiBuZXRtYXNrIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIEhPU1RfTUFTSyB3ZSBrbm93IHRoYXQgdGhlIHVzZXIgc3VwcGxpZWQgbmV0bWFza1xuQEAgLTEzNDIsOCAmIzQzOzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNFVF9DUkVBVEVfRkxBR19CVUNLRVRTSVpFKSB7XG4tXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBoLVx1MDAzZWJ1Y2tldHNpemUpIHx8XG4tXHRcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVx1MDAzZWluaXR2YWwpKSlcbiYjNDM7XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtXHUwMDNlaW5pdHZhbCkpKVxuIFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0fVxuIFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC1cdTAwM2VyZWYpKSB8fFxuQEAgLTE1MDQsNiAmIzQzOzE1ODgsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRpbnQgcmV0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDtcbiBcdHU4IG5ldG1hc2sgPSBzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCA/IDMyIDogMTI4O1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2sgPSBvbmVzbWFzaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiYjNDM7XHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzO1xuICNlbmRpZlxuIFx0c2l6ZV90IGhzaXplO1xuIFx0c3RydWN0IGh0eXBlICpoO1xuQEAgLTE2MDQsMjEgJiM0MzsxNjkxLDI1IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdCAqL1xuIFx0aGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTtcbiBcdGhzaXplID0gaHRhYmxlX3NpemUoaGJpdHMpO1xuLVx0aWYgKGhzaXplID09IDApIHtcbi1cdFx0a2ZyZWUoaCk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcdGlmIChoc2l6ZSA9PSAwKVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0ID0gaXBfc2V0X2FsbG9jKGhzaXplKTtcbi1cdGlmICghdCkge1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0LVx1MDAzZWhyZWdpb24pXG4mIzQzO1x0XHRnb3RvIGZyZWVfdDtcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7XG4mIzQzO1x0XHRpZiAoIW5ldHMpIHtcbiYjNDM7XHRcdFx0d2hpbGUgKGkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVx1MDAzZXJuZXRzWy0taV0pKTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX2hyZWdpb247XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRSQ1VfSU5JVF9QT0lOVEVSKGgtXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xuIFx0fVxuJiM0MzsjZW5kaWZcbiBcdGgtXHUwMDNlZ2Muc2V0ID0gc2V0O1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aC1cdTAwM2VnYy5sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSYjNDM7JiM0MzspXG5AQCAtMTY1MCw2ICYjNDM7MTc0MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlYWQpO1xuIFx0UkNVX0lOSVRfUE9JTlRFUihoLVx1MDAzZXRhYmxlLCB0KTtcbiBcdHNldC1cdTAwM2VkYXRhID0gaDtcbiYjNDM7XG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuICNlbmRpZlxuQEAgLTE2NzgsMTAgJiM0MzsxNzcwLDIwIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiAjZW5kaWZcbiBcdH1cbiBcdHByX2RlYnVnKFwmIzM0O2NyZWF0ZSAlcyBoYXNoc2l6ZSAldSAoJXUpIG1heGVsZW0gJXU6ICVwKCVwKVxcblwmIzM0Oyxcbi1cdFx0IHNldC1cdTAwM2VuYW1lLCBqaGFzaF9zaXplKHQtXHUwMDNlaHRhYmxlX2JpdHMpLFxuJiM0MztcdFx0IHNldC1cdTAwM2VuYW1lLCBtdHlwZV9oYXNoX3NpemUoaCksXG4gXHRcdCB0LVx1MDAzZWh0YWJsZV9iaXRzLCBoLVx1MDAzZW1heGVsZW0sIHNldC1cdTAwM2VkYXRhLCB0KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7I2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuJiM0MztmcmVlX2hyZWdpb246XG4mIzQzO1x0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiYjNDM7I2VuZGlmXG4mIzQzO2ZyZWVfdDpcbiYjNDM7XHRpcF9zZXRfZnJlZSh0KTtcbiYjNDM7ZnJlZV9oOlxuJiM0MztcdGtmcmVlKGgpO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuIH1cbiAjZW5kaWYgLyogSVBfU0VUX0VNSVRfQ1JFQVRFICovXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcbmluZGV4IDJkNjY1MmQ0MzE5OWEuLjE5NTg1M2EyNWIwNjAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5AQCAtMTM4LDcgJiM0MzsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfaXBwb3J0bmV0NiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbiYjNDM7XHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMS4uMDkyZjNjOTI4MWI4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIGhhc2hfbmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuaW5kZXggMzBhNjU1ZTVjNGZkYy4uYjQ0Yjk1Zjc2NmI3YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5AQCAtMTYxLDcgJiM0MzsxNjEsNyBAQCBoYXNoX25ldGlmYWNlNF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5AQCAtMzgyLDcgJiM0MzszODIsNyBAQCBoYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmNcbmluZGV4IDhmYmU2NDljOWRkM2QuLmY3YzhhMWNjMzBmYzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5AQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuJiM0MztcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiYjNDM7XHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiBcdGlmIChhZHQgPT0gSVBTRVRfVEVTVClcbiBcdFx0ZS5jY21wID0gKEhPU1RfTUFTSyBcdTAwM2NcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjMuLjVkZTRiNTExZGU3NjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGhhc2hfbmV0cG9ydDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnQ0X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4mIzQzO1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMzUzLDcgJiM0MzszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuJiM0MztcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbmluZGV4IGJmNGY5MWI3OGUxZGMuLjYyOTE1MzJiZTdhNWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcbkBAIC0xNTcsOCAmIzQzOzE1NywxMCBAQCBoYXNoX25ldHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbkBAIC00NTIsOCAmIzQzOzQ1NCwxMCBAQCBoYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbi1cdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTtcbi1cdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclsxXSwgSE9TVF9NQVNLKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4mIzQzO1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXG5pbmRleCAxY2VmODRmMTVlOGM3Li5jYTNlZjk0NzllODM4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuQEAgLTQyMSw3ICYjNDM7NDIxLDcgQEAgbGlzdF9zZXRfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KVxuIFx0XHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuJiM0MztcdGF0b21pYzY0X3NldChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0Mzsgc2V0LVx1MDAzZWV4dF9zaXplO1xuJiM0MztcdHNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9JUFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVElGQUNFJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVRQT1JUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlRORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0xJU1RfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfSVAmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUE1BQyYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX1BPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2lwX3NldF9kZXN0cm95JiMzNDssCiAgICAmIzM0O2lwX3NldF9mbHVzaCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWFkZCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdWRlbCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfdXRlc3QmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsmIzM0OywKICAgICYjMzQ7aXBfc2V0X2luaXRfY29tbWVudCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfY29tbWVudF9mcmVlJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2RlbCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfdGVzdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldG5ldDRfa2FkdCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldHBvcnQ0X2thZHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKaW5kZXggYjk4MzMxNTcyYWQyOS4uYzQ2ODY0Y2M2NjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKQEAgLTI0NCw4ICYjNDM7MjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTsKIAogLyogQSBnZW5lcmljIElQIHNldCAqLwogc3RydWN0IGlwX3NldCB7Ci0JLyogRm9yIGNhbGxfY3J1IGluIGRlc3Ryb3kgKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwkvKiBmb3Igc2V0IGRlc3RydWN0aW9uICovCiYjNDM7CXN0cnVjdCByY3Vfd29yayByd29yazsKIAkvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovCiAJY2hhciBuYW1lW0lQU0VUX01BWE5BTUVMRU5dOwogCS8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi8KQEAgLTI3Myw3ICYjNDM7MjczLDcgQEAgc3RydWN0IGlwX3NldCB7CiAJLyogTnVtYmVyIG9mIGVsZW1lbnRzICh2cyB0aW1lb3V0KSAqLwogCXUzMiBlbGVtZW50czsKIAkvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovCi0Jc2l6ZV90IGV4dF9zaXplOwomIzQzOwlhdG9taWM2NF90IGV4dF9zaXplOwogCS8qIEVsZW1lbnQgZGF0YSBzaXplICovCiAJc2l6ZV90IGRzaXplOwogCS8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCmluZGV4IGJiOWI1YmVkMTBlMTkuLjIyNmZkZjE3YjY4MzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKQEAgLTc3LDcgJiM0Mzs3Nyw3IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAkJbXR5cGVfZXh0X2NsZWFudXAoc2V0KTsKIAliaXRtYXBfemVybyhtYXAtJmd0O21lbWJlcnMsIG1hcC0mZ3Q7ZWxlbWVudHMpOwogCXNldC0mZ3Q7ZWxlbWVudHMgPSAwOwotCXNldC0mZ3Q7ZXh0X3NpemUgPSAwOwomIzQzOwlhdG9taWM2NF9zZXQoJmFtcDtzZXQtJmd0O2V4dF9zaXplLCAwKTsKIH0KIAogLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovCkBAIC05Myw3ICYjNDM7OTMsNyBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgbXR5cGUgKm1hcCA9IHNldC0mZ3Q7ZGF0YTsKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0ZWQ7Ci0Jc2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LSZndDtkc2l6ZSkgJiM0Mzsgc2V0LSZndDtleHRfc2l6ZTsKJiM0MzsJc2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LSZndDtkc2l6ZSkgJiM0MzsgYXRvbWljNjRfcmVhZCgmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCiAJbmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpOwogCWlmICghbmVzdGVkKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IDZjZmFkMTUyZDdkMWIuLjU0Mzg1MWE5MjNkMGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBACiBzdGF0aWMgTElTVF9IRUFEKGlwX3NldF90eXBlX2xpc3QpOwkJLyogYWxsIHJlZ2lzdGVyZWQgc2V0IHR5cGVzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGlwX3NldF90eXBlX211dGV4KTsJCS8qIHByb3RlY3RzIGlwX3NldF90eXBlX2xpc3QgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwX3NldF9yZWZfbG9jayk7CQkvKiBwcm90ZWN0cyB0aGUgc2V0IHJlZnMgKi8KJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwc2V0X2Rlc3Ryb3lfd3E7CiAKIHN0cnVjdCBpcF9zZXRfbmV0IHsKIAlzdHJ1Y3QgaXBfc2V0ICogX19yY3UgKmlwX3NldF9saXN0OwkvKiBhbGwgaW5kaXZpZHVhbCBzZXRzICovCkBAIC0zNTAsNyAmIzQzOzM1MSw3IEBAIGlwX3NldF9pbml0X2NvbW1lbnQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaXBfc2V0X2NvbW1lbnQgKmNvbW1lbnQsCiAJc2l6ZV90IGxlbiA9IGV4dC0mZ3Q7Y29tbWVudCA/IHN0cmxlbihleHQtJmd0O2NvbW1lbnQpIDogMDsKIAogCWlmICh1bmxpa2VseShjKSkgewotCQlzZXQtJmd0O2V4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMTsKJiM0MzsJCWF0b21pYzY0X3N1YihzaXplb2YoKmMpICYjNDM7IHN0cmxlbihjLSZndDtzdHIpICYjNDM7IDEsICZhbXA7c2V0LSZndDtleHRfc2l6ZSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LSZndDtjLCBOVUxMKTsKIAkJa2ZyZWVfcmN1KGMsIHJjdSk7CiAJfQpAQCAtMzYyLDcgJiM0MzszNjMsNyBAQCBpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LAogCWlmICh1bmxpa2VseSghYykpCiAJCXJldHVybjsKIAlzdHJzY3B5KGMtJmd0O3N0ciwgZXh0LSZndDtjb21tZW50LCBsZW4gJiM0MzsgMSk7Ci0Jc2V0LSZndDtleHRfc2l6ZSAmIzQzOz0gc2l6ZW9mKCpjKSAmIzQzOyBzdHJsZW4oYy0mZ3Q7c3RyKSAmIzQzOyAxOwomIzQzOwlhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSAmIzQzOyBzdHJsZW4oYy0mZ3Q7c3RyKSAmIzQzOyAxLCAmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LSZndDtjLCBjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpOwpAQCAtMzkyLDcgJiM0MzszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKQogCWMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNvbW1lbnQtJmd0O2MsIDEpOwogCWlmICh1bmxpa2VseSghYykpCiAJCXJldHVybjsKLQlzZXQtJmd0O2V4dF9zaXplIC09IHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMTsKJiM0MzsJYXRvbWljNjRfc3ViKHNpemVvZigqYykgJiM0Mzsgc3RybGVuKGMtJmd0O3N0cikgJiM0MzsgMSwgJmFtcDtzZXQtJmd0O2V4dF9zaXplKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC0mZ3Q7YywgTlVMTCk7CiAJa2ZyZWVfcmN1KGMsIHJjdSk7CiB9CkBAIC0xMTc4LDIyICYjNDM7MTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0gewogCQkJCSAgICAubGVuID0gSVBTRVRfTUFYTkFNRUxFTiAtIDEgfSwKIH07CiAKLS8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsIGl0IGlzIHNwbGl0Ci0gKiBpbnRvIHR3byBzdGFnZXM6Ci0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvcgotICogLSBEZXN0cm95IHRoZSBzZXQgaXRzZWxmIHZpYSBjYWxsX3JjdSgpCi0gKi8KLQogc3RhdGljIHZvaWQKLWlwX3NldF9kZXN0cm95X3NldF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldCkKIHsKLQlzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTsKLQogCXNldC0mZ3Q7dmFyaWFudC0mZ3Q7ZGVzdHJveShzZXQpOwogCW1vZHVsZV9wdXQoc2V0LSZndDt0eXBlLSZndDttZSk7CiAJa2ZyZWUoc2V0KTsKIH0KIAomIzQzOy8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsCiYjNDM7ICogZGVzdHJ1Y3Rpb24gaXMgZG9uZSBhc3luY2hyb25vdXNseSB2aWEgd29yayBxdWV1ZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0MztpcF9zZXRfZGVzdHJveV9zZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksCiYjNDM7CQkJCQkgIHN0cnVjdCBpcF9zZXQsIHJ3b3JrKTsKJiM0MzsKJiM0MzsJZGVzdHJveV9hbmRfZnJlZV9zZXQoc2V0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogX2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpCiB7CkBAIC0xMjgzLDcgJiM0MzsxMjg4LDggQEAgc3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQkJLyogTXVzdCB3YWl0IGZvciBmbHVzaCB0byBiZSByZWFsbHkgZmluaXNoZWQgICovCiAJCQlyY3VfYmFycmllcigpOwogCQl9Ci0JCWNhbGxfcmN1KCZhbXA7cy0mZ3Q7cmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTsKJiM0MzsJCUlOSVRfUkNVX1dPUksoJmFtcDtzLSZndDtyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgJmFtcDtzLSZndDtyd29yayk7CiAJfQogCXJldHVybiAwOwogb3V0OgpAQCAtMjQyMSwxOCAmIzQzOzI0MjcsMjMgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF9zZXRfbmV0X29wcyA9IHsKIHN0YXRpYyBpbnQgX19pbml0CiBpcF9zZXRfaW5pdCh2b2lkKQogewotCWludCByZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpcHNldF9kZXN0cm95X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtpcHNldF9kZXN0cm95X3dxJiMzNDssIDApOwomIzQzOwlpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCYjMzQ7aXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgcGVybmV0X3N1YnN5cy5cbiYjMzQ7KTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3dxOwogCX0KIAogCXJldCA9IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoJmFtcDtpcF9zZXRfbmV0bGlua19zdWJzeXMpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcl9lcnIoJiMzNDtpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciB3aXRoIG5mbmV0bGluay5cbiYjMzQ7KTsKIAkJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7aXBfc2V0X25ldF9vcHMpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfd3E7CiAJfQogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmYW1wO3NvX3NldCk7CkBAIC0yNDQwLDEwICYjNDM7MjQ1MSwxMyBAQCBpcF9zZXRfaW5pdCh2b2lkKQogCQlwcl9lcnIoJiMzNDtTT19TRVQgcmVnaXN0cnkgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiAJCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmYW1wO2lwX3NldF9uZXRsaW5rX3N1YnN5cyk7CiAJCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO2lwX3NldF9uZXRfb3BzKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3dxOwogCX0KIAogCXJldHVybiAwOwomIzQzO291dF93cToKJiM0MzsJZGVzdHJveV93b3JrcXVldWUoaXBzZXRfZGVzdHJveV93cSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdApAQCAtMjQ1Myw5ICYjNDM7MjQ2Nyw3IEBAIGlwX3NldF9maW5pKHZvaWQpCiAJbmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKCZhbXA7aXBfc2V0X25ldGxpbmtfc3Vic3lzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcF9zZXRfbmV0X29wcyk7CiAKLQkvKiBXYWl0IGZvciBjYWxsX3JjdSgpIGluIGRlc3Ryb3kgKi8KLQlyY3VfYmFycmllcigpOwotCiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpOwogCXByX2RlYnVnKCYjMzQ7dGhlc2UgYXJlIHRoZSBmYW1vdXMgbGFzdCB3b3Jkc1xuJiMzNDspOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCBiMmQ3Nzk3MzI3MmQyLi5mMDBjODJhY2Q3ZjA1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTk5LDkgJiM0Mzs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHsKICNlbmRpZgogCiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi8KJiM0MztzdHJ1Y3QgbmV0X3ByZWZpeCB7CiYjNDM7CXU4IGNpZHI7CQkJLyogdGhlIGNpZHIgdmFsdWUgKi8KJiM0MzsJdTMyIGNvdW50OwkJCS8qIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGlzIGNpZHIgKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IG5ldF9wcmVmaXhlcyB7Ci0JdTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi8KLQl1OCBjaWRyW0lQU0VUX05FVF9DT1VOVF07ICAvKiB0aGUgY2lkciB2YWx1ZSAqLwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwomIzQzOwl1OCBsZW47CiYjNDM7CXN0cnVjdCBuZXRfcHJlZml4IG5ldHNbXSBfX2NvdW50ZWRfYnkobGVuKTsKIH07CiAKIC8qIENvbXB1dGUgdGhlIGhhc2ggdGFibGUgc2l6ZSAqLwpAQCAtMTI3LDExICYjNDM7MTMzLDYgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZWxzZQogI2RlZmluZSBfX0NJRFIoY2lkciwgaSkJCShjaWRyKQogI2VuZGlmCi0KLS8qIGNpZHIgJiM0MzsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi8KLSNkZWZpbmUgTkNJRFJfUFVUKGNpZHIpCQkoKGNpZHIpICYjNDM7IDEpCi0jZGVmaW5lIE5DSURSX0dFVChjaWRyKQkJKChjaWRyKSAtIDEpCi0KICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VECiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovCiAjZGVmaW5lIERDSURSX1BVVChjaWRyKQkJKChjaWRyKSAtIDEpCkBAIC0xNDEsMjEgJiM0MzsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpCiAjZGVmaW5lIERDSURSX0dFVChjaWRyLCBpKQlfX0NJRFIoY2lkciwgaSkKICNlbmRpZgogCi0jZGVmaW5lIElOSVRfQ0lEUihjaWRyLCBob3N0X21hc2spCVwKLQlEQ0lEUl9QVVQoKChjaWRyKSA/IE5DSURSX0dFVChjaWRyKSA6IGhvc3RfbWFzaykpCi0KLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVDAKLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgJiM0MzsgMSAqLwotI2RlZmluZSBOTEVOCQkJKEhPU1RfTUFTSyAmIzQzOyAxKQotI2RlZmluZSBDSURSX1BPUyhjKQkJKChjKSAtIDEpCi0jZWxzZQotLyogY2lkciBmcm9tIDEgdG8gSE9TVF9NQVNLIHZhbHVlIGFuZCBjID0gY2lkciAmIzQzOyAxICovCi0jZGVmaW5lIE5MRU4JCQlIT1NUX01BU0sKLSNkZWZpbmUgQ0lEUl9QT1MoYykJCSgoYykgLSAyKQotI2VuZGlmCiYjNDM7I2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoewkJCQlcCiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfcHJlZml4ZXMgKl9fbiA9IHJjdV9kZXJlZmVyZW5jZShuKTsJCVwKJiM0MzsJRENJRFJfUFVUKChfX24pLSZndDtsZW4gPyAoX19uKS0mZ3Q7bmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcCiYjNDM7fSkKIAotI2Vsc2UKLSNkZWZpbmUgTkxFTgkJCTAKICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi8KIAogI2RlZmluZSBTRVRfRUxFTV9FWFBJUkVEKHNldCwgZCkJXApAQCAtMjA0LDEyICYjNDM7MTk1LDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTsKICN1bmRlZiBtdHlwZV9leHRfY2xlYW51cAogI3VuZGVmIG10eXBlX2FkZF9jaWRyCiAjdW5kZWYgbXR5cGVfZGVsX2NpZHIKJiM0MzsjdW5kZWYgbXR5cGVfZGVsX2NpZHJfYWxsCiAjdW5kZWYgbXR5cGVfYWhhc2hfbWVtc2l6ZQogI3VuZGVmIG10eXBlX2ZsdXNoCiAjdW5kZWYgbXR5cGVfZGVzdHJveQogI3VuZGVmIG10eXBlX3NhbWVfc2V0CiAjdW5kZWYgbXR5cGVfa2FkdAogI3VuZGVmIG10eXBlX3VhZHQKJiM0MzsjdW5kZWYgbXR5cGVfYnVja2V0X3NpemUKJiM0MzsjdW5kZWYgbXR5cGVfaGFzaF9zaXplCiAKICN1bmRlZiBtdHlwZV9hZGQKICN1bmRlZiBtdHlwZV9kZWwKQEAgLTI0OSwxMiAmIzQzOzI0MywxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307CiAjZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwCUlQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApCiAjZGVmaW5lIG10eXBlX2FkZF9jaWRyCQlJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKQogI2RlZmluZSBtdHlwZV9kZWxfY2lkcgkJSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcikKJiM0MzsjZGVmaW5lIG10eXBlX2RlbF9jaWRyX2FsbAlJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbCkKICNkZWZpbmUgbXR5cGVfYWhhc2hfbWVtc2l6ZQlJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpCiAjZGVmaW5lIG10eXBlX2ZsdXNoCQlJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKQogI2RlZmluZSBtdHlwZV9kZXN0cm95CQlJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpCiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0CQlJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KQogI2RlZmluZSBtdHlwZV9rYWR0CQlJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpCiAjZGVmaW5lIG10eXBlX3VhZHQJCUlQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdCkKJiM0MzsjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplCUlQU0VUX1RPS0VOKE1UWVBFLCBfYnVja2V0X3NpemUpCiYjNDM7I2RlZmluZSBtdHlwZV9oYXNoX3NpemUJCUlQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKQogCiAjZGVmaW5lIG10eXBlX2FkZAkJSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpCiAjZGVmaW5lIG10eXBlX2RlbAkJSVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpCkBAIC0yOTIsNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTsKIC8qIFRoZSBnZW5lcmljIGhhc2ggc3RydWN0dXJlICovCiBzdHJ1Y3QgaHR5cGUgewogCXN0cnVjdCBodGFibGUgX19yY3UgKnRhYmxlOyAvKiB0aGUgaGFzaCB0YWJsZSAqLwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovCiAJc3RydWN0IGh0YWJsZV9nYyBnYzsJLyogZ2Mgd29ya3F1ZXVlICovCiAJdTMyIG1heGVsZW07CQkvKiBtYXggZWxlbWVudHMgaW4gdGhlIGhhc2ggKi8KIAl1MzIgaW5pdHZhbDsJCS8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovCkBAIC0zMDIsOSAmIzQzOzMwMCw2IEBAIHN0cnVjdCBodHlwZSB7CiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKQogCXU4IG5ldG1hc2s7CQkvKiBuZXRtYXNrIHZhbHVlIGZvciBzdWJuZXRzIHRvIHN0b3JlICovCiAJdW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7CS8qIHN0b3JlcyBiaXRtYXNrICovCi0jZW5kaWYKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQlzdHJ1Y3QgbmV0X3ByZWZpeGVzIG5ldHNbTkxFTl07IC8qIGJvb2sta2VlcGluZyBvZiBwcmVmaXhlcyAqLwogI2VuZGlmCiAJLyogQmVjYXVzZSAmIzM5O25leHQmIzM5OyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzCiAJICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAmIzM5O25leHQmIzM5Oy4KQEAgLTMyNiw1NSAmIzQzOzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7CiAvKiBOZXR3b3JrIGNpZHIgc2l6ZSBib29rIGtlZXBpbmcgd2hlbiB0aGUgaGFzaCBzdG9yZXMgZGlmZmVyZW50CiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgJiM0MzsgMSB0byBzdXBwb3J0IC8wLgogICovCi1zdGF0aWMgdm9pZAomIzQzO3N0YXRpYyBpbnQKIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKQogewotCWludCBpLCBqOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwlpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwluZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLSZndDtybmV0c1tuXSk7CiAJLyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqLwotCWZvciAoaSA9IDAsIGogPSAtMTsgaSAmbHQ7IE5MRU4gJmFtcDsmYW1wOyBoLSZndDtuZXRzW2ldLmNpZHJbbl07IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChqICE9IC0xKSB7CiYjNDM7CWZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgJmx0OyBuZXRzLSZndDtsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCkKJiM0MzsJCQlsZW4mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGZvdW5kICE9IC0xKSB7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gJmx0OyBjaWRyKSB7Ci0JCQlqID0gaTsKLQkJfSBlbHNlIGlmIChoLSZndDtuZXRzW2ldLmNpZHJbbl0gPT0gY2lkcikgewotCQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSYjNDM7JiM0Mzs7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciAmbHQ7IGNpZHIpIHsKJiM0MzsJCQlmb3VuZCA9IGk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ldHMtJmd0O25ldHNbaV0uY2lkciA9PSBjaWRyKSB7CiYjNDM7CQkJbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCX0KLQlpZiAoaiAhPSAtMSkgewotCQlmb3IgKDsgaSAmZ3Q7IGo7IGktLSkKLQkJCWgtJmd0O25ldHNbaV0uY2lkcltuXSA9IGgtJmd0O25ldHNbaSAtIDFdLmNpZHJbbl07CiYjNDM7CWxlbiYjNDM7JiM0Mzs7CiYjNDM7CXRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIXRtcCkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChpID09IGZvdW5kKSB7CiYjNDM7CQkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBjaWRyOwomIzQzOwkJCXRtcC0mZ3Q7bmV0c1tqJiM0MzsmIzQzO10uY291bnQgPSAxOwomIzQzOwkJfQomIzQzOwkJaWYgKCFuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBuZXRzLSZndDtuZXRzW2ldLmNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudDsKIAl9Ci0JaC0mZ3Q7bmV0c1tpXS5jaWRyW25dID0gY2lkcjsKLQloLSZndDtuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dID0gMTsKJiM0MzsJaWYgKGZvdW5kID09IC0xKSB7CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY2lkciA9IGNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbal0uY291bnQgPSAxOwomIzQzOwl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tuXSwgdG1wKTsKJiM0MzsJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZAogbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pCiB7Ci0JdTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wOwomIzQzOwl1OCBpLCBqLCBsZW4gPSAwOwomIzQzOwlpbnQgZm91bmQ7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwotCWZvciAoaSA9IDA7IGkgJmx0OyBOTEVOOyBpJiM0MzsmIzQzOykgewotCQlpZiAoaC0mZ3Q7bmV0c1tpXS5jaWRyW25dICE9IGNpZHIpCi0JCQljb250aW51ZTsKLQkJaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tOwotCQlpZiAoaC0mZ3Q7bmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSAmZ3Q7IDApCi0JCQlnb3RvIHVubG9jazsKLQkJZm9yIChqID0gaTsgaiAmbHQ7IG5ldF9lbmQgJmFtcDsmYW1wOyBoLSZndDtuZXRzW2pdLmNpZHJbbl07IGomIzQzOyYjNDM7KQotCQkJaC0mZ3Q7bmV0c1tqXS5jaWRyW25dID0gaC0mZ3Q7bmV0c1tqICYjNDM7IDFdLmNpZHJbbl07Ci0JCWgtJmd0O25ldHNbal0uY2lkcltuXSA9IDA7CiYjNDM7CW5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtJmd0O3JuZXRzW25dKTsKJiM0MzsJZm9yIChpID0gMCwgZm91bmQgPSAtMTsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChuZXRzLSZndDtuZXRzW2ldLmNvdW50KQomIzQzOwkJCWxlbiYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobmV0cy0mZ3Q7bmV0c1tpXS5jaWRyID09IGNpZHIpCiYjNDM7CQkJZm91bmQgPSBpOwomIzQzOwl9CiYjNDM7CWlmICh1bmxpa2VseShmb3VuZCA9PSAtMSkpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJbmV0cy0mZ3Q7bmV0c1tmb3VuZF0uY291bnQtLTsKJiM0MzsJaWYgKG5ldHMtJmd0O25ldHNbZm91bmRdLmNvdW50KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CWxlbi0tOwomIzQzOwl0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQkvKiBMZWF2ZSBhIGhvbGUgKi8KIAkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXRtcC0mZ3Q7bGVuID0gbGVuOwomIzQzOwlmb3IgKGkgPSAwLCBqID0gMDsgaSAmbHQ7IG5ldHMtJmd0O2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJdG1wLSZndDtuZXRzW2pdLmNpZHIgPSBuZXRzLSZndDtuZXRzW2ldLmNpZHI7CiYjNDM7CQl0bXAtJmd0O25ldHNbaiYjNDM7JiM0MztdLmNvdW50ID0gbmV0cy0mZ3Q7bmV0c1tpXS5jb3VudDsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihoLSZndDtybmV0c1tuXSwgdG1wKTsKJiM0MzsJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzZXQtJmd0O2xvY2spOwogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO210eXBlX2RlbF9jaWRyX2FsbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IG10eXBlX2VsZW0gKmRhdGEpCiYjNDM7ewomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWZvciAoayA9IDA7IGsgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KQomIzQzOwkJbXR5cGVfZGVsX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZGF0YS0mZ3Q7Y2lkciwgayksIGspOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIG1lbW9yeSBzaXplIG9mIHRoZSBzZXQgZGF0YSAqLwogc3RhdGljIHNpemVfdAogbXR5cGVfYWhhc2hfbWVtc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBodGFibGUgKnQpCkBAIC00MDIsNiAmIzQzOzQ1MCw5IEBAIHN0YXRpYyB2b2lkCiBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgaHRhYmxlICp0OwogCXN0cnVjdCBoYnVja2V0ICpuOwogCXUzMiByLCBpOwpAQCAtNDI1LDcgJiM0Mzs0NzYsMTkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KQogCQlzcGluX3VubG9ja19iaCgmYW1wO3QtJmd0O2hyZWdpb25bcl0ubG9jayk7CiAJfQogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUUwotCW1lbXNldChoLSZndDtuZXRzLCAwLCBzaXplb2YoaC0mZ3Q7bmV0cykpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmV0cyA9IGlwc2V0X2RlcmVmZXJlbmNlX25mbmwoaC0mZ3Q7cm5ldHNbaV0pOwomIzQzOwkJdG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIXRtcCkgewomIzQzOwkJCXU4IGo7CiYjNDM7CiYjNDM7CQkJZm9yIChqID0gMDsgaiAmbHQ7IG5ldHMtJmd0O2xlbjsgaiYjNDM7JiM0MzspCiYjNDM7CQkJCW5ldHMtJmd0O25ldHNbal0uY291bnQgPSAwOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIoaC0mZ3Q7cm5ldHNbaV0sIHRtcCk7CiYjNDM7CQkJa2ZyZWVfcmN1KG5ldHMsIHJjdSk7CiYjNDM7CQl9CiYjNDM7CX0KICNlbmRpZgogfQogCkBAIC00MzMsNiAmIzQzOzQ5Niw5IEBAIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIHN0YXRpYyB2b2lkCiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSkKIHsKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7CXN0cnVjdCBodHlwZSAqaCA9IHNldC0mZ3Q7ZGF0YTsKJiM0MzsjZW5kaWYKIAlzdHJ1Y3QgaGJ1Y2tldCAqbjsKIAl1MzIgaTsKIApAQCAtNDQ2LDYgJiM0Mzs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpCiAJCWtmcmVlKG4pOwogCX0KIAomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJaWYgKGV4dF9kZXN0cm95KQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLSZndDtybmV0c1tpXSkpOwomIzQzOyNlbmRpZgogCWlwX3NldF9mcmVlKHQtJmd0O2hyZWdpb24pOwogCWlwX3NldF9mcmVlKHQpOwogfQpAQCAtNDkzLDkgJiM0Mzs1NjQsNiBAQCBtdHlwZV9nY19kbyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgc3RydWN0IGh0YWJsZSAqdCwgdTMyIHIpCiAJc3RydWN0IG10eXBlX2VsZW0gKmRhdGE7CiAJdTMyIGksIGosIGQ7CiAJc2l6ZV90IGRzaXplID0gc2V0LSZndDtkc2l6ZTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQl1OCBrOwotI2VuZGlmCiAJdTggcG9zLCBodGFibGVfYml0cyA9IHQtJmd0O2h0YWJsZV9iaXRzOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7dC0mZ3Q7aHJlZ2lvbltyXS5sb2NrKTsKQEAgLTUxNiwxMiAmIzQzOzU4NCw3IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcikKIAkJCXByX2RlYnVnKCYjMzQ7ZXhwaXJlZCAldS8ldVxuJiMzNDssIGksIGopOwogCQkJY2xlYXJfYml0KGosIG4tJmd0O3VzZWQpOwogCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJCWZvciAoayA9IDA7IGsgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGsmIzQzOyYjNDM7KQotCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBrKSksCi0JCQkJCWspOwotI2VuZGlmCiYjNDM7CQkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7CiAJCQl0LSZndDtocmVnaW9uW3JdLmVsZW1lbnRzLS07CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAkJCWQmIzQzOyYjNDM7OwpAQCAtOTQ3LDEyICYjNDM7MTAxMCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQkJaiA9IDA7CiAJCWRhdGEgPSBhaGFzaF9kYXRhKG4sIGosIHNldC0mZ3Q7ZHNpemUpOwogCQlpZiAoIWRlbGV0ZWQpIHsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBJUFNFVF9ORVRfQ09VTlQ7IGkmIzQzOyYjNDM7KQotCQkJCW10eXBlX2RlbF9jaWRyKHNldCwgaCwKLQkJCQkJTkNJRFJfUFVUKERDSURSX0dFVChkYXRhLSZndDtjaWRyLCBpKSksCi0JCQkJCWkpOwotI2VuZGlmCiYjNDM7CQkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7CiAJCQlpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTsKIAkJCXQtJmd0O2hyZWdpb25bcl0uZWxlbWVudHMtLTsKIAkJfQpAQCAtOTk2LDcgJiM0MzsxMDU0LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJdC0mZ3Q7aHJlZ2lvbltyXS5lbGVtZW50cyYjNDM7JiM0Mzs7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiAJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspCi0JCW10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLSZndDtjaWRyLCBpKSksIGkpOwomIzQzOwkJbXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaSksIGkpOwogI2VuZGlmCiAJbWVtY3B5KGRhdGEsIGQsIHNpemVvZihzdHJ1Y3QgbXR5cGVfZWxlbSkpOwogb3ZlcndyaXRlX2V4dGVuc2lvbnM6CkBAIC0xMTA3LDExICYjNDM7MTE2NSw3IEBAIG10eXBlX2RlbChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LAogCQlpZiAoaSAmIzQzOyAxID09IHBvcykKIAkJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bi0mZ3Q7cG9zLCAtLXBvcyk7CiAJCXQtJmd0O2hyZWdpb25bcl0uZWxlbWVudHMtLTsKLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKLQkJZm9yIChqID0gMDsgaiAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaiYjNDM7JiM0MzspCi0JCQltdHlwZV9kZWxfY2lkcihzZXQsIGgsCi0JCQkJICAgICAgIE5DSURSX1BVVChEQ0lEUl9HRVQoZC0mZ3Q7Y2lkciwgaikpLCBqKTsKLSNlbmRpZgomIzQzOwkJbXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZCk7CiAJCWlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpOwogCiAJCWlmICh0LSZndDtyZXNpemluZyAmYW1wOyZhbXA7IGV4dCAmYW1wOyZhbXA7IGV4dC0mZ3Q7dGFyZ2V0KSB7CkBAIC0xMTkzLDI4ICYjNDM7MTI0NywzNyBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsCiB7CiAJc3RydWN0IGh0eXBlICpoID0gc2V0LSZndDtkYXRhOwogCXN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7dGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDsKIAlzdHJ1Y3QgaGJ1Y2tldCAqbjsKIAlzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTsKICNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMgomIzQzOwlzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMTsKIAlzdHJ1Y3QgbXR5cGVfZWxlbSBvcmlnID0gKmQ7Ci0JaW50IHJldCwgaSwgaiA9IDAsIGs7CiYjNDM7CWludCByZXQsIGksIGosIGs7CiAjZWxzZQotCWludCByZXQsIGksIGogPSAwOwomIzQzOwlpbnQgcmV0LCBpLCBqOwogI2VuZGlmCiAJdTMyIGtleSwgbXVsdGkgPSAwOwogCXU4IHBvczsKIAogCXByX2RlYnVnKCYjMzQ7dGVzdCBieSBuZXRzXG4mIzM0Oyk7Ci0JZm9yICg7IGogJmx0OyBOTEVOICZhbXA7JmFtcDsgaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdICZhbXA7JmFtcDsgIW11bHRpOyBqJiM0MzsmIzQzOykgewomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CW5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtJmd0O3JuZXRzWzBdKTsKJiM0MzsjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKJiM0MzsJbmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC0mZ3Q7cm5ldHNbMV0pOwomIzQzOyNlbmRpZgomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgbmV0czAtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmV0czAtJmd0O25ldHNbal0uY291bnQpCiYjNDM7CQkJY29udGludWU7CiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDIKIAkJbXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsICZhbXA7b3JpZyk7Ci0JCW10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC0mZ3Q7bmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpOwotCQlmb3IgKGsgPSAwOyBrICZsdDsgTkxFTiAmYW1wOyZhbXA7IGgtJmd0O25ldHNba10uY2lkclsxXSAmYW1wOyZhbXA7ICFtdWx0aTsKLQkJICAgICBrJiM0MzsmIzQzOykgewotCQkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLSZndDtuZXRzW2tdLmNpZHJbMV0pLAotCQkJCQkgICB0cnVlKTsKJiM0MzsJCW10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC0mZ3Q7bmV0c1tqXS5jaWRyLCBmYWxzZSk7CiYjNDM7CQlmb3IgKGsgPSAwOyBrICZsdDsgbmV0czEtJmd0O2xlbiAmYW1wOyZhbXA7ICFtdWx0aTsgayYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIW5ldHMxLSZndDtuZXRzW2tdLmNvdW50KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQltdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtJmd0O25ldHNba10uY2lkciwgdHJ1ZSk7CiAjZWxzZQotCQltdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtJmd0O25ldHNbal0uY2lkclswXSkpOwomIzQzOwkJbXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLSZndDtuZXRzW2pdLmNpZHIpOwogI2VuZGlmCiAJCWtleSA9IEhLRVkoZCwgaC0mZ3Q7aW5pdHZhbCwgdC0mZ3Q7aHRhYmxlX2JpdHMpOwogCQluID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7CkBAIC0xMjI5LDcgJiM0MzsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLAogCQkJCWNvbnRpbnVlOwogCQkJcmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpOwogCQkJaWYgKHJldCAhPSAwKQotCQkJCXJldHVybiByZXQ7CiYjNDM7CQkJCWdvdG8gdW5sb2NrOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVEkKIAkJCS8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovCiAJCQltdWx0aSA9IDA7CkBAIC0xMjM5LDcgJiM0MzsxMzAyLDEwIEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCwKIAkJfQogI2VuZGlmCiAJfQotCXJldHVybiAwOwomIzQzOwlyZXQgPSAwOwomIzQzO3VubG9jazoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtMTI5NCw2ICYjNDM7MTM2MCwyNCBAQCBtdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB1MzIgbXR5cGVfaGFzaF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBodGFibGUgKnQ7CiYjNDM7CXU4IGh0YWJsZV9iaXRzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXQgPSByY3VfZGVyZWZlcmVuY2UoaC0mZ3Q7dGFibGUpOwomIzQzOwlodGFibGVfYml0cyA9IHQtJmd0O2h0YWJsZV9iaXRzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBoLSZndDtidWNrZXRzaXplOwomIzQzO30KJiM0MzsKIC8qIFJlcGx5IGEgSEVBREVSIHJlcXVlc3Q6IGZpbGwgb3V0IHRoZSBoZWFkZXIgcGFydCBvZiB0aGUgc2V0ICovCiBzdGF0aWMgaW50CiBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTEzMDQsMjEgJiM0MzsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNpemVfdCBtZW1zaXplOwogCXUzMiBlbGVtZW50cyA9IDA7CiAJc2l6ZV90IGV4dF9zaXplID0gMDsKLQl1OCBodGFibGVfYml0czsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAl0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtJmd0O3RhYmxlKTsKIAltdHlwZV9leHRfc2l6ZShzZXQsICZhbXA7ZWxlbWVudHMsICZhbXA7ZXh0X3NpemUpOwotCW1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICYjNDM7IGV4dF9zaXplICYjNDM7IHNldC0mZ3Q7ZXh0X3NpemU7Ci0JaHRhYmxlX2JpdHMgPSB0LSZndDtodGFibGVfYml0czsKJiM0MzsJbWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgJiM0MzsgZXh0X3NpemUgJiM0MzsgYXRvbWljNjRfcmVhZCgmYW1wO3NldC0mZ3Q7ZXh0X3NpemUpOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAJbmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpOwogCWlmICghbmVzdGVkKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsCi0JCQkgIGh0b25sKGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpKSkgfHwKLQkgICAgbmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC0mZ3Q7bWF4ZWxlbSkpKQomIzQzOwomIzQzOwlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CWlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9NQVhFTEVNLCBodG9ubChoLSZndDttYXhlbGVtKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTSwogCS8qIGlmIG5ldG1hc2sgaXMgc2V0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gSE9TVF9NQVNLIHdlIGtub3cgdGhhdCB0aGUgdXNlciBzdXBwbGllZCBuZXRtYXNrCkBAIC0xMzQyLDggJiM0MzsxNDI1LDkgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogI2VuZGlmCiAJaWYgKHNldC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBTRVRfQ1JFQVRFX0ZMQUdfQlVDS0VUU0laRSkgewotCQlpZiAobmxhX3B1dF91OChza2IsIElQU0VUX0FUVFJfQlVDS0VUU0laRSwgaC0mZ3Q7YnVja2V0c2l6ZSkgfHwKLQkJICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtJmd0O2luaXR2YWwpKSkKJiM0MzsJCWlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSU5JVFZBTCwgaHRvbmwoaC0mZ3Q7aW5pdHZhbCkpKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQogCWlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtJmd0O3JlZikpIHx8CkBAIC0xNTA0LDYgJiM0MzsxNTg4LDkgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LAogCWludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwOwogCXU4IG5ldG1hc2sgPSBzZXQtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjQgPyAzMiA6IDEyODsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzayA9IG9uZXNtYXNrOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJc3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czsKICNlbmRpZgogCXNpemVfdCBoc2l6ZTsKIAlzdHJ1Y3QgaHR5cGUgKmg7CkBAIC0xNjA0LDIxICYjNDM7MTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsCiAJICovCiAJaGJpdHMgPSBmbHMoaGFzaHNpemUgLSAxKTsKIAloc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTsKLQlpZiAoaHNpemUgPT0gMCkgewotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwlpZiAoaHNpemUgPT0gMCkKJiM0MzsJCWdvdG8gZnJlZV9oOwogCXQgPSBpcF9zZXRfYWxsb2MoaHNpemUpOwotCWlmICghdCkgewotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwlpZiAoIXQpCiYjNDM7CQlnb3RvIGZyZWVfaDsKIAl0LSZndDtocmVnaW9uID0gaXBfc2V0X2FsbG9jKGFoYXNoX3NpemVvZl9yZWdpb25zKGhiaXRzKSk7Ci0JaWYgKCF0LSZndDtocmVnaW9uKSB7Ci0JCWlwX3NldF9mcmVlKHQpOwotCQlrZnJlZShoKTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghdC0mZ3Q7aHJlZ2lvbikKJiM0MzsJCWdvdG8gZnJlZV90OwomIzQzOyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFMKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IElQU0VUX05FVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5ldHMgPSBremFsbG9jX29iaigqbmV0cyk7CiYjNDM7CQlpZiAoIW5ldHMpIHsKJiM0MzsJCQl3aGlsZSAoaSAmZ3Q7IDApCiYjNDM7CQkJCWtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC0mZ3Q7cm5ldHNbLS1pXSkpOwomIzQzOwkJCWdvdG8gZnJlZV9ocmVnaW9uOwomIzQzOwkJfQomIzQzOwkJUkNVX0lOSVRfUE9JTlRFUihoLSZndDtybmV0c1tpXSwgbmV0cyk7CiAJfQomIzQzOyNlbmRpZgogCWgtJmd0O2djLnNldCA9IHNldDsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2gtJmd0O2djLmxvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkmIzQzOyYjNDM7KQpAQCAtMTY1MCw2ICYjNDM7MTc0MSw3IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3QtJmd0O2FkKTsKIAlSQ1VfSU5JVF9QT0lOVEVSKGgtJmd0O3RhYmxlLCB0KTsKIAlzZXQtJmd0O2RhdGEgPSBoOwomIzQzOwogI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUYKIAlpZiAoc2V0LSZndDtmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7CiAjZW5kaWYKQEAgLTE2NzgsMTAgJiM0MzsxNzcwLDIwIEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCwKICNlbmRpZgogCX0KIAlwcl9kZWJ1ZygmIzM0O2NyZWF0ZSAlcyBoYXNoc2l6ZSAldSAoJXUpIG1heGVsZW0gJXU6ICVwKCVwKVxuJiMzNDssCi0JCSBzZXQtJmd0O25hbWUsIGpoYXNoX3NpemUodC0mZ3Q7aHRhYmxlX2JpdHMpLAomIzQzOwkJIHNldC0mZ3Q7bmFtZSwgbXR5cGVfaGFzaF9zaXplKGgpLAogCQkgdC0mZ3Q7aHRhYmxlX2JpdHMsIGgtJmd0O21heGVsZW0sIHNldC0mZ3Q7ZGF0YSwgdCk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MzsjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCiYjNDM7ZnJlZV9ocmVnaW9uOgomIzQzOwlpcF9zZXRfZnJlZSh0LSZndDtocmVnaW9uKTsKJiM0MzsjZW5kaWYKJiM0MztmcmVlX3Q6CiYjNDM7CWlwX3NldF9mcmVlKHQpOwomIzQzO2ZyZWVfaDoKJiM0MzsJa2ZyZWUoaCk7CiYjNDM7CXJldHVybiAtRU5PTUVNOwogfQogI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqLwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwppbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKQEAgLTEzOCw3ICYjNDM7MTM4LDcgQEAgaGFzaF9pcHBvcnRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtJmd0O2RhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtJmd0O3ZhcmlhbnQtJmd0O2FkdFthZHRdOwogCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jCmluZGV4IGNlMGE5Y2U1YTkxZjEuLjA5MmYzYzkyODFiODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApAQCAtMjkxLDcgJiM0MzsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IGhhc2hfbmV0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7Ci0JCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSwKJiM0MzsJCS5jaWRyID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jCmluZGV4IDMwYTY1NWU1YzRmZGMuLmI0NGI5NWY3NjZiN2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMKQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0aWZhY2U0ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAkJLmVsZW0gPSAxLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LSZndDtkYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LSZndDt2YXJpYW50LSZndDthZHRbYWR0XTsKIAlzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAkJLmVsZW0gPSAxLAogCX07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jCmluZGV4IDhmYmU2NDljOWRkM2QuLmY3YzhhMWNjMzBmYzcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYwpAQCAtMTQ5LDggJiM0MzsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBoYXNoX25ldG5ldDRfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7CiAKQEAgLTM4OCw4ICYjNDM7MzkwLDEwIEBAIGhhc2hfbmV0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTsKIAlzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpOwogCi0JZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O25ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKTsKLQllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF9sb2NrX2JoKCk7CiYjNDM7CWUuY2lkclswXSA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKTsKJiM0MzsJZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzFdLCBIT1NUX01BU0spOwomIzQzOwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlpZiAoYWR0ID09IElQU0VUX1RFU1QpCiAJCWUuY2NtcCA9IChIT1NUX01BU0sgJmx0OyZsdDsgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKaW5kZXggZDFhMDYyOGRmNGVmMy4uNWRlNGI1MTFkZTc2MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NiAqaCA9IHNldC0mZ3Q7ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0mZ3Q7dmFyaWFudC0mZ3Q7YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0gewotCQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksCiYjNDM7CQkuY2lkciA9IElOSVRfQ0lEUihoLSZndDtybmV0c1swXSwgSE9TVF9NQVNLKSwKIAl9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKaW5kZXggYmY0ZjkxYjc4ZTFkYy4uNjI5MTUzMmJlN2E1YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMKQEAgLTE1Nyw4ICYjNDM7MTU3LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7CiAKQEAgLTQ1Miw4ICYjNDM7NDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSBlID0geyB9OwogCXN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7CiAKLQllLmNpZHJbMF0gPSBJTklUX0NJRFIoaC0mZ3Q7bmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spOwotCWUuY2lkclsxXSA9IElOSVRfQ0lEUihoLSZndDtuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX2xvY2tfYmgoKTsKJiM0MzsJZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtJmd0O3JuZXRzWzBdLCBIT1NUX01BU0spOwomIzQzOwllLmNpZHJbMV0gPSBJTklUX0NJRFIoaC0mZ3Q7cm5ldHNbMV0sIEhPU1RfTUFTSyk7CiYjNDM7CXJjdV9yZWFkX3VubG9ja19iaCgpOwogCWlmIChhZHQgPT0gSVBTRVRfVEVTVCkKIAkJZS5jY21wID0gKEhPU1RfTUFTSyAmbHQ7Jmx0OyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSzsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKaW5kZXggMWNlZjg0ZjE1ZThjNy4uY2EzZWY5NDc5ZTgzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCkBAIC00MjEsNyAmIzQzOzQyMSw3IEBAIGxpc3Rfc2V0X2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgJmFtcDttYXAtJmd0O21lbWJlcnMsIGxpc3QpCiAJCWxpc3Rfc2V0X2RlbChzZXQsIGUpOwogCXNldC0mZ3Q7ZWxlbWVudHMgPSAwOwotCXNldC0mZ3Q7ZXh0X3NpemUgPSAwOwomIzQzOwlhdG9taWM2NF9zZXQoJmFtcDtzZXQtJmd0O2V4dF9zaXplLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ1NSw3ICYjNDM7NDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtJmd0O2RhdGE7CiAJc3RydWN0IG5sYXR0ciAqbmVzdGVkOwotCXNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC0mZ3Q7ZHNpemUpICYjNDM7IHNldC0mZ3Q7ZXh0X3NpemU7CiYjNDM7CXNpemVfdCBtZW1zaXplID0gbGlzdF9zZXRfbWVtc2l6ZShtYXAsIHNldC0mZ3Q7ZHNpemUpICYjNDM7IGF0b21pYzY0X3JlYWQoJmFtcDtzZXQtJmd0O2V4dF9zaXplKTsKIAogCW5lc3RlZCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSVBTRVRfQVRUUl9EQVRBKTsKIAlpZiAoIW5lc3RlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIElQIFNldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvdmVyaGF1bCBvZiBzb21lIGNvcmUgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgaXNzdWVzIG9yIG1heWJlIGEgcmVkZXNpZ24gcmVsYXRlZCB0byBDSURSIHByZWZpeCBoYW5kbGluZyBhbmQgaG93IHNldHMgYXJlIGNsZWFuZWQgdXAuICBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGRpdmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZpcnN0LCB0aGUgYGlwX3NldGAgc3RydWN0IGlzIHR3ZWFrZWQ6IGByY3VfaGVhZGAgaXMgc3dhcHBlZCBmb3IgYHJjdV93b3JrYCwgYW5kIHRoZSBgZXh0X3NpemVgIGZpZWxkIGlzIG5vdyBhbiBgYXRvbWljNjRfdGAuIFRoYXQgc2NyZWFtcyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMgYmVpbmcgYWRkcmVzc2VkLiAgVGhlIGJpZyBvbmUgc2VlbXMgdG8gYmUgdGhlIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiBvZiBzZXRzIHVzaW5nIGEgd29ya3F1ZXVlIChgaXBzZXRfZGVzdHJveV93cWApIGFuZCBgcXVldWVfcmN1X3dvcmtgIHJlcGxhY2luZyB0aGUgc3luY2hyb25vdXMgYGlwX3NldF9kZXN0cm95X3NldF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIG1pbmltaXplIGxvY2sgY29udGVudGlvbiBkdXJpbmcgY2xlYW51cC4KClRoZSBzZWNvbmQgYXJlYSBvZiBmb2N1cyBpcyB3aXRoIENJRFIgcHJlZml4ZXMuICBUaGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSBgbmV0X3ByZWZpeGVzYCBzdHJ1Y3QgaW4gYGlwX3NldF9oYXNoX2dlbi5oYCB0byB1c2UgYF9fY291bnRlZF9ieShsZW4pYCBhbmQgaXQmIzM5O3Mgbm93IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gTW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIFJDVSBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGZvciBgbmV0X3ByZWZpeGVzYCBhcmUgYWxzbyBwcmVzZW50LiBUaGVzZSBjaGFuZ2VzIGluZGljYXRlIG9wdGltaXphdGlvbiBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwcmVmaXggZGF0YS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdGhpcyBwYXRjaCB0b3VjaGVzLiAgQmVzaWRlcyB0aGUgc3RydWN0IGNoYW5nZXMsIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgYGlwX3NldF9pbml0X2NvbW1lbnRgLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAsIGBpcF9zZXRfZGVzdHJveWAsIGFuZCB0aGVuIGEgc2xldyBvZiBmdW5jdGlvbnMgc3RhcnRpbmcgd2l0aCBgbXR5cGVfKmAuICBMb29raW5nIGZ1cnRoZXIsIEkgc2VlIGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIHNldmVyYWwgaGFzaCB0eXBlLXNwZWNpZmljIGZ1bmN0aW9ucyAoSVB2NCBhbmQgSVB2NiB2YXJpYW50cyk6IGBoYXNoX2lwcG9ydG5ldDRfa2FkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGV0Yy4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgbWFjcm9zLiBUaGV5IGFyZSBnZW5lcmF0ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gQWhhISBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhpbmdzIGxpa2UgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgZXRjLiBUaGUgZnVuY3Rpb25zIGFjdHVhbGx5IGdlbmVyYXRlZCB3aWxsIHRoZW4gaGF2ZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBhbmQgc28gb24uCgpPa2F5LCBsZXQmIzM5O3MgaHVudCBkb3duIHRob3NlIGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFuZCBhZmZlY3RlZC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgaXQgbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgaW1wcm92aW5nIElQIHNldCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIG10eXBlX2FkZCAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIE1hY3JvIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGEgbWFjcm8gZGVmaW5pdGlvbjogYCNkZWZpbmUgbXR5cGVfYWRkIElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYG10eXBlX2FkZGAgaXMgdGhlIHJlc3VsdGluZyBtYWNybywgYW5kIGl0JiMzOTtzIGJlaW5nIGNvbnN0cnVjdGVkIHVzaW5nIGBJUFNFVF9UT0tFTmAgd2l0aCBgTVRZUEVgIGFuZCBgX2FkZGAgYXMgYXJndW1lbnRzLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHRva2VuIGdlbmVyYXRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBJUCBzZXQgbWFuYWdlbWVudCwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLgoKVGhlIGtleSBwb2ludCBoZXJlLCB0aG91Z2gsIGlzIHJlY29nbml6aW5nIHRoYXQgYE1UWVBFYCBpcyBkZWZpbmVkICpiZWZvcmUqIHRoZSBpbmNsdXNpb24gb2YgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCYjMzk7cyBjcml0aWNhbC4gVGhlIHZhbHVlIG9mIGBNVFlQRWAgZGljdGF0ZXMgaG93IGBtdHlwZV9hZGRgIHJlc29sdmVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0aGF0IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgY29kZSB0aGF0IHV0aWxpemVzIGBtdHlwZV9hZGRgLiBJdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGdlbmVyYXRlZCBjb2RlIHNpZ25pZmljYW50bHksIHByb2JhYmx5IGJ5IGluamVjdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBpZGVudGlmaWVyLgoKTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBNVFlQRWAgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGJlaW5nIHNldCB0byBpbiB0aGUgY29kZS4gVGhhdCB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgdHlwZSBvciBmdW5jdGlvbmFsaXR5IHRoaXMgbWFjcm8gaXMgbWVhbnQgdG8gZW5jYXBzdWxhdGUuIEFuZCB0aGVuIEkgd291bGQgZXhhbWluZSBgSVBTRVRfVE9LRU5gIGl0c2VsZi4gSXRzIGRlZmluaXRpb24gaXMgdml0YWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmluYWwgZXhwYW5zaW9uIG9mIHRoZSBgbXR5cGVfYWRkYCBtYWNyby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIE1UWVBFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmM6MzU6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfaXBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jLTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jPTMzPU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOmlwLG1hY1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcdFx0Yml0bWFwX2lwbWFjXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1x0MzJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcJiMzNDtpcF9zZXRfYml0bWFwOnBvcnRcJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmM6Mjk6I2RlZmluZSBNVFlQRVx0XHRiaXRtYXBfcG9ydFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjA4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXA2XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy03Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXHRcdGhhc2hfaXBtYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlx0XHQ0XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jPTE4MD1oYXNoX2lwbWFjNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYWM2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzoxOTA6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFjNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE5MS0jZGVmaW5lIFBGXHRcdDZcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jPTY5PWhhc2hfaXBtYXJrNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjc1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcG1hcms0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9MjA1PWhhc2hfaXBtYXJrNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBtYXJrNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjEyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYzoyMTM6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwbWFyazZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtMjE0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jPTc5PWhhc2hfaXBwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjg2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9MjQ5PWhhc2hfaXBwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYzoyNTg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtMjU5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM9Nzc9aGFzaF9pcHBvcnRpcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy04NC0vKiBDb21tb24gZnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6ODU6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydGlwNFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTg2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz0yNDg9aGFzaF9pcHBvcnRpcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwcG9ydGlwNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTYtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmM6MjU3OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9pcHBvcnRpcDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYy0yNTgtI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9MTIxPWhhc2hfaXBwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTI4LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzoxMjk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMTMwLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmM9Mzc5PWhhc2hfaXBwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYzozODg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX2lwcG9ydG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMtMzg5LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jPTYxPWhhc2hfbWFjNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbWFjNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jOjY2OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9tYWM0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY3LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MTAyPWhhc2hfbmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoxMDg6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMTA5LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM9MjczPWhhc2hfbmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyODE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMtMjgyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTI5PWhhc2hfbmV0aWZhY2U0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjEzNTojZGVmaW5lIE1UWVBFXHRcdGhhc2hfbmV0aWZhY2U0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTM2LSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNjM9aGFzaF9uZXRpZmFjZTZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MzcxOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRpZmFjZTZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcdDEyOFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MTI1PWhhc2hfbmV0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzoxMzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMTMyLSNkZWZpbmUgSE9TVF9NQVNLXHQzMlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmM9MzYzPWhhc2hfbmV0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0bmV0Nl9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcwLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYzozNzE6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldG5ldDZcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMtMzcyLSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0xMTc9aGFzaF9uZXRwb3J0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzoxMjQ6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0xMjUtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM9MzM0PWhhc2hfbmV0cG9ydDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmM6MzQzOiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMzQ0LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz0xMzI9aGFzaF9uZXRwb3J0bmV0NF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDRfZWxlbSAqbmV4dCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzoxMzk6I2RlZmluZSBNVFlQRVx0XHRoYXNoX25ldHBvcnRuZXQ0XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy0xNDAtI2RlZmluZSBIT1NUX01BU0tcdDMyXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM9NDI2PWhhc2hfbmV0cG9ydG5ldDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ2X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmM6NDM1OiNkZWZpbmUgTVRZUEVcdFx0aGFzaF9uZXRwb3J0bmV0NlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtNDM2LSNkZWZpbmUgSE9TVF9NQVNLXHQxMjhcbi0tXG5zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYz0xNjAwPXN0YXRpYyB1MTYgYm9vdF9sb2FkZXJfY29uZmlnX2VtaWYoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLCBpbnQgZHNwX2luZGV4KVxuLS1cbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jLTE2MjAtI2RlZmluZSBSU1RfT0ZTIDhcbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jOjE2MjE6I2RlZmluZSBNVFlQRV9PRlMgNFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMtMTYyMi0jZGVmaW5lIFJIX09GUyAwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGdlbmVyYXRlZCBmdW5jdGlvbnMuIEkgc2VlIG5hbWVzIGxpa2UgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9u4oCUY3JlYXRlLCBkZXN0cm95LCBmbHVzaCwgaGVhZCwgYW5kIHNvIG9uLiBCdXQgaG9sZCBvbiwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGEgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyBwcmVmaXhlZCB3aXRoIGBtdHlwZV9gLCBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGBtdHlwZV9kZWxfY2lkcmAsIGFuZCBgbXR5cGVfZmx1c2hgLiBJdCYjMzk7cyBhIHJhdGhlciBleHRlbnNpdmUgbGlzdCwgaW5jbHVkaW5nIGRlbGV0aW9uLCB0ZXN0aW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG90aGVyIHV0aWxpdGllcyB0aGF0IHNlZW0gdG8gYmUgY3J1Y2lhbCBmb3IgdGhpcy4KClRoZXNlIGBtdHlwZV9gIGZ1bmN0aW9ucy4uLiBhaCwgdGhleSYjMzk7cmUgYWxsIGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLCB3aGljaCBpcyBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcyEgSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgbWFjcm8gbWFnaWMgZ29pbmcgb24gaGVyZS4gVGhlIGRlZmluaXRpb24gY29uZmlybXMgaXQ6IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBTbywgYGhhc2hfbmV0NF9hZGRgICppcyogdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lLgoKU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQsIG1lYW5pbmcgdGhleSBtYXkgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBtb2R1bGUuIFRoZXkgbWlnaHQgYmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYHN0cnVjdCBpcF9zZXRfdHlwZV92YXJpYW50YC4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2hfbmV0NF9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBNYWNybyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKWAgaXMgZ29pbmcgdG8gcmVzb2x2ZSB0byBgaGFzaF9uZXQ0X2FkZGAuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXBzZXRzLCBhbmQgdGhlIGBfYWRkYCBzdWZmaXggc3Ryb25nbHkgc3VnZ2VzdHMgYW4gYWRkaXRpb24gZnVuY3Rpb24uIENvbnNpZGVyaW5nIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IElQIGFkZHJlc3NlcywgYG5ldDRgIHNlZW1zIGEgaGlnaGx5IGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlLgoKVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9uZXQuY2AuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIHJhdGhlciwgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm8gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBuYW1lZCBgX2FkZGAuIE15IGV4cGVydCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgcGF0dGVybiBpbiB0aGUgaXBzZXQgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGhvbGRzIHRydWUgYW5kIGlmIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMTM9c3RydWN0IGhhc2hfbmV0Nl9lbGVtIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmM6MjE0Olx0dW5pb24gbmZfaW5ldF9hZGRyIGlwO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMTUtXHR1MTYgcGFkZGluZzA7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMjM9aGFzaF9uZXQ2X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0Nl9lbGVtICppcDEsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMjYte1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyMjc6XHRyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmlwMS1cdTAwM2VpcC5pbjYsIFx1MDAyNmlwMi1cdTAwM2VpcC5pbjYpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMjgtXHQgICAgICAgaXAxLVx1MDAzZWNpZHIgPT0gaXAyLVx1MDAzZWNpZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEhhc2ggTmV0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGhhc2hfbmV0NF9hZGRgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY29kZWQgaW4gYGlwX3NldF9oYXNoX25ldC5jYC4gSW50ZXJlc3RpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGVzZSB0aGluZ3MgY2FuIGJlIGdlbmVyYXRlZC4gVGhlIGNsdWVzIGFyZSB0ZWxsaW5nIG1lIHRoYXQgdGhpcyBpcyBiZWluZyBhdXRvZ2VuZXJhdGVkIGJ5IGBpcF9zZXRfaGFzaF9nZW4uaGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0LiBUbyB1bmRlcnN0YW5kIGhvdyBgaGFzaF9uZXQ0X2FkZGAgd29ya3MsIEkgbmVlZCB0byBzZWUgaG93IGBtdHlwZV9hZGRgIChvciB3aGF0ZXZlciB0aGUgbWFjcm8vdGVtcGxhdGUgaXMpIGlzIGRlZmluZWQgaW4gdGhhdCBoZWFkZXIuIFRpbWUgdG8gb3BlbiB1cCBgaXBfc2V0X2hhc2hfZ2VuLmhgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBvZiB0aGlzIGdlbmVyYXRlZCBmdW5jdGlvbi4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHdpbGwgcHJvYmFibHkgcmV2ZWFsIHNvbWUgbWV0YXByb2dyYW1taW5nIHRlY2huaXF1ZXMgZm9yIGdlbmVyYXRpbmcgbXVsdGlwbGUgc3BlY2lhbGl6ZWQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210eXBlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjQ9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTk1LSN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTY6I3VuZGVmIG10eXBlX2FkZF9jaWRyXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE5Ny0jdW5kZWYgbXR5cGVfZGVsX2NpZHJcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MjA4OiN1bmRlZiBtdHlwZV9hZGRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjA5LSN1bmRlZiBtdHlwZV9kZWxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI0My0jZGVmaW5lIG10eXBlX2V4dF9jbGVhbnVwXHRJUFNFVF9UT0tFTihNVFlQRSwgX2V4dF9jbGVhbnVwKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDQ6I2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kZWxfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU1LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNTY6I2RlZmluZSBtdHlwZV9hZGRcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1Ny0jZGVmaW5lIG10eXBlX2RlbFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMyND1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjMyNTptdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMzI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY4Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjY4NDptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVx0ICBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY5NT1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NDctXHRcdGlmICh4LVx1MDAzZWFkID09IElQU0VUX0FERCkge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDg6XHRcdFx0bXR5cGVfYWRkKHNldCwgXHUwMDI2eC1cdTAwM2VkLCBcdTAwMjZ4LVx1MDAzZWV4dCwgXHUwMDI2eC1cdTAwM2VtZXh0LCB4LVx1MDAzZWZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtODQ5LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTMwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6OTMxOm10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC05MzItXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDU2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpJiM0MzsmIzQzOylcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA1NzpcdFx0bXR5cGVfYWRkX2NpZHIoc2V0LCBoLCBEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSwgaSk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNTgtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2MS1cdC5hZHRcdD0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTYyOlx0XHRbSVBTRVRfQUREXSA9IG10eXBlX2FkZCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMTU2My1cdFx0W0lQU0VUX0RFTF0gPSBtdHlwZV9kZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgbXR5cGUgU3RydWN0dXJlcyoqCgpBbHJpZ2h0LCBzbyBgbXR5cGVfYWRkYCBpcyBkZWZpbml0ZWx5IGxpbmtlZCB0byBgW0lQU0VUX0FERF1gIHdpdGhpbiB0aGUgYG10eXBlX3ZhcmlhbnRgIHN0cnVjdHVyZSwgdGhhdCYjMzk7cyBjbGVhci4gTm93LCB0aGlzIGBtdHlwZV92YXJpYW50YCBpcyB0aGVuIGJlaW5nIHVzZWQgaW4gdGhlIGBtdHlwZV9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbXR5cGVfY3JlYXRlYCBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgc2VlIHdoYXQgYG10eXBlX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCB0aGF0IHZhcmlhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdHlwZV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpSaWdodCwgbGV0IG1lIHNlZS4gVGhhdCBmdW5jdGlvbiBjYWxsIGxvb2tzIGZhbWlsaWFyLi4uICpJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkqLiBPa2F5LCBzbyAqSFRZUEUqIGlzIHByb2JhYmx5IGEgdHlwZSBzcGVjaWZpZXIsIGFuZCAqXF9jcmVhdGUqIGlzIHRoZSBpbXBvcnRhbnQgcGFydCBoZXJlLiBJdCYjMzk7cyBhIGNvbnN0cnVjdG9yIG9yIGluaXRpYWxpemVyIGZ1bmN0aW9uLiBUbyB1bmRlcnN0YW5kIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBkb2luZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzICpcX2NyZWF0ZSogZnVuY3Rpb24gaXMgZG9pbmcuIExldCBtZSBqdW1wIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggc3BlY2lmaWNhbGx5IGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9jcmVhdGVgIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzIGFuZCBpdHMgZXhwZWN0ZWQgYXJndW1lbnRzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTc4PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTU3OTpJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1ODAtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHUzMiBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBoYXNoX25ldDRfY3JlYXRlYCwgYGhhc2hfbmV0Nl9jcmVhdGVgIHN0eWxlIGZ1bmN0aW9ucywgcmlnaHQ/IEJ1dCB0aGUgcmVhbCB3b3JrLCB0aGUgc3R1ZmYgdGhhdCYjMzk7cyBhY3R1YWxseSAqbW9kaWZpZWQqIGFuZCB0aGVyZWZvcmUgdGhlIGp1aWN5IGJpdHMgZm9yIGZ1enppbmcsIGlzIGluIHRoZXNlIG90aGVyIGZ1bmN0aW9ucy4gSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0IGhlcmU6IGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2Agb25lLCB0aGUgYGRlc3Ryb3lfYW5kX2ZyZWVfc2V0YCBvbmUsIGFuZCB0aGVuIGEgd2hvbGUgc2xldyBvZiBgbXR5cGVfKmAgZnVuY3Rpb25zIHRoYXQgYXJlICp2ZXJ5KiBpbnRlcmVzdGluZy4gV2UmIzM5O3ZlIGdvdCBzdHVmZiB0byBhZGQsIGRlbGV0ZSwgZmx1c2gsIGFuZCB0ZXN0IENJRFJzIGFuZCBhaGFzaCByZWxhdGVkIHJvdXRpbmVzLiBUaGVyZSYjMzk7cyBldmVuIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRoIGBtdHlwZV9nY19kb2AuIFdlJiMzOTt2ZSBhbHNvIGdvdCBga2FkdGAgcm91dGluZXMuCgpIb2xkIG9uLi4uIHRoZSBgbXR5cGVfKmAgZnVuY3Rpb25zIGFyZSAqZ2VuZXJhdGVkKiBiYXNlZCBvbiB0aGUgaGFzaCB0eXBlLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBub3QgdGhlICplbnRyeSogcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGZyb20gdGhlIHRvcCwgYW5kIG5vdCB0aGUgc3RhdGljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpdCEgV2UgbmVlZCB0byBmb2N1cyBvbiB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSB0aGUgdHJpZ2dlciBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhhdCBtZWFucyBgaXBfc2V0X2NvcmUuY2AgaXMgdGhlIHBsYWNlIHRvIGxvb2suIExldCYjMzk7cyBoZWFkIHRoZXJlIGFuZCBzZWUgd2hhdCBuZXRsaW5rIG9wZXJhdGlvbnMgYXJlIGhhcHBlbmluZyB0aGF0IGxlYWQgdG8gdGhvc2UgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmxfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTAyMD1maW5kX2ZyZWVfaWQoc3RydWN0IGlwX3NldF9uZXQgKmluc3QsIGNvbnN0IGNoYXIgKm5hbWUsIGlwX3NldF9pZF90ICppbmRleCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0My1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDQ0OnN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ1LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMDM9X2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyMzEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTIzMjpzdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTIzMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEzMDM9aXBfc2V0X2ZsdXNoX3NldChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTEtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTMxMjpzdGF0aWMgaW50IGlwX3NldF9mbHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTMtXHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTM0Mj1pcF9zZXRfc2V0bmFtZTJfcG9saWN5W0lQU0VUX0FUVFJfQ01EX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTM0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMzUwOnN0YXRpYyBpbnQgaXBfc2V0X3JlbmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzOTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTM5ODpzdGF0aWMgaW50IGlwX3NldF9zd2FwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTM5OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1Nzc9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNzE3LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE3MTg6c3RhdGljIGludCBpcF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3MTktXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xODE4PXN0YXRpYyBpbnQgaXBfc2V0X2FkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKmN0bmwsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4NzMtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg3NDpzdGF0aWMgaW50IGlwX3NldF91YWRkKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODAtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg4MTpzdGF0aWMgaW50IGlwX3NldF91ZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg4Mi1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTg4ODpzdGF0aWMgaW50IGlwX3NldF91dGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODktXHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTkyMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTIzOnN0YXRpYyBpbnQgaXBfc2V0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5MjQtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF90eXBlX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE5NzItXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTk3MzpzdGF0aWMgaW50IGlwX3NldF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTk3NC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIwMjI9aXBfc2V0X3Byb3RvY29sX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwMjUtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjAyNjpzdGF0aWMgaW50IGlwX3NldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwMjctXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA1OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMDYwOnN0YXRpYyBpbnQgaXBfc2V0X2J5bmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIwNjEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF9pbmRleF9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTA0LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxMDU6c3RhdGljIGludCBpcF9zZXRfYnlpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxMDYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUHJvcG9zZWQgaXBzZXQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgY29yZSBvZiBgaXBzZXRgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBuZXRsaW5rIG9wZXJhdGlvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcy4gTXkgaW5pdGlhbCByZWFkIG9mIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24gc2hvd3MgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBgbmV0bGlua2Agb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5OiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBgaXBfc2V0X3V0ZXN0YCwgYW5kIGBpcF9zZXRfZHVtcGAuIFdlIGtub3cgdGhhdCB0aGVzZSBhcmUgYWxsIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIGBpcHNldGAgdGhyb3VnaCB0aGUgbmV0d29yayBzdGFjay4gSSBhbHNvIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBzb21lIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1hbmFnaW5nIGBpcHNldGAgZGF0YSwgaW5jbHVkaW5nOiBgaXBfc2V0X2luaXRfY29tbWVudGAsIGBpcF9zZXRfY29tbWVudF9mcmVlYCwgYG10eXBlX2FkZF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyYCwgYG10eXBlX2RlbF9jaWRyX2FsbGAsIGBtdHlwZV9mbHVzaGAsIGBtdHlwZV9haGFzaF9kZXN0cm95YCwgYG10eXBlX2djX2RvYCwgYG10eXBlX2FkZGAsIGBtdHlwZV9kZWxgLCBgbXR5cGVfdGVzdF9jaWRyc2AsIGBtdHlwZV90ZXN0YCwgYG10eXBlX2hlYWRgLCBgbXR5cGVfaGFzaF9zaXplYCwgYW5kIGBtdHlwZV9idWNrZXRfc2l6ZWAuIEkgc2VlIHRoYXQgdGhlc2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBuZXRsaW5rIG9wZXJhdGlvbnMgKmFuZCogZnJvbSB0aGUgZGF0YXBhdGgsIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgaGF2ZSBjYXNjYWRpbmcgaW1wbGljYXRpb25zIGZvciBgaXB0YWJsZXNgIGFuZCBgbmZ0YWJsZXNgIHVzZXJzLgoKVGhpbmtpbmcgbW9yZSBkZWVwbHksIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdG8gYGlwX3NldF9kZXN0cm95YCB0byB1c2UgYHF1ZXVlX3JjdV93b3JrYCB3YXJyYW50cyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uOyBhbnkgdGltaW5nLXNlbnNpdGl2ZSBvcGVyYXRpb25zIGNvdWxkIGhhdmUgdGhlaXIgYmVoYXZpb3VyIGNoYW5nZWQgYnkgdGhpcyBtb2RpZmljYXRpb24uIFRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21tZW50IGhhbmRsaW5nIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RpbmcsIGFzIGNvbW1lbnQgaW5mb3JtYXRpb24gbWlnaHQgYmUgbG9zdCBvciBiZWNvbWUgaW5jb25zaXN0ZW50LiAKCk9rYXksIGxldCYjMzk7cyBmb2xsb3cgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIGBtdHlwZV9hZGRfY2lkcmAgaXMgY2FsbGVkIGZyb20gYG10eXBlX2FkZGAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgZnJvbSBgaXBfc2V0X3VhZGRgLiBTaW1pbGFybHksIGBtdHlwZV9kZWxfY2lkcmAgaXMgY2FsbGVkIGZyb20gYG10eXBlX2RlbGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpcF9zZXRfdWRlbGAuIFRoZSBgbXR5cGVfdGVzdF9jaWRyc2AgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBgbXR5cGVfdGVzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpcF9zZXRfdXRlc3RgIGFuZCwgY3JpdGljYWxseSwgZnJvbSB0aGUgZGF0YXBhdGguICBgbXR5cGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgaXBfc2V0X2ZsdXNoYC4gYG10eXBlX2FoYXNoX2Rlc3Ryb3lgIGlzIGNhbGxlZCBieSBgaXBfc2V0X2Rlc3Ryb3lgLCBhbmQgYG10eXBlX2djX2RvYCBpcyBpbnZva2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBidWlsZGluZyBibG9ja3MuCgpUbyBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIHRoZSBjb2RlIHNob3VsZCBiZSB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwc2V0L2AgZGlyZWN0b3J5LCBhbmQgSSYjMzk7ZCBleHBlY3QgaXQgdG8gYmUgZ3VhcmRlZCBieSBgQ09ORklHX0lQX1NFVGAuIEEgcXVpY2sgc2NhbiBvZiBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCB3aWxsIHRlbGwgbWUgaWYgdGhpcyBpcyBhY2N1cmF0ZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuIEkgd2lsbCB1c2UgdGhpcyBhcyBteSBmcmFtZXdvcmsgdG8gYW5hbHl6ZSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIElQIHNldHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIElQIFNldCBNb2R1bGVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBidW5jaCBvZiBgaXBfc2V0X2hhc2hfKi5jYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBpcF9zZXRfaGFzaF9pcHBvcnRuZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXQuY2AsIGBpcF9zZXRfaGFzaF9uZXRpZmFjZS5jYCwgYGlwX3NldF9oYXNoX25ldG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldHBvcnQuY2AsIGFuZCBgaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jYC4gIFRoYXQgbWVhbnMgd2UgbmVlZCB0byBlbmFibGUgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBhbmQgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgLiAgQW5kIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYElQX1NFVGAgaXRzZWxmIHRvIGJlIGVuYWJsZWQuCgpJIGFsc28gc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGlwX3NldF9saXN0X3NldC5jYCwgc28gYElQX1NFVF9MSVNUX1NFVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyB0b3VjaCBgSVBfU0VUX0JJVE1BUF9HRU5gLCB3aGljaCBjYXNjYWRlcyB0byBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBTbywgdG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIGp1c3QgZW5hYmxlICphbGwqIG9mIHRoZSBJUCBzZXQgbW9kdWxlcy4KCkxldCBtZSBsaXN0IG91dCB0aGUgY29uZmlncyBJJiMzOTttIHBsYW5uaW5nIHRvIGVuYWJsZSBmb3IgY2xhcml0eToKCiogICBgSVBfU0VUYAoqICAgYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgCiogICBgSVBfU0VUX0hBU0hfTkVUTkVUYAoqICAgYElQX1NFVF9IQVNIX05FVFBPUlRgCiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAKKiAgIGBJUF9TRVRfTElTVF9TRVRgCiogICBgSVBfU0VUX0JJVE1BUF9JUGAKKiAgIGBJUF9TRVRfQklUTUFQX0lQTUFDYAoqICAgYElQX1NFVF9CSVRNQVBfUE9SVGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIElQIFNldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBJUF9TRVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBJdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB5b3UmIzM5O2QgZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUCBzZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGF0IGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgSVBfU0VUYCBiZWNvbWVzIGF2YWlsYWJsZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGlzLCBob3cgdG8gZW5hYmxlIGl0IGFuZCB3aGF0IGVsc2UgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTI9bWVudWNvbmZpZyBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE2PWNvbmZpZyBJUF9TRVRfTUFYXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE5LVx0cmFuZ2UgMiA2NTUzNFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjIwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yMS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mjg9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjMwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zMS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mzc9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDAtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTQ2PWNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDpwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz01NT1jb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NzpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTgtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTY1PWNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02OC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NzQ9Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc3LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz04Mz1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjg1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9OTM9Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTAzPWNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAsbWFjIHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTExMj1jb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMTQ6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTIxPWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCxuZXQgc2V0IHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjM6XHRkZXBlbmRzIG9uIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyNC1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTMwPWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMjpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMzLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzk9Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0MTpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQyLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNDg9Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxwb3J0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTUwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTEtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE1OD1jb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0Vcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2MDpcdGRlcGVuZHMgb24gSVBfU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTYxLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNjg9Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTcwOlx0ZGVwZW5kcyBvbiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNzEtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE3OD1jb25maWcgR0NPVl9QUk9GSUxFX0lQU0VUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTc5LVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIGlwc2V0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTgwOlx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE4MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4ODgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhpcyBrZXJuZWwgbW9kdWxlIGNvbmZpZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGRlcGVuZGVuY2llcyByaWdodCBmb3IgYElQX1NFVGAuIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCByZWxpZXMgaGVhdmlseSBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCBzbyB0aG9zZSBhcmUgZ29pbmcgc3RyYWlnaHQgaW50byB0aGUgY29uZmlnIGxpc3Qgd2l0aG91dCBhIHNlY29uZCB0aG91Z2h0LiBJJiMzOTtsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiwgb2YgY291cnNlLCBhbmQgdGhlbiBhbGwgdGhlIGRpZmZlcmVudCBoYXNoIGFuZCBiaXRtYXAgc2V0IHR5cGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYCwgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBzeW1ib2xzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGNydWNpYWwuIFRoaW5raW5nIGFib3V0IHRoZSBuZXRsaW5rIGludGVyZmFjZSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBpbmNsdWRpbmcgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGRlZmluZWQgaW4gYGlwX3NldF9jb3JlLmNgOiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBhbmQgYGlwX3NldF91dGVzdGAuIFRob3NlIGFyZSB0aGUgY29yZSBvcGVyYXRpb25zIEkmIzM5O2xsIGJlIHJlbHlpbmcgb24uCgpUaGVuIHRoZXJlIGFyZSB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGluIGBpcF9zZXRfaGFzaF9nZW4uaGAuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGNyaXRpY2FsLCBnaXZlbiBob3cgbXVjaCB0aGV5IHNlZW0gdG8gZ2VuZXJhdGUuIFNvLCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9jcmVhdGVgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0NF9oZWFkYCB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIHRoZWlyIGV4cG9ydCBzdGF0dXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBvciBzdGF0aWMsIHRvIGVuc3VyZSBJJiMzOTttIGluY2x1ZGluZyBldmVyeXRoaW5nIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50LiptdHlwZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbiBvZiBTdGF0aWMgRnVuY3Rpb25zIGluIHRoZSBJUCBTZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSYjMzk7dmUgc2VlbiB0aGF0IGBtdHlwZV9hZGRgIGZ1bmN0aW9uIHNpZ25hdHVyZSBiZWZvcmU6IGBzdGF0aWMgaW50IG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LCBzdHJ1Y3QgaXBfc2V0X2V4dCAqbWV4dCwgdTMyIGZsYWdzKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBiZWNhdXNlIGl0JiMzOTtzICpzdGF0aWMqLCBpdCBtaWdodCBiZSBpbmxpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gVGhhdCB3b3VsZCBtZWFuIHdlIHdvdWxkbiYjMzk7dCBzZWUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlmIHdlJiMzOTtyZSBkZWJ1Z2dpbmcuCgpCdXQgdGhlbiwgSSByZW1lbWJlciBzZWVpbmcgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYG10eXBlX3ZhcmlhbnRgLiBTb21ldGhpbmcgbGlrZSBgW0lQU0VUX0FERF0gPSBtdHlwZV9hZGRgLiBBbmQgdGhhdCBjaGFuZ2VzIGV2ZXJ5dGhpbmcuIElmIHlvdSYjMzk7cmUgYXNzaWduaW5nIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gYSBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogZnVsbHkgaW5saW5lIGl0LiBJdCAqaGFzKiB0byBleGlzdCBhcyBhIGRpc3RpbmN0IHN5bWJvbC4gVGhpcyBpbXBsaWVzIHRoZXNlIGZ1bmN0aW9ucywgZXZlbiB0aG91Z2ggZGVjbGFyZWQgYHN0YXRpY2AsIHdpbGwsIGluIGZhY3QsIGhhdmUgdW5pcXVlIGFkZHJlc3NlcyDigJMgc2ltaWxhciB0byBob3cgYGhhc2hfbmV0NF9hZGRgIGlzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgaG93IGl0IGlzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQuKm10eXBlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzE2OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlwX3NldCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBtdHlwZV9hZGRgIG1hY3JvLiBMZXQmIzM5O3Mgc2VlLi4uIGFjY29yZGluZyB0byBgaXBfc2V0X2hhc2hfZ2VuLmhgIGF0IGxpbmUgOTMwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgYHN0YXRpYyBpbnQgbXR5cGVfYWRkYC4gVGhpcyBleHBhbmRzIHRvIGBzdGF0aWMgaW50IGhhc2hfbmV0NF9hZGQoLi4uKWAuIFRoZSBmYWN0IHRoYXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4gd2l0aGluIGBtdHlwZV92YXJpYW50YCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMgdG8gYSB1bmlxdWUgc3ltYm9sLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGluY2x1ZGUgYSBmZXcgb2YgdGhlc2UgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIGBuZXQ0YCwgbmFtZWx5IGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBgaGFzaF9uZXQ0X2NyZWF0ZWAsIGBoYXNoX25ldDRfZGVzdHJveWAsIGBoYXNoX25ldDRfZmx1c2hgLCBhbmQgYGhhc2hfbmV0NF9oZWFkYC4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gaW5jbHVkZSBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IgYG5ldDZgLgoKSG93ZXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbW9yZSBmcnVpdGZ1bCB0byBwcmlvcml0aXplIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50cy4gVGhvc2UgYXJlLCBhZnRlciBhbGwsIHRoZSBub24tc3RhdGljIG1haW4gYWNjZXNzIHBvaW50cyB0byB0aGUgaXBfc2V0IGZ1bmN0aW9uYWxpdHkuIFRoZXNlIHdvdWxkIGluY2x1ZGUgdGhpbmdzIGxpa2UgYGlwX3NldF9jcmVhdGVgLCBgaXBfc2V0X2Rlc3Ryb3lgLCBgaXBfc2V0X2ZsdXNoYCwgYGlwX3NldF91YWRkYCwgYGlwX3NldF91ZGVsYCwgYGlwX3NldF91dGVzdGAsIGFuZCBgaXBfc2V0X2R1bXBgLgoKQW5kLCBvaCB5ZXMsIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYGlwX3NldF9kZXN0cm95X3NldF93b3JrYC4gVGhhdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggbWFrZXMgaXQgYSByZWFsbHkgZ29vZCBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBkZXN0cm95X2FuZF9mcmVlX3NldGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbi4gVGltZSB0byBjaGVjayBgaXBfc2V0X2NvcmUuY2AgZm9yIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9kZXN0cm95X3NldF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMTkzPXN0YXRpYyB2b2lkXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTE5NDppcF9zZXRfZGVzdHJveV9zZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTE5NS17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEyMzI9c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjkwLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTI5MTpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZzLVx1MDAzZXJ3b3JrLCBpcF9zZXRfZGVzdHJveV9zZXRfd29yayk7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5Mi1cdFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXHUwMDI2cy1cdTAwM2Vyd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBgaXBfc2V0YCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gaXRzIG93biByaWdodCDigJMgYSBkZWRpY2F0ZWQgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZXQgaXMgbWFuYWdlZCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBjb21tZW50cyBhcmUgaGFuZGxlZC4gTGV0IG1lIGRpdmUgaW50byBgaXBfc2V0X2luaXRfY29tbWVudGAgYW5kLCBuYXR1cmFsbHksIGBpcF9zZXRfY29tbWVudF9mcmVlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgcGllY2VzIGludGVycmVsYXRlIGFuZCBwbGF5IHRoZWlyIHBhcnQgd2lsbCBsaWtlbHkgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBJUCBzZXQmIzM5O3MgbWV0YWRhdGEgYW5kIGFzc29jaWF0ZWQgY29tbWVudHMuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM0NzppcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM0OC1cdFx0ICAgIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQpXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MzY5OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2NTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEtleSBTeW1ib2xzKioKCk9rYXksIHllcywgSSYjMzk7bSBjb25maXJtaW5nIHRoZXNlIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBgaXBfc2V0X2R1bXBgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBgaXBfc2V0X2luaXRfY29tbWVudGAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBvbmVzIGZvciB0aGlzIGFuYWx5c2lzLgoKTm93LCBhIGNyaXRpY2FsIHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIGFueSBvZiB0aG9zZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgd291bGQgY2hhbmdlIHRoZSBnYW1lIGNvbnNpZGVyYWJseSwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBpcF9zZXRfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMDQ0PXN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIE5ldGxpbmsgUG9saWN5IEFycmF5KioKCkFscmlnaHQsIHNvIHRoZXNlIHBhcnRpY3VsYXIgZGF0YSBwb2ludHMgb3IgJiMzNDt0aG91Z2h0cyYjMzQ7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGNvbmNlcHR1YWxseSBzdGF0aWMg4oCTIHRoZXkmIzM5O3JlIG5vdCBkeW5hbWljIGluIHRoZWlyIGluaGVyZW50IG5hdHVyZSDigJMgYXJlIGFjdHVhbGx5ICphc3NpZ25lZCogdG8gdGhlIG5ldGxpbmsgcG9saWN5IG9yIGNhbGxiYWNrIGFycmF5LiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYXNzaWdubWVudCBmdWxseS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXM6IGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBhcnJheS4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIHN0cnVjdHVyZSwgY29udGVudCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2Ugc3RhdGljIGVsZW1lbnRzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoYXQgYWN0aXZlLCBjYWxsYmFjay1kcml2ZW4gZW52aXJvbm1lbnQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBvbGljeSBlbmZvcmNlbWVudCwgYW5kIGhvdyBkb2VzIHRoaXMgc3RhdGljIGRhdGEgaW5mbHVlbmNlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG9mIHRob3NlIGNhbGxiYWNrcz8gVGltZSB0byBkaXNzZWN0IHRoYXQgYXJyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIzNT1FWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfdHlwZV9yZWdpc3Rlcik7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM2LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIzNzovKiBVbnJlZ2lzdGVyIGEgc2V0IHR5cGUuIFRoZXJlJiMzOTtzIGEgc21hbGwgcmFjZSB3aXRoIGlwX3NldF9jcmVhdGUgKi9cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMzgtdm9pZFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05NzM9c3RhcnRfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtOTgyLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXBfc2V0X2NyZWF0ZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk4NC1cdFtJUFNFVF9BVFRSX1BST1RPQ09MXVx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEwNDQ9c3RhdGljIGludCBpcF9zZXRfbm9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ5LVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEwNTA6c3RhdGljIGludCBpcF9zZXRfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjE0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgaXBfc2V0X25ldGxpbmtfc3Vic3lzX2NiW0lQU0VUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTUzLVx0W0lQU0VUX0NNRF9DUkVBVEVdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU0Olx0XHQuY2FsbFx0XHQ9IGlwX3NldF9jcmVhdGUsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE1NS1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX01VVEVYLFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNTYtXHRcdC5hdHRyX2NvdW50XHQ9IElQU0VUX0FUVFJfQ01EX01BWCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU3Olx0XHQucG9saWN5XHRcdD0gaXBfc2V0X2NyZWF0ZV9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjE1OC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDc2CgkJCQkJCQlvdXRwdXQ6IDM3MwoJCQkJCQkJdGhvdWdodHM6IDE5MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sICZhbXA7IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMgZm9yIElQIFNldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtYXAgb2Ygd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG1vc3QgY29uY2VudHJhdGVkLiAgU2luY2UgdGhlIGFkZHJlc3NlcyBvZiB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFyZSB0YWtlbiwgdGhleSBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzIGFuZCBhcmUgdGh1cyBnb29kIGZvY3VzIHN5bWJvbHMuICAKCkkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBhcyB3ZWxsIGFzIGEgbGFyZ2UgbnVtYmVyIG9mIGdlbmVyYXRlZCBoYXNoIGZ1bmN0aW9ucyBsaWtlIGBtdHlwZV9hZGRfY2lkcmAsIGFuZCBgbXR5cGVfZGVsX2NpZHJgLiBHaXZlbiB0aGUgaGlnaCBudW1iZXIgb2YgdGhlc2UgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzIHRoYXQgY2FsbCB0aGVtLCBhbmQgcG9zc2libHkgYSBoYW5kZnVsIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBgaGFzaF9uZXQ0X2FkZGAsIGFzIGl0IGRpcmVjdGx5IGNvbnRhaW5zIG9yIGNhbGxzIGxvZ2ljIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIAoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYGhhc2hfbmV0NF9hZGRgIGV4aXN0cyBpbiB0aGUgb2JqZWN0IGZpbGUgYmVjYXVzZSBpdCBpcyBhc3NpZ25lZCB0byBgbXR5cGVfdmFyaWFudC5hZHRbSVBTRVRfQUREXWAsIGFzIHdlbGwgYXMgYSBsaXN0IG9mIG5ldGxpbmsgZW50cnkgcG9pbnQgYW5kIGdlbmVyYXRlZCBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgdGhlIGluaXRpYWwgZm9jdXMgc3ltYm9scy4gVGhpcyBpcyB0aGUgbGlzdDoKCiogICBgaXBfc2V0X2NyZWF0ZWAKKiAgIGBpcF9zZXRfZGVzdHJveWAKKiAgIGBpcF9zZXRfZmx1c2hgCiogICBgaXBfc2V0X3VhZGRgCiogICBgaXBfc2V0X3VkZWxgCiogICBgaXBfc2V0X3V0ZXN0YAoqICAgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYAoqICAgYGlwX3NldF9pbml0X2NvbW1lbnRgCiogICBgaXBfc2V0X2NvbW1lbnRfZnJlZWAKKiAgIGBoYXNoX25ldDRfYWRkYAoqICAgYGhhc2hfbmV0NF9kZWxgCiogICBgaGFzaF9uZXQ0X3Rlc3RgCiogICBgaGFzaF9uZXQ2X2FkZGAKKiAgIGBoYXNoX25ldDZfZGVsYAoqICAgYGhhc2hfbmV0Nl90ZXN0YAoKSSYjMzk7bSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiBvZiBgbXR5cGVfYWRkYCwgd2hpY2ggZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAgYXMgZXhwZWN0ZWQuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgdGhlIGRhdGFwYXRoIGZ1bmN0aW9ucyAoYGthZHRgIGZ1bmN0aW9ucykgY2FsbGVkIGluIGBpcHRhYmxlc2AsIGFzIHRoZXkgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIFNwZWNpZmljYWxseSwgdGhlc2U6CgoqICAgYGhhc2hfaXBwb3J0bmV0NF9rYWR0YAoqICAgYGhhc2hfbmV0NF9rYWR0YAoqICAgYGhhc2hfbmV0aWZhY2U0X2thZHRgCiogICBgaGFzaF9uZXRuZXQ0X2thZHRgCiogICBgaGFzaF9uZXRwb3J0NF9rYWR0YAoqICAgYGhhc2hfbmV0cG9ydG5ldDRfa2FkdGAKCk5leHQsIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBhZmZlY3RlZCBjb25maWd1cmF0aW9ucy4gIFRoZSBjaGFuZ2VzIHNlZW0gdG8gdGFyZ2V0IHNldmVyYWwgaGFzaCB0eXBlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFzIHdlbGwgYXMgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBgSVBfU0VUX0JJVE1BUF9QT1JUYCwgYW5kIHRoZSBiYXNpYyBgSVBfU0VUYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUmAgY29uZmlncy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwbGljaXRseSBtb2RpZmllZCBvbmVzOgoKKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgCiogICBgSVBfU0VUX0hBU0hfTkVUYAoqICAgYElQX1NFVF9IQVNIX05FVElGQUNFYAoqICAgYElQX1NFVF9IQVNIX05FVE5FVGAKKiAgIGBJUF9TRVRfSEFTSF9ORVRQT1JUYAoqICAgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgCiogICBgSVBfU0VUX0xJU1RfU0VUYAoqICAgYElQX1NFVF9CSVRNQVBfSVBgCiogICBgSVBfU0VUX0JJVE1BUF9JUE1BQ2AKKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgCiogICBgSVBfU0VUYAoqICAgYElORVRgCiogICBgTkVURklMVEVSYAoKTm93LCByZWZpbmluZyB0aGUgZm9jdXMgc3ltYm9sIGxpc3QgYmFzZWQgb24gdGhlIHBhdGNoJiMzOTtzIGV4cGxpY2l0IG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgdGhlIGZpbmFsIGxpc3Q6CgoqICAgYGlwX3NldF9jcmVhdGVgCiogICBgaXBfc2V0X2Rlc3Ryb3lgCiogICBgaXBfc2V0X2ZsdXNoYAoqICAgYGlwX3NldF91YWRkYAoqICAgYGlwX3NldF91ZGVsYAoqICAgYGlwX3NldF91dGVzdGAKKiAgIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AKKiAgIGBpcF9zZXRfaW5pdF9jb21tZW50YAoqICAgYGlwX3NldF9jb21tZW50X2ZyZWVgCiogICBgaGFzaF8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aXBfc2V0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91ZGVsJiMzNDssCiAgICAmIzM0O2lwX3NldF91dGVzdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZGVzdHJveV9zZXRfd29yayYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfa2FkdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX0lQUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfSEFTSF9ORVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUSUZBQ0UmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUTkVUJiMzNDssCiAgICAmIzM0O0lQX1NFVF9IQVNIX05FVFBPUlQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0hBU0hfTkVUUE9SVE5FVCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfTElTVF9TRVQmIzM0OywKICAgICYjMzQ7SVBfU0VUX0JJVE1BUF9JUCYjMzQ7LAogICAgJiMzNDtJUF9TRVRfQklUTUFQX0lQTUFDJiMzNDssCiAgICAmIzM0O0lQX1NFVF9CSVRNQVBfUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aXBfc2V0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aXBfc2V0X2ZsdXNoJiMzNDssCiAgICAmIzM0O2lwX3NldF91YWRkJiMzNDssCiAgICAmIzM0O2lwX3NldF91ZGVsJiMzNDssCiAgICAmIzM0O2lwX3NldF91dGVzdCYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZGVzdHJveV9zZXRfd29yayYjMzQ7LAogICAgJiMzNDtpcF9zZXRfaW5pdF9jb21tZW50JiMzNDssCiAgICAmIzM0O2lwX3NldF9jb21tZW50X2ZyZWUmIzM0OywKICAgICYjMzQ7aGFzaF9uZXQ0X2FkZCYjMzQ7LAogICAgJiMzNDtoYXNoX25ldDRfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF90ZXN0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0bmV0NF9rYWR0JiMzNDssCiAgICAmIzM0O2hhc2hfbmV0cG9ydDRfa2FkdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM2OjQxLjA5NTI1MjExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQxMDkwMzEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIklQX1NFVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfSVBQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVElGQUNFXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9MSVNUX1NFVFwiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9JUFwiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9JUE1BQ1wiLFxuICAgIFwiSVBfU0VUX0JJVE1BUF9QT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2NyZWF0ZVwiLFxuICAgIFwiaXBfc2V0X2Rlc3Ryb3lcIixcbiAgICBcImlwX3NldF9mbHVzaFwiLFxuICAgIFwiaXBfc2V0X3VhZGRcIixcbiAgICBcImlwX3NldF91ZGVsXCIsXG4gICAgXCJpcF9zZXRfdXRlc3RcIixcbiAgICBcImlwX3NldF9kZXN0cm95X3NldF93b3JrXCIsXG4gICAgXCJpcF9zZXRfaW5pdF9jb21tZW50XCIsXG4gICAgXCJpcF9zZXRfY29tbWVudF9mcmVlXCIsXG4gICAgXCJoYXNoX25ldDRfYWRkXCIsXG4gICAgXCJoYXNoX25ldDRfZGVsXCIsXG4gICAgXCJoYXNoX25ldDRfdGVzdFwiLFxuICAgIFwiaGFzaF9uZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0bmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldHBvcnQ0X2thZHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUCBzZXQgZGVzdHJ1Y3Rpb24gbG9naWMgdG8gdXNlIGEgd29ya3F1ZXVlIGluc3RlYWQgb2YgUkNVIGRpcmVjdGx5LCBjaGFuZ2VzIHRoZSBleHRlbnNpb24gc2l6ZSB0cmFja2luZyB0byB1c2UgYXRvbWljNjRfdCwgYW5kIHJlZmFjdG9ycyB0aGUgQ0lEUiBwcmVmaXggdHJhY2tpbmcgaW4gaGFzaCBzZXRzIHRvIHVzZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXlzIGFuZCBSQ1UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBJUCBzZXQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0IHNldCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGVsZW1lbnQgYWRkaXRpb24vZGVsZXRpb24sIGFuZCBtYXRjaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuMDk1MjU3ODU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ1MTEwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDc6MzY6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcbmluZGV4IGI5ODMzMTU3MmFkMjkuLmM0Njg2NGNjNjYyMzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxcbkBAIC0yNDQsOCArMjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTtcXG4gXFxuIC8qIEEgZ2VuZXJpYyBJUCBzZXQgKi9cXG4gc3RydWN0IGlwX3NldCB7XFxuLVxcdC8qIEZvciBjYWxsX2NydSBpbiBkZXN0cm95ICovXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cXG4rXFx0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xcbiBcXHQvKiBUaGUgbmFtZSBvZiB0aGUgc2V0ICovXFxuIFxcdGNoYXIgbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTtcXG4gXFx0LyogTG9jayBwcm90ZWN0aW5nIHRoZSBzZXQgZGF0YSAqL1xcbkBAIC0yNzMsNyArMjczLDcgQEAgc3RydWN0IGlwX3NldCB7XFxuIFxcdC8qIE51bWJlciBvZiBlbGVtZW50cyAodnMgdGltZW91dCkgKi9cXG4gXFx0dTMyIGVsZW1lbnRzO1xcbiBcXHQvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovXFxuLVxcdHNpemVfdCBleHRfc2l6ZTtcXG4rXFx0YXRvbWljNjRfdCBleHRfc2l6ZTtcXG4gXFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cXG4gXFx0c2l6ZV90IGRzaXplO1xcbiBcXHQvKiBPZmZzZXRzIHRvIGV4dGVuc2lvbnMgaW4gZWxlbWVudHMgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmhcXG5AQCAtNzcsNyArNzcsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdG10eXBlX2V4dF9jbGVhbnVwKHNldCk7XFxuIFxcdGJpdG1hcF96ZXJvKG1hcC1cXHUwMDNlbWVtYmVycywgbWFwLVxcdTAwM2VlbGVtZW50cyk7XFxuIFxcdHNldC1cXHUwMDNlZWxlbWVudHMgPSAwO1xcbi1cXHRzZXQtXFx1MDAzZWV4dF9zaXplID0gMDtcXG4rXFx0YXRvbWljNjRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplLCAwKTtcXG4gfVxcbiBcXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXFxuQEAgLTkzLDcgKzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcXG4tXFx0c2l6ZV90IG1lbXNpemUgPSBtdHlwZV9tZW1zaXplKG1hcCwgc2V0LVxcdTAwM2Vkc2l6ZSkgKyBzZXQtXFx1MDAzZWV4dF9zaXplO1xcbitcXHRzaXplX3QgbWVtc2l6ZSA9IG10eXBlX21lbXNpemUobWFwLCBzZXQtXFx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXG4gXFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xcbiBcXHRpZiAoIW5lc3RlZClcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXFxuaW5kZXggNmNmYWQxNTJkN2QxYi4uNTQzODUxYTkyM2QwZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5AQCAtMjUsNiArMjUsNyBAQFxcbiBzdGF0aWMgTElTVF9IRUFEKGlwX3NldF90eXBlX2xpc3QpO1xcdFxcdC8qIGFsbCByZWdpc3RlcmVkIHNldCB0eXBlcyAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKGlwX3NldF90eXBlX211dGV4KTtcXHRcXHQvKiBwcm90ZWN0cyBpcF9zZXRfdHlwZV9saXN0ICovXFxuIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwX3NldF9yZWZfbG9jayk7XFx0XFx0LyogcHJvdGVjdHMgdGhlIHNldCByZWZzICovXFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXBzZXRfZGVzdHJveV93cTtcXG4gXFxuIHN0cnVjdCBpcF9zZXRfbmV0IHtcXG4gXFx0c3RydWN0IGlwX3NldCAqIF9fcmN1ICppcF9zZXRfbGlzdDtcXHQvKiBhbGwgaW5kaXZpZHVhbCBzZXRzICovXFxuQEAgLTM1MCw3ICszNTEsNyBAQCBpcF9zZXRfaW5pdF9jb21tZW50KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGlwX3NldF9jb21tZW50ICpjb21tZW50LFxcbiBcXHRzaXplX3QgbGVuID0gZXh0LVxcdTAwM2Vjb21tZW50ID8gc3RybGVuKGV4dC1cXHUwMDNlY29tbWVudCkgOiAwO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGMpKSB7XFxuLVxcdFxcdHNldC1cXHUwMDNlZXh0X3NpemUgLT0gc2l6ZW9mKCpjKSArIHN0cmxlbihjLVxcdTAwM2VzdHIpICsgMTtcXG4rXFx0XFx0YXRvbWljNjRfc3ViKHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDEsIFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXFx1MDAzZWMsIE5VTEwpO1xcbiBcXHRcXHRrZnJlZV9yY3UoYywgcmN1KTtcXG4gXFx0fVxcbkBAIC0zNjIsNyArMzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG4gXFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRzdHJzY3B5KGMtXFx1MDAzZXN0ciwgZXh0LVxcdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcXG4tXFx0c2V0LVxcdTAwM2VleHRfc2l6ZSArPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxO1xcbitcXHRhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVxcdTAwM2VzdHIpICsgMSwgXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29tbWVudC1cXHUwMDNlYywgYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X2luaXRfY29tbWVudCk7XFxuQEAgLTM5Miw3ICszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxcbiBcXHRjID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjb21tZW50LVxcdTAwM2VjLCAxKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFjKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRzZXQtXFx1MDAzZWV4dF9zaXplIC09IHNpemVvZigqYykgKyBzdHJsZW4oYy1cXHUwMDNlc3RyKSArIDE7XFxuK1xcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXFx1MDAzZXN0cikgKyAxLCBcXHUwMDI2c2V0LVxcdTAwM2VleHRfc2l6ZSk7XFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVxcdTAwM2VjLCBOVUxMKTtcXG4gXFx0a2ZyZWVfcmN1KGMsIHJjdSk7XFxuIH1cXG5AQCAtMTE3OCwyMiArMTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxuIFxcdFxcdFxcdFxcdCAgICAubGVuID0gSVBTRVRfTUFYTkFNRUxFTiAtIDEgfSxcXG4gfTtcXG4gXFxuLS8qIEluIG9yZGVyIHRvIHJldHVybiBxdWlja2x5IHdoZW4gZGVzdHJveWluZyBhIHNpbmdsZSBzZXQsIGl0IGlzIHNwbGl0XFxuLSAqIGludG8gdHdvIHN0YWdlczpcXG4tICogLSBDYW5jZWwgZ2FyYmFnZSBjb2xsZWN0b3JcXG4tICogLSBEZXN0cm95IHRoZSBzZXQgaXRzZWxmIHZpYSBjYWxsX3JjdSgpXFxuLSAqL1xcbi1cXG4gc3RhdGljIHZvaWRcXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK2Rlc3Ryb3lfYW5kX2ZyZWVfc2V0KHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX3NldCwgcmN1KTtcXG4tXFxuIFxcdHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlZGVzdHJveShzZXQpO1xcbiBcXHRtb2R1bGVfcHV0KHNldC1cXHUwMDNldHlwZS1cXHUwMDNlbWUpO1xcbiBcXHRrZnJlZShzZXQpO1xcbiB9XFxuIFxcbisvKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LFxcbisgKiBkZXN0cnVjdGlvbiBpcyBkb25lIGFzeW5jaHJvbm91c2x5IHZpYSB3b3JrIHF1ZXVlcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK2lwX3NldF9kZXN0cm95X3NldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlwX3NldCwgcndvcmspO1xcbitcXG4rXFx0ZGVzdHJveV9hbmRfZnJlZV9zZXQoc2V0KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gX2Rlc3Ryb3lfYWxsX3NldHMoc3RydWN0IGlwX3NldF9uZXQgKmluc3QpXFxuIHtcXG5AQCAtMTI4Myw3ICsxMjg4LDggQEAgc3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHQvKiBNdXN0IHdhaXQgZm9yIGZsdXNoIHRvIGJlIHJlYWxseSBmaW5pc2hlZCAgKi9cXG4gXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRjYWxsX3JjdShcXHUwMDI2cy1cXHUwMDNlcmN1LCBpcF9zZXRfZGVzdHJveV9zZXRfcmN1KTtcXG4rXFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2cy1cXHUwMDNlcndvcmssIGlwX3NldF9kZXN0cm95X3NldF93b3JrKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoaXBzZXRfZGVzdHJveV93cSwgXFx1MDAyNnMtXFx1MDAzZXJ3b3JrKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gb3V0OlxcbkBAIC0yNDIxLDE4ICsyNDI3LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfc2V0X25ldF9vcHMgPSB7XFxuIHN0YXRpYyBpbnQgX19pbml0XFxuIGlwX3NldF9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlwc2V0X2Rlc3Ryb3lfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwiaXBzZXRfZGVzdHJveV93cVxcXCIsIDApO1xcbitcXHRpZiAoIWlwc2V0X2Rlc3Ryb3lfd3EpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgcGVybmV0X3N1YnN5cy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIG91dF93cTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0aWYgKHJldCAhPSAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgd2l0aCBuZm5ldGxpbmsuXFxcXG5cXFwiKTtcXG4gXFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3dxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KFxcdTAwMjZzb19zZXQpO1xcbkBAIC0yNDQwLDEwICsyNDUxLDEzIEBAIGlwX3NldF9pbml0KHZvaWQpXFxuIFxcdFxcdHByX2VycihcXFwiU09fU0VUIHJlZ2lzdHJ5IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3dxO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rb3V0X3dxOlxcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShpcHNldF9kZXN0cm95X3dxKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0XFxuQEAgLTI0NTMsOSArMjQ2Nyw3IEBAIGlwX3NldF9maW5pKHZvaWQpXFxuIFxcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcXHUwMDI2aXBfc2V0X25ldGxpbmtfc3Vic3lzKTtcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcF9zZXRfbmV0X29wcyk7XFxuIFxcbi1cXHQvKiBXYWl0IGZvciBjYWxsX3JjdSgpIGluIGRlc3Ryb3kgKi9cXG4tXFx0cmN1X2JhcnJpZXIoKTtcXG4tXFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwidGhlc2UgYXJlIHRoZSBmYW1vdXMgbGFzdCB3b3Jkc1xcXFxuXFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbkBAIC05OSw5ICs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHtcXG4gI2VuZGlmXFxuIFxcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cXG4rc3RydWN0IG5ldF9wcmVmaXgge1xcbitcXHR1OCBjaWRyO1xcdFxcdFxcdC8qIHRoZSBjaWRyIHZhbHVlICovXFxuK1xcdHUzMiBjb3VudDtcXHRcXHRcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhpcyBjaWRyICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbmV0X3ByZWZpeGVzIHtcXG4tXFx0dTMyIG5ldHNbSVBTRVRfTkVUX0NPVU5UXTsgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB0aGlzIGNpZHIgKi9cXG4tXFx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cXG4rXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4rXFx0dTggbGVuO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XFxuIH07XFxuIFxcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cXG5AQCAtMTI3LDExICsxMzMsNiBAQCBodGFibGVfc2l6ZSh1OCBoYml0cylcXG4gI2Vsc2VcXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcXHRcXHQoY2lkcilcXG4gI2VuZGlmXFxuLVxcbi0vKiBjaWRyICsgMSBpcyBzdG9yZWQgaW4gbmV0X3ByZWZpeGVzIHRvIHN1cHBvcnQgLzAgKi9cXG4tI2RlZmluZSBOQ0lEUl9QVVQoY2lkcilcXHRcXHQoKGNpZHIpICsgMSlcXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcXHRcXHQoKGNpZHIpIC0gMSlcXG4tXFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNfUEFDS0VEXFxuIC8qIFdoZW4gY2lkciBpcyBwYWNrZWQgd2l0aCBub21hdGNoLCBjaWRyIC0gMSBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgZW50cnkgKi9cXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcXHRcXHQoKGNpZHIpIC0gMSlcXG5AQCAtMTQxLDIxICsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXFxuICNkZWZpbmUgRENJRFJfR0VUKGNpZHIsIGkpXFx0X19DSURSKGNpZHIsIGkpXFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBJTklUX0NJRFIoY2lkciwgaG9zdF9tYXNrKVxcdFxcXFxcXG4tXFx0RENJRFJfUFVUKCgoY2lkcikgPyBOQ0lEUl9HRVQoY2lkcikgOiBob3N0X21hc2spKVxcbi1cXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxcbi0vKiBjaWRyIGZyb20gMCB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICsgMSAqL1xcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQoSE9TVF9NQVNLICsgMSlcXG4tI2RlZmluZSBDSURSX1BPUyhjKVxcdFxcdCgoYykgLSAxKVxcbi0jZWxzZVxcbi0vKiBjaWRyIGZyb20gMSB0byBIT1NUX01BU0sgdmFsdWUgYW5kIGMgPSBjaWRyICsgMSAqL1xcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHRIT1NUX01BU0tcXG4tI2RlZmluZSBDSURSX1BPUyhjKVxcdFxcdCgoYykgLSAyKVxcbi0jZW5kaWZcXG4rI2RlZmluZSBJTklUX0NJRFIobiwgaG9zdF9tYXNrKSAoe1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1xcdFxcdFxcXFxcXG4rXFx0RENJRFJfUFVUKChfX24pLVxcdTAwM2VsZW4gPyAoX19uKS1cXHUwMDNlbmV0c1swXS5jaWRyIDogaG9zdF9tYXNrKTtcXFxcXFxuK30pXFxuIFxcbi0jZWxzZVxcbi0jZGVmaW5lIE5MRU5cXHRcXHRcXHQwXFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cXG4gXFxuICNkZWZpbmUgU0VUX0VMRU1fRVhQSVJFRChzZXQsIGQpXFx0XFxcXFxcbkBAIC0yMDQsMTIgKzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XFxuICN1bmRlZiBtdHlwZV9leHRfY2xlYW51cFxcbiAjdW5kZWYgbXR5cGVfYWRkX2NpZHJcXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuKyN1bmRlZiBtdHlwZV9kZWxfY2lkcl9hbGxcXG4gI3VuZGVmIG10eXBlX2FoYXNoX21lbXNpemVcXG4gI3VuZGVmIG10eXBlX2ZsdXNoXFxuICN1bmRlZiBtdHlwZV9kZXN0cm95XFxuICN1bmRlZiBtdHlwZV9zYW1lX3NldFxcbiAjdW5kZWYgbXR5cGVfa2FkdFxcbiAjdW5kZWYgbXR5cGVfdWFkdFxcbisjdW5kZWYgbXR5cGVfYnVja2V0X3NpemVcXG4rI3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxcbiBcXG4gI3VuZGVmIG10eXBlX2FkZFxcbiAjdW5kZWYgbXR5cGVfZGVsXFxuQEAgLTI0OSwxMiArMjQzLDE1IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4gI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxuICNkZWZpbmUgbXR5cGVfYWRkX2NpZHJcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxcbiAjZGVmaW5lIG10eXBlX2RlbF9jaWRyXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcXG4rI2RlZmluZSBtdHlwZV9kZWxfY2lkcl9hbGxcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbF9jaWRyX2FsbClcXG4gI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9haGFzaF9tZW1zaXplKVxcbiAjZGVmaW5lIG10eXBlX2ZsdXNoXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9mbHVzaClcXG4gI2RlZmluZSBtdHlwZV9kZXN0cm95XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZXN0cm95KVxcbiAjZGVmaW5lIG10eXBlX3NhbWVfc2V0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9zYW1lX3NldClcXG4gI2RlZmluZSBtdHlwZV9rYWR0XFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9rYWR0KVxcbiAjZGVmaW5lIG10eXBlX3VhZHRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX3VhZHQpXFxuKyNkZWZpbmUgbXR5cGVfYnVja2V0X3NpemVcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxcbisjZGVmaW5lIG10eXBlX2hhc2hfc2l6ZVxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKVxcbiBcXG4gI2RlZmluZSBtdHlwZV9hZGRcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClcXG4gI2RlZmluZSBtdHlwZV9kZWxcXHRcXHRJUFNFVF9UT0tFTihNVFlQRSwgX2RlbClcXG5AQCAtMjkyLDYgKzI4OSw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgemVyb21hc2sgPSB7fTtcXG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cXG4gc3RydWN0IGh0eXBlIHtcXG4gXFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgX19yY3UgKnJuZXRzW0lQU0VUX05FVF9DT1VOVF07IC8qIGNpZHIgcHJlZml4ZXMgKi9cXG4gXFx0c3RydWN0IGh0YWJsZV9nYyBnYztcXHQvKiBnYyB3b3JrcXVldWUgKi9cXG4gXFx0dTMyIG1heGVsZW07XFx0XFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXFxuIFxcdHUzMiBpbml0dmFsO1xcdFxcdC8qIHJhbmRvbSBqaGFzaCBpbml0IHZhbHVlICovXFxuQEAgLTMwMiw5ICszMDAsNiBAQCBzdHJ1Y3QgaHR5cGUge1xcbiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKVxcbiBcXHR1OCBuZXRtYXNrO1xcdFxcdC8qIG5ldG1hc2sgdmFsdWUgZm9yIHN1Ym5ldHMgdG8gc3RvcmUgKi9cXG4gXFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7XFx0Lyogc3RvcmVzIGJpdG1hc2sgKi9cXG4tI2VuZGlmXFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0c3RydWN0IG5ldF9wcmVmaXhlcyBuZXRzW05MRU5dOyAvKiBib29rLWtlZXBpbmcgb2YgcHJlZml4ZXMgKi9cXG4gI2VuZGlmXFxuIFxcdC8qIEJlY2F1c2UgJ25leHQnIGlzIElQdjQvSVB2NiBkZXBlbmRlbnQsIG5vIGVsZW1lbnRzIG9mIHRoaXNcXG4gXFx0ICogc3RydWN0dXJlIGFuZCByZWZlcnJlZCBpbiBjcmVhdGUoKSBtYXkgY29tZSBhZnRlciAnbmV4dCcuXFxuQEAgLTMyNiw1NSArMzIxLDEwOCBAQCBzdHJ1Y3QgbXR5cGVfcmVzaXplX2FkIHtcXG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxcbiAgKiBzaXplZCBuZXR3b3Jrcy4gY2lkciA9PSByZWFsIGNpZHIgKyAxIHRvIHN1cHBvcnQgLzAuXFxuICAqL1xcbi1zdGF0aWMgdm9pZFxcbitzdGF0aWMgaW50XFxuIG10eXBlX2FkZF9jaWRyKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBjaWRyLCB1OCBuKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuK1xcdG5ldHMgPSBfX2lwc2V0X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXJuZXRzW25dKTtcXG4gXFx0LyogQWRkIGluIGluY3JlYXNpbmcgcHJlZml4IG9yZGVyLCBzbyBsYXJnZXIgY2lkciBmaXJzdCAqL1xcbi1cXHRmb3IgKGkgPSAwLCBqID0gLTE7IGkgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXTsgaSsrKSB7XFxuLVxcdFxcdGlmIChqICE9IC0xKSB7XFxuK1xcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXFx1MDAzYyBuZXRzLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4rXFx0XFx0XFx0bGVuKys7XFxuK1xcdFxcdGlmIChmb3VuZCAhPSAtMSkge1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChoLVxcdTAwM2VuZXRzW2ldLmNpZHJbbl0gXFx1MDAzYyBjaWRyKSB7XFxuLVxcdFxcdFxcdGogPSBpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XFxuLVxcdFxcdFxcdGgtXFx1MDAzZW5ldHNbQ0lEUl9QT1MoY2lkcildLm5ldHNbbl0rKztcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgXFx1MDAzYyBjaWRyKSB7XFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xcbitcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2ldLmNvdW50Kys7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKGogIT0gLTEpIHtcXG4tXFx0XFx0Zm9yICg7IGkgXFx1MDAzZSBqOyBpLS0pXFxuLVxcdFxcdFxcdGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSA9IGgtXFx1MDAzZW5ldHNbaSAtIDFdLmNpZHJbbl07XFxuK1xcdGxlbisrO1xcbitcXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHRtcC1cXHUwMDNlbGVuID0gbGVuO1xcbitcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmIChpID09IGZvdW5kKSB7XFxuK1xcdFxcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gY2lkcjtcXG4rXFx0XFx0XFx0dG1wLVxcdTAwM2VuZXRzW2orK10uY291bnQgPSAxO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyO1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQ7XFxuIFxcdH1cXG4tXFx0aC1cXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcXG4tXFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XFxuK1xcdGlmIChmb3VuZCA9PSAtMSkge1xcbitcXHRcXHR0bXAtXFx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqXS5jb3VudCA9IDE7XFxuK1xcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW25dLCB0bXApO1xcbitcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4gdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWRcXG4gbXR5cGVfZGVsX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxuIHtcXG4tXFx0dTggaSwgaiwgbmV0X2VuZCA9IE5MRU4gLSAxO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xcbitcXHR1OCBpLCBqLCBsZW4gPSAwO1xcbitcXHRpbnQgZm91bmQ7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNldC1cXHUwMDNlbG9jayk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOTEVOOyBpKyspIHtcXG4tXFx0XFx0aWYgKGgtXFx1MDAzZW5ldHNbaV0uY2lkcltuXSAhPSBjaWRyKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xcbi1cXHRcXHRpZiAoaC1cXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2MgbmV0X2VuZCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VuZXRzW2pdLmNpZHJbbl07IGorKylcXG4tXFx0XFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cXHUwMDNlbmV0c1tqICsgMV0uY2lkcltuXTtcXG4tXFx0XFx0aC1cXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gMDtcXG4rXFx0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cXHUwMDNlcm5ldHNbbl0pO1xcbitcXHRmb3IgKGkgPSAwLCBmb3VuZCA9IC0xOyBpIFxcdTAwM2MgbmV0cy1cXHUwMDNlbGVuOyBpKyspIHtcXG4rXFx0XFx0aWYgKG5ldHMtXFx1MDAzZW5ldHNbaV0uY291bnQpXFxuK1xcdFxcdFxcdGxlbisrO1xcbitcXHRcXHRpZiAobmV0cy1cXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXFxuK1xcdFxcdFxcdGZvdW5kID0gaTtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkoZm91bmQgPT0gLTEpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdG5ldHMtXFx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XFxuK1xcdGlmIChuZXRzLVxcdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdGxlbi0tO1xcbitcXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCF0bXApXFxuK1xcdFxcdC8qIExlYXZlIGEgaG9sZSAqL1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHRtcC1cXHUwMDNlbGVuID0gbGVuO1xcbitcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dG1wLVxcdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVxcdTAwM2VuZXRzW2ldLmNpZHI7XFxuK1xcdFxcdHRtcC1cXHUwMDNlbmV0c1tqKytdLmNvdW50ID0gbmV0cy1cXHUwMDNlbmV0c1tpXS5jb3VudDtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cXHUwMDNlcm5ldHNbbl0sIHRtcCk7XFxuK1xcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xcbiB1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzZXQtXFx1MDAzZWxvY2spO1xcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIHZvaWRcXG4rbXR5cGVfZGVsX2NpZHJfYWxsKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBjb25zdCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YSlcXG4re1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGludCBrO1xcbitcXG4rXFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxcbitcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsIERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSwgayk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBtZW1vcnkgc2l6ZSBvZiB0aGUgc2V0IGRhdGEgKi9cXG4gc3RhdGljIHNpemVfdFxcbiBtdHlwZV9haGFzaF9tZW1zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaCwgY29uc3Qgc3RydWN0IGh0YWJsZSAqdClcXG5AQCAtNDAyLDYgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkXFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0cywgKnRtcDtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBodGFibGUgKnQ7XFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgciwgaTtcXG5AQCAtNDI1LDcgKzQ3NiwxOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2VocmVnaW9uW3JdLmxvY2spO1xcbiBcXHR9XFxuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0bWVtc2V0KGgtXFx1MDAzZW5ldHMsIDAsIHNpemVvZihoLVxcdTAwM2VuZXRzKSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVxcdTAwM2VybmV0c1tpXSk7XFxuK1xcdFxcdHRtcCA9IGt6YWxsb2Nfb2JqKCp0bXAsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIXRtcCkge1xcbitcXHRcXHRcXHR1OCBqO1xcbitcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ldHMtXFx1MDAzZWxlbjsgaisrKVxcbitcXHRcXHRcXHRcXHRuZXRzLVxcdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGgtXFx1MDAzZXJuZXRzW2ldLCB0bXApO1xcbitcXHRcXHRcXHRrZnJlZV9yY3UobmV0cywgcmN1KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC00MzMsNiArNDk2LDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxcbiBzdGF0aWMgdm9pZFxcbiBtdHlwZV9haGFzaF9kZXN0cm95KHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0YWJsZSAqdCwgYm9vbCBleHRfZGVzdHJveSlcXG4ge1xcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBoYnVja2V0ICpuO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTQ0Niw2ICs1MTIsMTEgQEAgbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXFxuIFxcdFxcdGtmcmVlKG4pO1xcbiBcXHR9XFxuIFxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdGlmIChleHRfZGVzdHJveSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbitcXHRcXHRcXHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXFx1MDAzZXJuZXRzW2ldKSk7XFxuKyNlbmRpZlxcbiBcXHRpcF9zZXRfZnJlZSh0LVxcdTAwM2VocmVnaW9uKTtcXG4gXFx0aXBfc2V0X2ZyZWUodCk7XFxuIH1cXG5AQCAtNDkzLDkgKzU2NCw2IEBAIG10eXBlX2djX2RvKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCBzdHJ1Y3QgaHRhYmxlICp0LCB1MzIgcilcXG4gXFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XFxuIFxcdHUzMiBpLCBqLCBkO1xcbiBcXHRzaXplX3QgZHNpemUgPSBzZXQtXFx1MDAzZWRzaXplO1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdHU4IGs7XFxuLSNlbmRpZlxcbiBcXHR1OCBwb3MsIGh0YWJsZV9iaXRzID0gdC1cXHUwMDNlaHRhYmxlX2JpdHM7XFxuIFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnQtXFx1MDAzZWhyZWdpb25bcl0ubG9jayk7XFxuQEAgLTUxNiwxMiArNTg0LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZXhwaXJlZCAldS8ldVxcXFxuXFxcIiwgaSwgaik7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdChqLCBuLVxcdTAwM2V1c2VkKTtcXG4gXFx0XFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbi1cXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBrKyspXFxuLVxcdFxcdFxcdFxcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcXG4tXFx0XFx0XFx0XFx0XFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVxcdTAwM2VjaWRyLCBrKSksXFxuLVxcdFxcdFxcdFxcdFxcdGspO1xcbi0jZW5kaWZcXG4rXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7XFxuIFxcdFxcdFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMtLTtcXG4gXFx0XFx0XFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XFxuIFxcdFxcdFxcdGQrKztcXG5AQCAtOTQ3LDEyICsxMDEwLDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdFxcdGogPSAwO1xcbiBcXHRcXHRkYXRhID0gYWhhc2hfZGF0YShuLCBqLCBzZXQtXFx1MDAzZWRzaXplKTtcXG4gXFx0XFx0aWYgKCFkZWxldGVkKSB7XFxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbi1cXHRcXHRcXHRcXHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXFxuLVxcdFxcdFxcdFxcdFxcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cXHUwMDNlY2lkciwgaSkpLFxcbi1cXHRcXHRcXHRcXHRcXHRpKTtcXG4tI2VuZGlmXFxuK1xcdFxcdFxcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xcbiBcXHRcXHRcXHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcXG4gXFx0XFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbiBcXHRcXHR9XFxuQEAgLTk5Niw3ICsxMDU0LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdHQtXFx1MDAzZWhyZWdpb25bcl0uZWxlbWVudHMrKztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXFxuLVxcdFxcdG10eXBlX2FkZF9jaWRyKHNldCwgaCwgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSksIGkpO1xcbitcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoZGF0YSwgZCwgc2l6ZW9mKHN0cnVjdCBtdHlwZV9lbGVtKSk7XFxuIG92ZXJ3cml0ZV9leHRlbnNpb25zOlxcbkBAIC0xMTA3LDExICsxMTY1LDcgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXFxuIFxcdFxcdGlmIChpICsgMSA9PSBwb3MpXFxuIFxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuLVxcdTAwM2Vwb3MsIC0tcG9zKTtcXG4gXFx0XFx0dC1cXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuLVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcXG4tXFx0XFx0XFx0bXR5cGVfZGVsX2NpZHIoc2V0LCBoLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBqKSksIGopO1xcbi0jZW5kaWZcXG4rXFx0XFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZCk7XFxuIFxcdFxcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xcbiBcXG4gXFx0XFx0aWYgKHQtXFx1MDAzZXJlc2l6aW5nIFxcdTAwMjZcXHUwMDI2IGV4dCBcXHUwMDI2XFx1MDAyNiBleHQtXFx1MDAzZXRhcmdldCkge1xcbkBAIC0xMTkzLDI4ICsxMjQ3LDM3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBodGFibGUgKnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbitcXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzMDtcXG4gXFx0c3RydWN0IGhidWNrZXQgKm47XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4rXFx0c3RydWN0IG5ldF9wcmVmaXhlcyAqbmV0czE7XFxuIFxcdHN0cnVjdCBtdHlwZV9lbGVtIG9yaWcgPSAqZDtcXG4tXFx0aW50IHJldCwgaSwgaiA9IDAsIGs7XFxuK1xcdGludCByZXQsIGksIGosIGs7XFxuICNlbHNlXFxuLVxcdGludCByZXQsIGksIGogPSAwO1xcbitcXHRpbnQgcmV0LCBpLCBqO1xcbiAjZW5kaWZcXG4gXFx0dTMyIGtleSwgbXVsdGkgPSAwO1xcbiBcXHR1OCBwb3M7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwidGVzdCBieSBuZXRzXFxcXG5cXFwiKTtcXG4tXFx0Zm9yICg7IGogXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNbal0uY2lkclswXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7IGorKykge1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzBdKTtcXG4rI2lmIElQU0VUX05FVF9DT1VOVCA9PSAyXFxuK1xcdG5ldHMxID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXFx1MDAzZXJuZXRzWzFdKTtcXG4rI2VuZGlmXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuZXRzMC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaisrKSB7XFxuK1xcdFxcdGlmICghbmV0czAtXFx1MDAzZW5ldHNbal0uY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcXG4gXFx0XFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFxcdTAwMjZvcmlnKTtcXG4tXFx0XFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVxcdTAwM2VuZXRzW2pdLmNpZHJbMF0pLCBmYWxzZSk7XFxuLVxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBOTEVOIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5ldHNba10uY2lkclsxXSBcXHUwMDI2XFx1MDAyNiAhbXVsdGk7XFxuLVxcdFxcdCAgICAgaysrKSB7XFxuLVxcdFxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1trXS5jaWRyWzFdKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdHJ1ZSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyLCBmYWxzZSk7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuZXRzMS1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2ICFtdWx0aTsgaysrKSB7XFxuK1xcdFxcdFxcdGlmICghbmV0czEtXFx1MDAzZW5ldHNba10uY291bnQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czEtXFx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XFxuICNlbHNlXFxuLVxcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSk7XFxuK1xcdFxcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBuZXRzMC1cXHUwMDNlbmV0c1tqXS5jaWRyKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGtleSA9IEhLRVkoZCwgaC1cXHUwMDNlaW5pdHZhbCwgdC1cXHUwMDNlaHRhYmxlX2JpdHMpO1xcbiBcXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XFxuQEAgLTEyMjksNyArMTI5Miw3IEBAIG10eXBlX3Rlc3RfY2lkcnMoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbXR5cGVfZWxlbSAqZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJldCA9IG10eXBlX2RhdGFfbWF0Y2goZGF0YSwgZXh0LCBtZXh0LCBzZXQsIGZsYWdzKTtcXG4gXFx0XFx0XFx0aWYgKHJldCAhPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTVVMVElcXG4gXFx0XFx0XFx0LyogTm8gbWF0Y2gsIHJlc2V0IG11bHRpcGxlIG1hdGNoIGZsYWcgKi9cXG4gXFx0XFx0XFx0bXVsdGkgPSAwO1xcbkBAIC0xMjM5LDcgKzEzMDIsMTAgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxcbiBcXHRcXHR9XFxuICNlbmRpZlxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXQgPSAwO1xcbit1bmxvY2s6XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMTI5NCw2ICsxMzYwLDI0IEBAIG10eXBlX3Rlc3Qoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBtdHlwZV9oYXNoX3NpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBodGFibGUgKnQ7XFxuK1xcdHU4IGh0YWJsZV9iaXRzO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR0ID0gcmN1X2RlcmVmZXJlbmNlKGgtXFx1MDAzZXRhYmxlKTtcXG4rXFx0aHRhYmxlX2JpdHMgPSB0LVxcdTAwM2VodGFibGVfYml0cztcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gamhhc2hfc2l6ZShodGFibGVfYml0cyk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgbXR5cGVfYnVja2V0X3NpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoKVxcbit7XFxuK1xcdHJldHVybiBoLVxcdTAwM2VidWNrZXRzaXplO1xcbit9XFxuK1xcbiAvKiBSZXBseSBhIEhFQURFUiByZXF1ZXN0OiBmaWxsIG91dCB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIHNldCAqL1xcbiBzdGF0aWMgaW50XFxuIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xMzA0LDIxICsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzaXplX3QgbWVtc2l6ZTtcXG4gXFx0dTMyIGVsZW1lbnRzID0gMDtcXG4gXFx0c2l6ZV90IGV4dF9zaXplID0gMDtcXG4tXFx0dTggaHRhYmxlX2JpdHM7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIFxcdHQgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cXHUwMDNldGFibGUpO1xcbiBcXHRtdHlwZV9leHRfc2l6ZShzZXQsIFxcdTAwMjZlbGVtZW50cywgXFx1MDAyNmV4dF9zaXplKTtcXG4tXFx0bWVtc2l6ZSA9IG10eXBlX2FoYXNoX21lbXNpemUoaCwgdCkgKyBleHRfc2l6ZSArIHNldC1cXHUwMDNlZXh0X3NpemU7XFxuLVxcdGh0YWJsZV9iaXRzID0gdC1cXHUwMDNlaHRhYmxlX2JpdHM7XFxuK1xcdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICsgZXh0X3NpemUgKyBhdG9taWM2NF9yZWFkKFxcdTAwMjZzZXQtXFx1MDAzZWV4dF9zaXplKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XFxuIFxcbiBcXHRuZXN0ZWQgPSBubGFfbmVzdF9zdGFydChza2IsIElQU0VUX0FUVFJfREFUQSk7XFxuIFxcdGlmICghbmVzdGVkKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tXFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0hBU0hTSVpFLFxcbi1cXHRcXHRcXHQgIGh0b25sKGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpKSkgfHxcXG4tXFx0ICAgIG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX01BWEVMRU0sIGh0b25sKGgtXFx1MDAzZW1heGVsZW0pKSlcXG4rXFxuK1xcdGlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9IQVNIU0laRSwgaHRvbmwobXR5cGVfaGFzaF9zaXplKGgpKSkpXFxuK1xcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC1cXHUwMDNlbWF4ZWxlbSkpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTS1xcbiBcXHQvKiBpZiBuZXRtYXNrIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIEhPU1RfTUFTSyB3ZSBrbm93IHRoYXQgdGhlIHVzZXIgc3VwcGxpZWQgbmV0bWFza1xcbkBAIC0xMzQyLDggKzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuICNlbmRpZlxcbiBcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQU0VUX0NSRUFURV9GTEFHX0JVQ0tFVFNJWkUpIHtcXG4tXFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJUFNFVF9BVFRSX0JVQ0tFVFNJWkUsIGgtXFx1MDAzZWJ1Y2tldHNpemUpIHx8XFxuLVxcdFxcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVxcdTAwM2Vpbml0dmFsKSkpXFxuK1xcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBtdHlwZV9idWNrZXRfc2l6ZShoKSkpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXHRcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSU5JVFZBTCwgaHRvbmwoaC1cXHUwMDNlaW5pdHZhbCkpKVxcbiBcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFx0fVxcbiBcXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywgaHRvbmwoc2V0LVxcdTAwM2VyZWYpKSB8fFxcbkBAIC0xNTA0LDYgKzE1ODgsOSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xcbiBcXHR1OCBuZXRtYXNrID0gc2V0LVxcdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciBiaXRtYXNrID0gb25lc21hc2s7XFxuKyNlbmRpZlxcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXFxuK1xcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XFxuICNlbmRpZlxcbiBcXHRzaXplX3QgaHNpemU7XFxuIFxcdHN0cnVjdCBodHlwZSAqaDtcXG5AQCAtMTYwNCwyMSArMTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdCAqL1xcbiBcXHRoYml0cyA9IGZscyhoYXNoc2l6ZSAtIDEpO1xcbiBcXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcXG4tXFx0aWYgKGhzaXplID09IDApIHtcXG4tXFx0XFx0a2ZyZWUoaCk7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuK1xcdGlmIChoc2l6ZSA9PSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dCA9IGlwX3NldF9hbGxvYyhoc2l6ZSk7XFxuLVxcdGlmICghdCkge1xcbi1cXHRcXHRrZnJlZShoKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFx0aWYgKCF0KVxcbitcXHRcXHRnb3RvIGZyZWVfaDtcXG4gXFx0dC1cXHUwMDNlaHJlZ2lvbiA9IGlwX3NldF9hbGxvYyhhaGFzaF9zaXplb2ZfcmVnaW9ucyhoYml0cykpO1xcbi1cXHRpZiAoIXQtXFx1MDAzZWhyZWdpb24pIHtcXG4tXFx0XFx0aXBfc2V0X2ZyZWUodCk7XFxuLVxcdFxcdGtmcmVlKGgpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0LVxcdTAwM2VocmVnaW9uKVxcbitcXHRcXHRnb3RvIGZyZWVfdDtcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcXG4rXFx0XFx0aWYgKCFuZXRzKSB7XFxuK1xcdFxcdFxcdHdoaWxlIChpIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhoLVxcdTAwM2VybmV0c1stLWldKSk7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9ocmVnaW9uO1xcbitcXHRcXHR9XFxuK1xcdFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNlcm5ldHNbaV0sIG5ldHMpO1xcbiBcXHR9XFxuKyNlbmRpZlxcbiBcXHRoLVxcdTAwM2VnYy5zZXQgPSBzZXQ7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZoLVxcdTAwM2VnYy5sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFoYXNoX251bW9mX2xvY2tzKGhiaXRzKTsgaSsrKVxcbkBAIC0xNjUwLDYgKzE3NDEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0LVxcdTAwM2VhZCk7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIoaC1cXHUwMDNldGFibGUsIHQpO1xcbiBcXHRzZXQtXFx1MDAzZWRhdGEgPSBoO1xcbitcXG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcXG4gXFx0aWYgKHNldC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbiAjZW5kaWZcXG5AQCAtMTY3OCwxMCArMTc3MCwyMCBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCJjcmVhdGUgJXMgaGFzaHNpemUgJXUgKCV1KSBtYXhlbGVtICV1OiAlcCglcClcXFxcblxcXCIsXFxuLVxcdFxcdCBzZXQtXFx1MDAzZW5hbWUsIGpoYXNoX3NpemUodC1cXHUwMDNlaHRhYmxlX2JpdHMpLFxcbitcXHRcXHQgc2V0LVxcdTAwM2VuYW1lLCBtdHlwZV9oYXNoX3NpemUoaCksXFxuIFxcdFxcdCB0LVxcdTAwM2VodGFibGVfYml0cywgaC1cXHUwMDNlbWF4ZWxlbSwgc2V0LVxcdTAwM2VkYXRhLCB0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xcbitmcmVlX2hyZWdpb246XFxuK1xcdGlwX3NldF9mcmVlKHQtXFx1MDAzZWhyZWdpb24pO1xcbisjZW5kaWZcXG4rZnJlZV90OlxcbitcXHRpcF9zZXRfZnJlZSh0KTtcXG4rZnJlZV9oOlxcbitcXHRrZnJlZShoKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcXG5pbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXFxuQEAgLTEzOCw3ICsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zOTgsNyArMzk4LDcgQEAgaGFzaF9pcHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG5pbmRleCBjZTBhOWNlNWE5MWYxLi4wOTJmM2M5MjgxYjgwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBoYXNoX25ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNvbnN0IHN0cnVjdCBoYXNoX25ldDQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0yOTEsNyArMjkxLDcgQEAgaGFzaF9uZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVxcdTAwM2VkYXRhO1xcbiBcXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYWR0W2FkdF07XFxuIFxcdHN0cnVjdCBoYXNoX25ldDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXFxuaW5kZXggMzBhNjU1ZTVjNGZkYy4uYjQ0Yjk1Zjc2NmI3YSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcXG5AQCAtMTYxLDcgKzE2MSw3IEBAIGhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gZSA9IHtcXG4tXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxcbitcXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcXG4gXFx0XFx0LmVsZW0gPSAxLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbkBAIC0zODIsNyArMzgyLDcgQEAgaGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldGlmYWNlNiAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHRcXHQuZWxlbSA9IDEsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXFxuaW5kZXggOGZiZTY0OWM5ZGQzZC4uZjdjOGExY2MzMGZjNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xcbkBAIC0xNDksOCArMTQ5LDEwIEBAIGhhc2hfbmV0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcXG4gXFxuQEAgLTM4OCw4ICszOTAsMTAgQEAgaGFzaF9uZXRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZih1OCkgKiA4KSkgfCBIT1NUX01BU0s7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuaW5kZXggZDFhMDYyOGRmNGVmMy4uNWRlNGI1MTFkZTc2MyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBoYXNoX25ldHBvcnQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXRwb3J0NCAqaCA9IHNldC1cXHUwMDNlZGF0YTtcXG4gXFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWFkdFthZHRdO1xcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtIGUgPSB7XFxuLVxcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcXG4rXFx0XFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbkBAIC0zNTMsNyArMzUzLDcgQEAgaGFzaF9uZXRwb3J0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2VhZHRbYWR0XTtcXG4gXFx0c3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBlID0ge1xcbi1cXHRcXHQuY2lkciA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXFxuK1xcdFxcdC5jaWRyID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbmluZGV4IGJmNGY5MWI3OGUxZGMuLjYyOTE1MzJiZTdhNWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xcbkBAIC0xNTcsOCArMTU3LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcXG4gXFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcXG4gXFxuLVxcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XFxuLVxcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4rXFx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spO1xcbitcXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlcm5ldHNbMV0sIEhPU1RfTUFTSyk7XFxuK1xcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiBcXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXFxuIFxcdFxcdGUuY2NtcCA9IChIT1NUX01BU0sgXFx1MDAzY1xcdTAwM2MgKHNpemVvZihlLmNpZHJbMF0pICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5AQCAtNDUyLDggKzQ1NCwxMCBAQCBoYXNoX25ldHBvcnRuZXQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XFxuIFxcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XFxuIFxcbi1cXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xcbi1cXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuK1xcdGUuY2lkclswXSA9IElOSVRfQ0lEUihoLVxcdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcXG4rXFx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXFx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xcbitcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gXFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxcbiBcXHRcXHRlLmNjbXAgPSAoSE9TVF9NQVNLIFxcdTAwM2NcXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG5pbmRleCAxY2VmODRmMTVlOGM3Li5jYTNlZjk0NzllODM4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jXFxuQEAgLTQyMSw3ICs0MjEsNyBAQCBsaXN0X3NldF9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuLCBcXHUwMDI2bWFwLVxcdTAwM2VtZW1iZXJzLCBsaXN0KVxcbiBcXHRcXHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcXG4gXFx0c2V0LVxcdTAwM2VlbGVtZW50cyA9IDA7XFxuLVxcdHNldC1cXHUwMDNlZXh0X3NpemUgPSAwO1xcbitcXHRhdG9taWM2NF9zZXQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZFxcbkBAIC00NTUsNyArNDU1LDcgQEAgbGlzdF9zZXRfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAgPSBzZXQtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcXG4tXFx0c2l6ZV90IG1lbXNpemUgPSBsaXN0X3NldF9tZW1zaXplKG1hcCwgc2V0LVxcdTAwM2Vkc2l6ZSkgKyBzZXQtXFx1MDAzZWV4dF9zaXplO1xcbitcXHRzaXplX3QgbWVtc2l6ZSA9IGxpc3Rfc2V0X21lbXNpemUobWFwLCBzZXQtXFx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXFx1MDAyNnNldC1cXHUwMDNlZXh0X3NpemUpO1xcbiBcXG4gXFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xcbiBcXHRpZiAoIW5lc3RlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuNzMwODE3MzA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI2Nzc1MzIxOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSVBfU0VUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9JUFBPUlRORVRcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUSUZBQ0VcIixcbiAgICBcIklQX1NFVF9IQVNIX05FVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0xJU1RfU0VUXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX0lQTUFDXCIsXG4gICAgXCJJUF9TRVRfQklUTUFQX1BPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9zZXRfY3JlYXRlXCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveVwiLFxuICAgIFwiaXBfc2V0X2ZsdXNoXCIsXG4gICAgXCJpcF9zZXRfdWFkZFwiLFxuICAgIFwiaXBfc2V0X3VkZWxcIixcbiAgICBcImlwX3NldF91dGVzdFwiLFxuICAgIFwiaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtcIixcbiAgICBcImlwX3NldF9pbml0X2NvbW1lbnRcIixcbiAgICBcImlwX3NldF9jb21tZW50X2ZyZWVcIixcbiAgICBcImhhc2hfbmV0NF9hZGRcIixcbiAgICBcImhhc2hfbmV0NF9kZWxcIixcbiAgICBcImhhc2hfbmV0NF90ZXN0XCIsXG4gICAgXCJoYXNoX25ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRuZXQ0X2thZHRcIixcbiAgICBcImhhc2hfbmV0cG9ydDRfa2FkdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQIHNldCBkZXN0cnVjdGlvbiBsb2dpYyB0byB1c2UgYSB3b3JrcXVldWUgaW5zdGVhZCBvZiBSQ1UgZGlyZWN0bHksIGNoYW5nZXMgdGhlIGV4dGVuc2lvbiBzaXplIHRyYWNraW5nIHRvIHVzZSBhdG9taWM2NF90LCBhbmQgcmVmYWN0b3JzIHRoZSBDSURSIHByZWZpeCB0cmFja2luZyBpbiBoYXNoIHNldHMgdG8gdXNlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheXMgYW5kIFJDVS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIElQIHNldCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3Qgc2V0IGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgZWxlbWVudCBhZGRpdGlvbi9kZWxldGlvbiwgYW5kIG1hdGNoaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjllM2MxZDZjNjcxNTVmMmQ4NTVmZWY4OWY5NGRhYTA2YzMxYzFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzozNjo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbmluZGV4IGI5ODMzMTU3MmFkMjkuLmM0Njg2NGNjNjYyMzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmhcbkBAIC0yNDQsOCArMjQ0LDggQEAgZXh0ZXJuIHZvaWQgaXBfc2V0X3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgaXBfc2V0X3R5cGUgKnNldF90eXBlKTtcbiBcbiAvKiBBIGdlbmVyaWMgSVAgc2V0ICovXG4gc3RydWN0IGlwX3NldCB7XG4tXHQvKiBGb3IgY2FsbF9jcnUgaW4gZGVzdHJveSAqL1xuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbitcdC8qIGZvciBzZXQgZGVzdHJ1Y3Rpb24gKi9cbitcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiBcdC8qIFRoZSBuYW1lIG9mIHRoZSBzZXQgKi9cbiBcdGNoYXIgbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTtcbiBcdC8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi9cbkBAIC0yNzMsNyArMjczLDcgQEAgc3RydWN0IGlwX3NldCB7XG4gXHQvKiBOdW1iZXIgb2YgZWxlbWVudHMgKHZzIHRpbWVvdXQpICovXG4gXHR1MzIgZWxlbWVudHM7XG4gXHQvKiBTaXplIG9mIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMgKHZzIHRpbWVvdXQpICovXG4tXHRzaXplX3QgZXh0X3NpemU7XG4rXHRhdG9taWM2NF90IGV4dF9zaXplO1xuIFx0LyogRWxlbWVudCBkYXRhIHNpemUgKi9cbiBcdHNpemVfdCBkc2l6ZTtcbiBcdC8qIE9mZnNldHMgdG8gZXh0ZW5zaW9ucyBpbiBlbGVtZW50cyAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuaW5kZXggYmI5YjViZWQxMGUxOS4uMjI2ZmRmMTdiNjgzMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oXG5AQCAtNzcsNyArNzcsNyBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gXHRcdG10eXBlX2V4dF9jbGVhbnVwKHNldCk7XG4gXHRiaXRtYXBfemVybyhtYXAtXHUwMDNlbWVtYmVycywgbWFwLVx1MDAzZWVsZW1lbnRzKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuK1x0YXRvbWljNjRfc2V0KFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSwgMCk7XG4gfVxuIFxuIC8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIG1lbW9yeSBzaXplIG9mIHRoZSBzZXQgZGF0YSAqL1xuQEAgLTkzLDcgKzkzLDcgQEAgbXR5cGVfaGVhZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBubGF0dHIgKm5lc3RlZDtcbi1cdHNpemVfdCBtZW1zaXplID0gbXR5cGVfbWVtc2l6ZShtYXAsIHNldC1cdTAwM2Vkc2l6ZSkgKyBzZXQtXHUwMDNlZXh0X3NpemU7XG4rXHRzaXplX3QgbWVtc2l6ZSA9IG10eXBlX21lbXNpemUobWFwLCBzZXQtXHUwMDNlZHNpemUpICsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFxuIFx0bmVzdGVkID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJUFNFVF9BVFRSX0RBVEEpO1xuIFx0aWYgKCFuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5pbmRleCA2Y2ZhZDE1MmQ3ZDFiLi41NDM4NTFhOTIzZDBmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0yNSw2ICsyNSw3IEBAXG4gc3RhdGljIExJU1RfSEVBRChpcF9zZXRfdHlwZV9saXN0KTtcdFx0LyogYWxsIHJlZ2lzdGVyZWQgc2V0IHR5cGVzICovXG4gc3RhdGljIERFRklORV9NVVRFWChpcF9zZXRfdHlwZV9tdXRleCk7XHRcdC8qIHByb3RlY3RzIGlwX3NldF90eXBlX2xpc3QgKi9cbiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcF9zZXRfcmVmX2xvY2spO1x0XHQvKiBwcm90ZWN0cyB0aGUgc2V0IHJlZnMgKi9cbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwc2V0X2Rlc3Ryb3lfd3E7XG4gXG4gc3RydWN0IGlwX3NldF9uZXQge1xuIFx0c3RydWN0IGlwX3NldCAqIF9fcmN1ICppcF9zZXRfbGlzdDtcdC8qIGFsbCBpbmRpdmlkdWFsIHNldHMgKi9cbkBAIC0zNTAsNyArMzUxLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdHNpemVfdCBsZW4gPSBleHQtXHUwMDNlY29tbWVudCA/IHN0cmxlbihleHQtXHUwMDNlY29tbWVudCkgOiAwO1xuIFxuIFx0aWYgKHVubGlrZWx5KGMpKSB7XG4tXHRcdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRcdGF0b21pYzY0X3N1YihzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDEsIFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjb21tZW50LVx1MDAzZWMsIE5VTEwpO1xuIFx0XHRrZnJlZV9yY3UoYywgcmN1KTtcbiBcdH1cbkBAIC0zNjIsNyArMzYzLDcgQEAgaXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbiBcdHN0cnNjcHkoYy1cdTAwM2VzdHIsIGV4dC1cdTAwM2Vjb21tZW50LCBsZW4gKyAxKTtcbi1cdHNldC1cdTAwM2VleHRfc2l6ZSArPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRhdG9taWM2NF9hZGQoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVx1MDAzZXN0cikgKyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9pbml0X2NvbW1lbnQpO1xuQEAgLTM5Miw3ICszOTMsNyBAQCBpcF9zZXRfY29tbWVudF9mcmVlKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqcHRyKVxuIFx0YyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY29tbWVudC1cdTAwM2VjLCAxKTtcbiBcdGlmICh1bmxpa2VseSghYykpXG4gXHRcdHJldHVybjtcbi1cdHNldC1cdTAwM2VleHRfc2l6ZSAtPSBzaXplb2YoKmMpICsgc3RybGVuKGMtXHUwMDNlc3RyKSArIDE7XG4rXHRhdG9taWM2NF9zdWIoc2l6ZW9mKCpjKSArIHN0cmxlbihjLVx1MDAzZXN0cikgKyAxLCBcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbW1lbnQtXHUwMDNlYywgTlVMTCk7XG4gXHRrZnJlZV9yY3UoYywgcmN1KTtcbiB9XG5AQCAtMTE3OCwyMiArMTE3OSwyNiBAQCBpcF9zZXRfc2V0bmFtZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XG4gXHRcdFx0XHQgICAgLmxlbiA9IElQU0VUX01BWE5BTUVMRU4gLSAxIH0sXG4gfTtcbiBcbi0vKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LCBpdCBpcyBzcGxpdFxuLSAqIGludG8gdHdvIHN0YWdlczpcbi0gKiAtIENhbmNlbCBnYXJiYWdlIGNvbGxlY3RvclxuLSAqIC0gRGVzdHJveSB0aGUgc2V0IGl0c2VsZiB2aWEgY2FsbF9yY3UoKVxuLSAqL1xuLVxuIHN0YXRpYyB2b2lkXG4taXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4rZGVzdHJveV9hbmRfZnJlZV9zZXQoc3RydWN0IGlwX3NldCAqc2V0KVxuIHtcbi1cdHN0cnVjdCBpcF9zZXQgKnNldCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaXBfc2V0LCByY3UpO1xuLVxuIFx0c2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlZGVzdHJveShzZXQpO1xuIFx0bW9kdWxlX3B1dChzZXQtXHUwMDNldHlwZS1cdTAwM2VtZSk7XG4gXHRrZnJlZShzZXQpO1xuIH1cbiBcbisvKiBJbiBvcmRlciB0byByZXR1cm4gcXVpY2tseSB3aGVuIGRlc3Ryb3lpbmcgYSBzaW5nbGUgc2V0LFxuKyAqIGRlc3RydWN0aW9uIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgdmlhIHdvcmsgcXVldWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkXG4raXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBpcF9zZXQgKnNldCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfc2V0LCByd29yayk7XG4rXG4rXHRkZXN0cm95X2FuZF9mcmVlX3NldChzZXQpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIF9kZXN0cm95X2FsbF9zZXRzKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0KVxuIHtcbkBAIC0xMjgzLDcgKzEyODgsOCBAQCBzdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0LyogTXVzdCB3YWl0IGZvciBmbHVzaCB0byBiZSByZWFsbHkgZmluaXNoZWQgICovXG4gXHRcdFx0cmN1X2JhcnJpZXIoKTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZzLVx1MDAzZXJjdSwgaXBfc2V0X2Rlc3Ryb3lfc2V0X3JjdSk7XG4rXHRcdElOSVRfUkNVX1dPUksoXHUwMDI2cy1cdTAwM2Vyd29yaywgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmspO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhpcHNldF9kZXN0cm95X3dxLCBcdTAwMjZzLVx1MDAzZXJ3b3JrKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIG91dDpcbkBAIC0yNDIxLDE4ICsyNDI3LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfc2V0X25ldF9vcHMgPSB7XG4gc3RhdGljIGludCBfX2luaXRcbiBpcF9zZXRfaW5pdCh2b2lkKVxuIHtcbi1cdGludCByZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbitcdGludCByZXQ7XG4rXG4rXHRpcHNldF9kZXN0cm95X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJpcHNldF9kZXN0cm95X3dxXCIsIDApO1xuK1x0aWYgKCFpcHNldF9kZXN0cm95X3dxKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJpcF9zZXQ6IGNhbm5vdCByZWdpc3RlciBwZXJuZXRfc3Vic3lzLlxcblwiKTtcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfd3E7XG4gXHR9XG4gXG4gXHRyZXQgPSBuZm5ldGxpbmtfc3Vic3lzX3JlZ2lzdGVyKFx1MDAyNmlwX3NldF9uZXRsaW5rX3N1YnN5cyk7XG4gXHRpZiAocmV0ICE9IDApIHtcbiBcdFx0cHJfZXJyKFwiaXBfc2V0OiBjYW5ub3QgcmVnaXN0ZXIgd2l0aCBuZm5ldGxpbmsuXFxuXCIpO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIG91dF93cTtcbiBcdH1cbiBcbiBcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXHUwMDI2c29fc2V0KTtcbkBAIC0yNDQwLDEwICsyNDUxLDEzIEBAIGlwX3NldF9pbml0KHZvaWQpXG4gXHRcdHByX2VycihcIlNPX1NFVCByZWdpc3RyeSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXHRcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0XHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBfc2V0X25ldF9vcHMpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIG91dF93cTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuK291dF93cTpcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19leGl0XG5AQCAtMjQ1Myw5ICsyNDY3LDcgQEAgaXBfc2V0X2Zpbmkodm9pZClcbiBcdG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihcdTAwMjZpcF9zZXRfbmV0bGlua19zdWJzeXMpO1xuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwX3NldF9uZXRfb3BzKTtcbiBcbi1cdC8qIFdhaXQgZm9yIGNhbGxfcmN1KCkgaW4gZGVzdHJveSAqL1xuLVx0cmN1X2JhcnJpZXIoKTtcbi1cbitcdGRlc3Ryb3lfd29ya3F1ZXVlKGlwc2V0X2Rlc3Ryb3lfd3EpO1xuIFx0cHJfZGVidWcoXCJ0aGVzZSBhcmUgdGhlIGZhbW91cyBsYXN0IHdvcmRzXFxuXCIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxuaW5kZXggYjJkNzc5NzMyNzJkMi4uZjAwYzgyYWNkN2YwNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC05OSw5ICs5OSwxNSBAQCBzdHJ1Y3QgaHRhYmxlIHtcbiAjZW5kaWZcbiBcbiAvKiBCb29rLWtlZXBpbmcgb2YgdGhlIHByZWZpeGVzIGFkZGVkIHRvIHRoZSBzZXQgKi9cbitzdHJ1Y3QgbmV0X3ByZWZpeCB7XG4rXHR1OCBjaWRyO1x0XHRcdC8qIHRoZSBjaWRyIHZhbHVlICovXG4rXHR1MzIgY291bnQ7XHRcdFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoaXMgY2lkciAqL1xuK307XG4rXG4gc3RydWN0IG5ldF9wcmVmaXhlcyB7XG4tXHR1MzIgbmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgY2lkciAqL1xuLVx0dTggY2lkcltJUFNFVF9ORVRfQ09VTlRdOyAgLyogdGhlIGNpZHIgdmFsdWUgKi9cbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHR1OCBsZW47XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeCBuZXRzW10gX19jb3VudGVkX2J5KGxlbik7XG4gfTtcbiBcbiAvKiBDb21wdXRlIHRoZSBoYXNoIHRhYmxlIHNpemUgKi9cbkBAIC0xMjcsMTEgKzEzMyw2IEBAIGh0YWJsZV9zaXplKHU4IGhiaXRzKVxuICNlbHNlXG4gI2RlZmluZSBfX0NJRFIoY2lkciwgaSlcdFx0KGNpZHIpXG4gI2VuZGlmXG4tXG4tLyogY2lkciArIDEgaXMgc3RvcmVkIGluIG5ldF9wcmVmaXhlcyB0byBzdXBwb3J0IC8wICovXG4tI2RlZmluZSBOQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSArIDEpXG4tI2RlZmluZSBOQ0lEUl9HRVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG4tXG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU19QQUNLRURcbiAvKiBXaGVuIGNpZHIgaXMgcGFja2VkIHdpdGggbm9tYXRjaCwgY2lkciAtIDEgaXMgc3RvcmVkIGluIHRoZSBkYXRhIGVudHJ5ICovXG4gI2RlZmluZSBEQ0lEUl9QVVQoY2lkcilcdFx0KChjaWRyKSAtIDEpXG5AQCAtMTQxLDIxICsxNDIsMTEgQEAgaHRhYmxlX3NpemUodTggaGJpdHMpXG4gI2RlZmluZSBEQ0lEUl9HRVQoY2lkciwgaSlcdF9fQ0lEUihjaWRyLCBpKVxuICNlbmRpZlxuIFxuLSNkZWZpbmUgSU5JVF9DSURSKGNpZHIsIGhvc3RfbWFzaylcdFxcXG4tXHREQ0lEUl9QVVQoKChjaWRyKSA/IE5DSURSX0dFVChjaWRyKSA6IGhvc3RfbWFzaykpXG4tXG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUMFxuLS8qIGNpZHIgZnJvbSAwIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0KEhPU1RfTUFTSyArIDEpXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMSlcbi0jZWxzZVxuLS8qIGNpZHIgZnJvbSAxIHRvIEhPU1RfTUFTSyB2YWx1ZSBhbmQgYyA9IGNpZHIgKyAxICovXG4tI2RlZmluZSBOTEVOXHRcdFx0SE9TVF9NQVNLXG4tI2RlZmluZSBDSURSX1BPUyhjKVx0XHQoKGMpIC0gMilcbi0jZW5kaWZcbisjZGVmaW5lIElOSVRfQ0lEUihuLCBob3N0X21hc2spICh7XHRcdFx0XHRcXFxuK1x0Y29uc3Qgc3RydWN0IG5ldF9wcmVmaXhlcyAqX19uID0gcmN1X2RlcmVmZXJlbmNlKG4pO1x0XHRcXFxuK1x0RENJRFJfUFVUKChfX24pLVx1MDAzZWxlbiA/IChfX24pLVx1MDAzZW5ldHNbMF0uY2lkciA6IGhvc3RfbWFzayk7XFxcbit9KVxuIFxuLSNlbHNlXG4tI2RlZmluZSBOTEVOXHRcdFx0MFxuICNlbmRpZiAvKiBJUF9TRVRfSEFTSF9XSVRIX05FVFMgKi9cbiBcbiAjZGVmaW5lIFNFVF9FTEVNX0VYUElSRUQoc2V0LCBkKVx0XFxcbkBAIC0yMDQsMTIgKzE5NSwxNSBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXG4gI3VuZGVmIG10eXBlX2FkZF9jaWRyXG4gI3VuZGVmIG10eXBlX2RlbF9jaWRyXG4rI3VuZGVmIG10eXBlX2RlbF9jaWRyX2FsbFxuICN1bmRlZiBtdHlwZV9haGFzaF9tZW1zaXplXG4gI3VuZGVmIG10eXBlX2ZsdXNoXG4gI3VuZGVmIG10eXBlX2Rlc3Ryb3lcbiAjdW5kZWYgbXR5cGVfc2FtZV9zZXRcbiAjdW5kZWYgbXR5cGVfa2FkdFxuICN1bmRlZiBtdHlwZV91YWR0XG4rI3VuZGVmIG10eXBlX2J1Y2tldF9zaXplXG4rI3VuZGVmIG10eXBlX2hhc2hfc2l6ZVxuIFxuICN1bmRlZiBtdHlwZV9hZGRcbiAjdW5kZWYgbXR5cGVfZGVsXG5AQCAtMjQ5LDEyICsyNDMsMTUgQEAgc3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xuICNkZWZpbmUgbXR5cGVfZXh0X2NsZWFudXBcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXG4gI2RlZmluZSBtdHlwZV9hZGRfY2lkclx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2FkZF9jaWRyKVxuICNkZWZpbmUgbXR5cGVfZGVsX2NpZHJcdFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcilcbisjZGVmaW5lIG10eXBlX2RlbF9jaWRyX2FsbFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWxfY2lkcl9hbGwpXG4gI2RlZmluZSBtdHlwZV9haGFzaF9tZW1zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2FoYXNoX21lbXNpemUpXG4gI2RlZmluZSBtdHlwZV9mbHVzaFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2ZsdXNoKVxuICNkZWZpbmUgbXR5cGVfZGVzdHJveVx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2Rlc3Ryb3kpXG4gI2RlZmluZSBtdHlwZV9zYW1lX3NldFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX3NhbWVfc2V0KVxuICNkZWZpbmUgbXR5cGVfa2FkdFx0XHRJUFNFVF9UT0tFTihNVFlQRSwgX2thZHQpXG4gI2RlZmluZSBtdHlwZV91YWR0XHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfdWFkdClcbisjZGVmaW5lIG10eXBlX2J1Y2tldF9zaXplXHRJUFNFVF9UT0tFTihNVFlQRSwgX2J1Y2tldF9zaXplKVxuKyNkZWZpbmUgbXR5cGVfaGFzaF9zaXplXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfaGFzaF9zaXplKVxuIFxuICNkZWZpbmUgbXR5cGVfYWRkXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxuICNkZWZpbmUgbXR5cGVfZGVsXHRcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsKVxuQEAgLTI5Miw2ICsyODksNyBAQCBzdGF0aWMgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIHplcm9tYXNrID0ge307XG4gLyogVGhlIGdlbmVyaWMgaGFzaCBzdHJ1Y3R1cmUgKi9cbiBzdHJ1Y3QgaHR5cGUge1xuIFx0c3RydWN0IGh0YWJsZSBfX3JjdSAqdGFibGU7IC8qIHRoZSBoYXNoIHRhYmxlICovXG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzIF9fcmN1ICpybmV0c1tJUFNFVF9ORVRfQ09VTlRdOyAvKiBjaWRyIHByZWZpeGVzICovXG4gXHRzdHJ1Y3QgaHRhYmxlX2djIGdjO1x0LyogZ2Mgd29ya3F1ZXVlICovXG4gXHR1MzIgbWF4ZWxlbTtcdFx0LyogbWF4IGVsZW1lbnRzIGluIHRoZSBoYXNoICovXG4gXHR1MzIgaW5pdHZhbDtcdFx0LyogcmFuZG9tIGpoYXNoIGluaXQgdmFsdWUgKi9cbkBAIC0zMDIsOSArMzAwLDYgQEAgc3RydWN0IGh0eXBlIHtcbiAjaWYgZGVmaW5lZChJUF9TRVRfSEFTSF9XSVRIX05FVE1BU0spIHx8IGRlZmluZWQoSVBfU0VUX0hBU0hfV0lUSF9CSVRNQVNLKVxuIFx0dTggbmV0bWFzaztcdFx0LyogbmV0bWFzayB2YWx1ZSBmb3Igc3VibmV0cyB0byBzdG9yZSAqL1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyIGJpdG1hc2s7XHQvKiBzdG9yZXMgYml0bWFzayAqL1xuLSNlbmRpZlxuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdHN0cnVjdCBuZXRfcHJlZml4ZXMgbmV0c1tOTEVOXTsgLyogYm9vay1rZWVwaW5nIG9mIHByZWZpeGVzICovXG4gI2VuZGlmXG4gXHQvKiBCZWNhdXNlICduZXh0JyBpcyBJUHY0L0lQdjYgZGVwZW5kZW50LCBubyBlbGVtZW50cyBvZiB0aGlzXG4gXHQgKiBzdHJ1Y3R1cmUgYW5kIHJlZmVycmVkIGluIGNyZWF0ZSgpIG1heSBjb21lIGFmdGVyICduZXh0Jy5cbkBAIC0zMjYsNTUgKzMyMSwxMDggQEAgc3RydWN0IG10eXBlX3Jlc2l6ZV9hZCB7XG4gLyogTmV0d29yayBjaWRyIHNpemUgYm9vayBrZWVwaW5nIHdoZW4gdGhlIGhhc2ggc3RvcmVzIGRpZmZlcmVudFxuICAqIHNpemVkIG5ldHdvcmtzLiBjaWRyID09IHJlYWwgY2lkciArIDEgdG8gc3VwcG9ydCAvMC5cbiAgKi9cbi1zdGF0aWMgdm9pZFxuK3N0YXRpYyBpbnRcbiBtdHlwZV9hZGRfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHRpbnQgaSwgajtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMsICp0bXA7XG4rXHRpbnQgaSwgaiwgZm91bmQsIGxlbiA9IDAsIHJldCA9IDA7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuK1x0bmV0cyA9IF9faXBzZXRfZGVyZWZlcmVuY2UoaC1cdTAwM2VybmV0c1tuXSk7XG4gXHQvKiBBZGQgaW4gaW5jcmVhc2luZyBwcmVmaXggb3JkZXIsIHNvIGxhcmdlciBjaWRyIGZpcnN0ICovXG4tXHRmb3IgKGkgPSAwLCBqID0gLTE7IGkgXHUwMDNjIE5MRU4gXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dOyBpKyspIHtcbi1cdFx0aWYgKGogIT0gLTEpIHtcbitcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRsZW4rKztcbitcdFx0aWYgKGZvdW5kICE9IC0xKSB7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH0gZWxzZSBpZiAoaC1cdTAwM2VuZXRzW2ldLmNpZHJbbl0gXHUwMDNjIGNpZHIpIHtcbi1cdFx0XHRqID0gaTtcbi1cdFx0fSBlbHNlIGlmIChoLVx1MDAzZW5ldHNbaV0uY2lkcltuXSA9PSBjaWRyKSB7XG4tXHRcdFx0aC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dKys7XG4rXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgXHUwMDNjIGNpZHIpIHtcbitcdFx0XHRmb3VuZCA9IGk7XG4rXHRcdH0gZWxzZSBpZiAobmV0cy1cdTAwM2VuZXRzW2ldLmNpZHIgPT0gY2lkcikge1xuK1x0XHRcdG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCsrO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4tXHRpZiAoaiAhPSAtMSkge1xuLVx0XHRmb3IgKDsgaSBcdTAwM2UgajsgaS0tKVxuLVx0XHRcdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gaC1cdTAwM2VuZXRzW2kgLSAxXS5jaWRyW25dO1xuK1x0bGVuKys7XG4rXHR0bXAgPSBremFsbG9jX2ZsZXgoKnRtcCwgbmV0cywgbGVuLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdG1wKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0dG1wLVx1MDAzZWxlbiA9IGxlbjtcbitcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaSsrKSB7XG4rXHRcdGlmIChpID09IGZvdW5kKSB7XG4rXHRcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IDE7XG4rXHRcdH1cbitcdFx0aWYgKCFuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNpZHIgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY2lkcjtcbitcdFx0dG1wLVx1MDAzZW5ldHNbaisrXS5jb3VudCA9IG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudDtcbiBcdH1cbi1cdGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dID0gY2lkcjtcbi1cdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXSA9IDE7XG4rXHRpZiAoZm91bmQgPT0gLTEpIHtcbitcdFx0dG1wLVx1MDAzZW5ldHNbal0uY2lkciA9IGNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMTtcbitcdH1cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihoLVx1MDAzZXJuZXRzW25dLCB0bXApO1xuK1x0a2ZyZWVfcmN1KG5ldHMsIHJjdSk7XG4gdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2V0LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbiBtdHlwZV9kZWxfY2lkcihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodHlwZSAqaCwgdTggY2lkciwgdTggbilcbiB7XG4tXHR1OCBpLCBqLCBuZXRfZW5kID0gTkxFTiAtIDE7XG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuK1x0dTggaSwgaiwgbGVuID0gMDtcbitcdGludCBmb3VuZDtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzZXQtXHUwMDNlbG9jayk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOTEVOOyBpKyspIHtcbi1cdFx0aWYgKGgtXHUwMDNlbmV0c1tpXS5jaWRyW25dICE9IGNpZHIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGgtXHUwMDNlbmV0c1tDSURSX1BPUyhjaWRyKV0ubmV0c1tuXS0tO1xuLVx0XHRpZiAoaC1cdTAwM2VuZXRzW0NJRFJfUE9TKGNpZHIpXS5uZXRzW25dIFx1MDAzZSAwKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0XHRmb3IgKGogPSBpOyBqIFx1MDAzYyBuZXRfZW5kIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkcltuXTsgaisrKVxuLVx0XHRcdGgtXHUwMDNlbmV0c1tqXS5jaWRyW25dID0gaC1cdTAwM2VuZXRzW2ogKyAxXS5jaWRyW25dO1xuLVx0XHRoLVx1MDAzZW5ldHNbal0uY2lkcltuXSA9IDA7XG4rXHRuZXRzID0gX19pcHNldF9kZXJlZmVyZW5jZShoLVx1MDAzZXJuZXRzW25dKTtcbitcdGZvciAoaSA9IDAsIGZvdW5kID0gLTE7IGkgXHUwMDNjIG5ldHMtXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudClcbitcdFx0XHRsZW4rKztcbitcdFx0aWYgKG5ldHMtXHUwMDNlbmV0c1tpXS5jaWRyID09IGNpZHIpXG4rXHRcdFx0Zm91bmQgPSBpO1xuK1x0fVxuK1x0aWYgKHVubGlrZWx5KGZvdW5kID09IC0xKSlcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRuZXRzLVx1MDAzZW5ldHNbZm91bmRdLmNvdW50LS07XG4rXHRpZiAobmV0cy1cdTAwM2VuZXRzW2ZvdW5kXS5jb3VudClcbitcdFx0Z290byB1bmxvY2s7XG4rXHRsZW4tLTtcbitcdHRtcCA9IGt6YWxsb2NfZmxleCgqdG1wLCBuZXRzLCBsZW4sIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCF0bXApXG4rXHRcdC8qIExlYXZlIGEgaG9sZSAqL1xuIFx0XHRnb3RvIHVubG9jaztcbitcbitcdHRtcC1cdTAwM2VsZW4gPSBsZW47XG4rXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcdTAwM2MgbmV0cy1cdTAwM2VsZW47IGkrKykge1xuK1x0XHRpZiAoIW5ldHMtXHUwMDNlbmV0c1tpXS5jb3VudCB8fCBpID09IGZvdW5kKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR0bXAtXHUwMDNlbmV0c1tqXS5jaWRyID0gbmV0cy1cdTAwM2VuZXRzW2ldLmNpZHI7XG4rXHRcdHRtcC1cdTAwM2VuZXRzW2orK10uY291bnQgPSBuZXRzLVx1MDAzZW5ldHNbaV0uY291bnQ7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tuXSwgdG1wKTtcbitcdGtmcmVlX3JjdShuZXRzLCByY3UpO1xuIHVubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNldC1cdTAwM2Vsb2NrKTtcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWRcbittdHlwZV9kZWxfY2lkcl9hbGwoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIGNvbnN0IHN0cnVjdCBtdHlwZV9lbGVtICpkYXRhKVxuK3tcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRpbnQgaztcbitcbitcdGZvciAoayA9IDA7IGsgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaysrKVxuK1x0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsIERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspLCBrKTtcbisjZW5kaWZcbit9XG4rXG4gLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbWVtb3J5IHNpemUgb2YgdGhlIHNldCBkYXRhICovXG4gc3RhdGljIHNpemVfdFxuIG10eXBlX2FoYXNoX21lbXNpemUoY29uc3Qgc3RydWN0IGh0eXBlICpoLCBjb25zdCBzdHJ1Y3QgaHRhYmxlICp0KVxuQEAgLTQwMiw2ICs0NTAsOSBAQCBzdGF0aWMgdm9pZFxuIG10eXBlX2ZsdXNoKHN0cnVjdCBpcF9zZXQgKnNldClcbiB7XG4gXHRzdHJ1Y3QgaHR5cGUgKmggPSBzZXQtXHUwMDNlZGF0YTtcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRzdHJ1Y3QgbmV0X3ByZWZpeGVzICpuZXRzLCAqdG1wO1xuKyNlbmRpZlxuIFx0c3RydWN0IGh0YWJsZSAqdDtcbiBcdHN0cnVjdCBoYnVja2V0ICpuO1xuIFx0dTMyIHIsIGk7XG5AQCAtNDI1LDcgKzQ3NiwxOSBAQCBtdHlwZV9mbHVzaChzdHJ1Y3QgaXBfc2V0ICpzZXQpXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnQtXHUwMDNlaHJlZ2lvbltyXS5sb2NrKTtcbiBcdH1cbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRtZW1zZXQoaC1cdTAwM2VuZXRzLCAwLCBzaXplb2YoaC1cdTAwM2VuZXRzKSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGkrKykge1xuK1x0XHRuZXRzID0gaXBzZXRfZGVyZWZlcmVuY2VfbmZubChoLVx1MDAzZXJuZXRzW2ldKTtcbitcdFx0dG1wID0ga3phbGxvY19vYmooKnRtcCwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghdG1wKSB7XG4rXHRcdFx0dTggajtcbitcbitcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzLVx1MDAzZWxlbjsgaisrKVxuK1x0XHRcdFx0bmV0cy1cdTAwM2VuZXRzW2pdLmNvdW50ID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaC1cdTAwM2VybmV0c1tpXSwgdG1wKTtcbitcdFx0XHRrZnJlZV9yY3UobmV0cywgcmN1KTtcbitcdFx0fVxuK1x0fVxuICNlbmRpZlxuIH1cbiBcbkBAIC00MzMsNiArNDk2LDkgQEAgbXR5cGVfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIHN0YXRpYyB2b2lkXG4gbXR5cGVfYWhhc2hfZGVzdHJveShzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBodGFibGUgKnQsIGJvb2wgZXh0X2Rlc3Ryb3kpXG4ge1xuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuKyNlbmRpZlxuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHR1MzIgaTtcbiBcbkBAIC00NDYsNiArNTEyLDExIEBAIG10eXBlX2FoYXNoX2Rlc3Ryb3koc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHRhYmxlICp0LCBib29sIGV4dF9kZXN0cm95KVxuIFx0XHRrZnJlZShuKTtcbiBcdH1cbiBcbisjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4rXHRpZiAoZXh0X2Rlc3Ryb3kpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxuK1x0XHRcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaC1cdTAwM2VybmV0c1tpXSkpO1xuKyNlbmRpZlxuIFx0aXBfc2V0X2ZyZWUodC1cdTAwM2VocmVnaW9uKTtcbiBcdGlwX3NldF9mcmVlKHQpO1xuIH1cbkBAIC00OTMsOSArNTY0LDYgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuIFx0c3RydWN0IG10eXBlX2VsZW0gKmRhdGE7XG4gXHR1MzIgaSwgaiwgZDtcbiBcdHNpemVfdCBkc2l6ZSA9IHNldC1cdTAwM2Vkc2l6ZTtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHR1OCBrO1xuLSNlbmRpZlxuIFx0dTggcG9zLCBodGFibGVfYml0cyA9IHQtXHUwMDNlaHRhYmxlX2JpdHM7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dC1cdTAwM2VocmVnaW9uW3JdLmxvY2spO1xuQEAgLTUxNiwxMiArNTg0LDcgQEAgbXR5cGVfZ2NfZG8oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHN0cnVjdCBodGFibGUgKnQsIHUzMiByKVxuIFx0XHRcdHByX2RlYnVnKFwiZXhwaXJlZCAldS8ldVxcblwiLCBpLCBqKTtcbiBcdFx0XHRjbGVhcl9iaXQoaiwgbi1cdTAwM2V1c2VkKTtcbiBcdFx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLSNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbi1cdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGsrKylcbi1cdFx0XHRcdG10eXBlX2RlbF9jaWRyKHNldCwgaCxcbi1cdFx0XHRcdFx0TkNJRFJfUFVUKERDSURSX0dFVChkYXRhLVx1MDAzZWNpZHIsIGspKSxcbi1cdFx0XHRcdFx0ayk7XG4tI2VuZGlmXG4rXHRcdFx0bXR5cGVfZGVsX2NpZHJfYWxsKHNldCwgaCwgZGF0YSk7XG4gXHRcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4gXHRcdFx0aXBfc2V0X2V4dF9kZXN0cm95KHNldCwgZGF0YSk7XG4gXHRcdFx0ZCsrO1xuQEAgLTk0NywxMiArMTAxMCw3IEBAIG10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdGogPSAwO1xuIFx0XHRkYXRhID0gYWhhc2hfZGF0YShuLCBqLCBzZXQtXHUwMDNlZHNpemUpO1xuIFx0XHRpZiAoIWRlbGV0ZWQpIHtcbi0jaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTXG4tXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspXG4tXHRcdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHRcdE5DSURSX1BVVChEQ0lEUl9HRVQoZGF0YS1cdTAwM2VjaWRyLCBpKSksXG4tXHRcdFx0XHRcdGkpO1xuLSNlbmRpZlxuK1x0XHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGRhdGEpO1xuIFx0XHRcdGlwX3NldF9leHRfZGVzdHJveShzZXQsIGRhdGEpO1xuIFx0XHRcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cy0tO1xuIFx0XHR9XG5AQCAtOTk2LDcgKzEwNTQsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiBcdHQtXHUwMDNlaHJlZ2lvbltyXS5lbGVtZW50cysrO1xuICNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxuLVx0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIE5DSURSX1BVVChEQ0lEUl9HRVQoZC1cdTAwM2VjaWRyLCBpKSksIGkpO1xuK1x0XHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGkpLCBpKTtcbiAjZW5kaWZcbiBcdG1lbWNweShkYXRhLCBkLCBzaXplb2Yoc3RydWN0IG10eXBlX2VsZW0pKTtcbiBvdmVyd3JpdGVfZXh0ZW5zaW9uczpcbkBAIC0xMTA3LDExICsxMTY1LDcgQEAgbXR5cGVfZGVsKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRcdGlmIChpICsgMSA9PSBwb3MpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bi1cdTAwM2Vwb3MsIC0tcG9zKTtcbiBcdFx0dC1cdTAwM2VocmVnaW9uW3JdLmVsZW1lbnRzLS07XG4tI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBJUFNFVF9ORVRfQ09VTlQ7IGorKylcbi1cdFx0XHRtdHlwZV9kZWxfY2lkcihzZXQsIGgsXG4tXHRcdFx0XHQgICAgICAgTkNJRFJfUFVUKERDSURSX0dFVChkLVx1MDAzZWNpZHIsIGopKSwgaik7XG4tI2VuZGlmXG4rXHRcdG10eXBlX2RlbF9jaWRyX2FsbChzZXQsIGgsIGQpO1xuIFx0XHRpcF9zZXRfZXh0X2Rlc3Ryb3koc2V0LCBkYXRhKTtcbiBcbiBcdFx0aWYgKHQtXHUwMDNlcmVzaXppbmcgXHUwMDI2XHUwMDI2IGV4dCBcdTAwMjZcdTAwMjYgZXh0LVx1MDAzZXRhcmdldCkge1xuQEAgLTExOTMsMjggKzEyNDcsMzcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIHtcbiBcdHN0cnVjdCBodHlwZSAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGh0YWJsZSAqdCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMwO1xuIFx0c3RydWN0IGhidWNrZXQgKm47XG4gXHRzdHJ1Y3QgbXR5cGVfZWxlbSAqZGF0YTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHMxO1xuIFx0c3RydWN0IG10eXBlX2VsZW0gb3JpZyA9ICpkO1xuLVx0aW50IHJldCwgaSwgaiA9IDAsIGs7XG4rXHRpbnQgcmV0LCBpLCBqLCBrO1xuICNlbHNlXG4tXHRpbnQgcmV0LCBpLCBqID0gMDtcbitcdGludCByZXQsIGksIGo7XG4gI2VuZGlmXG4gXHR1MzIga2V5LCBtdWx0aSA9IDA7XG4gXHR1OCBwb3M7XG4gXG4gXHRwcl9kZWJ1ZyhcInRlc3QgYnkgbmV0c1xcblwiKTtcbi1cdGZvciAoOyBqIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNbal0uY2lkclswXSBcdTAwMjZcdTAwMjYgIW11bHRpOyBqKyspIHtcbitcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbitcdG5ldHMwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGgtXHUwMDNlcm5ldHNbMF0pO1xuKyNpZiBJUFNFVF9ORVRfQ09VTlQgPT0gMlxuK1x0bmV0czEgPSByY3VfZGVyZWZlcmVuY2VfYmgoaC1cdTAwM2VybmV0c1sxXSk7XG4rI2VuZGlmXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuZXRzMC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaisrKSB7XG4rXHRcdGlmICghbmV0czAtXHUwMDNlbmV0c1tqXS5jb3VudClcbitcdFx0XHRjb250aW51ZTtcbiAjaWYgSVBTRVRfTkVUX0NPVU5UID09IDJcbiBcdFx0bXR5cGVfZGF0YV9yZXNldF9lbGVtKGQsIFx1MDAyNm9yaWcpO1xuLVx0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgTkNJRFJfR0VUKGgtXHUwMDNlbmV0c1tqXS5jaWRyWzBdKSwgZmFsc2UpO1xuLVx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBOTEVOIFx1MDAyNlx1MDAyNiBoLVx1MDAzZW5ldHNba10uY2lkclsxXSBcdTAwMjZcdTAwMjYgIW11bHRpO1xuLVx0XHQgICAgIGsrKykge1xuLVx0XHRcdG10eXBlX2RhdGFfbmV0bWFzayhkLCBOQ0lEUl9HRVQoaC1cdTAwM2VuZXRzW2tdLmNpZHJbMV0pLFxuLVx0XHRcdFx0XHQgICB0cnVlKTtcbitcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMwLVx1MDAzZW5ldHNbal0uY2lkciwgZmFsc2UpO1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBuZXRzMS1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2ICFtdWx0aTsgaysrKSB7XG4rXHRcdFx0aWYgKCFuZXRzMS1cdTAwM2VuZXRzW2tdLmNvdW50KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIG5ldHMxLVx1MDAzZW5ldHNba10uY2lkciwgdHJ1ZSk7XG4gI2Vsc2Vcbi1cdFx0bXR5cGVfZGF0YV9uZXRtYXNrKGQsIE5DSURSX0dFVChoLVx1MDAzZW5ldHNbal0uY2lkclswXSkpO1xuK1x0XHRtdHlwZV9kYXRhX25ldG1hc2soZCwgbmV0czAtXHUwMDNlbmV0c1tqXS5jaWRyKTtcbiAjZW5kaWZcbiBcdFx0a2V5ID0gSEtFWShkLCBoLVx1MDAzZWluaXR2YWwsIHQtXHUwMDNlaHRhYmxlX2JpdHMpO1xuIFx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX2JoKGhidWNrZXQodCwga2V5KSk7XG5AQCAtMTIyOSw3ICsxMjkyLDcgQEAgbXR5cGVfdGVzdF9jaWRycyhzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBtdHlwZV9lbGVtICpkLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gbXR5cGVfZGF0YV9tYXRjaChkYXRhLCBleHQsIG1leHQsIHNldCwgZmxhZ3MpO1xuIFx0XHRcdGlmIChyZXQgIT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRnb3RvIHVubG9jaztcbiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9NVUxUSVxuIFx0XHRcdC8qIE5vIG1hdGNoLCByZXNldCBtdWx0aXBsZSBtYXRjaCBmbGFnICovXG4gXHRcdFx0bXVsdGkgPSAwO1xuQEAgLTEyMzksNyArMTMwMiwxMCBAQCBtdHlwZV90ZXN0X2NpZHJzKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG10eXBlX2VsZW0gKmQsXG4gXHRcdH1cbiAjZW5kaWZcbiBcdH1cbi1cdHJldHVybiAwO1xuK1x0cmV0ID0gMDtcbit1bmxvY2s6XG4rXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbitcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTEyOTQsNiArMTM2MCwyNCBAQCBtdHlwZV90ZXN0KHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdTMyIG10eXBlX2hhc2hfc2l6ZShjb25zdCBzdHJ1Y3QgaHR5cGUgKmgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGh0YWJsZSAqdDtcbitcdHU4IGh0YWJsZV9iaXRzO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShoLVx1MDAzZXRhYmxlKTtcbitcdGh0YWJsZV9iaXRzID0gdC1cdTAwM2VodGFibGVfYml0cztcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGpoYXNoX3NpemUoaHRhYmxlX2JpdHMpO1xuK31cbitcbitzdGF0aWMgdTMyIG10eXBlX2J1Y2tldF9zaXplKGNvbnN0IHN0cnVjdCBodHlwZSAqaClcbit7XG4rXHRyZXR1cm4gaC1cdTAwM2VidWNrZXRzaXplO1xuK31cbitcbiAvKiBSZXBseSBhIEhFQURFUiByZXF1ZXN0OiBmaWxsIG91dCB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIHNldCAqL1xuIHN0YXRpYyBpbnRcbiBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xMzA0LDIxICsxMzg4LDIwIEBAIG10eXBlX2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2l6ZV90IG1lbXNpemU7XG4gXHR1MzIgZWxlbWVudHMgPSAwO1xuIFx0c2l6ZV90IGV4dF9zaXplID0gMDtcbi1cdHU4IGh0YWJsZV9iaXRzO1xuIFxuIFx0cmN1X3JlYWRfbG9ja19iaCgpO1xuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZV9iaChoLVx1MDAzZXRhYmxlKTtcbiBcdG10eXBlX2V4dF9zaXplKHNldCwgXHUwMDI2ZWxlbWVudHMsIFx1MDAyNmV4dF9zaXplKTtcbi1cdG1lbXNpemUgPSBtdHlwZV9haGFzaF9tZW1zaXplKGgsIHQpICsgZXh0X3NpemUgKyBzZXQtXHUwMDNlZXh0X3NpemU7XG4tXHRodGFibGVfYml0cyA9IHQtXHUwMDNlaHRhYmxlX2JpdHM7XG4rXHRtZW1zaXplID0gbXR5cGVfYWhhc2hfbWVtc2l6ZShoLCB0KSArIGV4dF9zaXplICsgYXRvbWljNjRfcmVhZChcdTAwMjZzZXQtXHUwMDNlZXh0X3NpemUpO1xuIFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXG4gXHRuZXN0ZWQgPSBubGFfbmVzdF9zdGFydChza2IsIElQU0VUX0FUVFJfREFUQSk7XG4gXHRpZiAoIW5lc3RlZClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsXG4tXHRcdFx0ICBodG9ubChqaGFzaF9zaXplKGh0YWJsZV9iaXRzKSkpIHx8XG4tXHQgICAgbmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUFYRUxFTSwgaHRvbmwoaC1cdTAwM2VtYXhlbGVtKSkpXG4rXG4rXHRpZiAobmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfSEFTSFNJWkUsIGh0b25sKG10eXBlX2hhc2hfc2l6ZShoKSkpKVxuK1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdGlmIChubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9NQVhFTEVNLCBodG9ubChoLVx1MDAzZW1heGVsZW0pKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfQklUTUFTS1xuIFx0LyogaWYgbmV0bWFzayBpcyBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBIT1NUX01BU0sgd2Uga25vdyB0aGF0IHRoZSB1c2VyIHN1cHBsaWVkIG5ldG1hc2tcbkBAIC0xMzQyLDggKzE0MjUsOSBAQCBtdHlwZV9oZWFkKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNFVF9DUkVBVEVfRkxBR19CVUNLRVRTSVpFKSB7XG4tXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSVBTRVRfQVRUUl9CVUNLRVRTSVpFLCBoLVx1MDAzZWJ1Y2tldHNpemUpIHx8XG4tXHRcdCAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9JTklUVkFMLCBodG9ubChoLVx1MDAzZWluaXR2YWwpKSlcbitcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJUFNFVF9BVFRSX0JVQ0tFVFNJWkUsIG10eXBlX2J1Y2tldF9zaXplKGgpKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX0lOSVRWQUwsIGh0b25sKGgtXHUwMDNlaW5pdHZhbCkpKVxuIFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0fVxuIFx0aWYgKG5sYV9wdXRfbmV0MzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC1cdTAwM2VyZWYpKSB8fFxuQEAgLTE1MDQsNiArMTU4OCw5IEBAIElQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcbiBcdGludCByZXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAwO1xuIFx0dTggbmV0bWFzayA9IHNldC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gMzIgOiAxMjg7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgYml0bWFzayA9IG9uZXNtYXNrO1xuKyNlbmRpZlxuKyNpZmRlZiBJUF9TRVRfSEFTSF9XSVRIX05FVFNcbitcdHN0cnVjdCBuZXRfcHJlZml4ZXMgKm5ldHM7XG4gI2VuZGlmXG4gXHRzaXplX3QgaHNpemU7XG4gXHRzdHJ1Y3QgaHR5cGUgKmg7XG5AQCAtMTYwNCwyMSArMTY5MSwyNSBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHQgKi9cbiBcdGhiaXRzID0gZmxzKGhhc2hzaXplIC0gMSk7XG4gXHRoc2l6ZSA9IGh0YWJsZV9zaXplKGhiaXRzKTtcbi1cdGlmIChoc2l6ZSA9PSAwKSB7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcdGlmIChoc2l6ZSA9PSAwKVxuK1x0XHRnb3RvIGZyZWVfaDtcbiBcdHQgPSBpcF9zZXRfYWxsb2MoaHNpemUpO1xuLVx0aWYgKCF0KSB7XG4tXHRcdGtmcmVlKGgpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcdGlmICghdClcbitcdFx0Z290byBmcmVlX2g7XG4gXHR0LVx1MDAzZWhyZWdpb24gPSBpcF9zZXRfYWxsb2MoYWhhc2hfc2l6ZW9mX3JlZ2lvbnMoaGJpdHMpKTtcbi1cdGlmICghdC1cdTAwM2VocmVnaW9uKSB7XG4tXHRcdGlwX3NldF9mcmVlKHQpO1xuLVx0XHRrZnJlZShoKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoIXQtXHUwMDNlaHJlZ2lvbilcbitcdFx0Z290byBmcmVlX3Q7XG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSVBTRVRfTkVUX0NPVU5UOyBpKyspIHtcbitcdFx0bmV0cyA9IGt6YWxsb2Nfb2JqKCpuZXRzKTtcbitcdFx0aWYgKCFuZXRzKSB7XG4rXHRcdFx0d2hpbGUgKGkgXHUwMDNlIDApXG4rXHRcdFx0XHRrZnJlZShyY3VfZGVyZWZlcmVuY2VfcmF3KGgtXHUwMDNlcm5ldHNbLS1pXSkpO1xuK1x0XHRcdGdvdG8gZnJlZV9ocmVnaW9uO1xuK1x0XHR9XG4rXHRcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2VybmV0c1tpXSwgbmV0cyk7XG4gXHR9XG4rI2VuZGlmXG4gXHRoLVx1MDAzZWdjLnNldCA9IHNldDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmgtXHUwMDNlZ2MubG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhaGFzaF9udW1vZl9sb2NrcyhoYml0cyk7IGkrKylcbkBAIC0xNjUwLDYgKzE3NDEsNyBAQCBJUFNFVF9UT0tFTihIVFlQRSwgX2NyZWF0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfc2V0ICpzZXQsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0LVx1MDAzZWFkKTtcbiBcdFJDVV9JTklUX1BPSU5URVIoaC1cdTAwM2V0YWJsZSwgdCk7XG4gXHRzZXQtXHUwMDNlZGF0YSA9IGg7XG4rXG4gI2lmbmRlZiBJUF9TRVRfUFJPVE9fVU5ERUZcbiBcdGlmIChzZXQtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuICNlbmRpZlxuQEAgLTE2NzgsMTAgKzE3NzAsMjAgQEAgSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX3NldCAqc2V0LFxuICNlbmRpZlxuIFx0fVxuIFx0cHJfZGVidWcoXCJjcmVhdGUgJXMgaGFzaHNpemUgJXUgKCV1KSBtYXhlbGVtICV1OiAlcCglcClcXG5cIixcbi1cdFx0IHNldC1cdTAwM2VuYW1lLCBqaGFzaF9zaXplKHQtXHUwMDNlaHRhYmxlX2JpdHMpLFxuK1x0XHQgc2V0LVx1MDAzZW5hbWUsIG10eXBlX2hhc2hfc2l6ZShoKSxcbiBcdFx0IHQtXHUwMDNlaHRhYmxlX2JpdHMsIGgtXHUwMDNlbWF4ZWxlbSwgc2V0LVx1MDAzZWRhdGEsIHQpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rI2lmZGVmIElQX1NFVF9IQVNIX1dJVEhfTkVUU1xuK2ZyZWVfaHJlZ2lvbjpcbitcdGlwX3NldF9mcmVlKHQtXHUwMDNlaHJlZ2lvbik7XG4rI2VuZGlmXG4rZnJlZV90OlxuK1x0aXBfc2V0X2ZyZWUodCk7XG4rZnJlZV9oOlxuK1x0a2ZyZWUoaCk7XG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gI2VuZGlmIC8qIElQX1NFVF9FTUlUX0NSRUFURSAqL1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jXG5pbmRleCAyZDY2NTJkNDMxOTlhLi4xOTU4NTNhMjViMDYwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuY1xuQEAgLTEzOCw3ICsxMzgsNyBAQCBoYXNoX2lwcG9ydG5ldDRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5AQCAtMzk4LDcgKzM5OCw3IEBAIGhhc2hfaXBwb3J0bmV0Nl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX2lwcG9ydG5ldDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4rXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHR9O1xuIFx0c3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuY1xuaW5kZXggY2UwYTljZTVhOTFmMS4uMDkyZjNjOTI4MWI4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcbkBAIC0xMTcsNyArMTE3LDcgQEAgaGFzaF9uZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0NCAqaCA9IHNldC1cdTAwM2VkYXRhO1xuIFx0aXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtXHUwMDNldmFyaWFudC1cdTAwM2VhZHRbYWR0XTtcbiBcdHN0cnVjdCBoYXNoX25ldDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTI5MSw3ICsyOTEsNyBAQCBoYXNoX25ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgaGFzaF9uZXQ2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG5pbmRleCAzMGE2NTVlNWM0ZmRjLi5iNDRiOTVmNzY2YjdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmNcbkBAIC0xNjEsNyArMTYxLDcgQEAgaGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTQgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRpZmFjZTRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdFx0LmVsZW0gPSAxLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG5AQCAtMzgyLDcgKzM4Miw3IEBAIGhhc2hfbmV0aWZhY2U2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gZSA9IHtcbi1cdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyksXG4rXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyksXG4gXHRcdC5lbGVtID0gMSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jXG5pbmRleCA4ZmJlNjQ5YzlkZDNkLi5mN2M4YTFjYzMwZmM3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuY1xuQEAgLTE0OSw4ICsxNDksMTAgQEAgaGFzaF9uZXRuZXQ0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGhhc2hfbmV0bmV0NF9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKGUuY2lkclswXSkgKiA4KSkgfCBIT1NUX01BU0s7XG4gXG5AQCAtMzg4LDggKzM5MCwxMCBAQCBoYXNoX25ldG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YodTgpICogOCkpIHwgSE9TVF9NQVNLO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbmluZGV4IGQxYTA2MjhkZjRlZjMuLjVkZTRiNTExZGU3NjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaGFzaF9uZXRwb3J0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCBoYXNoX25ldHBvcnQ0ICpoID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRpcHNldF9hZHRmbiBhZHRmbiA9IHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZWFkdFthZHRdO1xuIFx0c3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBlID0ge1xuLVx0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZW5ldHNbMF0uY2lkclswXSwgSE9TVF9NQVNLKSxcbitcdFx0LmNpZHIgPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKSxcbiBcdH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuQEAgLTM1Myw3ICszNTMsNyBAQCBoYXNoX25ldHBvcnQ2X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IGhhc2hfbmV0cG9ydDYgKmggPSBzZXQtXHUwMDNlZGF0YTtcbiBcdGlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYWR0W2FkdF07XG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0Nl9lbGVtIGUgPSB7XG4tXHRcdC5jaWRyID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spLFxuK1x0XHQuY2lkciA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzBdLCBIT1NUX01BU0spLFxuIFx0fTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuaW5kZXggYmY0ZjkxYjc4ZTFkYy4uNjI5MTUzMmJlN2E1YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuY1xuQEAgLTE1Nyw4ICsxNTcsMTAgQEAgaGFzaF9uZXRwb3J0bmV0NF9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBoYXNoX25ldHBvcnRuZXQ0X2VsZW0gZSA9IHsgfTtcbiBcdHN0cnVjdCBpcF9zZXRfZXh0IGV4dCA9IElQX1NFVF9JTklUX0tFWFQoc2tiLCBvcHQsIHNldCk7XG4gXG4tXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMF0sIEhPU1RfTUFTSyk7XG4tXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VuZXRzWzBdLmNpZHJbMV0sIEhPU1RfTUFTSyk7XG4rXHRyY3VfcmVhZF9sb2NrX2JoKCk7XG4rXHRlLmNpZHJbMF0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1swXSwgSE9TVF9NQVNLKTtcbitcdGUuY2lkclsxXSA9IElOSVRfQ0lEUihoLVx1MDAzZXJuZXRzWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gXHRpZiAoYWR0ID09IElQU0VUX1RFU1QpXG4gXHRcdGUuY2NtcCA9IChIT1NUX01BU0sgXHUwMDNjXHUwMDNjIChzaXplb2YoZS5jaWRyWzBdKSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbkBAIC00NTIsOCArNDU0LDEwIEBAIGhhc2hfbmV0cG9ydG5ldDZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0Nl9lbGVtIGUgPSB7IH07XG4gXHRzdHJ1Y3QgaXBfc2V0X2V4dCBleHQgPSBJUF9TRVRfSU5JVF9LRVhUKHNrYiwgb3B0LCBzZXQpO1xuIFxuLVx0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzBdLCBIT1NUX01BU0spO1xuLVx0ZS5jaWRyWzFdID0gSU5JVF9DSURSKGgtXHUwMDNlbmV0c1swXS5jaWRyWzFdLCBIT1NUX01BU0spO1xuK1x0cmN1X3JlYWRfbG9ja19iaCgpO1xuK1x0ZS5jaWRyWzBdID0gSU5JVF9DSURSKGgtXHUwMDNlcm5ldHNbMF0sIEhPU1RfTUFTSyk7XG4rXHRlLmNpZHJbMV0gPSBJTklUX0NJRFIoaC1cdTAwM2VybmV0c1sxXSwgSE9TVF9NQVNLKTtcbitcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xuIFx0aWYgKGFkdCA9PSBJUFNFVF9URVNUKVxuIFx0XHRlLmNjbXAgPSAoSE9TVF9NQVNLIFx1MDAzY1x1MDAzYyAoc2l6ZW9mKHU4KSAqIDgpKSB8IEhPU1RfTUFTSztcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuY1xuaW5kZXggMWNlZjg0ZjE1ZThjNy4uY2EzZWY5NDc5ZTgzOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmNcbkBAIC00MjEsNyArNDIxLDcgQEAgbGlzdF9zZXRfZmx1c2goc3RydWN0IGlwX3NldCAqc2V0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIFx1MDAyNm1hcC1cdTAwM2VtZW1iZXJzLCBsaXN0KVxuIFx0XHRsaXN0X3NldF9kZWwoc2V0LCBlKTtcbiBcdHNldC1cdTAwM2VlbGVtZW50cyA9IDA7XG4tXHRzZXQtXHUwMDNlZXh0X3NpemUgPSAwO1xuK1x0YXRvbWljNjRfc2V0KFx1MDAyNnNldC1cdTAwM2VleHRfc2l6ZSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtNDU1LDcgKzQ1NSw3IEBAIGxpc3Rfc2V0X2hlYWQoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBsaXN0X3NldCAqbWFwID0gc2V0LVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbmxhdHRyICpuZXN0ZWQ7XG4tXHRzaXplX3QgbWVtc2l6ZSA9IGxpc3Rfc2V0X21lbXNpemUobWFwLCBzZXQtXHUwMDNlZHNpemUpICsgc2V0LVx1MDAzZWV4dF9zaXplO1xuK1x0c2l6ZV90IG1lbXNpemUgPSBsaXN0X3NldF9tZW1zaXplKG1hcCwgc2V0LVx1MDAzZWRzaXplKSArIGF0b21pYzY0X3JlYWQoXHUwMDI2c2V0LVx1MDAzZWV4dF9zaXplKTtcbiBcbiBcdG5lc3RlZCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSVBTRVRfQVRUUl9EQVRBKTtcbiBcdGlmICghbmVzdGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NDEuNzMwODE5NDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3MjY1Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgSVAgU2V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBvdmVyaGF1bCBvZiBzb21lIGNvcmUgSVAgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbWF5YmUgYSByZWRlc2lnbiByZWxhdGVkIHRvIENJRFIgcHJlZml4IGhhbmRsaW5nIGFuZCBob3cgc2V0cyBhcmUgY2xlYW5lZCB1cC4gIERlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgZGl2ZSwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZpcnN0LCB0aGUgYGlwX3NldGAgc3RydWN0IGlzIHR3ZWFrZWQ6IGByY3VfaGVhZGAgaXMgc3dhcHBlZCBmb3IgYHJjdV93b3JrYCwgYW5kIHRoZSBgZXh0X3NpemVgIGZpZWxkIGlzIG5vdyBhbiBgYXRvbWljNjRfdGAuIFRoYXQgc2NyZWFtcyBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMgYmVpbmcgYWRkcmVzc2VkLiAgVGhlIGJpZyBvbmUgc2VlbXMgdG8gYmUgdGhlIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiBvZiBzZXRzIHVzaW5nIGEgd29ya3F1ZXVlIChgaXBzZXRfZGVzdHJveV93cWApIGFuZCBgcXVldWVfcmN1X3dvcmtgIHJlcGxhY2luZyB0aGUgc3luY2hyb25vdXMgYGlwX3NldF9kZXN0cm95X3NldF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIG1pbmltaXplIGxvY2sgY29udGVudGlvbiBkdXJpbmcgY2xlYW51cC5cblxuVGhlIHNlY29uZCBhcmVhIG9mIGZvY3VzIGlzIHdpdGggQ0lEUiBwcmVmaXhlcy4gIFRoZXkndmUgY2hhbmdlZCB0aGUgYG5ldF9wcmVmaXhlc2Agc3RydWN0IGluIGBpcF9zZXRfaGFzaF9nZW4uaGAgdG8gdXNlIGBfX2NvdW50ZWRfYnkobGVuKWAgYW5kIGl0J3Mgbm93IGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gTW9kaWZpY2F0aW9ucyB0byBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX3Rlc3RfY2lkcnNgIHRvIGluY29ycG9yYXRlIFJDVSBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGZvciBgbmV0X3ByZWZpeGVzYCBhcmUgYWxzbyBwcmVzZW50LiBUaGVzZSBjaGFuZ2VzIGluZGljYXRlIG9wdGltaXphdGlvbiBhbmQgdGhyZWFkIHNhZmV0eSB3aGVuIGRlYWxpbmcgd2l0aCBwcmVmaXggZGF0YS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGFyZWFzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gIEJlc2lkZXMgdGhlIHN0cnVjdCBjaGFuZ2VzLCB0aGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgaXBfc2V0X2Rlc3Ryb3lgLCBhbmQgdGhlbiBhIHNsZXcgb2YgZnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggYG10eXBlXypgLiAgTG9va2luZyBmdXJ0aGVyLCBJIHNlZSBpdCdzIGFsc28gaW1wYWN0aW5nIHNldmVyYWwgaGFzaCB0eXBlLXNwZWNpZmljIGZ1bmN0aW9ucyAoSVB2NCBhbmQgSVB2NiB2YXJpYW50cyk6IGBoYXNoX2lwcG9ydG5ldDRfa2FkdGAsIGBoYXNoX25ldDRfa2FkdGAsIGV0Yy4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgbWFjcm9zLiBUaGV5IGFyZSBnZW5lcmF0ZWQgaW4gYGlwX3NldF9oYXNoX2dlbi5oYC4gQWhhISBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhpbmdzIGxpa2UgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgZXRjLiBUaGUgZnVuY3Rpb25zIGFjdHVhbGx5IGdlbmVyYXRlZCB3aWxsIHRoZW4gaGF2ZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCBhbmQgc28gb24uXG5cbk9rYXksIGxldCdzIGh1bnQgZG93biB0aG9zZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSdyZSBiZWluZyB1c2VkIGFuZCBhZmZlY3RlZC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBjYXJlZnVsIGFuYWx5c2lzLCBidXQgaXQgbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgaW1wcm92aW5nIElQIHNldCBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTEuMzAzNDc5ODU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAyMzY4MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgbXR5cGVfYWRkIFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTMuNzkzNzIyODI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTU1MDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIE1hY3JvIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBhIG1hY3JvIGRlZmluaXRpb246IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYG10eXBlX2FkZGAgaXMgdGhlIHJlc3VsdGluZyBtYWNybywgYW5kIGl0J3MgYmVpbmcgY29uc3RydWN0ZWQgdXNpbmcgYElQU0VUX1RPS0VOYCB3aXRoIGBNVFlQRWAgYW5kIGBfYWRkYCBhcyBhcmd1bWVudHMuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiB0b2tlbiBnZW5lcmF0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gSVAgc2V0IG1hbmFnZW1lbnQsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi5cblxuVGhlIGtleSBwb2ludCBoZXJlLCB0aG91Z2gsIGlzIHJlY29nbml6aW5nIHRoYXQgYE1UWVBFYCBpcyBkZWZpbmVkICpiZWZvcmUqIHRoZSBpbmNsdXNpb24gb2YgYGlwX3NldF9oYXNoX2dlbi5oYC4gVGhhdCdzIGNyaXRpY2FsLiBUaGUgdmFsdWUgb2YgYE1UWVBFYCBkaWN0YXRlcyBob3cgYG10eXBlX2FkZGAgcmVzb2x2ZXMuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgdGhhdCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIGNvZGUgdGhhdCB1dGlsaXplcyBgbXR5cGVfYWRkYC4gSXQncyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGdlbmVyYXRlZCBjb2RlIHNpZ25pZmljYW50bHksIHByb2JhYmx5IGJ5IGluamVjdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBpZGVudGlmaWVyLlxuXG5NeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgYE1UWVBFYCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBiZWluZyBzZXQgdG8gaW4gdGhlIGNvZGUuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIHR5cGUgb3IgZnVuY3Rpb25hbGl0eSB0aGlzIG1hY3JvIGlzIG1lYW50IHRvIGVuY2Fwc3VsYXRlLiBBbmQgdGhlbiBJIHdvdWxkIGV4YW1pbmUgYElQU0VUX1RPS0VOYCBpdHNlbGYuIEl0cyBkZWZpbml0aW9uIGlzIHZpdGFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmFsIGV4cGFuc2lvbiBvZiB0aGUgYG10eXBlX2FkZGAgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjM5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MzY6NTcuNTg1Mjc1NzI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTA4MzQ0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBNVFlQRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYz0zMz1NT0RVTEVfQUxJQVMoXFxcImlwX3NldF9iaXRtYXA6aXBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYzozNTojZGVmaW5lIE1UWVBFXFx0XFx0Yml0bWFwX2lwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMtMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmM9MzM9TU9EVUxFX0FMSUFTKFxcXCJpcF9zZXRfYml0bWFwOmlwLG1hY1xcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jOjM1OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfaXBtYWNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYy0zNi0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jPTI3PU1PRFVMRV9BTElBUyhcXFwiaXBfc2V0X2JpdG1hcDpwb3J0XFxcIik7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jOjI5OiNkZWZpbmUgTVRZUEVcXHRcXHRiaXRtYXBfcG9ydFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMtMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM9NzA9aGFzaF9pcDRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNF9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDRfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXA0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jLTc2LSNkZWZpbmUgSE9TVF9NQVNLXFx0MzJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYz0yMDI9aGFzaF9pcDZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwNl9lbGVtICpuZXh0LCBjb25zdCBzdHJ1Y3QgaGFzaF9pcDZfZWxlbSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXAuYy0yMDgtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcC5jOjIwOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwLmMtMjEwLSNkZWZpbmUgSE9TVF9NQVNLXFx0MTI4XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM9NzI9aGFzaF9pcG1hYzRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTc3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYzo3ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hYzRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmMtNzktI2RlZmluZSBQRlxcdFxcdDRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYz0xODA9aGFzaF9pcG1hYzZfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX2lwbWFjNl9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hYy5jLTE4OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFjLmM6MTkwOiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX2lwbWFjNlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYWMuYy0xOTEtI2RlZmluZSBQRlxcdFxcdDZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM9Njk9aGFzaF9pcG1hcms0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmM6NzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBtYXJrNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBtYXJrLmMtNzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYz0yMDU9aGFzaF9pcG1hcms2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcG1hcms2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jLTIxMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwbWFyay5jOjIxMzojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcG1hcms2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcG1hcmsuYy0yMTQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM9Nzk9aGFzaF9pcHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTg1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmM6ODY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMtODctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYz0yNDk9aGFzaF9pcHBvcnQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jOjI1ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYy0yNTktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYz03Nz1oYXNoX2lwcG9ydGlwNF9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODQtLyogQ29tbW9uIGZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzo4NTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRpcDRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtODYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jPTI0OD1oYXNoX2lwcG9ydGlwNl9kYXRhX25leHQoc3RydWN0IGhhc2hfaXBwb3J0aXA2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMtMjU2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYzoyNTc6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfaXBwb3J0aXA2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jLTI1OC0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0xMjE9aGFzaF9pcHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjEyOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0xMzAtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYz0zNzk9aGFzaF9pcHBvcnRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jLTM4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jOjM4ODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9pcHBvcnRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYy0zODktI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM9NjE9aGFzaF9tYWM0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9tYWM0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX21hYy5jLTY1LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmM6NjY6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbWFjNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbWFjLmMtNjctI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0xMDI9aGFzaF9uZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjEwODojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0xMDktI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yNzM9aGFzaF9uZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTI4MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjI4MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yODItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjk9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM1OiNkZWZpbmUgTVRZUEVcXHRcXHRoYXNoX25ldGlmYWNlNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzYtI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM2Mz1oYXNoX25ldGlmYWNlNl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzcwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzozNzE6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0aWZhY2U2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM3Mi0jZGVmaW5lIEhPU1RfTUFTS1xcdDEyOFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0xMjU9aGFzaF9uZXRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ0X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTEzMC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjEzMTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ0XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0xMzItI2RlZmluZSBIT1NUX01BU0tcXHQzMlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYz0zNjM9aGFzaF9uZXRuZXQ2X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRuZXQ2X2VsZW0gKm5leHQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jLTM3MC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldG5ldC5jOjM3MTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRuZXQ2XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRuZXQuYy0zNzItI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jPTExNz1oYXNoX25ldHBvcnQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMtMTIzLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jOjEyNDojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTEyNS0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYz0zMzQ9aGFzaF9uZXRwb3J0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYzozNDM6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYy0zNDQtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jPTEzMj1oYXNoX25ldHBvcnRuZXQ0X2RhdGFfbmV4dChzdHJ1Y3QgaGFzaF9uZXRwb3J0bmV0NF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmMtMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jOjEzOTojZGVmaW5lIE1UWVBFXFx0XFx0aGFzaF9uZXRwb3J0bmV0NFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTE0MC0jZGVmaW5lIEhPU1RfTUFTS1xcdDMyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYz00MjY9aGFzaF9uZXRwb3J0bmV0Nl9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0cG9ydG5ldDZfZWxlbSAqbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydG5ldC5jLTQzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYzo0MzU6I2RlZmluZSBNVFlQRVxcdFxcdGhhc2hfbmV0cG9ydG5ldDZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnRuZXQuYy00MzYtI2RlZmluZSBIT1NUX01BU0tcXHQxMjhcXG4tLVxcbnNvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jPTE2MDA9c3RhdGljIHUxNiBib290X2xvYWRlcl9jb25maWdfZW1pZihzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sIGludCBkc3BfaW5kZXgpXFxuLS1cXG5zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYy0xNjIwLSNkZWZpbmUgUlNUX09GUyA4XFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmM6MTYyMTojZGVmaW5lIE1UWVBFX09GUyA0XFxuc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMtMTYyMi0jZGVmaW5lIFJIX09GUyAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM2OjU5Ljk5NjExNDgyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MDA0ODMwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHZW5lcmF0ZWQgSGFzaCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIHNlZSBuYW1lcyBsaWtlIGBoYXNoX25ldDRfYWRkYCwgYGhhc2hfbmV0NF9kZWxgLCBgaGFzaF9uZXQ0X3Rlc3RgLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGEgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbuKAlGNyZWF0ZSwgZGVzdHJveSwgZmx1c2gsIGhlYWQsIGFuZCBzbyBvbi4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIHdob2xlIHNldCBvZiBmdW5jdGlvbnMgcHJlZml4ZWQgd2l0aCBgbXR5cGVfYCwgbGlrZSBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBhbmQgYG10eXBlX2ZsdXNoYC4gSXQncyBhIHJhdGhlciBleHRlbnNpdmUgbGlzdCwgaW5jbHVkaW5nIGRlbGV0aW9uLCB0ZXN0aW5nLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG90aGVyIHV0aWxpdGllcyB0aGF0IHNlZW0gdG8gYmUgY3J1Y2lhbCBmb3IgdGhpcy5cblxuVGhlc2UgYG10eXBlX2AgZnVuY3Rpb25zLi4uIGFoLCB0aGV5J3JlIGFsbCBkZWZpbmVkIGFzIHN0YXRpYyB3aXRoaW4gYGlwX3NldF9oYXNoX2dlbi5oYCwgd2hpY2ggaXMgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMhIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGtpbmQgb2YgbWFjcm8gbWFnaWMgZ29pbmcgb24gaGVyZS4gVGhlIGRlZmluaXRpb24gY29uZmlybXMgaXQ6IGAjZGVmaW5lIG10eXBlX2FkZCBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgLiBTbywgYGhhc2hfbmV0NF9hZGRgICppcyogdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lLlxuXG5TaW5jZSB0aGV5J3JlIHN0YXRpYywgdGhleSBhcmUgbm90IGV4cG9ydGVkLCBtZWFuaW5nIHRoZXkgbWF5IGJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgbW9kdWxlLiBUaGV5IG1pZ2h0IGJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudGAuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBpcF9zZXRfaGFzaF9uZXQuY2AgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MDYuMzk2NjAxMzczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTcxNTMzNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2hfbmV0NF9hZGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjA4Ljk5Mzc2MTk5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njc2Mzk1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSVBTRVRfVE9LRU4oTVRZUEUsIF9hZGQpYCBNYWNybyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBJUFNFVF9UT0tFTihNVFlQRSwgX2FkZClgIGlzIGdvaW5nIHRvIHJlc29sdmUgdG8gYGhhc2hfbmV0NF9hZGRgLiBXZSdyZSBkZWFsaW5nIHdpdGggaXBzZXRzLCBhbmQgdGhlIGBfYWRkYCBzdWZmaXggc3Ryb25nbHkgc3VnZ2VzdHMgYW4gYWRkaXRpb24gZnVuY3Rpb24uIENvbnNpZGVyaW5nIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSVAgYWRkcmVzc2VzLCBgbmV0NGAgc2VlbXMgYSBoaWdobHkgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaXBfc2V0X2hhc2hfbmV0LmNgLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIHJhdGhlciwgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm8gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBuYW1lZCBgX2FkZGAuIE15IGV4cGVydCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgcGF0dGVybiBpbiB0aGUgaXBzZXQgY29kZWJhc2UuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaG9sZHMgdHJ1ZSBhbmQgaWYgdGhhdCdzIHdoZXJlIEkgY2FuIGZpbmQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjQ5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MTIuNjYxNDA0NTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUwMjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMTM9c3RydWN0IGhhc2hfbmV0Nl9lbGVtIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jOjIxNDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgaXA7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYy0yMTUtXFx0dTE2IHBhZGRpbmcwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYz0yMjM9aGFzaF9uZXQ2X2RhdGFfZXF1YWwoY29uc3Qgc3RydWN0IGhhc2hfbmV0Nl9lbGVtICppcDEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTIyNi17XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYzoyMjc6XFx0cmV0dXJuIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2aXAxLVxcdTAwM2VpcC5pbjYsIFxcdTAwMjZpcDItXFx1MDAzZWlwLmluNikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jLTIyOC1cXHQgICAgICAgaXAxLVxcdTAwM2VjaWRyID09IGlwMi1cXHUwMDNlY2lkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MTIuNzUyOTEzNTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzE2NTk4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEhhc2ggTmV0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBoYXNoX25ldDRfYWRkYCBmdW5jdGlvbiwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCdzIG5vdCBkaXJlY3RseSBjb2RlZCBpbiBgaXBfc2V0X2hhc2hfbmV0LmNgLiBJbnRlcmVzdGluZy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXNlIHRoaW5ncyBjYW4gYmUgZ2VuZXJhdGVkLiBUaGUgY2x1ZXMgYXJlIHRlbGxpbmcgbWUgdGhhdCB0aGlzIGlzIGJlaW5nIGF1dG9nZW5lcmF0ZWQgYnkgYGlwX3NldF9oYXNoX2dlbi5oYC4gUmlnaHQsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gVG8gdW5kZXJzdGFuZCBob3cgYGhhc2hfbmV0NF9hZGRgIHdvcmtzLCBJIG5lZWQgdG8gc2VlIGhvdyBgbXR5cGVfYWRkYCAob3Igd2hhdGV2ZXIgdGhlIG1hY3JvL3RlbXBsYXRlIGlzKSBpcyBkZWZpbmVkIGluIHRoYXQgaGVhZGVyLiBUaW1lIHRvIG9wZW4gdXAgYGlwX3NldF9oYXNoX2dlbi5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBvZiB0aGlzIGdlbmVyYXRlZCBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgd2lsbCBwcm9iYWJseSByZXZlYWwgc29tZSBtZXRhcHJvZ3JhbW1pbmcgdGVjaG5pcXVlcyBmb3IgZ2VuZXJhdGluZyBtdWx0aXBsZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjE2LjYyNTY2MTIwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MTY5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNjQ9c3RhdGljIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciB6ZXJvbWFzayA9IHt9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTUtI3VuZGVmIG10eXBlX2V4dF9jbGVhbnVwXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxOTY6I3VuZGVmIG10eXBlX2FkZF9jaWRyXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xOTctI3VuZGVmIG10eXBlX2RlbF9jaWRyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTIwNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjIwODojdW5kZWYgbXR5cGVfYWRkXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yMDktI3VuZGVmIG10eXBlX2RlbFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDMtI2RlZmluZSBtdHlwZV9leHRfY2xlYW51cFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZXh0X2NsZWFudXApXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoyNDQ6I2RlZmluZSBtdHlwZV9hZGRfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkX2NpZHIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0yNDUtI2RlZmluZSBtdHlwZV9kZWxfY2lkclxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfZGVsX2NpZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTI1NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjI1NjojZGVmaW5lIG10eXBlX2FkZFxcdFxcdElQU0VUX1RPS0VOKE1UWVBFLCBfYWRkKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtMjU3LSNkZWZpbmUgbXR5cGVfZGVsXFx0XFx0SVBTRVRfVE9LRU4oTVRZUEUsIF9kZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTMyND1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDozMjU6bXR5cGVfYWRkX2NpZHIoc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgaHR5cGUgKmgsIHU4IGNpZHIsIHU4IG4pXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0zMjYte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD02ODM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6Njg0Om10eXBlX2FkZChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKnZhbHVlLCBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0LFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgtNjg1LVxcdCAgc3RydWN0IGlwX3NldF9leHQgKm1leHQsIHUzMiBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oPTY5NT1tdHlwZV9yZXNpemUoc3RydWN0IGlwX3NldCAqc2V0LCBib29sIHJldHJpZWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTg0Ny1cXHRcXHRpZiAoeC1cXHUwMDNlYWQgPT0gSVBTRVRfQUREKSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDo4NDg6XFx0XFx0XFx0bXR5cGVfYWRkKHNldCwgXFx1MDAyNngtXFx1MDAzZWQsIFxcdTAwMjZ4LVxcdTAwM2VleHQsIFxcdTAwMjZ4LVxcdTAwM2VtZXh0LCB4LVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC04NDktXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9OTMwPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjkzMTptdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTkzMi1cXHQgIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTEwNTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQU0VUX05FVF9DT1VOVDsgaSsrKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg6MTA1NzpcXHRcXHRtdHlwZV9hZGRfY2lkcihzZXQsIGgsIERDSURSX0dFVChkLVxcdTAwM2VjaWRyLCBpKSwgaSk7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xMDU4LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaD0xNTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfc2V0X3R5cGVfdmFyaWFudCBtdHlwZV92YXJpYW50ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTYxLVxcdC5hZHRcXHQ9IHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oOjE1NjI6XFx0XFx0W0lQU0VUX0FERF0gPSBtdHlwZV9hZGQsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaC0xNTYzLVxcdFxcdFtJUFNFVF9ERUxdID0gbXR5cGVfZGVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzoxNi43MDExODU0NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDgyNTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgbXR5cGUgU3RydWN0dXJlcyoqXG5cbkFscmlnaHQsIHNvIGBtdHlwZV9hZGRgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIGBbSVBTRVRfQUREXWAgd2l0aGluIHRoZSBgbXR5cGVfdmFyaWFudGAgc3RydWN0dXJlLCB0aGF0J3MgY2xlYXIuIE5vdywgdGhpcyBgbXR5cGVfdmFyaWFudGAgaXMgdGhlbiBiZWluZyB1c2VkIGluIHRoZSBgbXR5cGVfY3JlYXRlYCBmdW5jdGlvbi4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG10eXBlX2NyZWF0ZWAgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgc2VlIHdoYXQgYG10eXBlX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCB0aGF0IHZhcmlhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzoyMC4wOTIwMTQ3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwOTE0MDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdHlwZV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MjAuMjAyOTM1ODYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzM1ODUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzKipcblxuUmlnaHQsIGxldCBtZSBzZWUuIFRoYXQgZnVuY3Rpb24gY2FsbCBsb29rcyBmYW1pbGlhci4uLiAqSVBTRVRfVE9LRU4oSFRZUEUsIF9jcmVhdGUpKi4gT2theSwgc28gKkhUWVBFKiBpcyBwcm9iYWJseSBhIHR5cGUgc3BlY2lmaWVyLCBhbmQgKlxcX2NyZWF0ZSogaXMgdGhlIGltcG9ydGFudCBwYXJ0IGhlcmUuIEl0J3MgYSBjb25zdHJ1Y3RvciBvciBpbml0aWFsaXplciBmdW5jdGlvbi4gVG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZG9pbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyAqXFxfY3JlYXRlKiBmdW5jdGlvbiBpcyBkb2luZy4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX2NyZWF0ZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MgYW5kIGl0cyBleHBlY3RlZCBhcmd1bWVudHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjIzLjI3NjUyNDQ3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4NDAzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmg9MTU3OD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaDoxNTc5OklQU0VUX1RPS0VOKEhUWVBFLCBfY3JlYXRlKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oLTE1ODAtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHUzMiBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MjMuMzQ5MzcyMzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MzE4MDU3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgaGFzaF9uZXQ0X2NyZWF0ZWAsIGBoYXNoX25ldDZfY3JlYXRlYCBzdHlsZSBmdW5jdGlvbnMsIHJpZ2h0PyBCdXQgdGhlIHJlYWwgd29yaywgdGhlIHN0dWZmIHRoYXQncyBhY3R1YWxseSAqbW9kaWZpZWQqIGFuZCB0aGVyZWZvcmUgdGhlIGp1aWN5IGJpdHMgZm9yIGZ1enppbmcsIGlzIGluIHRoZXNlIG90aGVyIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBnb29kIGxpc3QgaGVyZTogYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9pbml0X2NvbW1lbnRgLCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAsIHRoYXQgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCBvbmUsIHRoZSBgZGVzdHJveV9hbmRfZnJlZV9zZXRgIG9uZSwgYW5kIHRoZW4gYSB3aG9sZSBzbGV3IG9mIGBtdHlwZV8qYCBmdW5jdGlvbnMgdGhhdCBhcmUgKnZlcnkqIGludGVyZXN0aW5nLiBXZSd2ZSBnb3Qgc3R1ZmYgdG8gYWRkLCBkZWxldGUsIGZsdXNoLCBhbmQgdGVzdCBDSURScyBhbmQgYWhhc2ggcmVsYXRlZCByb3V0aW5lcy4gVGhlcmUncyBldmVuIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRoIGBtdHlwZV9nY19kb2AuIFdlJ3ZlIGFsc28gZ290IGBrYWR0YCByb3V0aW5lcy5cblxuSG9sZCBvbi4uLiB0aGUgYG10eXBlXypgIGZ1bmN0aW9ucyBhcmUgKmdlbmVyYXRlZCogYmFzZWQgb24gdGhlIGhhc2ggdHlwZSwgd2hpY2ggbWVhbnMgdGhleSdyZSBub3QgdGhlICplbnRyeSogcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGZyb20gdGhlIHRvcCwgYW5kIG5vdCB0aGUgc3RhdGljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGl0ISBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50cywgd2hpY2ggYXJlIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIGBpcF9zZXRfY29yZS5jYCBpcyB0aGUgcGxhY2UgdG8gbG9vay4gTGV0J3MgaGVhZCB0aGVyZSBhbmQgc2VlIHdoYXQgbmV0bGluayBvcGVyYXRpb25zIGFyZSBoYXBwZW5pbmcgdGhhdCBsZWFkIHRvIHRob3NlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzozMC4yODExODA3NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzEwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mbmxfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEwMjA9ZmluZF9mcmVlX2lkKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0LCBjb25zdCBjaGFyICpuYW1lLCBpcF9zZXRfaWRfdCAqaW5kZXgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA0NDpzdGF0aWMgaW50IGlwX3NldF9ub25lKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEwNDUtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMjAzPV9kZXN0cm95X2FsbF9zZXRzKHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEyMzEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEyMzI6c3RhdGljIGludCBpcF9zZXRfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMjMzLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMzAzPWlwX3NldF9mbHVzaF9zZXQoc3RydWN0IGlwX3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEzMTI6c3RhdGljIGludCBpcF9zZXRfZmx1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTMxMy1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTEzNDI9aXBfc2V0X3NldG5hbWUyX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMzUwOnN0YXRpYyBpbnQgaXBfc2V0X3JlbmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzUxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTEzOTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEzOTg6c3RhdGljIGludCBpcF9zZXRfc3dhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMzk5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1Nzc9aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE3MTctXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE3MTg6c3RhdGljIGludCBpcF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xNzE5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE4MTg9c3RhdGljIGludCBpcF9zZXRfYWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODczLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODc0OnN0YXRpYyBpbnQgaXBfc2V0X3VhZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg3NS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODgwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODgxOnN0YXRpYyBpbnQgaXBfc2V0X3VkZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTg4Mi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xODg3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxODg4OnN0YXRpYyBpbnQgaXBfc2V0X3V0ZXN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE4ODktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTIyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTIzOnN0YXRpYyBpbnQgaXBfc2V0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTI0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwX3NldF90eXBlX3BvbGljeVtJUFNFVF9BVFRSX0NNRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xOTcyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxOTczOnN0YXRpYyBpbnQgaXBfc2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTk3NC1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMDIyPWlwX3NldF9wcm90b2NvbF9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjAyNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjAyNjpzdGF0aWMgaW50IGlwX3NldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMDI3LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBhdHRyW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA1OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MjA2MDpzdGF0aWMgaW50IGlwX3NldF9ieW5hbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjA2MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0yMTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpcF9zZXRfaW5kZXhfcG9saWN5W0lQU0VUX0FUVFJfQ01EX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxMDQtXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxMDU6c3RhdGljIGludCBpcF9zZXRfYnlpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTA2LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6MzAuMzM1NDk4NTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNzk3NjIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIGlwc2V0IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIGBpcHNldGAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5ldGxpbmsgb3BlcmF0aW9ucyBhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiBzaG93cyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGBuZXRsaW5rYCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBhbmQgYGlwX3NldF9kdW1wYC4gV2Uga25vdyB0aGF0IHRoZXNlIGFyZSBhbGwgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGludGVyYWN0aW5nIHdpdGggYGlwc2V0YCB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFsc28gc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHNvbWUgb2YgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdpbmcgYGlwc2V0YCBkYXRhLCBpbmNsdWRpbmc6IGBpcF9zZXRfaW5pdF9jb21tZW50YCwgYGlwX3NldF9jb21tZW50X2ZyZWVgLCBgbXR5cGVfYWRkX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJgLCBgbXR5cGVfZGVsX2NpZHJfYWxsYCwgYG10eXBlX2ZsdXNoYCwgYG10eXBlX2FoYXNoX2Rlc3Ryb3lgLCBgbXR5cGVfZ2NfZG9gLCBgbXR5cGVfYWRkYCwgYG10eXBlX2RlbGAsIGBtdHlwZV90ZXN0X2NpZHJzYCwgYG10eXBlX3Rlc3RgLCBgbXR5cGVfaGVhZGAsIGBtdHlwZV9oYXNoX3NpemVgLCBhbmQgYG10eXBlX2J1Y2tldF9zaXplYC4gSSBzZWUgdGhhdCB0aGVzZSBhcmUgY2FsbGVkIGZyb20gdGhlIG5ldGxpbmsgb3BlcmF0aW9ucyAqYW5kKiBmcm9tIHRoZSBkYXRhcGF0aCwgd2hpY2ggbWVhbnMgdGhpcyBjb3VsZCBoYXZlIGNhc2NhZGluZyBpbXBsaWNhdGlvbnMgZm9yIGBpcHRhYmxlc2AgYW5kIGBuZnRhYmxlc2AgdXNlcnMuXG5cblRoaW5raW5nIG1vcmUgZGVlcGx5LCBpdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdG8gYGlwX3NldF9kZXN0cm95YCB0byB1c2UgYHF1ZXVlX3JjdV93b3JrYCB3YXJyYW50cyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uOyBhbnkgdGltaW5nLXNlbnNpdGl2ZSBvcGVyYXRpb25zIGNvdWxkIGhhdmUgdGhlaXIgYmVoYXZpb3VyIGNoYW5nZWQgYnkgdGhpcyBtb2RpZmljYXRpb24uIFRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21tZW50IGhhbmRsaW5nIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RpbmcsIGFzIGNvbW1lbnQgaW5mb3JtYXRpb24gbWlnaHQgYmUgbG9zdCBvciBiZWNvbWUgaW5jb25zaXN0ZW50LiBcblxuT2theSwgbGV0J3MgZm9sbG93IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBgbXR5cGVfYWRkX2NpZHJgIGlzIGNhbGxlZCBmcm9tIGBtdHlwZV9hZGRgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGZyb20gYGlwX3NldF91YWRkYC4gU2ltaWxhcmx5LCBgbXR5cGVfZGVsX2NpZHJgIGlzIGNhbGxlZCBmcm9tIGBtdHlwZV9kZWxgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfc2V0X3VkZWxgLiBUaGUgYG10eXBlX3Rlc3RfY2lkcnNgIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgYG10eXBlX3Rlc3RgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXBfc2V0X3V0ZXN0YCBhbmQsIGNyaXRpY2FsbHksIGZyb20gdGhlIGRhdGFwYXRoLiAgYG10eXBlX2ZsdXNoYCBpcyBjYWxsZWQgYnkgYGlwX3NldF9mbHVzaGAuIGBtdHlwZV9haGFzaF9kZXN0cm95YCBpcyBjYWxsZWQgYnkgYGlwX3NldF9kZXN0cm95YCwgYW5kIGBtdHlwZV9nY19kb2AgaXMgaW52b2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgdGhlIGNvZGUgc2hvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvYCBkaXJlY3RvcnksIGFuZCBJJ2QgZXhwZWN0IGl0IHRvIGJlIGd1YXJkZWQgYnkgYENPTkZJR19JUF9TRVRgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgYWNjdXJhdGUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJIHdpbGwgdXNlIHRoaXMgYXMgbXkgZnJhbWV3b3JrIHRvIGFuYWx5emUgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzozOS40MTUyNjUwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjEzNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9TRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyOm1lbnVjb25maWcgSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklQIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE0PWlmIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTY6Y29uZmlnIElQX1NFVF9NQVhcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTctXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBJUCBzZXRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTI3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyODpjb25maWcgSVBfU0VUX0JJVE1BUF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NDY6Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02NC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo3NDpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjgzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRJUFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LGlwIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTkyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTAzOmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BQ1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTEyOmNvbmZpZyBJUF9TRVRfSEFTSF9NQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjAtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTMwOmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMxLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzgtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzOTpjb25maWcgSVBfU0VUX0hBU0hfTkVUTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE1ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUSUZBQ0VcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxpZmFjZSBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2ODpjb25maWcgSVBfU0VUX0xJU1RfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cXHR0cmlzdGF0ZSBcXFwibGlzdDpzZXQgc2V0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjM5LjQ4NDg4NTYxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk4MDM3OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVuYWJsaW5nIElQIFNldCBNb2R1bGVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGJ1bmNoIG9mIGBpcF9zZXRfaGFzaF8qLmNgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHkgYGlwX3NldF9oYXNoX2lwcG9ydG5ldC5jYCwgYGlwX3NldF9oYXNoX25ldC5jYCwgYGlwX3NldF9oYXNoX25ldGlmYWNlLmNgLCBgaXBfc2V0X2hhc2hfbmV0bmV0LmNgLCBgaXBfc2V0X2hhc2hfbmV0cG9ydC5jYCwgYW5kIGBpcF9zZXRfaGFzaF9uZXRwb3J0bmV0LmNgLiAgVGhhdCBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGFuZCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAuICBBbmQgb2YgY291cnNlLCB3ZSdsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiB0byBiZSBlbmFibGVkLlxuXG5JIGFsc28gc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGlwX3NldF9saXN0X3NldC5jYCwgc28gYElQX1NFVF9MSVNUX1NFVGAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyB0b3VjaCBgSVBfU0VUX0JJVE1BUF9HRU5gLCB3aGljaCBjYXNjYWRlcyB0byBgSVBfU0VUX0JJVE1BUF9JUGAsIGBJUF9TRVRfQklUTUFQX0lQTUFDYCwgYW5kIGBJUF9TRVRfQklUTUFQX1BPUlRgLiBTbywgdG8gYmUgc2FmZSBhbmQgY29tcHJlaGVuc2l2ZSwgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIG1pZ2h0IGJlIHRvIGp1c3QgZW5hYmxlICphbGwqIG9mIHRoZSBJUCBzZXQgbW9kdWxlcy5cblxuTGV0IG1lIGxpc3Qgb3V0IHRoZSBjb25maWdzIEknbSBwbGFubmluZyB0byBlbmFibGUgZm9yIGNsYXJpdHk6XG5cbiogICBgSVBfU0VUYFxuKiAgIGBJUF9TRVRfSEFTSF9JUFBPUlRORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgXG4qICAgYElQX1NFVF9IQVNIX05FVE5FVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVGBcbiogICBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGBcbiogICBgSVBfU0VUX0xJU1RfU0VUYFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQYFxuKiAgIGBJUF9TRVRfQklUTUFQX0lQTUFDYFxuKiAgIGBJUF9TRVRfQklUTUFQX1BPUlRgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGRlcGVuZGVuY2llcywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozNzo0Ni4yODI5MjU5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODQ0NDYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDYuMzkwNzc3MTQzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODYxMjg5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUCBTZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYElQX1NFVGAgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMuIEl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIGluIHRoZSBgbmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgeW91J2QgZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUCBzZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGF0IGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgSVBfU0VUYCBiZWNvbWVzIGF2YWlsYWJsZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGlzLCBob3cgdG8gZW5hYmxlIGl0IGFuZCB3aGF0IGVsc2UgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTc4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDkuNzc2OTExMTE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0ODIyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTI9bWVudWNvbmZpZyBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTE2PWNvbmZpZyBJUF9TRVRfTUFYXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTktXFx0cmFuZ2UgMiA2NTUzNFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yMS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9Mjg9Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTM3PWNvbmZpZyBJUF9TRVRfQklUTUFQX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJiaXRtYXA6aXAsbWFjIHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9NDY9Y29uZmlnIElQX1NFVF9CSVRNQVBfUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiYml0bWFwOnBvcnQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTQ5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz01NT1jb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjU3OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz02NT1jb25maWcgSVBfU0VUX0hBU0hfSVBNQVJLXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hcmsgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY4LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz03ND1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz04Mz1jb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6ODU6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTkzPWNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxuZXQgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMDM9Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwNC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwNTpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTExMj1jb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExNDpcXHRkZXBlbmRzIG9uIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnPTEyMT1jb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjM6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTI0LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzA9Y29uZmlnIElQX1NFVF9IQVNIX05FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMzEtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzI6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTMzLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xMzk9Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQxOlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTQ4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTUwOlxcdGRlcGVuZHMgb24gSVBfU0VUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1MS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc9MTU4PWNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTYxLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNjg9Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNzA6XFx0ZGVwZW5kcyBvbiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTcxLVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xNzg9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFNFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNzktXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBpcHNldFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTgwOlxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTgxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NDkuODg5Mzk3NzUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjM2NDM2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoaXMga2VybmVsIG1vZHVsZSBjb25maWcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQgZm9yIGBJUF9TRVRgLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgc28gdGhvc2UgYXJlIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGNvbmZpZyBsaXN0IHdpdGhvdXQgYSBzZWNvbmQgdGhvdWdodC4gSSdsbCBuZWVkIGBJUF9TRVRgIGl0c2VsZiwgb2YgY291cnNlLCBhbmQgdGhlbiBhbGwgdGhlIGRpZmZlcmVudCBoYXNoIGFuZCBiaXRtYXAgc2V0IHR5cGVzOiBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYCwgYElQX1NFVF9IQVNIX05FVGAsIGBJUF9TRVRfSEFTSF9ORVRJRkFDRWAsIGBJUF9TRVRfSEFTSF9ORVRORVRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVGAsIGBJUF9TRVRfSEFTSF9ORVRQT1JUTkVUYCwgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBhbmQgYElQX1NFVF9CSVRNQVBfUE9SVGAuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHN5bWJvbHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gVGhpbmtpbmcgYWJvdXQgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBpbmNsdWRpbmcgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGRlZmluZWQgaW4gYGlwX3NldF9jb3JlLmNgOiBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBhbmQgYGlwX3NldF91dGVzdGAuIFRob3NlIGFyZSB0aGUgY29yZSBvcGVyYXRpb25zIEknbGwgYmUgcmVseWluZyBvbi5cblxuVGhlbiB0aGVyZSBhcmUgdGhvc2UgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBpbiBgaXBfc2V0X2hhc2hfZ2VuLmhgLiBUaGV5J3JlIHByb2JhYmx5IGNyaXRpY2FsLCBnaXZlbiBob3cgbXVjaCB0aGV5IHNlZW0gdG8gZ2VuZXJhdGUuIFNvLCBgaGFzaF9uZXQ0X2FkZGAsIGBoYXNoX25ldDRfZGVsYCwgYGhhc2hfbmV0NF90ZXN0YCwgYGhhc2hfbmV0NF9jcmVhdGVgLCBgaGFzaF9uZXQ0X2Rlc3Ryb3lgLCBgaGFzaF9uZXQ0X2ZsdXNoYCwgYGhhc2hfbmV0NF9oZWFkYCB3aWxsIGhhdmUgdG8gYmUgZXhhbWluZWQgZm9yIHRoZWlyIGV4cG9ydCBzdGF0dXMuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIGV4cG9ydGVkIHN5bWJvbHMgb3Igc3RhdGljLCB0byBlbnN1cmUgSSdtIGluY2x1ZGluZyBldmVyeXRoaW5nIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4ODgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzc6NTYuMTUzMDQ0NDc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI0NjE5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludC4qbXR5cGVfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM3OjU2LjIxMTI5Njk0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk5NDkxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb24gb2YgU3RhdGljIEZ1bmN0aW9ucyBpbiB0aGUgSVAgU2V0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCwgSSd2ZSBzZWVuIHRoYXQgYG10eXBlX2FkZGAgZnVuY3Rpb24gc2lnbmF0dXJlIGJlZm9yZTogYHN0YXRpYyBpbnQgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsIHN0cnVjdCBpcF9zZXRfZXh0ICptZXh0LCB1MzIgZmxhZ3MpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGJlY2F1c2UgaXQncyAqc3RhdGljKiwgaXQgbWlnaHQgYmUgaW5saW5lZCBkdXJpbmcgY29tcGlsYXRpb24uIFRoYXQgd291bGQgbWVhbiB3ZSB3b3VsZG4ndCBzZWUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlmIHdlJ3JlIGRlYnVnZ2luZy5cblxuQnV0IHRoZW4sIEkgcmVtZW1iZXIgc2VlaW5nIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBtdHlwZV92YXJpYW50YC4gU29tZXRoaW5nIGxpa2UgYFtJUFNFVF9BRERdID0gbXR5cGVfYWRkYC4gQW5kIHRoYXQgY2hhbmdlcyBldmVyeXRoaW5nLiBJZiB5b3UncmUgYXNzaWduaW5nIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gYSBwb2ludGVyLCB0aGUgY29tcGlsZXIgKmNhbid0KiBmdWxseSBpbmxpbmUgaXQuIEl0ICpoYXMqIHRvIGV4aXN0IGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBUaGlzIGltcGxpZXMgdGhlc2UgZnVuY3Rpb25zLCBldmVuIHRob3VnaCBkZWNsYXJlZCBgc3RhdGljYCwgd2lsbCwgaW4gZmFjdCwgaGF2ZSB1bmlxdWUgYWRkcmVzc2VzIOKAkyBzaW1pbGFyIHRvIGhvdyBgaGFzaF9uZXQ0X2FkZGAgaXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgdmVyaWZ5IHRoYXQgdGhpcyBpcywgaW4gZmFjdCwgaG93IGl0IGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowMS4wMTA3OTA4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxOTM3MTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQuKm10eXBlX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowMS4xMDI5OTgzNjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MTUwMDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlwX3NldCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbXR5cGVfYWRkYCBtYWNyby4gTGV0J3Mgc2VlLi4uIGFjY29yZGluZyB0byBgaXBfc2V0X2hhc2hfZ2VuLmhgIGF0IGxpbmUgOTMwLCBpdCdzIGRlZmluZWQgYXMgYSBgc3RhdGljIGludCBtdHlwZV9hZGRgLiBUaGlzIGV4cGFuZHMgdG8gYHN0YXRpYyBpbnQgaGFzaF9uZXQ0X2FkZCguLi4pYC4gVGhlIGZhY3QgdGhhdCBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbiB3aXRoaW4gYG10eXBlX3ZhcmlhbnRgIGltcGxpZXMgdGhpcyBmdW5jdGlvbiByZXNvbHZlcyB0byBhIHVuaXF1ZSBzeW1ib2wuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgaW5jbHVkZSBhIGZldyBvZiB0aGVzZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgYG5ldDRgLCBuYW1lbHkgYGhhc2hfbmV0NF9hZGRgLCBgaGFzaF9uZXQ0X2RlbGAsIGBoYXNoX25ldDRfdGVzdGAsIGBoYXNoX25ldDRfY3JlYXRlYCwgYGhhc2hfbmV0NF9kZXN0cm95YCwgYGhhc2hfbmV0NF9mbHVzaGAsIGFuZCBgaGFzaF9uZXQ0X2hlYWRgLiBBbmQgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIGBuZXQ2YC5cblxuSG93ZXZlciwgaXQncyBwcm9iYWJseSBtb3JlIGZydWl0ZnVsIHRvIHByaW9yaXRpemUgdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzLiBUaG9zZSBhcmUsIGFmdGVyIGFsbCwgdGhlIG5vbi1zdGF0aWMgbWFpbiBhY2Nlc3MgcG9pbnRzIHRvIHRoZSBpcF9zZXQgZnVuY3Rpb25hbGl0eS4gVGhlc2Ugd291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZSBgaXBfc2V0X2NyZWF0ZWAsIGBpcF9zZXRfZGVzdHJveWAsIGBpcF9zZXRfZmx1c2hgLCBgaXBfc2V0X3VhZGRgLCBgaXBfc2V0X3VkZWxgLCBgaXBfc2V0X3V0ZXN0YCwgYW5kIGBpcF9zZXRfZHVtcGAuXG5cbkFuZCwgb2ggeWVzLCBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG9uIGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AuIFRoYXQncyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggbWFrZXMgaXQgYSByZWFsbHkgZ29vZCBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBkZXN0cm95X2FuZF9mcmVlX3NldGAgaXMgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgZnJvbSBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgYGlwX3NldF9jb3JlLmNgIGZvciBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE2OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowNy45NDQ1MDQ2MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTQxNjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9kZXN0cm95X3NldF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTE5Mz1zdGF0aWMgdm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMTk0OmlwX3NldF9kZXN0cm95X3NldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTE5NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTIzMj1zdGF0aWMgaW50IGlwX3NldF9kZXN0cm95KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5MC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjEyOTE6XFx0XFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2cy1cXHUwMDNlcndvcmssIGlwX3NldF9kZXN0cm95X3NldF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTI5Mi1cXHRcXHRxdWV1ZV9yY3Vfd29yayhpcHNldF9kZXN0cm95X3dxLCBcXHUwMDI2cy1cXHUwMDNlcndvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODowOC4wMTIwNTUzMThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkxOTcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJUCBTZXQgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgYGlwX3NldGAgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBpcF9zZXRfZGVzdHJveV9zZXRfd29ya2AgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gaXRzIG93biByaWdodCDigJMgYSBkZWRpY2F0ZWQgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byBnZXQgYSBmdWxsZXIgcGljdHVyZSBvZiBob3cgdGhpcyBzZXQgaXMgbWFuYWdlZCwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGNvbW1lbnRzIGFyZSBoYW5kbGVkLiBMZXQgbWUgZGl2ZSBpbnRvIGBpcF9zZXRfaW5pdF9jb21tZW50YCBhbmQsIG5hdHVyYWxseSwgYGlwX3NldF9jb21tZW50X2ZyZWVgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBwaWVjZXMgaW50ZXJyZWxhdGUgYW5kIHBsYXkgdGhlaXIgcGFydCB3aWxsIGxpa2VseSBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBsaWZlY3ljbGUgb2YgdGhlIElQIHNldCdzIG1ldGFkYXRhIGFuZCBhc3NvY2lhdGVkIGNvbW1lbnRzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoxMS40NTM5NzgxMTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDY0ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NldF9pbml0X2NvbW1lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0zNDY9dm9pZFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzozNDc6aXBfc2V0X2luaXRfY29tbWVudChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBpcF9zZXRfY29tbWVudCAqY29tbWVudCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzQ4LVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBfc2V0X2V4dCAqZXh0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTM2OC19XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjM2OTpFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfaW5pdF9jb21tZW50KTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMzcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoxMS41MTA0NDk2OThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MTYyMjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgS2V5IFN5bWJvbHMqKlxuXG5Pa2F5LCB5ZXMsIEknbSBjb25maXJtaW5nIHRoZXNlIGFyZSBpbmRlZWQgZXhwb3J0ZWQgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpcF9zZXRfY3JlYXRlYCwgYGlwX3NldF9kZXN0cm95YCwgYGlwX3NldF9mbHVzaGAsIGBpcF9zZXRfdWFkZGAsIGBpcF9zZXRfdWRlbGAsIGBpcF9zZXRfdXRlc3RgLCBgaXBfc2V0X2R1bXBgLCBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgLCBgaXBfc2V0X2luaXRfY29tbWVudGAsIGFuZCBgaXBfc2V0X2NvbW1lbnRfZnJlZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBvbmVzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5Ob3csIGEgY3JpdGljYWwgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYW55IG9mIHRob3NlIGNvcmUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGdhbWUgY29uc2lkZXJhYmx5LCBzbyBsZXQncyBtYWtlIHN1cmUgdGhhdCdzIG5vdCB0aGUgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MTUuNDAyMDc0MzczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxODUzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCBpcF9zZXRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTA0ND1zdGF0aWMgaW50IGlwX3NldF9ub25lKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGlwX3NldF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTA1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHJbXSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MTUuNTAyMjcxNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTgzNjQ5MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0bGluayBQb2xpY3kgQXJyYXkqKlxuXG5BbHJpZ2h0LCBzbyB0aGVzZSBwYXJ0aWN1bGFyIGRhdGEgcG9pbnRzIG9yIFwidGhvdWdodHNcIiB3ZSdyZSBkZWFsaW5nIHdpdGgsIGV2ZW4gdGhvdWdoIHRoZXkncmUgY29uY2VwdHVhbGx5IHN0YXRpYyDigJMgdGhleSdyZSBub3QgZHluYW1pYyBpbiB0aGVpciBpbmhlcmVudCBuYXR1cmUg4oCTIGFyZSBhY3R1YWxseSAqYXNzaWduZWQqIHRvIHRoZSBuZXRsaW5rIHBvbGljeSBvciBjYWxsYmFjayBhcnJheS4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYXNzaWdubWVudCBmdWxseS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXM6IGxldCdzIGRpdmUgaW50byB0aGF0IGFycmF5LiBJIG5lZWQgdG8gZXhhbWluZSBpdHMgc3RydWN0dXJlLCBjb250ZW50LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBzdGF0aWMgZWxlbWVudHMgYmVpbmcgaW5jb3Jwb3JhdGVkIGludG8gdGhhdCBhY3RpdmUsIGNhbGxiYWNrLWRyaXZlbiBlbnZpcm9ubWVudC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcG9saWN5IGVuZm9yY2VtZW50LCBhbmQgaG93IGRvZXMgdGhpcyBzdGF0aWMgZGF0YSBpbmZsdWVuY2UgdGhlIGR5bmFtaWMgYmVoYXZpb3Igb2YgdGhvc2UgY2FsbGJhY2tzPyBUaW1lIHRvIGRpc3NlY3QgdGhhdCBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzozODoyNi40ODU5MjM3NzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQwODY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF90eXBlX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM2LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMzc6LyogVW5yZWdpc3RlciBhIHNldCB0eXBlLiBUaGVyZSdzIGEgc21hbGwgcmFjZSB3aXRoIGlwX3NldF9jcmVhdGUgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMjM4LXZvaWRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz05NzM9c3RhcnRfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy05ODItXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjk4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXBfc2V0X2NyZWF0ZV9wb2xpY3lbSVBTRVRfQVRUUl9DTURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTk4NC1cXHRbSVBTRVRfQVRUUl9QUk9UT0NPTF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xMDQ0PXN0YXRpYyBpbnQgaXBfc2V0X25vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDQ5LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgaXBfc2V0X2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0xMDUxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTIxNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIGlwX3NldF9uZXRsaW5rX3N1YnN5c19jYltJUFNFVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTUzLVxcdFtJUFNFVF9DTURfQ1JFQVRFXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoyMTU0OlxcdFxcdC5jYWxsXFx0XFx0PSBpcF9zZXRfY3JlYXRlLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTU1LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYy0yMTU2LVxcdFxcdC5hdHRyX2NvdW50XFx0PSBJUFNFVF9BVFRSX0NNRF9NQVgsXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjIxNTc6XFx0XFx0LnBvbGljeVxcdFxcdD0gaXBfc2V0X2NyZWF0ZV9wb2xpY3ksXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTIxNTgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6Mzg6MjYuNTk1MzM2MzY3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzcyNzQ0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBcdTAwMjYgQ29uZmlndXJhdGlvbiBBbmFseXNpcyBmb3IgSVAgU2V0IFBhdGNoKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaCwgZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtYXAgb2Ygd2hlcmUgdGhlIGNoYW5nZXMgYXJlIG1vc3QgY29uY2VudHJhdGVkLiAgU2luY2UgdGhlIGFkZHJlc3NlcyBvZiB0aGUgZnVuY3Rpb25zIGFzc2lnbmVkIHRvIGBpcF9zZXRfbmV0bGlua19zdWJzeXNfY2JgIGFyZSB0YWtlbiwgdGhleSBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzIGFuZCBhcmUgdGh1cyBnb29kIGZvY3VzIHN5bWJvbHMuICBcblxuSSd2ZSBub3RlZCB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zOiBgaXBfc2V0X2luaXRfY29tbWVudGAsIGBpcF9zZXRfY29tbWVudF9mcmVlYCwgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYCwgYXMgd2VsbCBhcyBhIGxhcmdlIG51bWJlciBvZiBnZW5lcmF0ZWQgaGFzaCBmdW5jdGlvbnMgbGlrZSBgbXR5cGVfYWRkX2NpZHJgLCBhbmQgYG10eXBlX2RlbF9jaWRyYC4gR2l2ZW4gdGhlIGhpZ2ggbnVtYmVyIG9mIHRoZXNlIGdlbmVyYXRlZCBmdW5jdGlvbnMsIEknbGwgZm9jdXMgb24gdGhlIG5ldGxpbmsgZW50cnkgcG9pbnRzIHRoYXQgY2FsbCB0aGVtLCBhbmQgcG9zc2libHkgYSBoYW5kZnVsIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBgaGFzaF9uZXQ0X2FkZGAsIGFzIGl0IGRpcmVjdGx5IGNvbnRhaW5zIG9yIGNhbGxzIGxvZ2ljIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFxuXG5JJ20gY29uZmlybWluZyB0aGF0IGBoYXNoX25ldDRfYWRkYCBleGlzdHMgaW4gdGhlIG9iamVjdCBmaWxlIGJlY2F1c2UgaXQgaXMgYXNzaWduZWQgdG8gYG10eXBlX3ZhcmlhbnQuYWR0W0lQU0VUX0FERF1gLCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiBuZXRsaW5rIGVudHJ5IHBvaW50IGFuZCBnZW5lcmF0ZWQgZnVuY3Rpb25zLCB3aGljaCB3aWxsIGJlIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbHMuIFRoaXMgaXMgdGhlIGxpc3Q6XG5cbiogICBgaXBfc2V0X2NyZWF0ZWBcbiogICBgaXBfc2V0X2Rlc3Ryb3lgXG4qICAgYGlwX3NldF9mbHVzaGBcbiogICBgaXBfc2V0X3VhZGRgXG4qICAgYGlwX3NldF91ZGVsYFxuKiAgIGBpcF9zZXRfdXRlc3RgXG4qICAgYGlwX3NldF9kZXN0cm95X3NldF93b3JrYFxuKiAgIGBpcF9zZXRfaW5pdF9jb21tZW50YFxuKiAgIGBpcF9zZXRfY29tbWVudF9mcmVlYFxuKiAgIGBoYXNoX25ldDRfYWRkYFxuKiAgIGBoYXNoX25ldDRfZGVsYFxuKiAgIGBoYXNoX25ldDRfdGVzdGBcbiogICBgaGFzaF9uZXQ2X2FkZGBcbiogICBgaGFzaF9uZXQ2X2RlbGBcbiogICBgaGFzaF9uZXQ2X3Rlc3RgXG5cbkknbSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbiBvZiBgbXR5cGVfYWRkYCwgd2hpY2ggZXhwYW5kcyB0byBgaGFzaF9uZXQ0X2FkZGAgYXMgZXhwZWN0ZWQuIEknbSBhbHNvIGluY2x1ZGluZyB0aGUgZGF0YXBhdGggZnVuY3Rpb25zIChga2FkdGAgZnVuY3Rpb25zKSBjYWxsZWQgaW4gYGlwdGFibGVzYCwgYXMgdGhleSBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LiBTcGVjaWZpY2FsbHksIHRoZXNlOlxuXG4qICAgYGhhc2hfaXBwb3J0bmV0NF9rYWR0YFxuKiAgIGBoYXNoX25ldDRfa2FkdGBcbiogICBgaGFzaF9uZXRpZmFjZTRfa2FkdGBcbiogICBgaGFzaF9uZXRuZXQ0X2thZHRgXG4qICAgYGhhc2hfbmV0cG9ydDRfa2FkdGBcbiogICBgaGFzaF9uZXRwb3J0bmV0NF9rYWR0YFxuXG5OZXh0LCBJJ20gcmV2aWV3aW5nIHRoZSBhZmZlY3RlZCBjb25maWd1cmF0aW9ucy4gIFRoZSBjaGFuZ2VzIHNlZW0gdG8gdGFyZ2V0IHNldmVyYWwgaGFzaCB0eXBlczogYElQX1NFVF9IQVNIX0lQUE9SVE5FVGAsIGBJUF9TRVRfSEFTSF9ORVRgLCBgSVBfU0VUX0hBU0hfTkVUSUZBQ0VgLCBgSVBfU0VUX0hBU0hfTkVUTkVUYCwgYElQX1NFVF9IQVNIX05FVFBPUlRgLCBgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVGAsIGFzIHdlbGwgYXMgYElQX1NFVF9MSVNUX1NFVGAsIGBJUF9TRVRfQklUTUFQX0lQYCwgYElQX1NFVF9CSVRNQVBfSVBNQUNgLCBgSVBfU0VUX0JJVE1BUF9QT1JUYCwgYW5kIHRoZSBiYXNpYyBgSVBfU0VUYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUmAgY29uZmlncy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBleHBsaWNpdGx5IG1vZGlmaWVkIG9uZXM6XG5cbiogICBgSVBfU0VUX0hBU0hfSVBQT1JUTkVUYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVElGQUNFYFxuKiAgIGBJUF9TRVRfSEFTSF9ORVRORVRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRgXG4qICAgYElQX1NFVF9IQVNIX05FVFBPUlRORVRgXG4qICAgYElQX1NFVF9MSVNUX1NFVGBcbiogICBgSVBfU0VUX0JJVE1BUF9JUGBcbiogICBgSVBfU0VUX0JJVE1BUF9JUE1BQ2BcbiogICBgSVBfU0VUX0JJVE1BUF9QT1JUYFxuKiAgIGBJUF9TRVRgXG4qICAgYElORVRgXG4qICAgYE5FVEZJTFRFUmBcblxuTm93LCByZWZpbmluZyB0aGUgZm9jdXMgc3ltYm9sIGxpc3QgYmFzZWQgb24gdGhlIHBhdGNoJ3MgZXhwbGljaXQgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyB0aGUgZmluYWwgbGlzdDpcblxuKiAgIGBpcF9zZXRfY3JlYXRlYFxuKiAgIGBpcF9zZXRfZGVzdHJveWBcbiogICBgaXBfc2V0X2ZsdXNoYFxuKiAgIGBpcF9zZXRfdWFkZGBcbiogICBgaXBfc2V0X3VkZWxgXG4qICAgYGlwX3NldF91dGVzdGBcbiogICBgaXBfc2V0X2Rlc3Ryb3lfc2V0X3dvcmtgXG4qICAgYGlwX3NldF9pbml0X2NvbW1lbnRgXG4qICAgYGlwX3NldF9jb21tZW50X2ZyZWVgXG4qICAgYGhhc2hfXG5cbiIsIklucHV0VG9rZW5zIjozNjA3NiwiT3V0cHV0VG9rZW5zIjozNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjM4OjQ4LjM2ODA4NDMxM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA1MjEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9jcmVhdGVcIixcbiAgICBcImlwX3NldF9kZXN0cm95XCIsXG4gICAgXCJpcF9zZXRfZmx1c2hcIixcbiAgICBcImlwX3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWRlbFwiLFxuICAgIFwiaXBfc2V0X3V0ZXN0XCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveV9zZXRfd29ya1wiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9rYWR0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJUF9TRVRcIixcbiAgICBcIklQX1NFVF9IQVNIX0lQUE9SVE5FVFwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRJRkFDRVwiLFxuICAgIFwiSVBfU0VUX0hBU0hfTkVUTkVUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUXCIsXG4gICAgXCJJUF9TRVRfSEFTSF9ORVRQT1JUTkVUXCIsXG4gICAgXCJJUF9TRVRfTElTVF9TRVRcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfSVBNQUNcIixcbiAgICBcIklQX1NFVF9CSVRNQVBfUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9jcmVhdGVcIixcbiAgICBcImlwX3NldF9kZXN0cm95XCIsXG4gICAgXCJpcF9zZXRfZmx1c2hcIixcbiAgICBcImlwX3NldF91YWRkXCIsXG4gICAgXCJpcF9zZXRfdWRlbFwiLFxuICAgIFwiaXBfc2V0X3V0ZXN0XCIsXG4gICAgXCJpcF9zZXRfZGVzdHJveV9zZXRfd29ya1wiLFxuICAgIFwiaXBfc2V0X2luaXRfY29tbWVudFwiLFxuICAgIFwiaXBfc2V0X2NvbW1lbnRfZnJlZVwiLFxuICAgIFwiaGFzaF9uZXQ0X2FkZFwiLFxuICAgIFwiaGFzaF9uZXQ0X2RlbFwiLFxuICAgIFwiaGFzaF9uZXQ0X3Rlc3RcIixcbiAgICBcImhhc2hfbmV0NF9rYWR0XCIsXG4gICAgXCJoYXNoX25ldG5ldDRfa2FkdFwiLFxuICAgIFwiaGFzaF9uZXRwb3J0NF9rYWR0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVAgc2V0IGRlc3RydWN0aW9uIGxvZ2ljIHRvIHVzZSBhIHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIFJDVSBkaXJlY3RseSwgY2hhbmdlcyB0aGUgZXh0ZW5zaW9uIHNpemUgdHJhY2tpbmcgdG8gdXNlIGF0b21pYzY0X3QsIGFuZCByZWZhY3RvcnMgdGhlIENJRFIgcHJlZml4IHRyYWNraW5nIGluIGhhc2ggc2V0cyB0byB1c2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5cyBhbmQgUkNVLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgSVAgc2V0IHN1YnN5c3RlbSB0aGF0IGFmZmVjdCBzZXQgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBlbGVtZW50IGFkZGl0aW9uL2RlbGV0aW9uLCBhbmQgbWF0Y2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[1] Phase: Succeeded StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 07:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 07:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2] Phase: Succeeded StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 07:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 07:38:59 +0000 UTC FinishedAt: 2026-08-01 07:39:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowp5b68/series-workflowp5b68-convert-artifact-989164024/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 07:39:11 +0000 UTC FinishedAt: 2026-08-01 08:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 07:39:11 +0000 UTC FinishedAt: 2026-08-01 08:06:15 +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:*4527c633-84f0-4e2e-afda-28e32de22269,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-workflowp5b68/series-workflowp5b68-convert-artifact-989164024/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": "7c50e5a1-8147-4017-be93-7b2d86cfd416", "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-workflowp5b68/series-workflowp5b68-build-action-325793454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 07:39:11 +0000 UTC FinishedAt: 2026-08-01 08:06:03 +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:*4527c633-84f0-4e2e-afda-28e32de22269,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-workflowp5b68/series-workflowp5b68-convert-artifact-989164024/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": "7c50e5a1-8147-4017-be93-7b2d86cfd416", "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-workflowp5b68/series-workflowp5b68-build-action-325793454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 08:06:15 +0000 UTC FinishedAt: 2026-08-01 08:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 08:06:15 +0000 UTC FinishedAt: 2026-08-01 08:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 08:06:15 +0000 UTC FinishedAt: 2026-08-01 08:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 08:06:15 +0000 UTC FinishedAt: 2026-08-01 08:06:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowp5b68/series-workflowp5b68-convert-artifact-12897375/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 08:06:26 +0000 UTC FinishedAt: 2026-08-01 08:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 08:06:26 +0000 UTC FinishedAt: 2026-08-01 08:08:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c50e5a1-8147-4017-be93-7b2d86cfd416,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-workflowp5b68/series-workflowp5b68-build-action-325793454/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-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 08:08:36 +0000 UTC FinishedAt: 2026-08-01 08:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 08:08:36 +0000 UTC FinishedAt: 2026-08-01 08:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 08:08:36 +0000 UTC FinishedAt: 2026-08-01 08:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 08:08:37 +0000 UTC FinishedAt: 2026-08-01 08:31:38 +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:*4527c633-84f0-4e2e-afda-28e32de22269,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-workflowp5b68/series-workflowp5b68-convert-artifact-12897375/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": "ba009701-da03-4155-b81f-a9bbf75a3c51", "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-workflowp5b68/series-workflowp5b68-build-action-1351965171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 08:08:37 +0000 UTC FinishedAt: 2026-08-01 08:31:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4527c633-84f0-4e2e-afda-28e32de22269,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-workflowp5b68/series-workflowp5b68-convert-artifact-12897375/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": "ba009701-da03-4155-b81f-a9bbf75a3c51", "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-workflowp5b68/series-workflowp5b68-build-action-1351965171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 08:31:38 +0000 UTC FinishedAt: 2026-08-01 08:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 08:31:38 +0000 UTC FinishedAt: 2026-08-01 08:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 08:31:38 +0000 UTC FinishedAt: 2026-08-01 08:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 08:31:38 +0000 UTC FinishedAt: 2026-08-01 08:33:26 +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:*ba009701-da03-4155-b81f-a9bbf75a3c51,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-workflowp5b68/series-workflowp5b68-build-action-1351965171/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-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 08:33:36 +0000 UTC FinishedAt: 2026-08-01 08:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +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":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"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:*7c50e5a1-8147-4017-be93-7b2d86cfd416,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba009701-da03-4155-b81f-a9bbf75a3c51,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-workflowp5b68/series-workflowp5b68-build-action-325793454/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-workflowp5b68/series-workflowp5b68-build-action-1351965171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 08:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 08:34:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"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-workflowp5b68/series-workflowp5b68-convert-artifact-3260000376/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 08:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 08:33:37 +0000 UTC FinishedAt: 2026-08-01 08:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 08:34:19 +0000 UTC FinishedAt: 2026-08-01 11:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5b68[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_create","ip_set_destroy","ip_set_flush","ip_set_uadd","ip_set_udel","ip_set_utest","ip_set_destroy_set_work","ip_set_init_comment","ip_set_comment_free","hash_net4_add","hash_net4_del","hash_net4_test","hash_net4_kadt","hash_netnet4_kadt","hash_netport4_kadt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NETFILTER","IP_SET","IP_SET_HASH_IPPORTNET","IP_SET_HASH_NET","IP_SET_HASH_NETIFACE","IP_SET_HASH_NETNET","IP_SET_HASH_NETPORT","IP_SET_HASH_NETPORTNET","IP_SET_LIST_SET","IP_SET_BITMAP_IP","IP_SET_BITMAP_IPMAC","IP_SET_BITMAP_PORT"],"series_id":"5e169718-4c75-4bec-a028-4858d1af2cb7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 08:34:19 +0000 UTC FinishedAt: 2026-08-01 11:36:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c50e5a1-8147-4017-be93-7b2d86cfd416,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba009701-da03-4155-b81f-a9bbf75a3c51,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-workflowp5b68/series-workflowp5b68-build-action-325793454/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-workflowp5b68/series-workflowp5b68-build-action-1351965171/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-workflowp5b68/series-workflowp5b68-convert-artifact-3260000376/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,}