Name: series-workflowjt6ht Phase: Succeeded StartedAt: 2026-06-29 07:18:26 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[0] Phase: Succeeded StartedAt: 2026-06-29 07:18:26 +0000 UTC FinishedAt: 2026-06-29 07:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 07:18:26 +0000 UTC FinishedAt: 2026-06-29 07:31:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8169_set_channels", "rtl8169_realloc_rx", "rtl_set_rss_config", "rtl8169_init_rss", "rtl8169_set_rx_ring_num", "rtl_alloc_irq", "rtl8169_alloc_rx_desc", "rtl8169_free_rx_desc", "r8169_init_napi" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE2OV9zZXRfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9yZWFsbG9jX3J4JiMzNDssCiAgICAmIzM0O3J0bF9zZXRfcnNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2luaXRfcnNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X3J4X3JpbmdfbnVtJiMzNDssCiAgICAmIzM0O3J0bF9hbGxvY19pcnEmIzM0OywKICAgICYjMzQ7cnRsODE2OV9hbGxvY19yeF9kZXNjJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZnJlZV9yeF9kZXNjJiMzNDssCiAgICAmIzM0O3I4MTY5X2luaXRfbmFwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY5YmM3MzNmOWY0MWVlZWFhNTdiMzYzOGY1NGFhOTM4MmU2ODU3ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwNzozMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uOTE5NGMyMTQyZjk1ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC03NCw5ICYjNDM7NzQsMzMgQEBcbiAjZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgTlVNX1JYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBSODE2OV9UWF9SSU5HX0JZVEVTXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXb3JrYXJvdW5kIGZvciB0aGUgaGFyZHdhcmUgRE1BIHByZWZldGNoZXIuIFRoZSBIL1cgbWlnaHQgYWdncmVzc2l2ZWx5XG4mIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlXG4mIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbiYjNDM7ICogYWNjZXNzIGFuZCBwb3RlbnRpYWwgSU9NTVUgZmF1bHRzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXHQoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG4mIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1x0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9UWF9RVUVVRVNcdDhcbiYjNDM7I2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFU1x0MVxuJiM0MzsjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcdDFcbiYjNDM7I2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbiYjNDM7I2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQ1x0MzBcbiYjNDM7I2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFx0MVxuJiM0MzsjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4mIzQzOyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTS1x0R0VOTUFTSygxOCwgMTYpXG4mIzQzOyNkZWZpbmUgUlNTX0hBU0hfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuJiM0MzsjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcbiYjNDM7I2RlZmluZSBSWFNfUlNTX1VEUFx0XHRCSVQoMjcpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY0XHRcdEJJVCgyOClcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0lQVjZcdFx0QklUKDI5KVxuJiM0MzsjZGVmaW5lIFJYU19SU1NfVENQXHRcdEJJVCgzMClcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTS1x0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1x0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXG4gXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXHQweGE0MDBcbiBcbkBAIC00NDEsMTEgJiM0Mzs0NjUsMTYgQEAgZW51bSBydGw4MTI1X3JlZ2lzdGVycyB7XG4gXHRUeFBvbGxfODEyNVx0XHQ9IDB4OTAsXG4gXHRMRURTRUwzXHRcdFx0PSAweDk2LFxuIFx0TUFDMF9CS1BcdFx0PSAweDE5ZTAsXG4mIzQzO1x0UkRTQVJfUTFfTE9XXHRcdD0gMHg0MDAwLFxuIFx0UlNTX0NUUkxfODEyNVx0XHQ9IDB4NDUwMCxcbiBcdFFfTlVNX0NUUkxfODEyNVx0XHQ9IDB4NDgwMCxcbiBcdEVFRV9UWElETEVfVElNRVJfODEyNVx0PSAweDYwNDgsXG4mIzQzO1x0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXHQ9IDB4MGQwMCxcbiYjNDM7XHRJU1JfVkVDX01BUF9SRUdcdFx0PSAweDBkMDQsXG4mIzQzO1x0SU1SX1NFVF9WRUNfTUFQX1JFR1x0PSAweDBkMGMsXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIR1x0MjlcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcdDB4MjNmXG4gXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcdEJJVCgyMilcbkBAIC01NzYsNiAmIzQzOzYwNSwyMyBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuJiM0MzsjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuJiM0MzsjZGVmaW5lXHRJU1JJTVJfVE9LX1EwXHRCSVQoOClcbiYjNDM7I2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbiYjNDM7I2RlZmluZSBSU1NfS0VZX1JFR1x0XHRcdDB4NDYwMFxuJiM0MzsjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9SU1NcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNl9TVVBQXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuJiM0MzsjZGVmaW5lXHRSWF9SRVNfUlNTXHRcdFx0QklUKDIyKVxuJiM0MzsjZGVmaW5lXHRSWF9SVU5UX1JTU1x0XHRcdEJJVCgyMSlcbiYjNDM7I2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBSVExfUlhfUV9OVU1fTUFTS1x0XHRHRU5NQVNLKDQsIDIpXG4gfTtcbiBcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XG5AQCAtNjMzLDYgJiM0Mzs2NzksMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xuICNkZWZpbmUgUnhQcm90b0lQXHQoUElEMSB8IFBJRDApXG4gI2RlZmluZSBSeFByb3RvTWFza1x0UnhQcm90b0lQXG4gXG4mIzQzOyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbiYjNDM7I2RlZmluZVx0UlhfVENQVF9ERVNDX1JTU1x0QklUKDE4KVxuJiM0MzsjZGVmaW5lXHRSWF9VRFBGX0RFU0NfUlNTXHRCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbiYjNDM7I2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4mIzQzO1xuIFx0SVBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRVRFBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE1KSwgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuIFx0VENQRmFpbFx0XHQ9ICgxIFx1MDAzY1x1MDAzYyAxNCksIC8qIFRDUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbkBAIC02NTQsOSAmIzQzOzcwNSwyNyBAQCBzdHJ1Y3QgVHhEZXNjIHtcbiB9O1xuIFxuIHN0cnVjdCBSeERlc2Mge1xuLVx0X19sZTMyIG9wdHMxO1xuLVx0X19sZTMyIG9wdHMyO1xuLVx0X19sZTY0IGFkZHI7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX0RFRkFVTFQgKi9cbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdF9fbGUzMiBvcHRzMTtcbiYjNDM7XHRcdFx0X19sZTMyIG9wdHMyO1xuJiM0MztcdFx0XHRfX2xlNjQgYWRkcjtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX1JTUyAqL1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdF9fbGU2NCByc3NfYWRkcjtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19pbmZvO1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19yZXN1bHQ7XG4mIzQzO1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czI7XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgcmluZ19pbmZvIHtcbkBAIC03MjgsMjcgJiM0Mzs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4mIzQzO2VudW0gcnhfZGVzY190eXBlIHtcbiYjNDM7XHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRSWF9ERVNDX1RZUEVfUlNTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4mIzQzO1x0dTMyIGluZGV4O1x0XHRcdFx0XHQvKiBSeCBxdWV1ZSBpbmRleCAqL1xuJiM0MztcdHUzMiBjdXJfcng7XHRcdFx0XHRcdC8qIEluZGV4IG9mIG5leHQgUnggcGt0LiAqL1xuJiM0MztcdHUzMiBkaXJ0eV9yeDtcdFx0XHRcdFx0LyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi9cbiYjNDM7XHRzdHJ1Y3QgUnhEZXNjICpyeF9kZXNjX2FycmF5O1x0XHRcdC8qIGFycmF5IG9mIFJ4IERlc2MqL1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XHQvKiBSeCBkYXRhIGJ1ZmZlciBwaHlzaWNhbCBkbWEgYWRkcmVzcyAqL1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XHRcdFx0XHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1x0XHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcbiYjNDM7XHR1MzIgcnNzX2tleVtSVExfUlNTX0tFWV9TSVpFIC8gc2l6ZW9mKHUzMildO1xuJiM0MztcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4tXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuIFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi9cbi1cdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcbi1cdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xuLVx0c3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuIFx0c3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdO1x0LyogVHggZGF0YSBidWZmZXJzICovXG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyByeF9yaW5nW1I4MTY5X01BWF9SWF9RVUVVRVNdO1xuJiM0MztcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGh3X3N1cHBfbnVtX3J4X3F1ZXVlcztcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSAqcnNzX2RhdGE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbiYjNDM7XHRlbnVtIHJ4X2Rlc2NfdHlwZSBpbml0X3J4X2Rlc2NfdHlwZTtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcbiBcdHN0cnVjdCB7XG5AQCAtMTU3OCw2ICYjNDM7MTY2OSwxMSBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5AQCAtMTY0NCwyNiAmIzQzOzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdm9pZCBydGxfYWNrX2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIGJpdHMpXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50clN0YXR1c184MTI1LCBiaXRzKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIGJpdHMpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJTdGF0dXMsIGJpdHMpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtXHUwMDNlaXJxX21hc2spO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTE4NjcsOSAmIzQzOzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgUnhEZXNjICpkZXNjLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4mIzQzO1x0dTMyIG9wdHMyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuJiM0MztcdFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19vcHRzMik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcbiBcdGlmIChvcHRzMiBcdTAwMjYgUnhWbGFuVGFnKVxuIFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgXHUwMDI2IDB4ZmZmZikpO1xuQEAgLTI0MTYsMzQgJiM0MzsyNTM1LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4tXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuLVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXG4tXHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuLVx0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuLVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbi1cdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuLVx0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4tXHQuZ2V0X3JlZ3NcdFx0PSBydGw4MTY5X2dldF9yZWdzLFxuLVx0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4tXHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbi1cdC5nZXRfc3RyaW5nc1x0XHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXG4tXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuLVx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4tXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuLVx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4tXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuLVx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuLVx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXG4tXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuLVx0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXG4tXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuLX07XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpydGw4MTY5X2dldF9jaGlwX3ZlcnNpb24odTMyIHhpZCwgYm9vbCBnbWlpKVxuIHtcbiBcdC8qIENoaXBzIGNvbWJpbmluZyBhIDFHYnBzIE1BQyB3aXRoIGEgMTAwTWJwcyBQSFkgKi9cbkBAIC0yNjE5LDkgJiM0MzsyNzEwLDI3IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSwgMHgwLCBSODE2OV9SWF9SSU5HX0JZVEVTKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VkaXJ0eV90eCA9IHRwLVx1MDAzZWN1cl90eCA9IHRwLVx1MDAzZWN1cl9yeCA9IDA7XG4mIzQzO1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuJiM0MztcdHRwLVx1MDAzZWN1cl90eCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRyaW5nLVx1MDAzZWRpcnR5X3J4ID0gMDtcbiYjNDM7XHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbiYjNDM7XHRcdHJpbmctXHUwMDNlaW5kZXggPSBpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgJiM0MzsyNzg5LDM0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3MpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgbnVtX3J4X3JpbmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0bmV0ZGV2X3Jzc19rZXlfZmlsbCh0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3Nfa2V5LCBSVExfUlNTX0tFWV9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldHVwX3J4X3BhcmFtcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcbiYjNDM7XHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX0RFRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xuQEAgLTI4MDIsOCAmIzQzOzI5MzksNjMgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMTYodHAsIFJ4TWF4U2l6ZSwgUjgxNjlfUlhfQlVGX1NJWkUgJiM0MzsgMSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnVtX2VudHJpZXMgPSBSVExfUlNTX0tFWV9TSVpFIC8gc2l6ZW9mKHUzMik7XG4mIzQzO1x0dTMyICpyc3Nfa2V5ID0gdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleTtcbiYjNDM7XHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbnVtX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgJiM0MzsgKGkgKiA0KSwgcnNzX2tleVtpXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcmV0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHU4ICppbmRpcl90YmwgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfFxuJiM0MztcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICYjNDM7IDFdIFx1MDAzY1x1MDAzYyA4IHxcbiYjNDM7XHRcdFx0ICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAyXSBcdTAwM2NcdTAwM2MgMTYgfFxuJiM0MztcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICYjNDM7IDNdIFx1MDAzY1x1MDAzYyAyNDtcbiYjNDM7XHRcdFJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICYjNDM7IGksIHJldGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJzc19jdHJsO1xuJiM0MztcbiYjNDM7XHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXHUwMDNlbnVtX3J4X3JpbmdzKSk7XG4mIzQzO1xuJiM0MztcdC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi9cbiYjNDM7XHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQXG4mIzQzO1x0XHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcbiYjNDM7XHRcdCB8IFJTU19DVFJMX0lQVjZfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFA7XG4mIzQzO1xuJiM0MztcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgIGlsb2cyKHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMpKTtcbiYjNDM7XG4mIzQzO1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQodHApO1xuJiM0MztcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4mIzQzO1x0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcbiBcdCAqIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIFR4RGVzY0FkZHJMb3cgdG8gd29yay5cbkBAIC0yODExLDggJiM0MzszMDAzLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyAmIzQzOyAoaSAtIDEpICogODtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMzg1OCw2ICYjNDM7NDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUxNiByeF9xX251bTtcbiYjNDM7XHR1MTYgcV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcbiYjNDM7XHRxX2N0cmwgXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XG4mIzQzO1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIHFfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggdG1wO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xuJiM0MztcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbiYjNDM7XHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICYjNDM7NDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xuIFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCAwKTtcbiBcbiYjNDM7XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuJiM0MztcbiBcdC8qIGRpc2FibGUgVVBTICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XG4gXG5AQCAtMzg4NSw2ICYjNDM7NDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFx1MDAyNiB+MHgwMik7XG4gXG4mIzQzO1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cbiYjNDM7XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRydGw4MTI1X3NldF9yeF9xX251bSh0cCk7XG4mIzQzO1x0XHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcbiYjNDM7XHRcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XG4gXHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuQEAgLTQxMjEsNiAmIzQzOzQzNTIsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xuIFx0cnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7XG4gXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRydGxfc2V0X3Jzc19jb25maWcodHApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTtcbiYjNDM7XHR9XG4gXHRydGxfbG9ja19jb25maWdfcmVncyh0cCk7XG4gXG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbkBAIC00MTQ4LDE5ICYjNDM7NDM4NSwzMiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiB7XG4tXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0dTMyIGVvcjtcbiBcbi1cdGRlc2MtXHUwMDNlb3B0czIgPSAwO1xuLVx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbi1cdGRtYV93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnNzX29wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0ZG1hX3dtYigpO1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0ZG1hX3dtYigpO1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4tXHRcdFx0XHRcdCAgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICYjNDM7IGluZGV4O1xuIFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4gXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpO1xuIFx0ZG1hX2FkZHJfdCBtYXBwaW5nO1xuQEAgLTQxNzcsNTYgJiM0Mzs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbi1cdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuJiM0MztcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xuJiM0MztcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuJiM0MztcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRlc2MtXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuJiM0MztcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcbiBcdHJldHVybiBkYXRhO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsXG4mIzQzO1x0XHRcdCAgICAgZW51bSByeF9kZXNjX3R5cGUgZGVzY190eXBlKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuIFx0XHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxuLVx0XHRcdCAgICAgICBsZTY0X3RvX2NwdSh0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcbiYjNDM7XHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbiYjNDM7XHRcdGlmIChkZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykge1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuJiM0MztcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXG4ge1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOVU1fUlhfREVTQzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKmRhdGE7XG4gXG4tXHRcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLVx1MDAzZVJ4RGVzY0FycmF5ICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuJiM0MztcdFx0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbi1cdFx0dHAtXHUwMDNlUnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4gXHR9XG4gXG4gXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHRwLCBcdTAwMjZyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9hbGxvY19yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2cmluZy1cdTAwM2VyeF9waHlfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRpZiAocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4mIzQzO1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBSODE2OV9SWF9SSU5HX0JZVEVTLFxuJiM0MztcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksXG4mIzQzO1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuJiM0MztcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcbiBcbiBcdG1lbXNldCh0cC1cdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cdTAwM2V0eF9za2IpKTtcbi1cdG1lbXNldCh0cC1cdTAwM2VSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLVx1MDAzZVJ4X2RhdGFidWZmKSk7XG4gXG4tXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbiYjNDM7XHRcdHJldCA9IHJ0bDgxNjlfcnhfZmlsbCh0cCwgcmluZyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9jbGVhcjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfY2xlYXI6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgJiM0Mzs0NTg5LDIxIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuYXBpX2Rpc2FibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggJiM0Mzs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGRtYV9hZGRyX3QgcGh5X2FkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgJiM0Mzsgaik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KVxuLVx0XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBpKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xuIFxuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XG4gXHRydGxfaHdfc3RhcnQodHApO1xuIH1cbiBcbkBAIC00NzU4LDMwICYjNDM7NTEwNSwxMDQgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2hhc2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbiYjNDM7XHR1MzIgcnNzX2hlYWRlcl9pbmZvO1xuJiM0MztcdHUzMiBoYXNoX3ZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEodHAtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYSEFTSCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJzc19oZWFkZXJfaW5mbyA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX2R3b3JkLnJzc19pbmZvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLFxuJiM0MztcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuJiM0MztcdFx0ICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICB1MzIgb3B0czEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNzdW1fb2sgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4mIzQzO1x0XHQgICAgKChvcHRzMSBcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXHUwMDI2XHUwMDI2ICEob3B0czEgXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKG9wdHMxID09IFJ4UHJvdG9UQ1AgfHwgb3B0czEgPT0gUnhQcm90b1VEUClcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4tXHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4mIzQzO1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0XHR1MzIgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJYX1JFU19SU1MpKSB7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuJiM0MztcdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUlhfQ1JDX1JTUylcbiYjNDM7XHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxuJiM0MztcdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4mIzQzO1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4gXHRpbnQgY291bnQ7XG4gXG4tXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCB0cC1cdTAwM2VjdXJfcngmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICYjNDM7IGVudHJ5O1xuJiM0MztcdGZvciAoY291bnQgPSAwOyBjb3VudCBcdTAwM2MgYnVkZ2V0OyBjb3VudCYjNDM7JiM0MzssIHJpbmctXHUwMDNlY3VyX3J4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHJpbmctXHUwMDNlY3VyX3J4ICUgTlVNX1JYX0RFU0M7XG4mIzQzO1x0XHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICYjNDM7IGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbiYjNDM7XHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KHJ0bDgxNjlfcnhfZGVzY19vcHRzMSh0cCwgZGVzYykpO1xuIFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBEZXNjT3duKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTQ3OTEsMTkgJiM0Mzs1MjEyLDE2IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdCAqL1xuIFx0XHRkbWFfcm1iKCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XG4gXHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7UnggRVJST1IuIHN0YXR1cyA9ICUwOHhcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICBzdGF0dXMpO1xuIFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4gXG4gXHRcdFx0aWYgKCEoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcbiBcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuLVx0XHRcdGVsc2UgaWYgKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKVxuJiM0MztcdFx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKVxuIFx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbkBAIC00ODIwLDE0ICYjNDM7NTIzOCwxNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuIFx0XHR9XG4gXG4tXHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnRwLVx1MDAzZW5hcGksIHBrdF9zaXplKTtcbiYjNDM7XHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuIFx0XHR9XG4gXG4tXHRcdGFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLVx1MDAzZWFkZHIpO1xuLVx0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXHUwMDNlUnhfZGF0YWJ1ZmZbZW50cnldKTtcbiYjNDM7XHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuJiM0MztcdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbZW50cnldKTtcbiBcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdHByZWZldGNoKHJ4X2J1Zik7XG5AQCAtNDgzNiwxOSAmIzQzOzUyNTQsMjMgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcdFx0c2tiLVx1MDAzZWxlbiA9IHBrdF9zaXplO1xuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbi1cdFx0cnRsODE2OV9yeF9jc3VtKHNrYiwgc3RhdHVzKTtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTtcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4gXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOztcbiBcbi1cdFx0bmFwaV9ncm9fcmVjZWl2ZShcdTAwMjZ0cC1cdTAwM2VuYXBpLCBza2IpO1xuJiM0MztcdFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xuIFxuIFx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgcGt0X3NpemUpO1xuIHJlbGVhc2VfZGVzY3JpcHRvcjpcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltlbnRyeV0pO1xuJiM0MztcdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQ4NTYsOCAmIzQzOzUyNzgsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuLVx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBkZXZfaW5zdGFuY2U7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1x0dTMyIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihuYXBpLVx1MDAzZWRldik7XG4mIzQzO1x0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuIFxuIFx0aWYgKChzdGF0dXMgXHUwMDI2IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzIFx1MDAyNiB0cC1cdTAwM2VpcnFfbWFzaykpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbkBAIC00ODczLDEzICYjNDM7NTI5OSw4NiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbi1cdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0bmFwaV9zY2hlZHVsZShuYXBpKTtcbiBvdXQ6XG4gXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuJiM0MztcbiYjNDM7XHRcdHBjaV9mcmVlX2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBuYXBpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcbiYjNDM7e1xuJiM0MztcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBtZXNzYWdlX2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X21zaXgoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XHRpbnQgbWVzc2FnZV9pZDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVzc2FnZV9pZCA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRykge1xuJiM0MztcdFx0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XG4mIzQzO1x0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcbiYjNDM7XHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yZXF1ZXN0X2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuJiM0MztcdGludCBpLCByYztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bmFwaSA9IFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0X21zaXgsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgaSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBOVUxMLCBuYXBpLCBcJiMzNDslcy0lZFwmIzM0OywgZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfaXJxO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfaXJxOlxuJiM0MztcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyAmIzQzOzU0MTMsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4tXHRpbnQgd29ya19kb25lO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiBcbiBcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuIFxuLVx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1x0LyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi9cbiYjNDM7XHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgJiM0Mzs1NTM1LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4gXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4gXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbi1cdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG5AQCAtNTA1MSwxOCAmIzQzOzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gXG4tXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiYjNDM7XHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBcbiBcdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVx1MDAzZVR4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlVHhQaHlBZGRyKTtcbiBcdHRwLVx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbiYjNDM7XHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC01MDc0LDcgJiM0Mzs1NTczLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcdH1cbiB9XG4gI2VuZGlmXG4gXG5AQCAtNTA4Miw3ICYjNDM7NTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4tXHR1bnNpZ25lZCBsb25nIGlycWZsYWdzO1xuIFx0aW50IHJldHZhbCA9IC1FTk9NRU07XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbkBAIC01MDk2LDEwICYjNDM7NTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmICghdHAtXHUwMDNlVHhEZXNjQXJyYXkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXG4tXHRcdFx0XHRcdCAgICAgXHUwMDI2dHAtXHUwMDNlUnhQaHlBZGRyLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghdHAtXHUwMDNlUnhEZXNjQXJyYXkpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdHhfMDtcbiYjNDM7XHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcbiBcbiBcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG5AQCAtNTEwNyw4ICYjNDM7NTYxMCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTtcbiBcbi1cdGlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7XG4tXHRyZXR2YWwgPSByZXF1ZXN0X2lycSh0cC1cdTAwM2VpcnEsIHJ0bDgxNjlfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LVx1MDAzZW5hbWUsIHRwKTtcbiYjNDM7XHRyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbkBAIC01MTI1LDE1ICYjNDM7NTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIFxuIGVycl9mcmVlX2lycTpcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xuIGVycl9yZWxlYXNlX2Z3XzI6XG4gXHRydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7XG4tXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBlcnJfZnJlZV9yeF8xOlxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuLVx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbi1lcnJfZnJlZV90eF8wOlxuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG5AQCAtNTI3NSw2ICYjNDM7NTc3NSwxNCBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiAmIzQzOzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuIFxuQEAgLTUzMjAsMTUgJiM0Mzs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuIFxuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNilcbi1cdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4mIzQzO1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbiYjNDM7XG4mIzQzO1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XG4mIzQzO1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyAmIzQzOzU4ODgsMTcgQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChudmVjcyBcdTAwM2MgMClcbiYjNDM7XHRcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG52ZWNzO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VpcnFfbnZlY3MgPSBudmVjcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuQEAgLTU1OTksNiAmIzQzOzYxNTMsMjQxIEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiYjNDM7XHRpbnQgbWVzc2FnZV9pZDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVzc2FnZV9pZCBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKVxuJiM0MztcdFx0d29ya19kb25lICYjNDM7PSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1ttZXNzYWdlX2lkXSwgYnVkZ2V0LCBuYXBpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdvcmtfZG9uZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1xuJiM0MztcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXG4mIzQzO1x0XHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4mIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4mIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4mIzQzOyAqIFZlY3RvciAoUnhRcyAmIzQzOyBUeFFzKSBhbmQgdXBcdFx0OiBPdGhlciBldmVudHMgKExpbmsgc3RhdHVzKDI5KSwgZXRjLilcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgKCpwb2xsX2ZuKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSA9IHJ0bDgxNjlfcG9sbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUyAmIzQzOyBSODEyN19NQVhfVFhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF90eDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG5ldGlmX25hcGlfYWRkKHRwLVx1MDAzZWRldiwgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0Y2gtXHUwMDNlbWF4X3J4ID0gdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuJiM0MztcdGNoLVx1MDAzZW1heF90eCA9IDE7XG4mIzQzO1xuJiM0MztcdGNoLVx1MDAzZXJ4X2NvdW50ID0gdHAtXHUwMDNlbnVtX3J4X3JpbmdzO1xuJiM0MztcdGNoLVx1MDAzZXR4X2NvdW50ID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3JlYWxsb2Nfcngoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG5ld19jb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ld19jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZuZXdfcnhbaV07XG4mIzQzO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4mIzQzO1x0XHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZ0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LCByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZnJlZTpcbiYjNDM7XHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2bmV3X3J4W2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4mIzQzO1x0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZ0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHQgIG5ld19yeFtpXS5yeF9kZXNjX2FycmF5LCBuZXdfcnhbaV0ucnhfcGh5X2FkZHIpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcbiYjNDM7XHRlbnVtIHJ4X2Rlc2NfdHlwZSBvbGRfcnhfZGVzY190eXBlO1xuJiM0MztcdGVudW0gcnhfZGVzY190eXBlIG5ld19kZXNjX3R5cGU7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjaC1cdTAwM2VyeF9jb3VudCA9PSB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3J4X2Rlc2NfdHlwZSA9IHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcbiYjNDM7XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7VGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyB8fCAhaXNfcG93ZXJfb2ZfMihjaC1cdTAwM2VyeF9jb3VudCkgfHxcbiYjNDM7XHQgICAgdHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzYyBnZXRfbWluX2lycV9udmVjcyh0cCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X2Rlc2NfdHlwZSA9IGNoLVx1MDAzZXJ4X2NvdW50IFx1MDAzZSAxID8gUlhfREVTQ19UWVBFX1JTUyA6IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3J1bm5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBjaC1cdTAwM2VyeF9jb3VudCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IGNoLVx1MDAzZXJ4X2NvdW50O1xuJiM0MztcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3X3J4ID0ga3phbGxvY19vYmpzKCpuZXdfcngsIFI4MTY5X01BWF9SWF9RVUVVRVMpO1xuJiM0MztcdGlmICghbmV3X3J4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiYjNDM7XHRydGw4MTY5X2Rvd24odHApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGRldiwgY2gtXHUwMDNlcnhfY291bnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl91cDtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydGw4MTY5X3JlYWxsb2NfcngodHAsIG5ld19yeCwgY2gtXHUwMDNlcnhfY291bnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXHUwMDNlcnhfY291bnQ7XG4mIzQzO1xuJiM0MztcdG1lbXNldCh0cC1cdTAwM2VyeF9yaW5nLCAwLCBzaXplb2YodHAtXHUwMDNlcnhfcmluZykpO1xuJiM0MztcdG1lbWNweSh0cC1cdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVx1MDAzZXJ4X2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnNzX2luZGlyX3RibCh0cCwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbiYjNDM7XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV91cCh0cCk7XG4mIzQzO1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUobmV3X3J4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzZXQ6XG4mIzQzO1x0aWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpKVxuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXFxuXCYjMzQ7KTtcbiYjNDM7XHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7XG4mIzQzO2Vycl91cDpcbiYjNDM7XHRydGw4MTY5X3VwKHRwKTtcbiYjNDM7XHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuJiM0MztcdGtmcmVlKG5ld19yeCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbiYjNDM7XHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuJiM0MztcdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuJiM0MztcdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4mIzQzO1x0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuJiM0MztcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4mIzQzO1x0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4mIzQzO1x0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4mIzQzO1x0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbiYjNDM7XHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbiYjNDM7XHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbiYjNDM7XHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4mIzQzO1x0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4mIzQzO1x0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbiYjNDM7XHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4mIzQzO1x0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4mIzQzO1x0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4mIzQzO1x0LmdldF9jaGFubmVsc1x0XHQ9IHJ0bDgxNjlfZ2V0X2NoYW5uZWxzLFxuJiM0MztcdC5zZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X3NldF9jaGFubmVscyxcbiYjNDM7XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbiYjNDM7XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuJiM0MztcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4mIzQzO1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbiYjNDM7XHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2MDksNyAmIzQzOzYzOTgsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbiYjNDM7XHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4mIzQzO1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcbiYjNDM7XHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbiYjNDM7XG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICYjNDM7NjQ4MSwxMiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCF0cC1cdTAwM2Vyc3NfZGF0YSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdHRwLVx1MDAzZWNwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSBcdTAwMjYgQ1BDTURfTUFTSztcbiBcbiBcdGlmIChzaXplb2YoZG1hX2FkZHJfdCkgXHUwMDNlIDQgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xOCBcdTAwMjZcdTAwMjZcbkBAIC01NzAzLDExICYjNDM7NjUwMSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdHJ0bF9od19yZXNldCh0cCk7XG4gXG4mIzQzO1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4mIzQzO1xuIFx0cmMgPSBydGxfYWxsb2NfaXJxKHRwKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHJjLCBcJiMzNDtDYW4mIzM5O3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCYjMzQ7KTtcbiBcbi1cdHRwLVx1MDAzZWlycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xuJiM0MztcdHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHRwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpXG4mIzQzO1x0XHRydGw4MTY5X2luaXRfcnNzKHRwKTtcbiBcbiBcdElOSVRfV09SSyhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrLCBydGxfdGFzayk7XG4gXHRkaXNhYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG5AQCAtNTcxNiwxMyAmIzQzOzY1MTksMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbiYjNDM7XHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlXG4gXHQgKiBJbnRlcnJ1cHRzIHN0b3AgZmxvd2luZyBvbiBoaWdoIGxvYWQgb24gODExMFNDZCBjb250cm9sbGVycy5cbkBAIC01Nzc4LDYgJiM0Mzs2NTg0LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4mIzQzO1x0cmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLVx1MDAzZWRldiwgMSwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwmIzM0O3NldCB0eC9yeCBudW0gZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgJiM0Mzs2NjAyLDE1IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0dHAtXHUwMDNlcnRsODE2OV9uYXBpID0ga2NhbGxvYyh0cC1cdTAwM2VpcnFfbnZlY3MsIHNpemVvZihzdHJ1Y3QgbmFwaV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyODE2OV9pbml0X25hcGkodHApO1xuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MDMsOCAmIzQzOzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHR0cC1cdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcbiBcdH1cbiBcbi1cdG5ldGRldl9pbmZvKGRldiwgXCYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLCB0cC1cdTAwM2VpcnEpO1xuJiM0MztcdG5ldGRldl9pbmZvKGRldiwgXCYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZCAoJWQgdG90YWwpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxuJiM0MztcdFx0ICAgIHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCB0cC1cdTAwM2VpcnFfbnZlY3MpO1xuIFxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXG5cJiMzNDssXG5AQCAtNTgyMSw2ICYjNDM7NjYzOCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX25hcGk6XG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4MTY5X3BjaV9kcml2ZXIgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X3NldF9jaGFubmVscyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3JlYWxsb2NfcngmIzM0OywKICAgICYjMzQ7cnRsX3NldF9yc3NfY29uZmlnJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW5pdF9yc3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfcnhfcmluZ19udW0mIzM0OywKICAgICYjMzQ7cnRsX2FsbG9jX2lycSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2FsbG9jX3J4X2Rlc2MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9mcmVlX3J4X2Rlc2MmIzM0OywKICAgICYjMzQ7cjgxNjlfaW5pdF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIFJlY2VpdmUgU2lkZSBTY2FsaW5nIChSU1MpLCBtdWx0aXBsZSBSWCBxdWV1ZXMsIGFuZCBNU0ktWCBpbnRlcnJ1cHRzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29tcGxleCByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgZXRodG9vbCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OWJjNzMzZjlmNDFlZWVhYTU3YjM2MzhmNTRhYTkzODJlNjg1N2VjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMDc6MzA6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCmluZGV4IGVjNGZjMjFmYTIxZmIwLi45MTk0YzIxNDJmOTVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKQEAgLTc0LDkgJiM0Mzs3NCwzMyBAQAogI2RlZmluZSBOVU1fVFhfREVTQwkyNTYJLyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5VTV9SWF9ERVNDCTI1NgkvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi8KICNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFUwkoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpCi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVMJKE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKQomIzQzOwomIzQzOy8qCiYjNDM7ICogV29ya2Fyb3VuZCBmb3IgdGhlIGhhcmR3YXJlIERNQSBwcmVmZXRjaGVyLiBUaGUgSC9XIG1pZ2h0IGFnZ3Jlc3NpdmVseQomIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlCiYjNDM7ICogYWxsb2NhdGUgdGhpcyBleHRyYSBkdW1teSBzcGFjZSBhcyBwYWRkaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcwomIzQzOyAqIGFjY2VzcyBhbmQgcG90ZW50aWFsIElPTU1VIGZhdWx0cy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVMJKChOVU1fUlhfREVTQyAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSkKICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTCShNQVhfU0tCX0ZSQUdTICYjNDM7IDEpCiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlMJKDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpCiYjNDM7I2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTCTgKJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9UWF9RVUVVRVMJOAomIzQzOyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVMJMQomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFUwkxCiYjNDM7I2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQwkzMgomIzQzOyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUMJMzAKJiM0MzsjZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUCTEKJiM0MzsjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkUJNDAKJiM0MzsjZGVmaW5lIFJTU19DUFVfTlVNX01BU0sJR0VOTUFTSygxOCwgMTYpCiYjNDM7I2RlZmluZSBSU1NfSEFTSF9NQVNLCQlHRU5NQVNLKDEwLCA4KQomIzQzOyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOAomIzQzOyNkZWZpbmUgUlhTX1JTU19VRFAJCUJJVCgyNykKJiM0MzsjZGVmaW5lIFJYU19SU1NfSVBWNAkJQklUKDI4KQomIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY2CQlCSVQoMjkpCiYjNDM7I2RlZmluZSBSWFNfUlNTX1RDUAkJQklUKDMwKQomIzQzOyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0sJKFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNikKJiM0MzsjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLCShSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKQogCiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0UJMHhhNDAwCiAKQEAgLTQ0MSwxMSAmIzQzOzQ2NSwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHsKIAlUeFBvbGxfODEyNQkJPSAweDkwLAogCUxFRFNFTDMJCQk9IDB4OTYsCiAJTUFDMF9CS1AJCT0gMHgxOWUwLAomIzQzOwlSRFNBUl9RMV9MT1cJCT0gMHg0MDAwLAogCVJTU19DVFJMXzgxMjUJCT0gMHg0NTAwLAogCVFfTlVNX0NUUkxfODEyNQkJPSAweDQ4MDAsCiAJRUVFX1RYSURMRV9USU1FUl84MTI1CT0gMHg2MDQ4LAomIzQzOwlJTVJfQ0xFQVJfVkVDX01BUF9SRUcJPSAweDBkMDAsCiYjNDM7CUlTUl9WRUNfTUFQX1JFRwkJPSAweDBkMDQsCiYjNDM7CUlNUl9TRVRfVkVDX01BUF9SRUcJPSAweDBkMGMsCiB9OwogCiYjNDM7I2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRwkyOQogI2RlZmluZSBMRURTRUxfTUFTS184MTI1CTB4MjNmCiAKICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1CUJJVCgyMikKQEAgLTU3Niw2ICYjNDM7NjA1LDIzIEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewogCiAJLyogbWFnaWMgZW5hYmxlIHYyICovCiAJTWFnaWNQYWNrZXRfdjIJPSAoMSAmbHQ7Jmx0OyAxNiksCS8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqLwomIzQzOyNkZWZpbmUJSVNSSU1SX0xJTktDSEcJQklUKDI5KQomIzQzOyNkZWZpbmUJSVNSSU1SX1RPS19RMAlCSVQoOCkKJiM0MzsjZGVmaW5lCUlTUklNUl9ST0tfUTAJQklUKDApCiYjNDM7I2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkwJCTB4ZDgKJiM0MzsjZGVmaW5lIFJTU19LRVlfUkVHCQkJMHg0NjAwCiYjNDM7I2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRwkJMHg0NzAwCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUAkJQklUKDEpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQCQlCSVQoMikKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUAkJQklUKDMpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQCUJJVCg1KQomIzQzOyNkZWZpbmUJUlhfUkVTX1JTUwkJCUJJVCgyMikKJiM0MzsjZGVmaW5lCVJYX1JVTlRfUlNTCQkJQklUKDIxKQomIzQzOyNkZWZpbmUJUlhfQ1JDX1JTUwkJCUJJVCgyMCkKJiM0MzsjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLCQlHRU5NQVNLKDQsIDIpCiB9OwogCiBlbnVtIHJ0bF9kZXNjX2JpdCB7CkBAIC02MzMsNiAmIzQzOzY3OSwxMSBAQCBlbnVtIHJ0bF9yeF9kZXNjX2JpdCB7CiAjZGVmaW5lIFJ4UHJvdG9JUAkoUElEMSB8IFBJRDApCiAjZGVmaW5lIFJ4UHJvdG9NYXNrCVJ4UHJvdG9JUAogCiYjNDM7I2RlZmluZQlSWF9VRFBUX0RFU0NfUlNTCUJJVCgxOSkKJiM0MzsjZGVmaW5lCVJYX1RDUFRfREVTQ19SU1MJQklUKDE4KQomIzQzOyNkZWZpbmUJUlhfVURQRl9ERVNDX1JTUwlCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KJiM0MzsjZGVmaW5lCVJYX1RDUEZfREVTQ19SU1MJQklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovCiYjNDM7CiAJSVBGYWlsCQk9ICgxICZsdDsmbHQ7IDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovCiAJVURQRmFpbAkJPSAoMSAmbHQ7Jmx0OyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KIAlUQ1BGYWlsCQk9ICgxICZsdDsmbHQ7IDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqLwpAQCAtNjU0LDkgJiM0Mzs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7CiB9OwogCiBzdHJ1Y3QgUnhEZXNjIHsKLQlfX2xlMzIgb3B0czE7Ci0JX19sZTMyIG9wdHMyOwotCV9fbGU2NCBhZGRyOwomIzQzOwl1bmlvbiB7CiYjNDM7CQkvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqLwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlfX2xlMzIgb3B0czE7CiYjNDM7CQkJX19sZTMyIG9wdHMyOwomIzQzOwkJCV9fbGU2NCBhZGRyOwomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCS8qIFJYX0RFU0NfVFlQRV9SU1MgKi8KJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlfX2xlNjQgcnNzX2FkZHI7CiYjNDM7CQkJCXN0cnVjdCB7CiYjNDM7CQkJCQlfX2xlMzIgcnNzX2luZm87CiYjNDM7CQkJCQlfX2xlMzIgcnNzX3Jlc3VsdDsKJiM0MzsJCQkJfSByc3NfZHdvcmQ7CiYjNDM7CQkJfTsKJiM0MzsJCQlfX2xlMzIgcnNzX29wdHMyOwomIzQzOwkJCV9fbGUzMiByc3Nfb3B0czE7CiYjNDM7CQl9OwomIzQzOwl9OwogfTsKIAogc3RydWN0IHJpbmdfaW5mbyB7CkBAIC03MjgsMjcgJiM0Mzs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ4X2Rlc2NfdHlwZSB7CiYjNDM7CVJYX0RFU0NfVFlQRV9ERUZBVUxULAomIzQzOwlSWF9ERVNDX1RZUEVfUlNTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7CiYjNDM7CXUzMiBpbmRleDsJCQkJCS8qIFJ4IHF1ZXVlIGluZGV4ICovCiYjNDM7CXUzMiBjdXJfcng7CQkJCQkvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi8KJiM0MzsJdTMyIGRpcnR5X3J4OwkJCQkJLyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi8KJiM0MzsJc3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTsJCQkvKiBhcnJheSBvZiBSeCBEZXNjKi8KJiM0MzsJZG1hX2FkZHJfdCByeF9kZXNjX3BoeV9hZGRyW05VTV9SWF9ERVNDXTsJLyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi8KJiM0MzsJZG1hX2FkZHJfdCByeF9waHlfYWRkcjsJCQkJLyogUnggZGVzYyBwaHlzaWNhbCBhZGRyZXNzICovCiYjNDM7CXN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107CQkvKiBSeCBkYXRhIGJ1ZmZlcnMgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHsKJiM0MzsJdTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTsKJiM0MzsJdTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdOwomIzQzOwl1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJdm9pZCBfX2lvbWVtICptbWlvX2FkZHI7CS8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAllbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uOwogCWVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7Ci0JdTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGRpcnR5X3R4OwogCXN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5OwkvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi8KLQlzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTsJLyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBUeFBoeUFkZHI7Ci0JZG1hX2FkZHJfdCBSeFBoeUFkZHI7Ci0Jc3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTsJLyogUnggZGF0YSBidWZmZXJzICovCiAJc3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdOwkvKiBUeCBkYXRhIGJ1ZmZlcnMgKi8KJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9yeF9yaW5nczsKIAl1MTYgY3BfY21kOwogCXUxNiB0eF9scGlfdGltZXI7CiAJdTMyIGlycV9tYXNrOwotCWludCBpcnE7CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTsKJiM0MzsJdW5zaWduZWQgaW50IGlycV9udmVjczsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7CiAJc3RydWN0IGNsayAqY2xrOwogCiAJc3RydWN0IHsKQEAgLTE1NzgsNiAmIzQzOzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY0NCwyNiAmIzQzOzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JaWYgKHJ0bF9pc184MTI1KHRwKSkKLQkJUlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJUlRMX1cxNih0cCwgSW50ck1hc2ssIDApOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLSZndDtpcnFfbWFzayk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC0mZ3Q7aXJxX21hc2spOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0xODY3LDkgJiM0MzsxOTc1LDIwIEBAIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxNjlfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJVHhWbGFuVGFnIHwgc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJc3RydWN0IFJ4RGVzYyAqZGVzYywKJiM0MzsJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtvcHRzMik7CiYjNDM7CXUzMiBvcHRzMjsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAKIAlpZiAob3B0czIgJmFtcDsgUnhWbGFuVGFnKQogCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgJmFtcDsgMHhmZmZmKSk7CkBAIC0yNDE2LDM0ICYjNDM7MjUzNSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKLQkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAotCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLAotCS5nZXRfZHJ2aW5mbwkJPSBydGw4MTY5X2dldF9kcnZpbmZvLAotCS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCi0JLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9jb2FsZXNjZQkJPSBydGxfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKLQkuZ2V0X3JlZ3MJCT0gcnRsODE2OV9nZXRfcmVncywKLQkuZ2V0X3dvbAkJPSBydGw4MTY5X2dldF93b2wsCi0JLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAotCS5nZXRfc3RyaW5ncwkJPSBydGw4MTY5X2dldF9zdHJpbmdzLAotCS5nZXRfc3NldF9jb3VudAkJPSBydGw4MTY5X2dldF9zc2V0X2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF90c19pbmZvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sCi0JLm53YXlfcmVzZXQJCT0gcGh5X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCi0JLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCi0JLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAotCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCi0JLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9ldGhfbWFjX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cywKLQkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpCiB7CiAJLyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqLwpAQCAtMjYxOSw5ICYjNDM7MjcxMCwyNyBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJbWVtc2V0KHJpbmctJmd0O3J4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXRwLSZndDtkaXJ0eV90eCA9IHRwLSZndDtjdXJfdHggPSB0cC0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJdHAtJmd0O2RpcnR5X3R4ID0gMDsKJiM0MzsJdHAtJmd0O2N1cl90eCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJcmluZy0mZ3Q7ZGlydHlfcnggPSAwOwomIzQzOwkJcmluZy0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJCXJpbmctJmd0O2luZGV4ID0gaTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjY4MCw2ICYjNDM7Mjc4OSwzNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cnRsX2NoaXBjbWRfY29uZCwgMTAwLCAxMDApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2luZGlyX3RibChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9yeF9yaW5ncykKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIG51bV9yeF9yaW5ncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJbmV0ZGV2X3Jzc19rZXlfZmlsbCh0cC0mZ3Q7cnNzX2RhdGEtJmd0O3Jzc19rZXksIFJUTF9SU1NfS0VZX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0dXBfcnhfcGFyYW1zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdHAtJmd0O251bV9yeF9yaW5ncyA9IDE7CiYjNDM7CXN3aXRjaCAodHAtJmd0O21hY192ZXJzaW9uKSB7CiYjNDM7CWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDoKJiM0MzsJCXRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9NQVhfUlhfUVVFVUVTOwomIzQzOwkJdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfREVGQVVMVF9SWF9RVUVVRVM7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdHJ1Y3QgcnRsX2Z3ICpydGxfZnc7CkBAIC0yODAyLDggJiM0MzsyOTM5LDYzIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJUlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSAmIzQzOyAxKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcnNzX2tleShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUzMiBudW1fZW50cmllcyA9IFJUTF9SU1NfS0VZX1NJWkUgLyBzaXplb2YodTMyKTsKJiM0MzsJdTMyICpyc3Nfa2V5ID0gdHAtJmd0O3Jzc19kYXRhLSZndDtyc3Nfa2V5OwomIzQzOwljb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRzsKJiM0MzsKJiM0MzsJLyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBudW1fZW50cmllczsgaSYjNDM7JiM0MzspCiYjNDM7CQlSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyAmIzQzOyAoaSAqIDQpLCByc3Nfa2V5W2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTggKmluZGlyX3RibCA9IHRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CS8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkgJiM0Mzs9IDQpIHsKJiM0MzsJCXUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfAomIzQzOwkJCSAgICh1MzIpaW5kaXJfdGJsW2kgJiM0MzsgMV0gJmx0OyZsdDsgOCB8CiYjNDM7CQkJICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAyXSAmbHQ7Jmx0OyAxNiB8CiYjNDM7CQkJICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAzXSAmbHQ7Jmx0OyAyNDsKJiM0MzsJCVJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICYjNDM7IGksIHJldGEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUzMiByc3NfY3RybDsKJiM0MzsKJiM0MzsJcnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLSZndDtudW1fcnhfcmluZ3MpKTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqLwomIzQzOwlyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCiYjNDM7CQkgfCBSU1NfQ1RSTF9JUFY0X1NVUFAKJiM0MzsJCSB8IFJTU19DVFJMX0lQVjZfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFA7CiYjNDM7CiYjNDM7CXJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSywKJiM0MzsJCQkgICAgICAgaWxvZzIodHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzKSk7CiYjNDM7CiYjNDM7CVJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIHJzc19jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldF9yc3NfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTsKJiM0MzsJcnRsODE2OV9zdG9yZV9yZXRhKHRwKTsKJiM0MzsJcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1swXTsKJiM0MzsKIAkvKgogCSAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoCiAJICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLgpAQCAtMjgxMSw4ICYjNDM7MzAwMywxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCSAqLwogCVJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC0mZ3Q7VHhQaHlBZGRyKSAmZ3Q7Jmd0OyAzMik7CiAJUlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRyTG93LCAoKHU2NCkgdHAtJmd0O1R4UGh5QWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JUlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSB0cC0mZ3Q7UnhQaHlBZGRyKSAmZ3Q7Jmd0OyAzMik7Ci0JUlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLSZndDtSeFBoeUFkZHIpICZhbXA7IERNQV9CSVRfTUFTSygzMikpOwomIzQzOwlSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHJpbmctJmd0O3J4X3BoeV9hZGRyKSAmZ3Q7Jmd0OyAzMik7CiYjNDM7CVJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csICgodTY0KSByaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAxOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZHNhcl9yZWcgPSBSRFNBUl9RMV9MT1cgJiM0MzsgKGkgLSAxKSAqIDg7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCVJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkciAmZ3Q7Jmd0OyAzMikpOwomIzQzOwkJUlRMX1czMih0cCwgcmRzYXJfcmVnLCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMzg1OCw2ICYjNDM7NDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZCkKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpICZhbXA7IEJJVCgxMyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUxNiByeF9xX251bTsKJiM0MzsJdTE2IHFfY3RybDsKJiM0MzsKJiM0MzsJcnhfcV9udW0gPSBpbG9nMih0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJcV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTsKJiM0MzsJcV9jdHJsICZhbXA7PSB+UlRMX1JYX1FfTlVNX01BU0s7CiYjNDM7CXFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7CiYjNDM7CVJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCB0bXA7CiYjNDM7CiYjNDM7CXRtcCA9IFJUTF9SOCh0cCwgSU5UX0NGRzBfODEyNSk7CiYjNDM7CXRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTsKJiM0MzsJUlRMX1c4KHRwLCBJTlRfQ0ZHMF84MTI1LCB0bXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApOwpAQCAtMzg2Niw2ICYjNDM7NDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAwKTsKIAlSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApOwogCiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCXJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTsKJiM0MzsKIAkvKiBkaXNhYmxlIFVQUyAqLwogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTsKIApAQCAtMzg4NSw2ICYjNDM7NDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlSVExfVzgodHAsIDB4RDgsIFJUTF9SOCh0cCwgMHhEOCkgJmFtcDsgfjB4MDIpOwogCiYjNDM7CS8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyovCiYjNDM7CWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkgewomIzQzOwkJcnRsODEyNV9zZXRfcnhfcV9udW0odHApOwomIzQzOwkJUlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsCiYjNDM7CQkgICAgICAgUlRMX1I4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwpIHwgUlRMX0RFU0NfVFlQRV9SU1MpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7CiAJZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApCkBAIC00MTIxLDYgJiM0Mzs0MzUyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7CiAJcnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7CiAJcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkKJiM0MzsJCQlydGxfc2V0X3Jzc19jb25maWcodHApOwomIzQzOwkJZWxzZQomIzQzOwkJCVJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDB4MDApOwomIzQzOwl9CiAJcnRsX2xvY2tfY29uZmlnX3JlZ3ModHApOwogCiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CkBAIC00MTQ4LDE5ICYjNDM7NDM4NSwzMiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKIHsKLQl1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7b3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CXUzMiBlb3I7CiAKLQlkZXNjLSZndDtvcHRzMiA9IDA7Ci0JLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KLQlkbWFfd21iKCk7Ci0JV1JJVEVfT05DRShkZXNjLSZndDtvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3Jzc19vcHRzMSkgJmFtcDsgUmluZ0VuZDsKJiM0MzsJCWRlc2MtJmd0O3Jzc19vcHRzMiA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KJiM0MzsJCWRtYV93bWIoKTsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZW9yID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7b3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CQlkZXNjLSZndDtvcHRzMiA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KJiM0MzsJCWRtYV93bWIoKTsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7b3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCi0JCQkJCSAgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0MzsJCQkJCSAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KQogewomIzQzOwlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy0mZ3Q7cnhfZGVzY19hcnJheSAmIzQzOyBpbmRleDsKIAlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKIAlpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKQEAgLTQxNzcsNTYgJiM0Mzs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZGVzYy0mZ3Q7YWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpOwotCXJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpOwomIzQzOwlyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7CiYjNDM7CWlmICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykKJiM0MzsJCWRlc2MtJmd0O3Jzc19hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiYjNDM7CWVsc2UKJiM0MzsJCWRlc2MtJmd0O2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKJiM0MzsJcnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsCiYjNDM7CQkJICAgICBlbnVtIHJ4X2Rlc2NfdHlwZSBkZXNjX3R5cGUpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0MgJmFtcDsmYW1wOyB0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOVU1fUlhfREVTQyAmYW1wOyZhbXA7IHJpbmctJmd0O3J4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykgewogCQlkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLAotCQkJICAgICAgIGxlNjRfdG9fY3B1KHRwLSZndDtSeERlc2NBcnJheVtpXS5hZGRyKSwKJiM0MzsJCQkgICAgICAgcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpXSwKIAkJCSAgICAgICBSODE2OV9SWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJX19mcmVlX3BhZ2VzKHRwLSZndDtSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7Ci0JCXRwLSZndDtSeF9kYXRhYnVmZltpXSA9IE5VTEw7Ci0JCXRwLSZndDtSeERlc2NBcnJheVtpXS5hZGRyID0gMDsKLQkJdHAtJmd0O1J4RGVzY0FycmF5W2ldLm9wdHMxID0gMDsKJiM0MzsJCV9fZnJlZV9wYWdlcyhyaW5nLSZndDtyeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CQlyaW5nLSZndDtyeF9kYXRhYnVmZltpXSA9IE5VTEw7CiYjNDM7CQlyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDsKJiM0MzsJCWlmIChkZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykgewomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwOwomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJZGVzYy0mZ3Q7cnNzX29wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXNjLSZndDtvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwYWdlICpkYXRhOwogCi0JCWRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLSZndDtSeERlc2NBcnJheSAmIzQzOyBpKTsKJiM0MzsJCWRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHJpbmcsIGkpOwogCQlpZiAoIWRhdGEpIHsKLQkJCXJ0bDgxNjlfcnhfY2xlYXIodHApOwomIzQzOwkJCXJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0gPSBkYXRhOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0gPSBkYXRhOwogCX0KIAogCS8qIG1hcmsgYXMgbGFzdCBkZXNjcmlwdG9yIGluIHRoZSByaW5nICovCi0JdHAtJmd0O1J4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7CiYjNDM7CXJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsICZhbXA7cmluZy0mZ3Q7cnhfZGVzY19hcnJheVtOVU1fUlhfREVTQyAtIDFdKTsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLSZndDtwY2lfZGV2OwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkJCSBSODE2OV9SWF9SSU5HX0JZVEVTLAomIzQzOwkJCQkJCQkgJmFtcDtyaW5nLSZndDtyeF9waHlfYWRkciwKJiM0MzsJCQkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFyaW5nLSZndDtyeF9kZXNjX2FycmF5KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwkJaWYgKHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkpIHsKJiM0MzsJCQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfZGVzY19hcnJheSwKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfcGh5X2FkZHIpOwomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKJiM0MzsJcnRsODE2OV9yeF9kZXNjX2luaXQodHApOwogCiAJbWVtc2V0KHRwLSZndDt0eF9za2IsIDAsIHNpemVvZih0cC0mZ3Q7dHhfc2tiKSk7Ci0JbWVtc2V0KHRwLSZndDtSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLSZndDtSeF9kYXRhYnVmZikpOwogCi0JcmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQltZW1zZXQocmluZy0mZ3Q7cnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLSZndDtyeF9kYXRhYnVmZikpOwomIzQzOwkJcmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX2NsZWFyOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jbGVhcjoKJiM0MzsJd2hpbGUgKC0taSAmZ3Q7PSAwKQomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXSwgdHAtJmd0O2luaXRfcnhfZGVzY190eXBlKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSkKQEAgLTQyNjYsOSAmIzQzOzQ1ODksMjEgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAluZXRkZXZfcmVzZXRfcXVldWUodHAtJmd0O2Rldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2VuYWJsZSgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTsKIAogCS8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKQEAgLTQzMDMsMTggJiM0Mzs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWludCBpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbal07CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpOwomIzQzOwkJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLSZndDtyeF9kZXNjX2FycmF5ICYjNDM7IGopOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewogCW5ldGlmX3N0b3BfcXVldWUodHAtJmd0O2Rldik7CiAKIAlydGw4MTY5X2NsZWFudXAodHApOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGkpOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApOwogCi0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCXJ0bF9od19zdGFydCh0cCk7CiB9CiAKQEAgLTQ3NTgsMzAgJiM0Mzs1MTA1LDEwNCBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cykKIAlyZXR1cm4gKHN0YXR1cyAmYW1wOyAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBzdGF0dXMgPSBvcHRzMSAmYW1wOyAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spOwomIzQzOwl1MzIgcnNzX2hlYWRlcl9pbmZvOwomIzQzOwl1MzIgaGFzaF92YWw7CiYjNDM7CiYjNDM7CWlmICghKHRwLSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfUlhIQVNIKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnNzX2R3b3JkLnJzc19pbmZvKTsKJiM0MzsKJiM0MzsJaWYgKCEocnNzX2hlYWRlcl9pbmZvICZhbXA7IFJYU19SU1NfTDNfVFlQRV9NQVNLKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGFzaF92YWwgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3NfZHdvcmQucnNzX3Jlc3VsdCk7CiYjNDM7CiYjNDM7CXNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLAomIzQzOwkJICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgJmFtcDsgcnNzX2hlYWRlcl9pbmZvKSA/CiYjNDM7CQkgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgdTMyIG9wdHMxKQomIzQzO3sKJiM0MzsJYm9vbCBjc3VtX29rID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWlmICgoKG9wdHMxICZhbXA7IFJYX1RDUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9UQ1BGX0RFU0NfUlNTKSkgfHwKJiM0MzsJCSAgICAoKG9wdHMxICZhbXA7IFJYX1VEUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9VRFBGX0RFU0NfUlNTKSkpCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWlmIChvcHRzMSA9PSBSeFByb3RvVENQIHx8IG9wdHMxID09IFJ4UHJvdG9VRFApCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCi0JaWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKQomIzQzOwlpZiAoY3N1bV9vaykKIAkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAllbHNlCiAJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogfQogCi1zdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldCkKJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UoZGVzYy0mZ3Q7cnNzX29wdHMxKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UoZGVzYy0mZ3Q7b3B0czEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJCQl1MzIgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmYW1wOyBSWF9SRVNfUlNTKSkgewomIzQzOwkJCWlmIChzdGF0dXMgJmFtcDsgUlhfUlVOVF9SU1MpCiYjNDM7CQkJCWRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJaWYgKHN0YXR1cyAmYW1wOyBSWF9DUkNfUlNTKQomIzQzOwkJCQlkZXYtJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJ4UkVTKSkgewomIzQzOwkJCWlmIChzdGF0dXMgJmFtcDsgKFJ4UldUIHwgUnhSVU5UKSkKJiM0MzsJCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJ4Q1JDKQomIzQzOwkJCQlkZXYtJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCSAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewogCXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwogCWludCBjb3VudDsKIAotCWZvciAoY291bnQgPSAwOyBjb3VudCAmbHQ7IGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCB0cC0mZ3Q7Y3VyX3J4JiM0MzsmIzQzOykgewotCQl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gdHAtJmd0O2N1cl9yeCAlIE5VTV9SWF9ERVNDOwotCQlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gdHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGVudHJ5OwomIzQzOwlmb3IgKGNvdW50ID0gMDsgY291bnQgJmx0OyBidWRnZXQ7IGNvdW50JiM0MzsmIzQzOywgcmluZy0mZ3Q7Y3VyX3J4JiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHJpbmctJmd0O2N1cl9yeCAlIE5VTV9SWF9ERVNDOwomIzQzOwkJc3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgJiM0MzsgZW50cnk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWNvbnN0IHZvaWQgKnJ4X2J1ZjsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQl1MzIgc3RhdHVzOwogCi0JCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLSZndDtvcHRzMSkpOwomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7CiAJCWlmIChzdGF0dXMgJmFtcDsgRGVzY093bikKIAkJCWJyZWFrOwogCkBAIC00NzkxLDE5ICYjNDM7NTIxMiwxNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQkgKi8KIAkJZG1hX3JtYigpOwogCi0JCWlmICh1bmxpa2VseShzdGF0dXMgJmFtcDsgUnhSRVMpKSB7CiYjNDM7CQlpZiAocnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKGRldiwgdHAsIHN0YXR1cykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O1J4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XG4mIzM0OywKIAkJCQkJICAgIHN0YXR1cyk7CiAJCQlkZXYtJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7Ci0JCQlpZiAoc3RhdHVzICZhbXA7IChSeFJXVCB8IFJ4UlVOVCkpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKLQkJCWlmIChzdGF0dXMgJmFtcDsgUnhDUkMpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKIAogCQkJaWYgKCEoZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYQUxMKSkKIAkJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKLQkJCWVsc2UgaWYgKHN0YXR1cyAmYW1wOyBSeFJXVCB8fCAhKHN0YXR1cyAmYW1wOyAoUnhSVU5UIHwgUnhDUkMpKSkKJiM0MzsJCQlpZiAoKHN0YXR1cyAmYW1wOyBSeFJXVCB8fCAhKHN0YXR1cyAmYW1wOyAoUnhSVU5UIHwgUnhDUkMpKSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICB0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX0RFRkFVTFQpCiAJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiAJCX0KIApAQCAtNDgyMCwxNCAmIzQzOzUyMzgsMTQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXQKIAkJCWdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yOwogCQl9CiAKLQkJc2tiID0gbmFwaV9hbGxvY19za2IoJmFtcDt0cC0mZ3Q7bmFwaSwgcGt0X3NpemUpOwomIzQzOwkJc2tiID0gbmFwaV9hbGxvY19za2IobmFwaSwgcGt0X3NpemUpOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWRldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCWFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLSZndDthZGRyKTsKLQkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLSZndDtSeF9kYXRhYnVmZltlbnRyeV0pOwomIzQzOwkJYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbZW50cnldOwomIzQzOwkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctJmd0O3J4X2RhdGFidWZmW2VudHJ5XSk7CiAKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCXByZWZldGNoKHJ4X2J1Zik7CkBAIC00ODM2LDE5ICYjNDM7NTI1NCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQlza2ItJmd0O2xlbiA9IHBrdF9zaXplOwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAotCQlydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpOwomIzQzOwkJaWYgKHRwLSZndDtudW1fcnhfcmluZ3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpOwogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7CiAKIAkJaWYgKHNrYi0mZ3Q7cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkKIAkJCWRldi0mZ3Q7c3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOzsKIAotCQluYXBpX2dyb19yZWNlaXZlKCZhbXA7dHAtJmd0O25hcGksIHNrYik7CiYjNDM7CQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAKIAkJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTsKIHJlbGVhc2VfZGVzY3JpcHRvcjoKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7CiYjNDM7CQlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpCiYjNDM7CQkJZGVzYy0mZ3Q7cnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7CiYjNDM7CQlydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtNDg1Niw4ICYjNDM7NTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlOwotCXUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYobmFwaS0mZ3Q7ZGV2KTsKJiM0MzsJc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApOwogCiAJaWYgKChzdGF0dXMgJmFtcDsgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgJmFtcDsgdHAtJmd0O2lycV9tYXNrKSkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNDg3MywxMyAmIzQzOzUyOTksODYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIAkJcGh5X21hY19pbnRlcnJ1cHQodHAtJmd0O3BoeWRldik7CiAKIAlydGxfaXJxX2Rpc2FibGUodHApOwotCW5hcGlfc2NoZWR1bGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CW5hcGlfc2NoZWR1bGUobmFwaSk7CiBvdXQ6CiAJcnRsX2Fja19ldmVudHModHAsIHN0YXR1cyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldOwomIzQzOwomIzQzOwkJcGNpX2ZyZWVfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCBuYXBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2Rpc2FibGVfaHdfaW50ZXJydXB0X21zaXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBtZXNzYWdlX2lkKQomIzQzO3sKJiM0MzsJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpCiYjNDM7ewomIzQzOwlSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZCkKJiM0Mzt7CiYjNDM7CVJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CWludCBtZXNzYWdlX2lkOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CW1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaTsKJiM0MzsKJiM0MzsJaWYgKG1lc3NhZ2VfaWQgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpIHsKJiM0MzsJCXJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7CiYjNDM7CXJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsKJiM0MzsJbmFwaV9zY2hlZHVsZShuYXBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwomIzQzOwlpbnQgaSwgcmM7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmFwaSA9ICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXTsKJiM0MzsJCWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCQlyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LCBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LCBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZnJlZV9pcnE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9pcnE6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCXBjaV9mcmVlX2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CkBAIC00OTE0LDEzICYjNDM7NTQxMywxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKLQlpbnQgd29ya19kb25lOwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CWludCB3b3JrX2RvbmUgPSAwOwogCiAJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiAKLQl3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTsKJiM0MzsJLyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi8KJiM0MzsJd29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7CiAKIAlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiAJCXJ0bF9pcnFfZW5hYmxlKHRwKTsKQEAgLTUwMzUsNyAmIzQzOzU1MzUsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwogCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcnRsODE2OV9pbml0X3BoeSh0cCk7Ci0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKIApAQCAtNTA1MSwxOCAmIzQzOzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcnRsODE2OV9kb3duKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiAKLQlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9pcnEodHApOwogCiAJcGh5X2Rpc2Nvbm5lY3QodHAtJmd0O3BoeWRldik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAotCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtJmd0O1R4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7VHhQaHlBZGRyKTsKIAl0cC0mZ3Q7VHhEZXNjQXJyYXkgPSBOVUxMOwotCXRwLSZndDtSeERlc2NBcnJheSA9IE5VTEw7CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKIAogCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCkBAIC01MDc0LDcgJiM0Mzs1NTczLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJ0bDgxNjlfaW50ZXJydXB0KHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtJmd0O3BjaV9kZXYsIGkpLAomIzQzOwkJCQkJICAgICAgICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtJmd0O3BjaV9kZXYsIGkpLAomIzQzOwkJCQkJICAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwl9CiB9CiAjZW5kaWYKIApAQCAtNTA4Miw3ICYjNDM7NTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0mZ3Q7cGNpX2RldjsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmYW1wO3BkZXYtJmd0O2Rldik7CkBAIC01MDk2LDEwICYjNDM7NTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoIXRwLSZndDtUeERlc2NBcnJheSkKIAkJZ290byBvdXQ7CiAKLQl0cC0mZ3Q7UnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsCi0JCQkJCSAgICAgJmFtcDt0cC0mZ3Q7UnhQaHlBZGRyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRwLSZndDtSeERlc2NBcnJheSkKLQkJZ290byBlcnJfZnJlZV90eF8wOwomIzQzOwlpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9mcmVlX3J4XzE7CiAKIAlyZXR2YWwgPSBydGw4MTY5X2luaXRfcmluZyh0cCk7CiAJaWYgKHJldHZhbCAmbHQ7IDApCkBAIC01MTA3LDggJiM0Mzs1NjEwLDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJcnRsX3JlcXVlc3RfZmlybXdhcmUodHApOwogCi0JaXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh0cC0mZ3Q7aXJxLCBydGw4MTY5X2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0mZ3Q7bmFtZSwgdHApOwomIzQzOwlyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTsKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCkBAIC01MTI1LDE1ICYjNDM7NTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIHJldHZhbDsKIAogZXJyX2ZyZWVfaXJxOgotCWZyZWVfaXJxKHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJcnRsODE2OV9mcmVlX2lycSh0cCk7CiBlcnJfcmVsZWFzZV9md18yOgogCXJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiBlcnJfZnJlZV9yeF8xOgotCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC0mZ3Q7UnhEZXNjQXJyYXksCi0JCQkgIHRwLSZndDtSeFBoeUFkZHIpOwotCXRwLSZndDtSeERlc2NBcnJheSA9IE5VTEw7Ci1lcnJfZnJlZV90eF8wOgomIzQzOwlydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLSZndDtUeERlc2NBcnJheSwKIAkJCSAgdHAtJmd0O1R4UGh5QWRkcik7CiAJdHAtJmd0O1R4RGVzY0FycmF5ID0gTlVMTDsKQEAgLTUyNzUsNiAmIzQzOzU3NzUsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2ZyZWVfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRpZl9uYXBpX2RlbCgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnRsODE2OV9uYXBpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTUyODksNiAmIzQzOzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHRwLSZndDtkZXYpOwogCiYjNDM7CXI4MTY5X2ZyZWVfbmFwaSh0cCk7CiYjNDM7CiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CiAKQEAgLTUzMjAsMTUgJiM0Mzs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdHAtJmd0O2lycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZzsKJiM0MzsJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXRwLSZndDtpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwICZsdDsmbHQ7IGk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnOwogCi0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmbHQ7PSBSVExfR0lHQV9NQUNfVkVSXzA2KQotCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikKJiM0MzsJCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJcmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDOwomIzQzOwlyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQlyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7CiYjNDM7CXJldHVybiBSODE2OV9JUlFfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7PSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHsKJiM0MzsJCXVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTsKJiM0MzsKJiM0MzsJCXRwLSZndDtudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSwKJiM0MzsJCQkJCQkJICAgIHRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMpKTsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDs9IDIpCiYjNDM7CQkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUzsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOwlpbnQgbnZlY3M7CiAKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjoKQEAgLTUzNDQsNyAmIzQzOzU4ODgsMTcgQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLSZndDtwY2lfZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CW52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQludmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gbnZlY3M7CiYjNDM7CiYjNDM7CXRwLSZndDtpcnFfbnZlY3MgPSBudmVjczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLApAQCAtNTU5OSw2ICYjNDM7NjE1MywyNDEgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwlpbnQgd29ya19kb25lID0gMDsKJiM0MzsJaW50IG1lc3NhZ2VfaWQ7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJbWVzc2FnZV9pZCA9IG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpOwomIzQzOwomIzQzOwlpZiAobWVzc2FnZV9pZCAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQl3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW21lc3NhZ2VfaWRdLCBidWRnZXQsIG5hcGkpOwomIzQzOwomIzQzOwlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiYjNDM7CQlydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7CiYjNDM7CiYjNDM7CXJldHVybiB3b3JrX2RvbmU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiYjNDM7CiYjNDM7CWlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpCiYjNDM7CQlydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLSZndDtydGw4MTY5X25hcGkpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfb3RoZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSkKJiM0MzsJCXJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUlRMODEyNyBNU0ktWCB2ZWN0b3IgbGF5b3V0OgomIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpCQk6IFJ4IFF1ZXVlcwomIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSkJOiBUeCBRdWV1ZXMKJiM0MzsgKiBWZWN0b3IgKFJ4UXMgJiM0MzsgVHhRcykgYW5kIHVwCQk6IE90aGVyIGV2ZW50cyAoTGluayBzdGF0dXMoMjkpLCBldGMuKQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUlhfUVVFVUVTKQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7CiYjNDM7CQkJZWxzZSBpZiAoaSAmbHQ7IFI4MTY5X01BWF9SWF9RVUVVRVMgJiM0MzsgUjgxMjdfTUFYX1RYX1FVRVVFUykKJiM0MzsJCQkJcG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyOwomIzQzOwkJfQomIzQzOwkJbmV0aWZfbmFwaV9hZGQodHAtJmd0O2RldiwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwljaC0mZ3Q7bWF4X3J4ID0gdHAtJmd0O2h3X3N1cHBfbnVtX3J4X3F1ZXVlczsKJiM0MzsJY2gtJmd0O21heF90eCA9IDE7CiYjNDM7CiYjNDM7CWNoLSZndDtyeF9jb3VudCA9IHRwLSZndDtudW1fcnhfcmluZ3M7CiYjNDM7CWNoLSZndDt0eF9jb3VudCA9IDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCwKJiM0MzsJCQkgICAgICBpbnQgbmV3X2NvdW50KQomIzQzO3sKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5ld19jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO25ld19yeFtpXTsKJiM0MzsKJiM0MzsJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDt0cC0mZ3Q7cGNpX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCQkJICZhbXA7cmluZy0mZ3Q7cnhfcGh5X2FkZHIsCiYjNDM7CQkJCQkJCSBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghcmluZy0mZ3Q7cnhfZGVzY19hcnJheSkgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfZnJlZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW1lbXNldChyaW5nLSZndDtyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctJmd0O3J4X2RhdGFidWZmKSk7CiYjNDM7CQlyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7dHAtJmd0O3BjaV9kZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfZGVzY19hcnJheSwgcmluZy0mZ3Q7cnhfcGh5X2FkZHIpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkgewomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDtuZXdfcnhbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3RwLSZndDtwY2lfZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsCiYjNDM7CQkJCSAgbmV3X3J4W2ldLnJ4X2Rlc2NfYXJyYXksIG5ld19yeFtpXS5yeF9waHlfYWRkcik7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgb2xkX3J4X2Rlc2NfdHlwZTsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgbmV3X2Rlc2NfdHlwZTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4OwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlpZiAoY2gtJmd0O3J4X2NvdW50ID09IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb2xkX3J4X2Rlc2NfdHlwZSA9IHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJaWYgKCFydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQluZXRkZXZfd2FybihkZXYsICYjMzQ7VGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaC0mZ3Q7cnhfY291bnQgJmd0OyB0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzIHx8ICFpc19wb3dlcl9vZl8yKGNoLSZndDtyeF9jb3VudCkgfHwKJiM0MzsJICAgIHRwLSZndDtpcnFfbnZlY3MgJmx0OyBnZXRfbWluX2lycV9udmVjcyh0cCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmV3X2Rlc2NfdHlwZSA9IGNoLSZndDtyeF9jb3VudCAmZ3Q7IDEgPyBSWF9ERVNDX1RZUEVfUlNTIDogUlhfREVTQ19UWVBFX0RFRkFVTFQ7CiYjNDM7CiYjNDM7CWlmICghaWZfcnVubmluZykgewomIzQzOwkJcmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQl0cC0mZ3Q7bnVtX3J4X3JpbmdzID0gY2gtJmd0O3J4X2NvdW50OwomIzQzOwkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gbmV3X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJCXJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwkJcnRsX3NldF9pcnFfbWFzayh0cCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CWlmICghbmV3X3J4KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKJiM0MzsJcnRsODE2OV9kb3duKHRwKTsKJiM0MzsKJiM0MzsJcmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl91cDsKJiM0MzsKJiM0MzsJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gbmV3X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRsODE2OV9yZWFsbG9jX3J4KHRwLCBuZXdfcngsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXNldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXSwgb2xkX3J4X2Rlc2NfdHlwZSk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKJiM0MzsKJiM0MzsJdHAtJmd0O251bV9yeF9yaW5ncyA9IGNoLSZndDtyeF9jb3VudDsKJiM0MzsKJiM0MzsJbWVtc2V0KHRwLSZndDtyeF9yaW5nLCAwLCBzaXplb2YodHAtJmd0O3J4X3JpbmcpKTsKJiM0MzsJbWVtY3B5KHRwLSZndDtyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CiYjNDM7CXJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwlydGxfc2V0X2lycV9tYXNrKHRwKTsKJiM0MzsKJiM0MzsJcnRsODE2OV91cCh0cCk7CiYjNDM7CW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiYjNDM7CiYjNDM7CWtmcmVlKG5ld19yeCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXNldDoKJiM0MzsJaWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC0mZ3Q7bnVtX3J4X3JpbmdzKSkKJiM0MzsJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXG4mIzM0Oyk7CiYjNDM7CXRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7CiYjNDM7ZXJyX3VwOgomIzQzOwlydGw4MTY5X3VwKHRwKTsKJiM0MzsJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKJiM0MzsJa2ZyZWUobmV3X3J4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0gewomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAomIzQzOwkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUywKJiM0MzsJLmdldF9kcnZpbmZvCQk9IHJ0bDgxNjlfZ2V0X2RydmluZm8sCiYjNDM7CS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCiYjNDM7CS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAomIzQzOwkuZ2V0X2NvYWxlc2NlCQk9IHJ0bF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKJiM0MzsJLmdldF9yZWdzCQk9IHJ0bDgxNjlfZ2V0X3JlZ3MsCiYjNDM7CS5nZXRfd29sCQk9IHJ0bDgxNjlfZ2V0X3dvbCwKJiM0MzsJLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAomIzQzOwkuZ2V0X3N0cmluZ3MJCT0gcnRsODE2OV9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAomIzQzOwkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiYjNDM7CS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKJiM0MzsJLmdldF9jaGFubmVscwkJPSBydGw4MTY5X2dldF9jaGFubmVscywKJiM0MzsJLnNldF9jaGFubmVscwkJPSBydGw4MTY5X3NldF9jaGFubmVscywKJiM0MzsJLmdldF9saW5rX2tzZXR0aW5ncwk9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKJiM0MzsJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X3JpbmdwYXJhbQkJPSBydGw4MTY5X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCiYjNDM7CS5zZXRfcGF1c2VwYXJhbQkJPSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwOwpAQCAtNTYwOSw3ICYjNDM7NjM5OCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl1MzIgdHhjb25maWc7CiAJdTMyIHhpZDsKIAotCWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZiAoKnRwKSk7CiYjNDM7CWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnRwKSwKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUywKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01Njg5LDYgJiM0Mzs2NDgxLDEyIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O3Jzc19kYXRhKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXRwLSZndDtyc3NfZGF0YSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCXRwLSZndDtjcF9jbWQgPSBSVExfUjE2KHRwLCBDUGx1c0NtZCkgJmFtcDsgQ1BDTURfTUFTSzsKIAogCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgJmd0OyA0ICZhbXA7JmFtcDsgdHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfMTggJmFtcDsmYW1wOwpAQCAtNTcwMywxMSAmIzQzOzY1MDEsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlydGxfaHdfcmVzZXQodHApOwogCiYjNDM7CXJ0bF9zZXR1cF9yeF9wYXJhbXModHApOwomIzQzOwogCXJjID0gcnRsX2FsbG9jX2lycSh0cCk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJjLCAmIzM0O0NhbiYjMzk7dCBhbGxvY2F0ZSBpbnRlcnJ1cHRcbiYjMzQ7KTsKIAotCXRwLSZndDtpcnEgPSBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKTsKJiM0MzsJcnRsODE2OV9zZXRfcnhfcmluZ19udW0odHApOwomIzQzOwomIzQzOwlpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSkKJiM0MzsJCXJ0bDgxNjlfaW5pdF9yc3ModHApOwogCiAJSU5JVF9XT1JLKCZhbXA7dHAtJmd0O3drLndvcmssIHJ0bF90YXNrKTsKIAlkaXNhYmxlX3dvcmsoJmFtcDt0cC0mZ3Q7d2sud29yayk7CkBAIC01NzE2LDEzICYjNDM7NjUxOSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO3J0bDgxNjlfZXRodG9vbF9vcHM7CiAKLQluZXRpZl9uYXBpX2FkZChkZXYsICZhbXA7dHAtJmd0O25hcGksIHJ0bDgxNjlfcG9sbCk7Ci0KIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDsKIAlkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087CiAJZGV2LSZndDtwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApICZhbXA7JmFtcDsgdHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpIHsKJiM0MzsJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7CiYjNDM7CQlkZXYtJmd0O2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZQogCSAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLgpAQCAtNTc3OCw2ICYjNDM7NjU4NCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlpZiAoanVtYm9fbWF4KQogCQlkZXYtJmd0O21heF9tdHUgPSBqdW1ib19tYXg7CiAKJiM0MzsJcmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLSZndDtkZXYsIDEsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJjLCAmIzM0O3NldCB0eC9yeCBudW0gZmFpbHVyZVxuJiMzNDspOwomIzQzOwogCXJ0bF9zZXRfaXJxX21hc2sodHApOwogCiAJdHAtJmd0O2NvdW50ZXJzID0gZG1hbV9hbGxvY19jb2hlcmVudCAoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O2NvdW50ZXJzKSwKQEAgLTU3OTIsOSAmIzQzOzY2MDIsMTUgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKJiM0MzsJdHAtJmd0O3J0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtJmd0O2lycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtydGw4MTY5X25hcGkpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcjgxNjlfaW5pdF9uYXBpKHRwKTsKJiM0MzsKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byBlcnJfZnJlZV9uYXBpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7CiAJCWlmIChydGxfaXNfODEyNSh0cCkpCkBAIC01ODAzLDggJiM0Mzs2NjE5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJCQl0cC0mZ3Q7bGVkcyA9IHJ0bDgxNjhfaW5pdF9sZWRzKGRldik7CiAJfQogCi0JbmV0ZGV2X2luZm8oZGV2LCAmIzM0OyVzLCAlcE0sICVzWElEICV4LCBJUlEgJWRcbiYjMzQ7LAotCQkgICAgY2hpcC0mZ3Q7bmFtZSwgZGV2LSZndDtkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtJmd0O2lycSk7CiYjNDM7CW5ldGRldl9pbmZvKGRldiwgJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcbiYjMzQ7LAomIzQzOwkJICAgIGNoaXAtJmd0O25hbWUsIGRldi0mZ3Q7ZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsCiYjNDM7CQkgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLSZndDtpcnFfbnZlY3MpOwogCiAJaWYgKGp1bWJvX21heCkKIAkJbmV0ZGV2X2luZm8oZGV2LCAmIzM0O2p1bWJvIGZlYXR1cmVzIFtmcmFtZXM6ICVkIGJ5dGVzLCB0eCBjaGVja3N1bW1pbmc6ICVzXVxuJiMzNDssCkBAIC01ODIxLDYgJiM0Mzs2NjM4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9mcmVlX25hcGk6CiYjNDM7CXI4MTY5X2ZyZWVfbmFwaSh0cCk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSByODE2OSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgZm9yIHRoZSBgcjgxNjlgIG5ldHdvcmsgZHJpdmVyLiBJbnRyaWd1aW5nLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2VzOiBSU1Mgc3VwcG9ydCBhbmQgbXVsdGlwbGUgUlggcXVldWVzLiBMb29raW5nIGF0IHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCB3aGljaCwgYXMgZXhwZWN0ZWQsIGlzIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgZm9yIFJlYWx0ZWsgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9naWMgcmVzaWRlcy4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc2lnbmlmaWNhbnQ7IGl0IGFkZHMgbXVsdGlwbGUgUlggcmluZ3MsIHdoaWNoIHN1Z2dlc3RzIGRlZXBlciBwYXJhbGxlbCBwcm9jZXNzaW5nIG9uIHRoZSByZWNlaXZlIHNpZGUuIE1TSS1YIHN1cHBvcnQgaXMgYWxzbyBhIGdvb2QgYWRkaXRpb24sIGluZGljYXRpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVycnVwdCBoYW5kbGluZy4gUlNTIGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhpcyBraW5kIG9mIHNldHVwOyBpdCBtZWFucyB3ZSBjYW4gZGlzdHJpYnV0ZSBpbmNvbWluZyB0cmFmZmljIGVmZmljaWVudGx5IGFjcm9zcyB0aG9zZSBuZXcgcXVldWVzLCBsZXZlcmFnaW5nIHRoZSBDUFUgY29yZXMgZWZmZWN0aXZlbHkuIEFuZCwgb2YgY291cnNlLCBOQVBJIGZvciBlYWNoIFJYIHF1ZXVlIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGluIHRoZXNlIG1vZGVybiBkcml2ZXJzLgoKVGhpcyBhbGwgcG9pbnRzIHRvIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcjgxNjlgIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHVzdWFsbHkgZW5hYmxlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfUjgxNjlgLiBUaW1lIHRvIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgZG91YmxlLWNoZWNrLCBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFI4MTY5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAyOmNvbmZpZyBSODE2OV9MRURTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTklDIExFRHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkxNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgUjgxNjkgRHJpdmVyOiBBIFBsYW4gb2YgQXR0YWNrKioKCk9rYXksIGBSODE2OWAuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gcmVhY2ggdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBRRU1VIGdpdmVzIG1lIGBydGw4MTM5YCwgYnV0IGRvZXMgaXQgc3VwcG9ydCB0aGUgUjgxNjkgc3BlY2lmaWNhbGx5LCBvciBwb3RlbnRpYWxseSBldmVuIGByODE2OGAgb3IgYHI4MTI1YD8gTm8sIFFFTVUgZG9lc24mIzM5O3QgbmF0aXZlbHkgZW11bGF0ZSBgcjgxNjlgLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBvZmZlciBhIHBhdGggdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSXQgdXNlcyB0aGUgYHN5el9wY2lfZGV2aWNlYCBwc2V1ZG8tc3lzY2FsbCBvciB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uIFJpZ2h0LCBzeXprYWxsZXIgaGFzIFBDSSBmdXp6aW5nLiBHb29kLgoKYHI4MTY5YCBpcyBhIFBDSSBkcml2ZXIuIFRoYXQgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpXypgIHBzZXVkby1zeXNjYWxscywgb3IgYHZoY2lgIGlmIGl0IHdlcmUgVVNCLiBGb3IgUENJIHRob3VnaCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCB1c2UgYHN5el9wY2lfZGV2aWNlYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbnN0cnVjdGlvbnMuIFRob3NlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCwgZG9lcyBzeXprYWxsZXIgZW11bGF0ZSBQQ0kgZGV2aWNlcz8gWWVzLCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIsIHdoaWNoIGluY2x1ZGVzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzaW1pbGFyIGNhbGxzLiBPciBgc3l6X3BjaV9idXNgLgoKU28sIGNhbiBJIHJlYWNoIGl0PyBZZXMsIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IFBDSSBkcml2ZXJzLiBJcyB0aGlzIGZ1enppbmcgZWZmb3J0IHdvcnRod2hpbGU/IEFic29sdXRlbHkuIEl0IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBpbnRlcmVzdGluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHdoZXJlIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9uczoKCiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgCiogICBgcnRsODE2OV9yZWFsbG9jX3J4YAoqICAgYHJ0bDgxNjlfZ2V0X2NoYW5uZWxzYAoqICAgYHI4MTY5X2luaXRfbmFwaWAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9yeGAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF90eGAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcmAKKiAgIGBydGw4MTY5X2ludGVycnVwdF9tc2l4YAoqICAgYHJ0bDgxNjlfcmVxdWVzdF9pcnFgCiogICBgcnRsODE2OV9mcmVlX2lycWAKKiAgIGBydGxfcnhgCiogICBgcnRsODE2OV9yeF9maWxsYAoqICAgYHJ0bDgxNjlfcnhfY2xlYXJgCiogICBgcnRsODE2OV9hbGxvY19yeF9kYXRhYAoqICAgYHJ0bDgxNjlfYWxsb2NfcnhfZGVzY2AKKiAgIGBydGw4MTY5X2ZyZWVfcnhfZGVzY2AKKiAgIGBydGw4MTY5X2luaXRfcmluZ2AKKiAgIGBydGw4MTY5X3J4X2Rlc2NfcmVzZXRgCiogICBgcnRsODE2OV9yeF9oYXNoYAoqICAgYHJ0bDgxNjlfcnhfY3N1bWAKKiAgIGBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3JgCiogICBgcnRsX3NldF9yc3NfY29uZmlnYAoqICAgYHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdGAKKiAgIGBydGw4MTY5X3N0b3JlX3JldGFgCiogICBgcnRsODE2OV9zdG9yZV9yc3Nfa2V5YAoqICAgYHJ0bF9zZXR1cF9yeF9wYXJhbXNgCiogICBgcnRsODE2OV9pbml0X3Jzc2AKKiAgIGBydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsYAoqICAgYHJ0bDgxMjVfc2V0X3J4X3FfbnVtYAoqICAgYHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nYAoqICAgYHJ0bF9od19zdGFydF84MTI1X2NvbW1vbmAKKiAgIGBydGxfaHdfc3RhcnRgCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAoqICAgYHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtYAoqICAgYHJ0bF9hbGxvY19pcnFgCiogICBgcnRsX2luaXRfb25lYAoqICAgYHJ0bF9yZW1vdmVfb25lYAoqICAgYHJ0bF9vcGVuYAoqICAgYHJ0bDgxNjlfY2xvc2VgCgpJIG5lZWQgdG8gcXVpY2tseSB3ZWVkIG91dCB0aGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHdhc3RpbmcgdGltZToKCiogICBgcnRsX3J4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3J4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3R4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTY5X3NldF9jaGFubmVscyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz02MjM3PXN0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYyNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2Mjc0OnN0YXRpYyBpbnQgcnRsODE2OV9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYyNzUtXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjM2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjM3OS1cdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjYzODA6XHQuc2V0X2NoYW5uZWxzXHRcdD0gcnRsODE2OV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02MzgxLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MjAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogNTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHI4MTY5YCBkcml2ZXIsIHNwZWNpZmljYWxseSBSU1Mgc3VwcG9ydCwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggc3VwcG9ydC4gVGhpcyBpcyByaWdodCB1cCBTeXprYWxsZXImIzM5O3MgYWxsZXkg4oCTIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCkkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSwgd2Ugc2hvdWxkIGVuYWJsZSBgQ09ORklHX1I4MTY5YC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRyaXZlciwgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgc28gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIGhhdmUgdG8gd29ycnkgYWJvdXQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjYXN0IGEgd2lkZSBuZXQsIHNvIEkgaGF2ZSBhIGxpc3Qgb2Ygc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbi4gQnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQsIHNvIEkmIzM5O2xsIHRyaW0gZG93biB0aGUgbGlzdCB0byB3aGF0JiMzOTtzIG1vc3QgY3J1Y2lhbDoKCiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgCiogICBgcnRsODE2OV9yZWFsbG9jX3J4YAoqICAgYHJ0bF9zZXRfcnNzX2NvbmZpZ2AKKiAgIGBydGw4MTY5X2luaXRfcnNzYAoqICAgYHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtYAoqICAgYHJ0bF9hbGxvY19pcnFgCiogICBgcnRsODE2OV9hbGxvY19yeF9kZXNjYAoqICAgYHJ0bDgxNjlfZnJlZV9yeF9kZXNjYAoqICAgYHI4MTY5X2luaXRfbmFwaWAKClRoZXNlIHNob3VsZCBjb3ZlciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBuZXcgUlNTIGFuZCBSWCBxdWV1ZSBmZWF0dXJlcy4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scywgSSBleHBlY3Qgd2UmIzM5O2xsIGdldCBnb29kIGNvdmVyYWdlIGFuZCBmaW5kIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgcXVpY2tseS4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfc2V0X2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcmVhbGxvY19yeCYjMzQ7LAogICAgJiMzNDtydGxfc2V0X3Jzc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pbml0X3JzcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9yeF9yaW5nX251bSYjMzQ7LAogICAgJiMzNDtydGxfYWxsb2NfaXJxJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfYWxsb2NfcnhfZGVzYyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2ZyZWVfcnhfZGVzYyYjMzQ7LAogICAgJiMzNDtyODE2OV9pbml0X25hcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVjZWl2ZSBTaWRlIFNjYWxpbmcgKFJTUyksIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIGludGVycnVwdHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb21wbGV4IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCBldGh0b29sIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE2OV9zZXRfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9yZWFsbG9jX3J4JiMzNDssCiAgICAmIzM0O3J0bF9zZXRfcnNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2luaXRfcnNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X3J4X3JpbmdfbnVtJiMzNDssCiAgICAmIzM0O3J0bF9hbGxvY19pcnEmIzM0OywKICAgICYjMzQ7cnRsODE2OV9hbGxvY19yeF9kZXNjJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZnJlZV9yeF9kZXNjJiMzNDssCiAgICAmIzM0O3I4MTY5X2luaXRfbmFwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjQ2LjAzNDIzNzA3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5Njk4MjU5Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODE2OV9zZXRfY2hhbm5lbHNcIixcbiAgICBcInJ0bDgxNjlfcmVhbGxvY19yeFwiLFxuICAgIFwicnRsX3NldF9yc3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X2luaXRfcnNzXCIsXG4gICAgXCJydGw4MTY5X3NldF9yeF9yaW5nX251bVwiLFxuICAgIFwicnRsX2FsbG9jX2lycVwiLFxuICAgIFwicnRsODE2OV9hbGxvY19yeF9kZXNjXCIsXG4gICAgXCJydGw4MTY5X2ZyZWVfcnhfZGVzY1wiLFxuICAgIFwicjgxNjlfaW5pdF9uYXBpXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVjZWl2ZSBTaWRlIFNjYWxpbmcgKFJTUyksIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIGludGVycnVwdHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb21wbGV4IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCBldGh0b29sIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjQ2LjAzNDI0NDMwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MDczNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjliYzczM2Y5ZjQxZWVlYWE1N2IzNjM4ZjU0YWE5MzgyZTY4NTdlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwNzozMDo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjkxOTRjMjE0MmY5NWQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtNzQsOSArNzQsMzMgQEBcXG4gI2RlZmluZSBOVU1fVFhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIE5VTV9SWF9ERVNDXFx0MjU2XFx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1xcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXFx0KE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxcbitcXG4rLypcXG4rICogV29ya2Fyb3VuZCBmb3IgdGhlIGhhcmR3YXJlIERNQSBwcmVmZXRjaGVyLiBUaGUgSC9XIG1pZ2h0IGFnZ3Jlc3NpdmVseVxcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxcbisgKiBhbGxvY2F0ZSB0aGlzIGV4dHJhIGR1bW15IHNwYWNlIGFzIHBhZGRpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzXFxuKyAqIGFjY2VzcyBhbmQgcG90ZW50aWFsIElPTU1VIGZhdWx0cy5cXG4rICovXFxuKyNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdCgoTlVNX1JYX0RFU0MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcXHQoTUFYX1NLQl9GUkFHUyArIDEpXFxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1xcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxcbisjZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcXHQ4XFxuKyNkZWZpbmUgUjgxMjdfTUFYX1RYX1FVRVVFU1xcdDhcXG4rI2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFU1xcdDFcXG4rI2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXFx0MVxcbisjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXFx0MzJcXG4rI2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQ1xcdDMwXFxuKyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcXHQxXFxuKyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVxcdDQwXFxuKyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTS1xcdEdFTk1BU0soMTgsIDE2KVxcbisjZGVmaW5lIFJTU19IQVNIX01BU0tcXHRcXHRHRU5NQVNLKDEwLCA4KVxcbisjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcXG4rI2RlZmluZSBSWFNfUlNTX1VEUFxcdFxcdEJJVCgyNylcXG4rI2RlZmluZSBSWFNfUlNTX0lQVjRcXHRcXHRCSVQoMjgpXFxuKyNkZWZpbmUgUlhTX1JTU19JUFY2XFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIFJYU19SU1NfVENQXFx0XFx0QklUKDMwKVxcbisjZGVmaW5lIFJYU19SU1NfTDNfVFlQRV9NQVNLXFx0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcXG4rI2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1xcdChSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKVxcbiBcXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXFx0MHhhNDAwXFxuIFxcbkBAIC00NDEsMTEgKzQ2NSwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHtcXG4gXFx0VHhQb2xsXzgxMjVcXHRcXHQ9IDB4OTAsXFxuIFxcdExFRFNFTDNcXHRcXHRcXHQ9IDB4OTYsXFxuIFxcdE1BQzBfQktQXFx0XFx0PSAweDE5ZTAsXFxuK1xcdFJEU0FSX1ExX0xPV1xcdFxcdD0gMHg0MDAwLFxcbiBcXHRSU1NfQ1RSTF84MTI1XFx0XFx0PSAweDQ1MDAsXFxuIFxcdFFfTlVNX0NUUkxfODEyNVxcdFxcdD0gMHg0ODAwLFxcbiBcXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcXHQ9IDB4NjA0OCxcXG4rXFx0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXFx0PSAweDBkMDAsXFxuK1xcdElTUl9WRUNfTUFQX1JFR1xcdFxcdD0gMHgwZDA0LFxcbitcXHRJTVJfU0VUX1ZFQ19NQVBfUkVHXFx0PSAweDBkMGMsXFxuIH07XFxuIFxcbisjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHXFx0MjlcXG4gI2RlZmluZSBMRURTRUxfTUFTS184MTI1XFx0MHgyM2ZcXG4gXFxuICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1XFx0QklUKDIyKVxcbkBAIC01NzYsNiArNjA1LDIzIEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQge1xcbiBcXG4gXFx0LyogbWFnaWMgZW5hYmxlIHYyICovXFxuIFxcdE1hZ2ljUGFja2V0X3YyXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksXFx0LyogV2FrZSB1cCB3aGVuIHJlY2VpdmVzIGEgTWFnaWMgUGFja2V0ICovXFxuKyNkZWZpbmVcXHRJU1JJTVJfTElOS0NIR1xcdEJJVCgyOSlcXG4rI2RlZmluZVxcdElTUklNUl9UT0tfUTBcXHRCSVQoOClcXG4rI2RlZmluZVxcdElTUklNUl9ST0tfUTBcXHRCSVQoMClcXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkxcXHRcXHQweGQ4XFxuKyNkZWZpbmUgUlNTX0tFWV9SRUdcXHRcXHRcXHQweDQ2MDBcXG4rI2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFR1xcdFxcdDB4NDcwMFxcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX1JTU1xcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X1NVUFBcXHRcXHRCSVQoMylcXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcXHRCSVQoNSlcXG4rI2RlZmluZVxcdFJYX1JFU19SU1NcXHRcXHRcXHRCSVQoMjIpXFxuKyNkZWZpbmVcXHRSWF9SVU5UX1JTU1xcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZVxcdFJYX0NSQ19SU1NcXHRcXHRcXHRCSVQoMjApXFxuKyNkZWZpbmUgUlRMX1JYX1FfTlVNX01BU0tcXHRcXHRHRU5NQVNLKDQsIDIpXFxuIH07XFxuIFxcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XFxuQEAgLTYzMyw2ICs2NzksMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xcbiAjZGVmaW5lIFJ4UHJvdG9JUFxcdChQSUQxIHwgUElEMClcXG4gI2RlZmluZSBSeFByb3RvTWFza1xcdFJ4UHJvdG9JUFxcbiBcXG4rI2RlZmluZVxcdFJYX1VEUFRfREVTQ19SU1NcXHRCSVQoMTkpXFxuKyNkZWZpbmVcXHRSWF9UQ1BUX0RFU0NfUlNTXFx0QklUKDE4KVxcbisjZGVmaW5lXFx0UlhfVURQRl9ERVNDX1JTU1xcdEJJVCgxNikgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbisjZGVmaW5lXFx0UlhfVENQRl9ERVNDX1JTU1xcdEJJVCgxNSkgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbitcXG4gXFx0SVBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksIC8qIElQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbiBcXHRVRFBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cXG4gXFx0VENQRmFpbFxcdFxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpLCAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXFxuQEAgLTY1NCw5ICs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgUnhEZXNjIHtcXG4tXFx0X19sZTMyIG9wdHMxO1xcbi1cXHRfX2xlMzIgb3B0czI7XFxuLVxcdF9fbGU2NCBhZGRyO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9ERUZBVUxUICovXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdF9fbGUzMiBvcHRzMTtcXG4rXFx0XFx0XFx0X19sZTMyIG9wdHMyO1xcbitcXHRcXHRcXHRfX2xlNjQgYWRkcjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRfX2xlNjQgcnNzX2FkZHI7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdFxcdFxcdF9fbGUzMiByc3NfaW5mbztcXG4rXFx0XFx0XFx0XFx0XFx0X19sZTMyIHJzc19yZXN1bHQ7XFxuK1xcdFxcdFxcdFxcdH0gcnNzX2R3b3JkO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMyO1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMxO1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gc3RydWN0IHJpbmdfaW5mbyB7XFxuQEAgLTcyOCwyNyArNzk3LDQ5IEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSByeF9kZXNjX3R5cGUge1xcbitcXHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcXG4rXFx0UlhfREVTQ19UWVBFX1JTUyxcXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbitcXHR1MzIgaW5kZXg7XFx0XFx0XFx0XFx0XFx0LyogUnggcXVldWUgaW5kZXggKi9cXG4rXFx0dTMyIGN1cl9yeDtcXHRcXHRcXHRcXHRcXHQvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4rXFx0dTMyIGRpcnR5X3J4O1xcdFxcdFxcdFxcdFxcdC8qIEluZGV4IGZvciByZWN5Y2xpbmcuICovXFxuK1xcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XFx0XFx0XFx0LyogYXJyYXkgb2YgUnggRGVzYyovXFxuK1xcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XFx0LyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi9cXG4rXFx0ZG1hX2FkZHJfdCByeF9waHlfYWRkcjtcXHRcXHRcXHRcXHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4rXFx0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcXHRcXHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcXG4rXFx0dTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTtcXG4rXFx0dTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdO1xcbitcXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcztcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuLVxcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xcbiBcXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xcbiBcXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xcbi1cXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG4gXFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XFx0LyogMjU2LWFsaWduZWQgVHggZGVzY3JpcHRvciByaW5nICovXFxuLVxcdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1xcdC8qIDI1Ni1hbGlnbmVkIFJ4IGRlc2NyaXB0b3IgcmluZyAqL1xcbiBcXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcXG4tXFx0ZG1hX2FkZHJfdCBSeFBoeUFkZHI7XFxuLVxcdHN0cnVjdCBwYWdlICpSeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XFx0LyogUnggZGF0YSBidWZmZXJzICovXFxuIFxcdHN0cnVjdCByaW5nX2luZm8gdHhfc2tiW05VTV9UWF9ERVNDXTtcXHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTtcXG4rXFx0dW5zaWduZWQgaW50IG51bV9yeF9yaW5ncztcXG4gXFx0dTE2IGNwX2NtZDtcXG4gXFx0dTE2IHR4X2xwaV90aW1lcjtcXG4gXFx0dTMyIGlycV9tYXNrO1xcbi1cXHRpbnQgaXJxO1xcbitcXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSAqcnNzX2RhdGE7XFxuK1xcdHVuc2lnbmVkIGludCBpcnFfbnZlY3M7XFxuK1xcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuIFxcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0xNTc4LDYgKzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cmV0dXJuIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuQEAgLTE2NDQsMjYgKzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9hY2tfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgYml0cylcXG4ge1xcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbi1cXHRcXHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIGJpdHMpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdFJUTF9XMTYodHAsIEludHJTdGF0dXMsIGJpdHMpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbi1cXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0xODY3LDkgKzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VvcHRzMik7XFxuK1xcdHUzMiBvcHRzMjtcXG4rXFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3Nfb3B0czIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VvcHRzMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAob3B0czIgXFx1MDAyNiBSeFZsYW5UYWcpXFxuIFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcXHUwMDI2IDB4ZmZmZikpO1xcbkBAIC0yNDE2LDM0ICsyNTM1LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4tXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4tXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXFxuLVxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcXG4tXFx0LmdldF9yZWdzX2xlblxcdFxcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXFxuLVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4tXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gcnRsX2dldF9jb2FsZXNjZSxcXG4tXFx0LnNldF9jb2FsZXNjZVxcdFxcdD0gcnRsX3NldF9jb2FsZXNjZSxcXG4tXFx0LmdldF9yZWdzXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzLFxcbi1cXHQuZ2V0X3dvbFxcdFxcdD0gcnRsODE2OV9nZXRfd29sLFxcbi1cXHQuc2V0X3dvbFxcdFxcdD0gcnRsODE2OV9zZXRfd29sLFxcbi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXFxuLVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4tXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbi1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLVxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbi1cXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbi1cXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbi1cXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuLVxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbi1cXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbi1cXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG4tXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxcbi1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXFxuLVxcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcXG4tXFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuLX07XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpXFxuIHtcXG4gXFx0LyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqL1xcbkBAIC0yNjE5LDkgKzI3MTAsMjcgQEAgc3RhdGljIHZvaWQgcnRsX2luaXRfcnhjZmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdG1lbXNldChyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5LCAweDAsIFI4MTY5X1JYX1JJTkdfQllURVMpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dHAtXFx1MDAzZWRpcnR5X3R4ID0gdHAtXFx1MDAzZWN1cl90eCA9IHRwLVxcdTAwM2VjdXJfcnggPSAwO1xcbitcXHR0cC1cXHUwMDNlZGlydHlfdHggPSAwO1xcbitcXHR0cC1cXHUwMDNlY3VyX3R4ID0gMDtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRyaW5nLVxcdTAwM2VkaXJ0eV9yeCA9IDA7XFxuK1xcdFxcdHJpbmctXFx1MDAzZWN1cl9yeCA9IDA7XFxuK1xcdFxcdHJpbmctXFx1MDAzZWluZGV4ID0gaTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0yNjgwLDYgKzI3ODksMzQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2luZGlyX3RibChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yeF9yaW5ncylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxcbitcXHRcXHR0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBudW1fcnhfcmluZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpO1xcbitcXHRuZXRkZXZfcnNzX2tleV9maWxsKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dHAtXFx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcXG4rXFx0XFx0dHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XFxuK1xcdFxcdHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0dHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX0RFRkFVTFQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN0cnVjdCBydGxfZncgKnJ0bF9mdztcXG5AQCAtMjgwMiw4ICsyOTM5LDYzIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMTYodHAsIFJ4TWF4U2l6ZSwgUjgxNjlfUlhfQlVGX1NJWkUgKyAxKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHUzMiBudW1fZW50cmllcyA9IFJUTF9SU1NfS0VZX1NJWkUgLyBzaXplb2YodTMyKTtcXG4rXFx0dTMyICpyc3Nfa2V5ID0gdHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vyc3Nfa2V5O1xcbitcXHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcXG4rXFxuK1xcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX2VudHJpZXM7IGkrKylcXG4rXFx0XFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgKyAoaSAqIDQpLCByc3Nfa2V5W2ldKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHU4ICppbmRpcl90YmwgPSB0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90Ymw7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSArPSA0KSB7XFxuK1xcdFxcdHUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfFxcbitcXHRcXHRcXHQgICAodTMyKWluZGlyX3RibFtpICsgMV0gXFx1MDAzY1xcdTAwM2MgOCB8XFxuK1xcdFxcdFxcdCAgICh1MzIpaW5kaXJfdGJsW2kgKyAyXSBcXHUwMDNjXFx1MDAzYyAxNiB8XFxuK1xcdFxcdFxcdCAgICh1MzIpaW5kaXJfdGJsW2kgKyAzXSBcXHUwMDNjXFx1MDAzYyAyNDtcXG4rXFx0XFx0UlRMX1czMih0cCwgUlNTX0lORElSRUNUSU9OX1RCTF9SRUcgKyBpLCByZXRhKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTMyIHJzc19jdHJsO1xcbitcXG4rXFx0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpKTtcXG4rXFxuK1xcdC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi9cXG4rXFx0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxcbitcXHRcXHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcXG4rXFx0XFx0IHwgUlNTX0NUUkxfSVBWNl9TVVBQXFxuK1xcdFxcdCB8IFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcXG4rXFx0XFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxcbitcXHRcXHQgfCBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUDtcXG4rXFxuK1xcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgIGlsb2cyKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xcbitcXG4rXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yZXRhKHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcXG4gXFx0ICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLlxcbkBAIC0yODExLDggKzMwMDMsMTYgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICovXFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cXHUwMDNlVHhQaHlBZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckxvdywgKCh1NjQpIHRwLVxcdTAwM2VUeFBoeUFkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuLVxcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbi1cXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSByaW5nLVxcdTAwM2VyeF9waHlfYWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbitcXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgcmluZy1cXHUwMDNlcnhfcGh5X2FkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICsgKGkgLSAxKSAqIDg7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRSVExfVzMyKHRwLCByZHNhcl9yZWcgKyA0LCAoKHU2NClyaW5nLVxcdTAwM2VyeF9waHlfYWRkciBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRcXHRSVExfVzMyKHRwLCByZHNhcl9yZWcsICgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5AQCAtMzg1OCw2ICs0MDU4LDI3IEBAIERFQ0xBUkVfUlRMX0NPTkQocnRsX21hY19vY3BfZTAwZV9jb25kKVxcbiBcXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpIFxcdTAwMjYgQklUKDEzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODEyNV9zZXRfcnhfcV9udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTE2IHJ4X3FfbnVtO1xcbitcXHR1MTYgcV9jdHJsO1xcbitcXG4rXFx0cnhfcV9udW0gPSBpbG9nMih0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcXG4rXFx0cV9jdHJsIFxcdTAwMjY9IH5SVExfUlhfUV9OVU1fTUFTSztcXG4rXFx0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcXG4rXFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCBxX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR1OCB0bXA7XFxuK1xcbitcXHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xcbitcXHR0bXAgfD0gSU5UX0NGRzBfRU5BQkxFXzgxMjU7XFxuK1xcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuQEAgLTM4NjYsNiArNDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XFxuIFxcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgMCk7XFxuIFxcbitcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTtcXG4rXFxuIFxcdC8qIGRpc2FibGUgVVBTICovXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcXG4gXFxuQEAgLTM4ODUsNiArNDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdCAgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4gXFx0XFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFxcdTAwMjYgfjB4MDIpO1xcbiBcXG4rXFx0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cXG4rXFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTtcXG4rXFx0XFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXFxuK1xcdFxcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xcbiBcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcXG5AQCAtNDEyMSw2ICs0MzUyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xcbiBcXHRydGxfc2V0X3J4X21heF9zaXplKHRwKTtcXG4gXFx0cnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7XFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRydGxfc2V0X3Jzc19jb25maWcodHApO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDB4MDApO1xcbitcXHR9XFxuIFxcdHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTtcXG4gXFxuIFxcdHJ0bF9qdW1ib19jb25maWcodHApO1xcbkBAIC00MTQ4LDE5ICs0Mzg1LDMyIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXFxuIHtcXG4tXFx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdHUzMiBlb3I7XFxuIFxcbi1cXHRkZXNjLVxcdTAwM2VvcHRzMiA9IDA7XFxuLVxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuLVxcdGRtYV93bWIoKTtcXG4tXFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnNzX29wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xcbitcXHRcXHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xcbitcXHRcXHRkbWFfd21iKCk7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuK1xcdFxcdGRtYV93bWIoKTtcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxcbiB7XFxuK1xcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ICsgaW5kZXg7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xcbiBcXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpO1xcbiBcXHRkbWFfYWRkcl90IG1hcHBpbmc7XFxuQEAgLTQxNzcsNTYgKzQ0MjcsMTI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0ZGVzYy1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xcbi1cXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcXG4rXFx0cmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xcbitcXHRpZiAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xcbitcXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XFxuIFxcbiBcXHRyZXR1cm4gZGF0YTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHQgICAgIGVudW0gcnhfZGVzY190eXBlIGRlc2NfdHlwZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQyBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlUnhfZGF0YWJ1ZmZbaV07IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0MgXFx1MDAyNlxcdTAwMjYgcmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV07IGkrKykge1xcbiBcXHRcXHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxcbi1cXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUodHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIpLFxcbitcXHRcXHRcXHQgICAgICAgcmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcXG4gXFx0XFx0XFx0ICAgICAgIFI4MTY5X1JYX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXHRcXHRfX2ZyZWVfcGFnZXModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIgPSAwO1xcbi1cXHRcXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXlbaV0ub3B0czEgPSAwO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZltpXSA9IE5VTEw7XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0gPSAwO1xcbitcXHRcXHRpZiAoZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpIHtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3NfYWRkciA9IDA7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5vcHRzMSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX29wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQzsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpkYXRhO1xcbiBcXG4tXFx0XFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXFx1MDAzZVJ4RGVzY0FycmF5ICsgaSk7XFxuK1xcdFxcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHJpbmcsIGkpO1xcbiBcXHRcXHRpZiAoIWRhdGEpIHtcXG4tXFx0XFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XFxuK1xcdFxcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSA9IGRhdGE7XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldID0gZGF0YTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XFxuK1xcdHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsIFxcdTAwMjZyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9hbGxvY19yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRpZiAocmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSkge1xcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIFI4MTY5X1JYX1JJTkdfQllURVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSxcXG4rXFx0XFx0XFx0XFx0XFx0ICByaW5nLVxcdTAwM2VyeF9waHlfYWRkcik7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4gXFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XFxuK1xcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcXG4gXFxuIFxcdG1lbXNldCh0cC1cXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXFx1MDAzZXR4X3NrYikpO1xcbi1cXHRtZW1zZXQodHAtXFx1MDAzZVJ4X2RhdGFidWZmLCAwLCBzaXplb2YodHAtXFx1MDAzZVJ4X2RhdGFidWZmKSk7XFxuIFxcbi1cXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmLCAwLCBzaXplb2YocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcXG4rXFx0XFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2NsZWFyO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2NsZWFyOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSwgdHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcXG5AQCAtNDI2Niw5ICs0NTg5LDIxIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdG5hcGlfZGlzYWJsZShcXHUwMDI2dHAtXFx1MDAzZW5hcGkpO1xcbitcXHRydGw4MTY5X25hcGlfZGlzYWJsZSh0cCk7XFxuIFxcbiBcXHQvKiBHaXZlIGEgcmFjaW5nIGhhcmRfc3RhcnRfeG1pdCBhIGZldyBjeWNsZXMgdG8gY29tcGxldGUuICovXFxuIFxcdHN5bmNocm9uaXplX25ldCgpO1xcbkBAIC00MzAzLDE4ICs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcXG4rXFx0XFx0XFx0ZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XFxuK1xcbitcXHRcXHRcXHRpZiAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXFxuK1xcdFxcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XFxuK1xcdFxcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ICsgaik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuIFxcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0cnRsODE2OV9jbGVhbnVwKHRwKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQzsgaSsrKVxcbi1cXHRcXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcXG4rXFx0cnRsODE2OV9yeF9kZXNjX3Jlc2V0KHRwKTtcXG4gXFxuLVxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xcbiBcXHRydGxfaHdfc3RhcnQodHApO1xcbiB9XFxuIFxcbkBAIC00NzU4LDMwICs1MTA1LDEwNCBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cylcXG4gXFx0cmV0dXJuIChzdGF0dXMgXFx1MDAyNiAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSlcXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR1MzIgc3RhdHVzID0gb3B0czEgXFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xcbitcXHR1MzIgcnNzX2hlYWRlcl9pbmZvO1xcbitcXHR1MzIgaGFzaF92YWw7XFxuK1xcbitcXHRpZiAoISh0cC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnNzX2R3b3JkLnJzc19pbmZvKTtcXG4rXFxuK1xcdGlmICghKHJzc19oZWFkZXJfaW5mbyBcXHUwMDI2IFJYU19SU1NfTDNfVFlQRV9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGFzaF92YWwgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XFxuK1xcbitcXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcXG4rXFx0XFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXFx1MDAyNiByc3NfaGVhZGVyX2luZm8pID9cXG4rXFx0XFx0ICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzMSlcXG4re1xcbitcXHRib29sIGNzdW1fb2sgPSBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKCgob3B0czEgXFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcXHUwMDI2XFx1MDAyNiAhKG9wdHMxIFxcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XFxuK1xcdFxcdCAgICAoKG9wdHMxIFxcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXFx1MDAyNlxcdTAwMjYgIShvcHRzMSBcXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcXG4rXFx0XFx0XFx0Y3N1bV9vayA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAob3B0czEgPT0gUnhQcm90b1RDUCB8fCBvcHRzMSA9PSBSeFByb3RvVURQKVxcbitcXHRcXHRcXHRjc3VtX29rID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0aWYgKGNzdW1fb2spXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxcbitzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVxcdTAwM2VvcHRzMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHN0YXR1cyBcXHUwMDI2IFJYX1JFU19SU1MpKSB7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9SVU5UX1JTUylcXG4rXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9DUkNfUlNTKVxcbitcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuK1xcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhDUkMpXFxuK1xcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIGludCBidWRnZXQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4tXFx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFxcdTAwM2MgYnVkZ2V0OyBjb3VudCsrLCB0cC1cXHUwMDNlY3VyX3J4KyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHRwLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4tXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGVudHJ5O1xcbitcXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHJpbmctXFx1MDAzZWN1cl9yeCsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4rXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBlbnRyeTtcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0XFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xcbiBcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlb3B0czEpKTtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XFxuIFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBEZXNjT3duKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ3OTEsMTkgKzUyMTIsMTYgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRtYV9ybWIoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XFxuIFxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuIFxcdFxcdFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIlJ4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RhdHVzKTtcXG4gXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuLVxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhDUkMpXFxuLVxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhBTEwpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4tXFx0XFx0XFx0ZWxzZSBpZiAoc3RhdHVzIFxcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcXG4rXFx0XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgdHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNDgyMCwxNCArNTIzOCwxNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2tiID0gbmFwaV9hbGxvY19za2IoXFx1MDAyNnRwLVxcdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XFxuK1xcdFxcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuIFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuK1xcdFxcdGFkZHIgPSByaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XTtcXG4rXFx0XFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuIFxcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFx0XFx0cHJlZmV0Y2gocnhfYnVmKTtcXG5AQCAtNDgzNiwxOSArNTI1NCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRza2ItXFx1MDAzZWxlbiA9IHBrdF9zaXplO1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xcbitcXHRcXHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcXG4rXFx0XFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcXG4gXFxuIFxcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpXFxuIFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XFxuIFxcbi1cXHRcXHRuYXBpX2dyb19yZWNlaXZlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSwgc2tiKTtcXG4rXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xcbiBcXG4gXFx0XFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcXG4gcmVsZWFzZV9kZXNjcmlwdG9yOlxcbi1cXHRcXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcXG4rXFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gY291bnQ7XFxuQEAgLTQ4NTYsOCArNTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXG4gc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTtcXG4tXFx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0dTMyIHN0YXR1cztcXG4rXFxuK1xcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cXHUwMDNlZGV2KTtcXG4rXFx0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xcbiBcXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAyNiAweGZmZmYpID09IDB4ZmZmZiB8fCAhKHN0YXR1cyBcXHUwMDI2IHRwLVxcdTAwM2VpcnFfbWFzaykpXFxuIFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG5AQCAtNDg3MywxMyArNTI5OSw4NiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRwaHlfbWFjX2ludGVycnVwdCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuLVxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0bmFwaV9zY2hlZHVsZShuYXBpKTtcXG4gb3V0OlxcbiBcXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcXG4rXFxuK1xcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgbmFwaSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdGlmIChtZXNzYWdlX2lkID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKSB7XFxuK1xcdFxcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcXG4rXFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fVxcbitcXG4rXFx0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcXG4rXFx0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xcbitcXG4rXFx0bmFwaV9zY2hlZHVsZShuYXBpKTtcXG4rXFxuK1xcdHJldHVybiBJUlFfSEFORExFRDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XFxuK1xcdGludCBpLCByYztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcXG4rXFx0XFx0bmFwaSA9IFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdF9tc2l4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwsIG5hcGksIFxcXCIlcy0lZFxcXCIsIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXFx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwsIG5hcGksIFxcXCIlcy0lZFxcXCIsIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Z290byBmcmVlX2lycTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfaXJxOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XFxuQEAgLTQ5MTQsMTMgKzU0MTMsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiB7XFxuLVxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXFx1MDAzZWRldjtcXG4tXFx0aW50IHdvcmtfZG9uZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuYXBpLVxcdTAwM2VkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRpbnQgd29ya19kb25lID0gMDtcXG4gXFxuIFxcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xcbiBcXG4tXFx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XFxuK1xcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXFxuK1xcdHdvcmtfZG9uZSA9IHJ0bF9yeChkZXYsIHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7XFxuIFxcbiBcXHRpZiAod29ya19kb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxcbiBcXHRcXHRydGxfaXJxX2VuYWJsZSh0cCk7XFxuQEAgLTUwMzUsNyArNTUzNSw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4tXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XFxuIFxcdGVuYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuIFxcdHJ0bF9yZXNldF93b3JrKHRwKTtcXG4gXFxuQEAgLTUwNTEsMTggKzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuLVxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKylcXG4rXFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldLCB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xcbiBcXG4tXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcXG4gXFxuIFxcdHBoeV9kaXNjb25uZWN0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG4tXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbi1cXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuLVxcdHRwLVxcdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XFxuK1xcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcXG4gXFxuIFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC01MDc0LDcgKzU1NzMsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXFx1MDAzZXBjaV9kZXYsIGkpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVxcdTAwM2VwY2lfZGV2LCBpKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdH1cXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTUwODIsNyArNTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XFxuIFxcdGludCByZXR2YWwgPSAtRU5PTUVNO1xcbiBcXG4gXFx0cG1fcnVudGltZV9nZXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5AQCAtNTA5NiwxMCArNTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKCF0cC1cXHUwMDNlVHhEZXNjQXJyYXkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRwLVxcdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXRwLVxcdTAwM2VSeERlc2NBcnJheSlcXG4tXFx0XFx0Z290byBlcnJfZnJlZV90eF8wO1xcbitcXHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcXG4gXFxuIFxcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuQEAgLTUxMDcsOCArNTYxMCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTtcXG4gXFxuLVxcdGlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7XFxuLVxcdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVxcdTAwM2VpcnEsIHJ0bDgxNjlfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LVxcdTAwM2VuYW1lLCB0cCk7XFxuK1xcdHJldHZhbCA9IHJ0bDgxNjlfcmVxdWVzdF9pcnEodHApO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xcbiBcXG5AQCAtNTEyNSwxNSArNTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiByZXR2YWw7XFxuIFxcbiBlcnJfZnJlZV9pcnE6XFxuLVxcdGZyZWVfaXJxKHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4rXFx0cnRsODE2OV9mcmVlX2lycSh0cCk7XFxuIGVycl9yZWxlYXNlX2Z3XzI6XFxuIFxcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcXG4tXFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0sIHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XFxuIGVycl9mcmVlX3J4XzE6XFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4tXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4tZXJyX2ZyZWVfdHhfMDpcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuQEAgLTUyNzUsNiArNTc3NSwxNCBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFxuK1xcdGtmcmVlKHRwLVxcdTAwM2VydGw4MTY5X25hcGkpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5AQCAtNTI4OSw2ICs1Nzk3LDggQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cXHUwMDNlZGV2KTtcXG4gXFxuK1xcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XFxuK1xcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG4gXFxuQEAgLTUzMjAsMTUgKzU4MzAsNDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dHAtXFx1MDAzZWlycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZztcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IElTUklNUl9MSU5LQ0hHIHwgSVNSSU1SX1RPS19RMDtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwIFxcdTAwM2NcXHUwMDNjIGk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXFxuLVxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X21heF9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XFxuK1xcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBnZXRfbWluX2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuK1xcdFxcdHJldHVybiBSODEyN19NSU5fTlVNX0lSUVZFQztcXG4rXFx0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHJzc19xdWV1ZV9udW0gPSBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpO1xcbitcXG4rXFx0XFx0dHAtXFx1MDAzZW51bV9yeF9yaW5ncyA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKG1pbihyc3NfcXVldWVfbnVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcykpO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlPSAyKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsX2FsbG9jX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVxcdTAwM2VwY2lfZGV2O1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuK1xcdGludCBudmVjcztcXG4gXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcXG5AQCAtNTM0NCw3ICs1ODg4LDE3IEBAIHN0YXRpYyBpbnQgcnRsX2FsbG9jX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXFx1MDAzZXBjaV9kZXYsIDEsIDEsIGZsYWdzKTtcXG4rXFx0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgZ2V0X21pbl9pcnFfbnZlY3ModHApLCBnZXRfbWF4X2lycV9udmVjcyh0cCksIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChudmVjcyBcXHUwMDNjIDApXFxuK1xcdFxcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChudmVjcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBudmVjcztcXG4rXFxuK1xcdHRwLVxcdTAwM2VpcnFfbnZlY3MgPSBudmVjcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG5AQCAtNTU5OSw2ICs2MTUzLDI0MSBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xcbitcXHRpbnQgd29ya19kb25lID0gMDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdGlmIChtZXNzYWdlX2lkIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5ncylcXG4rXFx0XFx0d29ya19kb25lICs9IHJ0bF9yeChkZXYsIHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbbWVzc2FnZV9pZF0sIGJ1ZGdldCwgbmFwaSk7XFxuK1xcbitcXHRpZiAod29ya19kb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxcbitcXHRcXHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XFxuK1xcbitcXHRyZXR1cm4gd29ya19kb25lO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFxuK1xcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xcbitcXG4rXFx0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcXG4rXFx0XFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cXHUwMDNlcnRsODE2OV9uYXBpKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAobmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIDApKVxcbitcXHRcXHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLVxcdTAwM2VydGw4MTY5X25hcGkpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XFxuKyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXFx0XFx0OiBSeCBRdWV1ZXNcXG4rICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICsgVHhRcyAtIDEpXFx0OiBUeCBRdWV1ZXNcXG4rICogVmVjdG9yIChSeFFzICsgVHhRcykgYW5kIHVwXFx0XFx0OiBPdGhlciBldmVudHMgKExpbmsgc3RhdHVzKDI5KSwgZXRjLilcXG4rICovXFxuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRpbnQgKCpwb2xsX2ZuKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSA9IHJ0bDgxNjlfcG9sbDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMpXFxuK1xcdFxcdFxcdFxcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMgKyBSODEyN19NQVhfVFhfUVVFVUVTKVxcbitcXHRcXHRcXHRcXHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyO1xcbitcXHRcXHR9XFxuK1xcdFxcdG5ldGlmX25hcGlfYWRkKHRwLVxcdTAwM2VkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VtYXhfcnggPSB0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRjaC1cXHUwMDNlbWF4X3R4ID0gMTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VyeF9jb3VudCA9IHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7XFxuK1xcdGNoLVxcdTAwM2V0eF9jb3VudCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpuZXdfcngsXFxuK1xcdFxcdFxcdCAgICAgIGludCBuZXdfY291bnQpXFxuK3tcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZXdfY291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNm5ld19yeFtpXTtcXG4rXFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnRwLVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZW1zZXQocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZikpO1xcbitcXHRcXHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZ0cC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXksIHJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdHdoaWxlICgtLWkgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2bmV3X3J4W2ldLCB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xcbitcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2dHAtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4rXFx0XFx0XFx0XFx0ICBuZXdfcnhbaV0ucnhfZGVzY19hcnJheSwgbmV3X3J4W2ldLnJ4X3BoeV9hZGRyKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgb2xkX3J4X2Rlc2NfdHlwZTtcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgbmV3X2Rlc2NfdHlwZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0aWYgKGNoLVxcdTAwM2VyeF9jb3VudCA9PSB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG9sZF9yeF9kZXNjX3R5cGUgPSB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGU7XFxuK1xcbitcXHRpZiAoIXJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiVGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNoLVxcdTAwM2VyeF9jb3VudCBcXHUwMDNlIHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgfHwgIWlzX3Bvd2VyX29mXzIoY2gtXFx1MDAzZXJ4X2NvdW50KSB8fFxcbitcXHQgICAgdHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNjIGdldF9taW5faXJxX252ZWNzKHRwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuZXdfZGVzY190eXBlID0gY2gtXFx1MDAzZXJ4X2NvdW50IFxcdTAwM2UgMSA/IFJYX0RFU0NfVFlQRV9SU1MgOiBSWF9ERVNDX1RZUEVfREVGQVVMVDtcXG4rXFxuK1xcdGlmICghaWZfcnVubmluZykge1xcbitcXHRcXHRyZXQgPSBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGRldiwgY2gtXFx1MDAzZXJ4X2NvdW50KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgPSBjaC1cXHUwMDNlcnhfY291bnQ7XFxuK1xcdFxcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG5ld19kZXNjX3R5cGU7XFxuK1xcbitcXHRcXHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0XFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRuZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XFxuK1xcdGlmICghbmV3X3J4KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4rXFx0cnRsODE2OV9kb3duKHRwKTtcXG4rXFxuK1xcdHJldCA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBjaC1cXHUwMDNlcnhfY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl91cDtcXG4rXFxuK1xcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG5ld19kZXNjX3R5cGU7XFxuK1xcbitcXHRyZXQgPSBydGw4MTY5X3JlYWxsb2NfcngodHAsIG5ld19yeCwgY2gtXFx1MDAzZXJ4X2NvdW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xcbitcXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXFx1MDAzZXJ4X2NvdW50O1xcbitcXG4rXFx0bWVtc2V0KHRwLVxcdTAwM2VyeF9yaW5nLCAwLCBzaXplb2YodHAtXFx1MDAzZXJ4X3JpbmcpKTtcXG4rXFx0bWVtY3B5KHRwLVxcdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVxcdTAwM2VyeF9jb3VudCk7XFxuK1xcbitcXHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuK1xcbitcXHRydGw4MTY5X3VwKHRwKTtcXG4rXFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcXG4rXFxuK1xcdGtmcmVlKG5ld19yeCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXNldDpcXG4rXFx0aWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKSlcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmV2ZXJ0IHJ4X3F1ZXVlcywgc3RhdGUgbWlnaHQgYmUgaW5jb25zaXN0ZW50IVxcXFxuXFxcIik7XFxuK1xcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7XFxuK2Vycl91cDpcXG4rXFx0cnRsODE2OV91cCh0cCk7XFxuK1xcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuK1xcdGtmcmVlKG5ld19yeCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuK1xcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuK1xcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxcbitcXHQuZ2V0X2RydmluZm9cXHRcXHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXFxuK1xcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxcbitcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuK1xcdC5nZXRfY29hbGVzY2VcXHRcXHQ9IHJ0bF9nZXRfY29hbGVzY2UsXFxuK1xcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IHJ0bF9zZXRfY29hbGVzY2UsXFxuK1xcdC5nZXRfcmVnc1xcdFxcdD0gcnRsODE2OV9nZXRfcmVncyxcXG4rXFx0LmdldF93b2xcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcXG4rXFx0LnNldF93b2xcXHRcXHQ9IHJ0bDgxNjlfc2V0X3dvbCxcXG4rXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxcbitcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcXG4rXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbitcXHQubndheV9yZXNldFxcdFxcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcXG4rXFx0LmdldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcXG4rXFx0LnNldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfc2V0X2VlZSxcXG4rXFx0LmdldF9jaGFubmVsc1xcdFxcdD0gcnRsODE2OV9nZXRfY2hhbm5lbHMsXFxuK1xcdC5zZXRfY2hhbm5lbHNcXHRcXHQ9IHJ0bDgxNjlfc2V0X2NoYW5uZWxzLFxcbitcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbitcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxcbitcXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXFxuK1xcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcXG4rXFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTYwOSw3ICs2Mzk4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR1MzIgdHhjb25maWc7XFxuIFxcdHUzMiB4aWQ7XFxuIFxcbi1cXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZiAoKnRwKSk7XFxuK1xcdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHApLFxcbitcXHRcXHRcXHRcXHQgICAgICBSODE2OV9NQVhfVFhfUVVFVUVTLFxcbitcXHRcXHRcXHRcXHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcXG4rXFxuIFxcdGlmICghZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTU2ODksNiArNjQ4MSwxMiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0dHAtXFx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcXG4gXFx0dHAtXFx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcXG4rXFx0XFx0dHAtXFx1MDAzZXJzc19kYXRhID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHAtXFx1MDAzZXJzc19kYXRhKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghdHAtXFx1MDAzZXJzc19kYXRhKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0dHAtXFx1MDAzZWNwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSBcXHUwMDI2IENQQ01EX01BU0s7XFxuIFxcbiBcXHRpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpIFxcdTAwM2UgNCBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xOCBcXHUwMDI2XFx1MDAyNlxcbkBAIC01NzAzLDExICs2NTAxLDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0cnRsX2h3X3Jlc2V0KHRwKTtcXG4gXFxuK1xcdHJ0bF9zZXR1cF9yeF9wYXJhbXModHApO1xcbitcXG4gXFx0cmMgPSBydGxfYWxsb2NfaXJxKHRwKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmMsIFxcXCJDYW4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRcXFxcblxcXCIpO1xcbiBcXG4tXFx0dHAtXFx1MDAzZWlycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xcbitcXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XFxuK1xcbitcXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcXG4rXFx0XFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XFxuIFxcbiBcXHRJTklUX1dPUksoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrLCBydGxfdGFzayk7XFxuIFxcdGRpc2FibGVfd29yayhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmspO1xcbkBAIC01NzE2LDEzICs2NTE5LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xcbiBcXG4tXFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHJ0bDgxNjlfcG9sbCk7XFxuLVxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYO1xcbiBcXHRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087XFxuIFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTElWRV9BRERSX0NIQU5HRTtcXG4gXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XFxuK1xcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlXFxuIFxcdCAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLlxcbkBAIC01Nzc4LDYgKzY1ODQsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdGlmIChqdW1ib19tYXgpXFxuIFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IGp1bWJvX21heDtcXG4gXFxuK1xcdHJjID0gbmV0aWZfc2V0X3JlYWxfbnVtX3F1ZXVlcyh0cC1cXHUwMDNlZGV2LCAxLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmMsIFxcXCJzZXQgdHgvcnggbnVtIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXG4gXFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuIFxcbiBcXHR0cC1cXHUwMDNlY291bnRlcnMgPSBkbWFtX2FsbG9jX2NvaGVyZW50IChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwLVxcdTAwM2Vjb3VudGVycyksXFxuQEAgLTU3OTIsOSArNjYwMiwxNSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcbitcXHR0cC1cXHUwMDNlcnRsODE2OV9uYXBpID0ga2NhbGxvYyh0cC1cXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyODE2OV9pbml0X25hcGkodHApO1xcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4gXFx0aWYgKHJjKVxcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xcbiBcXHRcXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbkBAIC01ODAzLDggKzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0XFx0dHAtXFx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xcbiBcXHR9XFxuIFxcbi1cXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgY2hpcC1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtXFx1MDAzZWlycSk7XFxuK1xcdG5ldGRldl9pbmZvKGRldiwgXFxcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWQgKCVkIHRvdGFsKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGNoaXAtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXFxuK1xcdFxcdCAgICBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgdHAtXFx1MDAzZWlycV9udmVjcyk7XFxuIFxcbiBcXHRpZiAoanVtYm9fbWF4KVxcbiBcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXFxcblxcXCIsXFxuQEAgLTU4MjEsNiArNjYzOCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWVfbmFwaTpcXG4rXFx0cjgxNjlfZnJlZV9uYXBpKHRwKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMDo0Ni42MjM1NDc3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMDg5MzY3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X3NldF9jaGFubmVsc1wiLFxuICAgIFwicnRsODE2OV9yZWFsbG9jX3J4XCIsXG4gICAgXCJydGxfc2V0X3Jzc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfaW5pdF9yc3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtXCIsXG4gICAgXCJydGxfYWxsb2NfaXJxXCIsXG4gICAgXCJydGw4MTY5X2FsbG9jX3J4X2Rlc2NcIixcbiAgICBcInJ0bDgxNjlfZnJlZV9yeF9kZXNjXCIsXG4gICAgXCJyODE2OV9pbml0X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OWJjNzMzZjlmNDFlZWVhYTU3YjM2MzhmNTRhYTkzODJlNjg1N2VjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDc6MzA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uOTE5NGMyMTQyZjk1ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC03NCw5ICs3NCwzMyBAQFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcbi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcbitcbisvKlxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxuKyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXG4rICovXG4rI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcdChNQVhfU0tCX0ZSQUdTICsgMSlcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxuKyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1x0OFxuKyNkZWZpbmUgUjgxMjdfTUFYX1RYX1FVRVVFU1x0OFxuKyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbisjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcdDFcbisjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXHQzMlxuKyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG4rI2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFx0MVxuKyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVx0NDBcbisjZGVmaW5lIFJTU19DUFVfTlVNX01BU0tcdEdFTk1BU0soMTgsIDE2KVxuKyNkZWZpbmUgUlNTX0hBU0hfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuKyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOFxuKyNkZWZpbmUgUlhTX1JTU19VRFBcdFx0QklUKDI3KVxuKyNkZWZpbmUgUlhTX1JTU19JUFY0XHRcdEJJVCgyOClcbisjZGVmaW5lIFJYU19SU1NfSVBWNlx0XHRCSVQoMjkpXG4rI2RlZmluZSBSWFNfUlNTX1RDUFx0XHRCSVQoMzApXG4rI2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTS1x0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcbisjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLXHQoUlhTX1JTU19UQ1AgfCBSWFNfUlNTX1VEUClcbiBcbiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0VcdDB4YTQwMFxuIFxuQEAgLTQ0MSwxMSArNDY1LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xuIFx0VHhQb2xsXzgxMjVcdFx0PSAweDkwLFxuIFx0TEVEU0VMM1x0XHRcdD0gMHg5NixcbiBcdE1BQzBfQktQXHRcdD0gMHgxOWUwLFxuK1x0UkRTQVJfUTFfTE9XXHRcdD0gMHg0MDAwLFxuIFx0UlNTX0NUUkxfODEyNVx0XHQ9IDB4NDUwMCxcbiBcdFFfTlVNX0NUUkxfODEyNVx0XHQ9IDB4NDgwMCxcbiBcdEVFRV9UWElETEVfVElNRVJfODEyNVx0PSAweDYwNDgsXG4rXHRJTVJfQ0xFQVJfVkVDX01BUF9SRUdcdD0gMHgwZDAwLFxuK1x0SVNSX1ZFQ19NQVBfUkVHXHRcdD0gMHgwZDA0LFxuK1x0SU1SX1NFVF9WRUNfTUFQX1JFR1x0PSAweDBkMGMsXG4gfTtcbiBcbisjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHXHQyOVxuICNkZWZpbmUgTEVEU0VMX01BU0tfODEyNVx0MHgyM2ZcbiBcbiAjZGVmaW5lIFJYX1ZMQU5fSU5ORVJfODEyNVx0QklUKDIyKVxuQEAgLTU3Niw2ICs2MDUsMjMgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4gXG4gXHQvKiBtYWdpYyBlbmFibGUgdjIgKi9cbiBcdE1hZ2ljUGFja2V0X3YyXHQ9ICgxIFx1MDAzY1x1MDAzYyAxNiksXHQvKiBXYWtlIHVwIHdoZW4gcmVjZWl2ZXMgYSBNYWdpYyBQYWNrZXQgKi9cbisjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuKyNkZWZpbmVcdElTUklNUl9UT0tfUTBcdEJJVCg4KVxuKyNkZWZpbmVcdElTUklNUl9ST0tfUTBcdEJJVCgwKVxuKyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbisjZGVmaW5lIFJTU19LRVlfUkVHXHRcdFx0MHg0NjAwXG4rI2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFR1x0XHQweDQ3MDBcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX1JTU1x0XHRCSVQoMSlcbisjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUFx0XHRCSVQoMSlcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X1NVUFBcdFx0QklUKDMpXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQXHRcdEJJVCg0KVxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuKyNkZWZpbmVcdFJYX1JFU19SU1NcdFx0XHRCSVQoMjIpXG4rI2RlZmluZVx0UlhfUlVOVF9SU1NcdFx0XHRCSVQoMjEpXG4rI2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbisjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLXHRcdEdFTk1BU0soNCwgMilcbiB9O1xuIFxuIGVudW0gcnRsX2Rlc2NfYml0IHtcbkBAIC02MzMsNiArNjc5LDExIEBAIGVudW0gcnRsX3J4X2Rlc2NfYml0IHtcbiAjZGVmaW5lIFJ4UHJvdG9JUFx0KFBJRDEgfCBQSUQwKVxuICNkZWZpbmUgUnhQcm90b01hc2tcdFJ4UHJvdG9JUFxuIFxuKyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbisjZGVmaW5lXHRSWF9UQ1BUX0RFU0NfUlNTXHRCSVQoMTgpXG4rI2RlZmluZVx0UlhfVURQRl9ERVNDX1JTU1x0QklUKDE2KSAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rI2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rXG4gXHRJUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTYpLCAvKiBJUCBjaGVja3N1bSBmYWlsZWQgKi9cbiBcdFVEUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTUpLCAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRUQ1BGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuQEAgLTY1NCw5ICs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7XG4gfTtcbiBcbiBzdHJ1Y3QgUnhEZXNjIHtcbi1cdF9fbGUzMiBvcHRzMTtcbi1cdF9fbGUzMiBvcHRzMjtcbi1cdF9fbGU2NCBhZGRyO1xuK1x0dW5pb24ge1xuK1x0XHQvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqL1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdF9fbGUzMiBvcHRzMTtcbitcdFx0XHRfX2xlMzIgb3B0czI7XG4rXHRcdFx0X19sZTY0IGFkZHI7XG4rXHRcdH07XG4rXG4rXHRcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cbitcdFx0c3RydWN0IHtcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRfX2xlNjQgcnNzX2FkZHI7XG4rXHRcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0XHRfX2xlMzIgcnNzX2luZm87XG4rXHRcdFx0XHRcdF9fbGUzMiByc3NfcmVzdWx0O1xuK1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4rXHRcdFx0fTtcbitcdFx0XHRfX2xlMzIgcnNzX29wdHMyO1xuK1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4rXHRcdH07XG4rXHR9O1xuIH07XG4gXG4gc3RydWN0IHJpbmdfaW5mbyB7XG5AQCAtNzI4LDI3ICs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSByeF9kZXNjX3R5cGUge1xuK1x0UlhfREVTQ19UWVBFX0RFRkFVTFQsXG4rXHRSWF9ERVNDX1RZUEVfUlNTLFxuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4rXHR1MzIgaW5kZXg7XHRcdFx0XHRcdC8qIFJ4IHF1ZXVlIGluZGV4ICovXG4rXHR1MzIgY3VyX3J4O1x0XHRcdFx0XHQvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi9cbitcdHUzMiBkaXJ0eV9yeDtcdFx0XHRcdFx0LyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi9cbitcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XHRcdFx0LyogYXJyYXkgb2YgUnggRGVzYyovXG4rXHRkbWFfYWRkcl90IHJ4X2Rlc2NfcGh5X2FkZHJbTlVNX1JYX0RFU0NdO1x0LyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi9cbitcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XHRcdFx0XHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cbitcdHN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XHRcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEge1xuK1x0dTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTtcbitcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcbitcdHVuc2lnbmVkIGludCBod19zdXBwX2luZGlyX3RibF9lbnRyaWVzO1xuK307XG4rXG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4tXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuIFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi9cbi1cdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcbi1cdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xuLVx0c3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuIFx0c3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdO1x0LyogVHggZGF0YSBidWZmZXJzICovXG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnJ0bDgxNjlfbmFwaTtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTtcbitcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4rXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgKnJzc19kYXRhO1xuK1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbitcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgKzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICsxNzQwLDM4IEBAIHN0YXRpYyB1MzIgcnRsX2dldF9ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4tXHRlbHNlXG4rXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4rXHRcdFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0xODY3LDkgKzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcbitcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHR1MzIgb3B0czI7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCArMjUzNSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuLVx0LmdldF9kcnZpbmZvXHRcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcbi1cdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbi1cdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4tXHQuZ2V0X2NvYWxlc2NlXHRcdD0gcnRsX2dldF9jb2FsZXNjZSxcbi1cdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuLVx0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbi1cdC5nZXRfd29sXHRcdD0gcnRsODE2OV9nZXRfd29sLFxuLVx0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4tXHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuLVx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbi1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbi1cdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuLVx0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4tXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbi1cdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQuZ2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxuLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcbi1cdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuLVx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcbi19O1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcbiB7XG4gXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXG5AQCAtMjYxOSw5ICsyNzEwLDI3IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4rXG4rXHRcdG1lbXNldChyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlZGlydHlfdHggPSB0cC1cdTAwM2VjdXJfdHggPSB0cC1cdTAwM2VjdXJfcnggPSAwO1xuK1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuK1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0cmluZy1cdTAwM2VkaXJ0eV9yeCA9IDA7XG4rXHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbitcdFx0cmluZy1cdTAwM2VpbmRleCA9IGk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMjY4MCw2ICsyNzg5LDM0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90Ymwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpKyspXG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBudW1fcnhfcmluZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRuZXRkZXZfcnNzX2tleV9maWxsKHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19rZXksIFJUTF9SU1NfS0VZX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0dXBfcnhfcGFyYW1zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XG4rXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfODA6XG4rXHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMgPSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0dHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfREVGQVVMVF9SWF9RVUVVRVM7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xuQEAgLTI4MDIsOCArMjkzOSw2MyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21heF9zaXplKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSArIDEpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTMyIG51bV9lbnRyaWVzID0gUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpO1xuK1x0dTMyICpyc3Nfa2V5ID0gdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleTtcbitcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xuK1xuK1x0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fZW50cmllczsgaSsrKVxuK1x0XHRSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyArIChpICogNCksIHJzc19rZXlbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggKmluZGlyX3RibCA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90Ymw7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpICs9IDQpIHtcbitcdFx0dTMyIHJldGEgPSAodTMyKWluZGlyX3RibFtpXSB8XG4rXHRcdFx0ICAgKHUzMilpbmRpcl90YmxbaSArIDFdIFx1MDAzY1x1MDAzYyA4IHxcbitcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICsgMl0gXHUwMDNjXHUwMDNjIDE2IHxcbitcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICsgM10gXHUwMDNjXHUwMDNjIDI0O1xuK1x0XHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyArIGksIHJldGEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTMyIHJzc19jdHJsO1xuK1xuK1x0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncykpO1xuK1xuK1x0LyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqL1xuK1x0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxuK1x0XHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcbitcdFx0IHwgUlNTX0NUUkxfSVBWNl9TVVBQXG4rXHRcdCB8IFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcbitcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxuK1x0XHQgfCBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUDtcbitcbitcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbitcdFx0XHQgICAgICAgaWxvZzIodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xuK1xuK1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbitcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4rXHRydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nWzBdO1xuK1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICszMDAzLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcbitcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICsgKGkgLSAxKSAqIDg7XG4rXHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1xuK1x0XHRSVExfVzMyKHRwLCByZHNhcl9yZWcgKyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0XHRSVExfVzMyKHRwLCByZHNhcl9yZWcsICgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTM4NTgsNiArNDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHUxNiByeF9xX251bTtcbitcdHUxNiBxX2N0cmw7XG4rXG4rXHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRxX2N0cmwgPSBSVExfUjE2KHRwLCBRX05VTV9DVFJMXzgxMjUpO1xuK1x0cV9jdHJsIFx1MDAyNj0gflJUTF9SWF9RX05VTV9NQVNLO1xuK1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbitcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggdG1wO1xuK1xuK1x0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcbitcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbitcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICs0MDg3LDkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XG4gXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xuIFxuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuK1xuIFx0LyogZGlzYWJsZSBVUFMgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcbiBcbkBAIC0zODg1LDYgKzQxMDksMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4gXHRcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcdTAwMjYgfjB4MDIpO1xuIFxuK1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cbitcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpIHtcbitcdFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xuK1x0XHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcbitcdFx0ICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTtcbitcdH1cbitcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XG4gXHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuQEAgLTQxMjEsNiArNDM1MiwxMiBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7XG4gXHRydGxfc2V0X3J4X21heF9zaXplKHRwKTtcbiBcdHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHApO1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKVxuK1x0XHRcdHJ0bF9zZXRfcnNzX2NvbmZpZyh0cCk7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTtcbitcdH1cbiBcdHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTtcbiBcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuQEAgLTQxNDgsMTkgKzQzODUsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiB7XG4tXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4rXHR1MzIgZW9yO1xuIFxuLVx0ZGVzYy1cdTAwM2VvcHRzMiA9IDA7XG4tXHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuLVx0ZG1hX3dtYigpO1xuLVx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xuK1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuK1x0XHRkbWFfd21iKCk7XG4rXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0XHRkZXNjLVx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXG4rXHRcdGRtYV93bWIoKTtcbitcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4rXHRcdFx0XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxuIHtcbitcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBpbmRleDtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTtcbiBcdGRtYV9hZGRyX3QgbWFwcGluZztcbkBAIC00MTc3LDU2ICs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbi1cdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuK1x0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7XG4rXHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbitcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuK1x0ZWxzZVxuK1x0XHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbitcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcbiBcdHJldHVybiBkYXRhO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxuK1x0XHRcdCAgICAgZW51bSByeF9kZXNjX3R5cGUgZGVzY190eXBlKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpKyspIHtcbiBcdFx0ZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSxcbi1cdFx0XHQgICAgICAgbGU2NF90b19jcHUodHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciksXG4rXHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0X19mcmVlX3BhZ2VzKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbitcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbitcdFx0aWYgKGRlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHR0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4rXHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuIFx0fVxuIFxuIFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHRwLCBcdTAwMjZyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2cmluZy1cdTAwM2VyeF9waHlfYWRkcixcbitcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0aWYgKHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuK1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgIFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LFxuK1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpO1xuK1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSA9IE5VTEw7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRpbnQgaSwgcmV0O1xuK1xuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4rXHRydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7XG4gXG4gXHRtZW1zZXQodHAtXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXHUwMDNldHhfc2tiKSk7XG4tXHRtZW1zZXQodHAtXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cdTAwM2VSeF9kYXRhYnVmZikpO1xuIFxuLVx0cmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4rXHRcdHJldCA9IHJ0bDgxNjlfcnhfZmlsbCh0cCwgcmluZyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfY2xlYXI7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfY2xlYXI6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbitcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSwgdHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgKzQ1ODksMjEgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cdTAwM2VkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspXG4rXHRcdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkrKylcbitcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggKzQ2MzgsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRpbnQgaTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcbitcdFx0XHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2pdO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpO1xuK1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcbitcdFx0fVxuK1x0fVxuK31cbiBcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKylcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19yZXNldCh0cCk7XG4gXG4tXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0cnRsX2h3X3N0YXJ0KHRwKTtcbiB9XG4gXG5AQCAtNDc1OCwzMCArNTEwNSwxMDQgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBSeERlc2MgKmRlc2MsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbitcdHUzMiByc3NfaGVhZGVyX2luZm87XG4rXHR1MzIgaGFzaF92YWw7XG4rXG4rXHRpZiAoISh0cC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xuK1xuK1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4rXHRcdHJldHVybjtcbitcbitcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4rXG4rXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbitcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuK1x0XHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICB1MzIgb3B0czEpXG4re1xuK1x0Ym9vbCBjc3VtX29rID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4rXHRcdCAgICAoKG9wdHMxIFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxuK1x0XHRcdGNzdW1fb2sgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGlmIChvcHRzMSA9PSBSeFByb3RvVENQIHx8IG9wdHMxID09IFJ4UHJvdG9VRFApXG4rXHRcdFx0Y3N1bV9vayA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuLVx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuK1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuK3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHRcdHUzMiBzdGF0dXMpXG4re1xuK1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuK1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSWF9SRVNfUlNTKSkge1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSWF9DUkNfUlNTKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4rXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHRwLVx1MDAzZWN1cl9yeCsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICsgZW50cnk7XG4rXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQrKywgcmluZy1cdTAwM2VjdXJfcngrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbitcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSArIGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDI2IERlc2NPd24pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDc5MSwxOSArNTIxMiwxNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XG4gXHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCJSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcblwiLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzKTtcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgKFJ4UldUIHwgUnhSVU5UKSlcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xuIFxuIFx0XHRcdGlmICghKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWEFMTCkpXG4gXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbi1cdFx0XHRlbHNlIGlmIChzdGF0dXMgXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcbitcdFx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgdHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX0RFRkFVTFQpXG4gXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuQEAgLTQ4MjAsMTQgKzUyMzgsMTQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihcdTAwMjZ0cC1cdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XG4rXHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRhZGRyID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2VhZGRyKTtcbi1cdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLVx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XG4rXHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuK1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICs1MjU0LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBwa3Rfc2l6ZTtcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4rXHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuK1x0XHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIFxuLVx0XHRydGw4MTY5X3J4X3ZsYW5fdGFnKGRlc2MsIHNrYik7XG4rXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4gXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XG4gXG4tXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2dHAtXHUwMDNlbmFwaSwgc2tiKTtcbitcdFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xuIFxuIFx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgcGt0X3NpemUpO1xuIHJlbGVhc2VfZGVzY3JpcHRvcjpcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XG4rXHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcbitcdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQ4NTYsOCArNTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4ge1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XG4tXHR1MzIgc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHR1MzIgc3RhdHVzO1xuK1xuK1x0dHAgPSBuZXRkZXZfcHJpdihuYXBpLVx1MDAzZWRldik7XG4rXHRzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XG4gXG4gXHRpZiAoKHN0YXR1cyBcdTAwMjYgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgXHUwMDI2IHRwLVx1MDAzZWlycV9tYXNrKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuQEAgLTQ4NzMsMTMgKzUyOTksODYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4tXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuK1x0bmFwaV9zY2hlZHVsZShuYXBpKTtcbiBvdXQ6XG4gXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuK1xuK1x0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgbmFwaSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X21zaXgoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuK1x0aW50IG1lc3NhZ2VfaWQ7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbitcbitcdGlmIChtZXNzYWdlX2lkID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKSB7XG4rXHRcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fVxuK1xuK1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbitcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcbitcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4rXG4rXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9yZXF1ZXN0X2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuK1x0aW50IGksIHJjO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0bmFwaSA9IFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcbitcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdF9tc2l4LFxuK1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIiwgZGV2LVx1MDAzZW5hbWUsIGkpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgcnRsODE2OV9pbnRlcnJ1cHQsXG4rXHRcdFx0XHRcdCAgICAgTlVMTCwgbmFwaSwgXCIlcy0lZFwiLCBkZXYtXHUwMDNlbmFtZSwgaSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRnb3RvIGZyZWVfaXJxO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZnJlZV9pcnE6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbitcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyArNTQxMywxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVx1MDAzZWRldjtcbi1cdGludCB3b3JrX2RvbmU7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuIFxuIFx0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4gXG4tXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTtcbitcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXG4rXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgKzU1MzUsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRydGw4MTY5X25hcGlfZW5hYmxlKHRwKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuIFxuQEAgLTUwNTEsMTggKzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuK1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gXG4gXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuLVx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4rXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC01MDc0LDcgKzU1NzMsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0XHRydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuK1x0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHR9XG4gfVxuICNlbmRpZlxuIFxuQEAgLTUwODIsNyArNTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4tXHR1bnNpZ25lZCBsb25nIGlycWZsYWdzO1xuIFx0aW50IHJldHZhbCA9IC1FTk9NRU07XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbkBAIC01MDk2LDEwICs1NjAxLDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCF0cC1cdTAwM2VUeERlc2NBcnJheSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbi1cdFx0XHRcdFx0ICAgICBcdTAwMjZ0cC1cdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF0cC1cdTAwM2VSeERlc2NBcnJheSlcbi1cdFx0Z290byBlcnJfZnJlZV90eF8wO1xuK1x0aWYgKHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyh0cCkgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcbiBcbiBcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG5AQCAtNTEwNyw4ICs1NjEwLDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xuIFxuLVx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcbi1cdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXHUwMDNlbmFtZSwgdHApO1xuK1x0cmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG5AQCAtNTEyNSwxNSArNTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIFxuIGVycl9mcmVlX2lycTpcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuK1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gZXJyX3JlbGVhc2VfZndfMjpcbiBcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcbi1cdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gZXJyX2ZyZWVfcnhfMTpcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4tZXJyX2ZyZWVfdHhfMDpcbitcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG5AQCAtNTI3NSw2ICs1Nzc1LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cGNpX3ByZXBhcmVfdG9fc2xlZXAocGRldik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHI4MTY5X2ZyZWVfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspXG4rXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXG4rXHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbkBAIC01Mjg5LDYgKzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4rXHRyODE2OV9mcmVlX25hcGkodHApO1xuK1xuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbiBcbkBAIC01MzIwLDE1ICs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4rXHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4rXHRcdHRwLVx1MDAzZWlycV9tYXNrID0gSVNSSU1SX0xJTktDSEcgfCBJU1JJTVJfVE9LX1EwO1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbitcdH0gZWxzZSB7XG4rXHRcdHRwLVx1MDAzZWlycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZztcbiBcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4tXHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4rXHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4rXHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBnZXRfbWF4X2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0cmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDO1xuK1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuK31cbitcbitzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuK1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4rXHRyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbitcdFx0dW5zaWduZWQgaW50IHJzc19xdWV1ZV9udW0gPSBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpO1xuK1xuK1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbitcdFx0XHRcdFx0XHRcdCAgICB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMpKTtcbitcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2U9IDIpXG4rXHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzO1xuK1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyArNTg4OCwxNyBAQCBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBjaV9hbGxvY19pcnFfdmVjdG9ycyh0cC1cdTAwM2VwY2lfZGV2LCAxLCAxLCBmbGFncyk7XG4rXHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCBnZXRfbWluX2lycV9udmVjcyh0cCksIGdldF9tYXhfaXJxX252ZWNzKHRwKSwgZmxhZ3MpO1xuK1xuK1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuK1x0XHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7XG4rXG4rXHRpZiAobnZlY3MgXHUwMDNjIDApXG4rXHRcdHJldHVybiBudmVjcztcbitcbitcdHRwLVx1MDAzZWlycV9udmVjcyA9IG52ZWNzO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuQEAgLTU1OTksNiArNjE1MywyNDEgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9yeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHRpbnQgd29ya19kb25lID0gMDtcbitcdGludCBtZXNzYWdlX2lkO1xuK1xuK1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0bWVzc2FnZV9pZCA9IG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGk7XG4rXG4rXHRpZiAobWVzc2FnZV9pZCBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKVxuK1x0XHR3b3JrX2RvbmUgKz0gcnRsX3J4KGRldiwgdHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbbWVzc2FnZV9pZF0sIGJ1ZGdldCwgbmFwaSk7XG4rXG4rXHRpZiAod29ya19kb25lIFx1MDAzYyBidWRnZXQgXHUwMDI2XHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxuK1x0XHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XG4rXG4rXHRyZXR1cm4gd29ya19kb25lO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuK1xuK1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGkpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXG4rXHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUlRMODEyNyBNU0ktWCB2ZWN0b3IgbGF5b3V0OlxuKyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4rICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICsgVHhRcyAtIDEpXHQ6IFR4IFF1ZXVlc1xuKyAqIFZlY3RvciAoUnhRcyArIFR4UXMpIGFuZCB1cFx0XHQ6IE90aGVyIGV2ZW50cyAoTGluayBzdGF0dXMoMjkpLCBldGMuKVxuKyAqL1xuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbitcdFx0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbitcdFx0XHRlbHNlIGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTICsgUjgxMjdfTUFYX1RYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF90eDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfb3RoZXI7XG4rXHRcdH1cbitcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4rXHRjaC1cdTAwM2VtYXhfdHggPSAxO1xuK1xuK1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4rXHRjaC1cdTAwM2V0eF9jb3VudCA9IDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCxcbitcdFx0XHQgICAgICBpbnQgbmV3X2NvdW50KVxuK3tcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZXdfY291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2bmV3X3J4W2ldO1xuK1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2dHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuK1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0fVxuK1xuK1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbitcdFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuK1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSwgcmluZy1cdTAwM2VyeF9waHlfYWRkcik7XG4rXHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZuZXdfcnhbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbitcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2dHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHQgIG5ld19yeFtpXS5yeF9kZXNjX2FycmF5LCBuZXdfcnhbaV0ucnhfcGh5X2FkZHIpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcbitcdGVudW0gcnhfZGVzY190eXBlIG9sZF9yeF9kZXNjX3R5cGU7XG4rXHRlbnVtIHJ4X2Rlc2NfdHlwZSBuZXdfZGVzY190eXBlO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xuK1x0aW50IGksIHJldDtcbitcbitcdGlmIChjaC1cdTAwM2VyeF9jb3VudCA9PSB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkX3J4X2Rlc2NfdHlwZSA9IHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlO1xuK1xuK1x0aWYgKCFydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4rXHRcdG5ldGRldl93YXJuKGRldiwgXCJUaGlzIGNoaXAgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBjaGFubmVscy9SU1MuXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyB8fCAhaXNfcG93ZXJfb2ZfMihjaC1cdTAwM2VyeF9jb3VudCkgfHxcbitcdCAgICB0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNjIGdldF9taW5faXJxX252ZWNzKHRwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZXdfZGVzY190eXBlID0gY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIDEgPyBSWF9ERVNDX1RZUEVfUlNTIDogUlhfREVTQ19UWVBFX0RFRkFVTFQ7XG4rXG4rXHRpZiAoIWlmX3J1bm5pbmcpIHtcbitcdFx0cmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSBjaC1cdTAwM2VyeF9jb3VudDtcbitcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuK1xuK1x0XHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRuZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XG4rXHRpZiAoIW5ld19yeClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4rXHRydGw4MTY5X2Rvd24odHApO1xuK1xuK1x0cmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3VwO1xuK1xuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuK1xuK1x0cmV0ID0gcnRsODE2OV9yZWFsbG9jX3J4KHRwLCBuZXdfcngsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xuK1x0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xuK1xuK1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXHUwMDNlcnhfY291bnQ7XG4rXG4rXHRtZW1zZXQodHAtXHUwMDNlcnhfcmluZywgMCwgc2l6ZW9mKHRwLVx1MDAzZXJ4X3JpbmcpKTtcbitcdG1lbWNweSh0cC1cdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcbitcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbitcbitcdHJ0bDgxNjlfdXAodHApO1xuK1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbitcbitcdGtmcmVlKG5ld19yeCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfcmVzZXQ6XG4rXHRpZiAobmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIHRwLVx1MDAzZW51bV9yeF9yaW5ncykpXG4rXHRcdG5ldGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXFxuXCIpO1xuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBvbGRfcnhfZGVzY190eXBlO1xuK2Vycl91cDpcbitcdHJ0bDgxNjlfdXAodHApO1xuK1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbitcdGtmcmVlKG5ld19yeCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4rXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuK1x0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXG4rXHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuK1x0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuK1x0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbitcdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuK1x0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4rXHQuZ2V0X3JlZ3NcdFx0PSBydGw4MTY5X2dldF9yZWdzLFxuK1x0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4rXHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbitcdC5nZXRfc3RyaW5nc1x0XHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4rXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4rXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbitcdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbitcdC5zZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X3NldF9jaGFubmVscyxcbitcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbitcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuK1x0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbitcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXG4rXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuK307XG4rXG4gc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKmNoaXA7XG5AQCAtNTYwOSw3ICs2Mzk4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0dTMyIHR4Y29uZmlnO1xuIFx0dTMyIHhpZDtcbiBcbi1cdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZiAoKnRwKSk7XG4rXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4rXHRcdFx0XHQgICAgICBSODE2OV9NQVhfVFhfUVVFVUVTLFxuK1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XG4rXG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICs2NDgxLDEyIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG4gXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSkge1xuK1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgKzY1MDEsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRydGxfaHdfcmVzZXQodHApO1xuIFxuK1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4rXG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCIpO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4rXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XG4rXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbitcdFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2dHAtXHUwMDNld2sud29yaywgcnRsX3Rhc2spO1xuIFx0ZGlzYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuQEAgLTU3MTYsMTMgKzY1MTksMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuK1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuK1x0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XG4rXHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZVxuIFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXG5AQCAtNTc3OCw2ICs2NTg0LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4rXHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwic2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCIpO1xuK1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgKzY2MDIsMTUgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyODE2OV9pbml0X25hcGkodHApO1xuK1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycl9mcmVlX25hcGk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODAzLDggKzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHR0cC1cdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcbiBcdH1cbiBcbi1cdG5ldGRldl9pbmZvKGRldiwgXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxuXCIsXG4tXHRcdCAgICBjaGlwLVx1MDAzZW5hbWUsIGRldi1cdTAwM2VkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtXHUwMDNlaXJxKTtcbitcdG5ldGRldl9pbmZvKGRldiwgXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXG5cIixcbitcdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxuK1x0XHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVx1MDAzZWlycV9udmVjcyk7XG4gXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwianVtYm8gZmVhdHVyZXMgW2ZyYW1lczogJWQgYnl0ZXMsIHR4IGNoZWNrc3VtbWluZzogJXNdXFxuXCIsXG5AQCAtNTgyMSw2ICs2NjM4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlX25hcGk6XG4rXHRyODE2OV9mcmVlX25hcGkodHApO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MzA6NDYuNjIzNTQ5NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQxMTcyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcjgxNjkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSBmb3IgdGhlIGByODE2OWAgbmV0d29yayBkcml2ZXIuIEludHJpZ3VpbmcsIGl0J3MgaW50cm9kdWNpbmcgc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlczogUlNTIHN1cHBvcnQgYW5kIG11bHRpcGxlIFJYIHF1ZXVlcy4gTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCB3aGljaCwgYXMgZXhwZWN0ZWQsIGlzIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgZm9yIFJlYWx0ZWsgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9naWMgcmVzaWRlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyBzaWduaWZpY2FudDsgaXQgYWRkcyBtdWx0aXBsZSBSWCByaW5ncywgd2hpY2ggc3VnZ2VzdHMgZGVlcGVyIHBhcmFsbGVsIHByb2Nlc3Npbmcgb24gdGhlIHJlY2VpdmUgc2lkZS4gTVNJLVggc3VwcG9ydCBpcyBhbHNvIGEgZ29vZCBhZGRpdGlvbiwgaW5kaWNhdGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgaW50ZXJydXB0IGhhbmRsaW5nLiBSU1MgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciB0aGlzIGtpbmQgb2Ygc2V0dXA7IGl0IG1lYW5zIHdlIGNhbiBkaXN0cmlidXRlIGluY29taW5nIHRyYWZmaWMgZWZmaWNpZW50bHkgYWNyb3NzIHRob3NlIG5ldyBxdWV1ZXMsIGxldmVyYWdpbmcgdGhlIENQVSBjb3JlcyBlZmZlY3RpdmVseS4gQW5kLCBvZiBjb3Vyc2UsIE5BUEkgZm9yIGVhY2ggUlggcXVldWUgLSB0aGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBpbiB0aGVzZSBtb2Rlcm4gZHJpdmVycy5cblxuVGhpcyBhbGwgcG9pbnRzIHRvIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcjgxNjlgIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIEl0J3MgdXN1YWxseSBlbmFibGVkIHdpdGggc29tZXRoaW5nIGxpa2UgYENPTkZJR19SODE2OWAuIFRpbWUgdG8gZmlyZSB1cCBgZ2l0IGdyZXBgIGFuZCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSB3ZSdyZSBhY3R1YWxseSB3b3JraW5nIHdpdGggYSByZWxldmFudCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjUxLjc2NDcyNDYwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk0MTA1NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSODE2OVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9NzQ9Y29uZmlnIDgxMzlfT0xEX1JYX1JFU0VUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjg0OmNvbmZpZyBSODE2OVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04NS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDI6Y29uZmlnIFI4MTY5X0xFRFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBOSUMgTEVEc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MzA6NTUuMzU4ODM4MzcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcyMTU2MTg2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUjgxNjkgRHJpdmVyOiBBIFBsYW4gb2YgQXR0YWNrKipcblxuT2theSwgYFI4MTY5YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldC4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFFFTVUgZ2l2ZXMgbWUgYHJ0bDgxMzlgLCBidXQgZG9lcyBpdCBzdXBwb3J0IHRoZSBSODE2OSBzcGVjaWZpY2FsbHksIG9yIHBvdGVudGlhbGx5IGV2ZW4gYHI4MTY4YCBvciBgcjgxMjVgPyBObywgUUVNVSBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgYHI4MTY5YC4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXMgb2ZmZXIgYSBwYXRoIHRvIGZ1enogUENJIGRldmljZXMuIEl0IHVzZXMgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwgb3IgdmlydHVhbCBQQ0kgaW5qZWN0aW9uLiBSaWdodCwgc3l6a2FsbGVyIGhhcyBQQ0kgZnV6emluZy4gR29vZC5cblxuYHI4MTY5YCBpcyBhIFBDSSBkcml2ZXIuIFRoYXQgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgYHN5el9wY2lfKmAgcHNldWRvLXN5c2NhbGxzLCBvciBgdmhjaWAgaWYgaXQgd2VyZSBVU0IuIEZvciBQQ0kgdGhvdWdoLCBJJ20gdGhpbmtpbmcgSSdsbCB1c2UgYHN5el9wY2lfZGV2aWNlYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbnN0cnVjdGlvbnMuIFRob3NlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCwgZG9lcyBzeXprYWxsZXIgZW11bGF0ZSBQQ0kgZGV2aWNlcz8gWWVzLCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIsIHdoaWNoIGluY2x1ZGVzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzaW1pbGFyIGNhbGxzLiBPciBgc3l6X3BjaV9idXNgLlxuXG5TbywgY2FuIEkgcmVhY2ggaXQ/IFllcywgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogUENJIGRyaXZlcnMuIElzIHRoaXMgZnV6emluZyBlZmZvcnQgd29ydGh3aGlsZT8gQWJzb2x1dGVseS4gSXQgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBkcml2ZXIsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHdoZXJlIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9uczpcblxuKiAgIGBydGw4MTY5X3NldF9jaGFubmVsc2BcbiogICBgcnRsODE2OV9yZWFsbG9jX3J4YFxuKiAgIGBydGw4MTY5X2dldF9jaGFubmVsc2BcbiogICBgcjgxNjlfaW5pdF9uYXBpYFxuKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9yeGBcbiogICBgcnRsODE2OV9wb2xsX21zaXhfdHhgXG4qICAgYHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyYFxuKiAgIGBydGw4MTY5X2ludGVycnVwdF9tc2l4YFxuKiAgIGBydGw4MTY5X3JlcXVlc3RfaXJxYFxuKiAgIGBydGw4MTY5X2ZyZWVfaXJxYFxuKiAgIGBydGxfcnhgXG4qICAgYHJ0bDgxNjlfcnhfZmlsbGBcbiogICBgcnRsODE2OV9yeF9jbGVhcmBcbiogICBgcnRsODE2OV9hbGxvY19yeF9kYXRhYFxuKiAgIGBydGw4MTY5X2FsbG9jX3J4X2Rlc2NgXG4qICAgYHJ0bDgxNjlfZnJlZV9yeF9kZXNjYFxuKiAgIGBydGw4MTY5X2luaXRfcmluZ2BcbiogICBgcnRsODE2OV9yeF9kZXNjX3Jlc2V0YFxuKiAgIGBydGw4MTY5X3J4X2hhc2hgXG4qICAgYHJ0bDgxNjlfcnhfY3N1bWBcbiogICBgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yYFxuKiAgIGBydGxfc2V0X3Jzc19jb25maWdgXG4qICAgYHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdGBcbiogICBgcnRsODE2OV9zdG9yZV9yZXRhYFxuKiAgIGBydGw4MTY5X3N0b3JlX3Jzc19rZXlgXG4qICAgYHJ0bF9zZXR1cF9yeF9wYXJhbXNgXG4qICAgYHJ0bDgxNjlfaW5pdF9yc3NgXG4qICAgYHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmxgXG4qICAgYHJ0bDgxMjVfc2V0X3J4X3FfbnVtYFxuKiAgIGBydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZ2BcbiogICBgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uYFxuKiAgIGBydGxfaHdfc3RhcnRgXG4qICAgYHJ0bDgxNjlfY2hhbmdlX210dWBcbiogICBgcnRsODE2OV9zZXRfcnhfcmluZ19udW1gXG4qICAgYHJ0bF9hbGxvY19pcnFgXG4qICAgYHJ0bF9pbml0X29uZWBcbiogICBgcnRsX3JlbW92ZV9vbmVgXG4qICAgYHJ0bF9vcGVuYFxuKiAgIGBydGw4MTY5X2Nsb3NlYFxuXG5JIG5lZWQgdG8gcXVpY2tseSB3ZWVkIG91dCB0aGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHdhc3RpbmcgdGltZTpcblxuKiAgIGBydGxfcnhgXG4qICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3J4YFxuKiAgIGBydGw4MTY5X3BvbGxfbXNpeF90eGBcbiogICBgcnRsODE2OV9wb2xsX21zaXhfb3RoZXJcblxuIiwiSW5wdXRUb2tlbnMiOjI0OTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToxMi41NzQ0NjAxNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MDY4NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X3NldF9jaGFubmVsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz02MjM3PXN0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjI3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2Mjc0OnN0YXRpYyBpbnQgcnRsODE2OV9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02Mjc1LVxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTYzNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjM3OS1cXHQuZ2V0X2NoYW5uZWxzXFx0XFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2MzgwOlxcdC5zZXRfY2hhbm5lbHNcXHRcXHQ9IHJ0bDgxNjlfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYzODEtXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToxNi45MTUxNTM1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTk2MTg4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYHI4MTY5YCBEcml2ZXI6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBpbnRlcmVzdGluZyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGByODE2OWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgUlNTIHN1cHBvcnQsIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIHN1cHBvcnQuIFRoaXMgaXMgcmlnaHQgdXAgU3l6a2FsbGVyJ3MgYWxsZXkg4oCTIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSSdtIHRoaW5raW5nLCBnaXZlbiB0aGUgc2NvcGUsIHdlIHNob3VsZCBlbmFibGUgYENPTkZJR19SODE2OWAuIEl0J3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRyaXZlciwgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIEkgaGF2ZSB0byB3b3JyeSBhYm91dC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjYXN0IGEgd2lkZSBuZXQsIHNvIEkgaGF2ZSBhIGxpc3Qgb2Ygc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbi4gQnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQsIHNvIEknbGwgdHJpbSBkb3duIHRoZSBsaXN0IHRvIHdoYXQncyBtb3N0IGNydWNpYWw6XG5cbiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgXG4qICAgYHJ0bDgxNjlfcmVhbGxvY19yeGBcbiogICBgcnRsX3NldF9yc3NfY29uZmlnYFxuKiAgIGBydGw4MTY5X2luaXRfcnNzYFxuKiAgIGBydGw4MTY5X3NldF9yeF9yaW5nX251bWBcbiogICBgcnRsX2FsbG9jX2lycWBcbiogICBgcnRsODE2OV9hbGxvY19yeF9kZXNjYFxuKiAgIGBydGw4MTY5X2ZyZWVfcnhfZGVzY2BcbiogICBgcjgxNjlfaW5pdF9uYXBpYFxuXG5UaGVzZSBzaG91bGQgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbmV3IFJTUyBhbmQgUlggcXVldWUgZmVhdHVyZXMuIEZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHMsIEkgZXhwZWN0IHdlJ2xsIGdldCBnb29kIGNvdmVyYWdlIGFuZCBmaW5kIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgcXVpY2tseS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIwLCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToyNS41MzQ3NzUyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzcwNDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X3NldF9jaGFubmVsc1wiLFxuICAgIFwicnRsODE2OV9yZWFsbG9jX3J4XCIsXG4gICAgXCJydGxfc2V0X3Jzc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfaW5pdF9yc3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtXCIsXG4gICAgXCJydGxfYWxsb2NfaXJxXCIsXG4gICAgXCJydGw4MTY5X2FsbG9jX3J4X2Rlc2NcIixcbiAgICBcInJ0bDgxNjlfZnJlZV9yeF9kZXNjXCIsXG4gICAgXCJyODE2OV9pbml0X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfc2V0X2NoYW5uZWxzXCIsXG4gICAgXCJydGw4MTY5X3JlYWxsb2NfcnhcIixcbiAgICBcInJ0bF9zZXRfcnNzX2NvbmZpZ1wiLFxuICAgIFwicnRsODE2OV9pbml0X3Jzc1wiLFxuICAgIFwicnRsODE2OV9zZXRfcnhfcmluZ19udW1cIixcbiAgICBcInJ0bF9hbGxvY19pcnFcIixcbiAgICBcInJ0bDgxNjlfYWxsb2NfcnhfZGVzY1wiLFxuICAgIFwicnRsODE2OV9mcmVlX3J4X2Rlc2NcIixcbiAgICBcInI4MTY5X2luaXRfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIFJlY2VpdmUgU2lkZSBTY2FsaW5nIChSU1MpLCBtdWx0aXBsZSBSWCBxdWV1ZXMsIGFuZCBNU0ktWCBpbnRlcnJ1cHRzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29tcGxleCByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgZXRodG9vbCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 07:18:26 +0000 UTC FinishedAt: 2026-06-29 07:31:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8169_set_channels", "rtl8169_realloc_rx", "rtl_set_rss_config", "rtl8169_init_rss", "rtl8169_set_rx_ring_num", "rtl_alloc_irq", "rtl8169_alloc_rx_desc", "rtl8169_free_rx_desc", "r8169_init_napi" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE2OV9zZXRfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9yZWFsbG9jX3J4JiMzNDssCiAgICAmIzM0O3J0bF9zZXRfcnNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2luaXRfcnNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X3J4X3JpbmdfbnVtJiMzNDssCiAgICAmIzM0O3J0bF9hbGxvY19pcnEmIzM0OywKICAgICYjMzQ7cnRsODE2OV9hbGxvY19yeF9kZXNjJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZnJlZV9yeF9kZXNjJiMzNDssCiAgICAmIzM0O3I4MTY5X2luaXRfbmFwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY5YmM3MzNmOWY0MWVlZWFhNTdiMzYzOGY1NGFhOTM4MmU2ODU3ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwNzozMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uOTE5NGMyMTQyZjk1ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC03NCw5ICYjNDM7NzQsMzMgQEBcbiAjZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgTlVNX1JYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBSODE2OV9UWF9SSU5HX0JZVEVTXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXb3JrYXJvdW5kIGZvciB0aGUgaGFyZHdhcmUgRE1BIHByZWZldGNoZXIuIFRoZSBIL1cgbWlnaHQgYWdncmVzc2l2ZWx5XG4mIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlXG4mIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbiYjNDM7ICogYWNjZXNzIGFuZCBwb3RlbnRpYWwgSU9NTVUgZmF1bHRzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXHQoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG4mIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1x0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9UWF9RVUVVRVNcdDhcbiYjNDM7I2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFU1x0MVxuJiM0MzsjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcdDFcbiYjNDM7I2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbiYjNDM7I2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQ1x0MzBcbiYjNDM7I2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFx0MVxuJiM0MzsjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4mIzQzOyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTS1x0R0VOTUFTSygxOCwgMTYpXG4mIzQzOyNkZWZpbmUgUlNTX0hBU0hfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuJiM0MzsjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcbiYjNDM7I2RlZmluZSBSWFNfUlNTX1VEUFx0XHRCSVQoMjcpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY0XHRcdEJJVCgyOClcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0lQVjZcdFx0QklUKDI5KVxuJiM0MzsjZGVmaW5lIFJYU19SU1NfVENQXHRcdEJJVCgzMClcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTS1x0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcbiYjNDM7I2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1x0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXG4gXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXHQweGE0MDBcbiBcbkBAIC00NDEsMTEgJiM0Mzs0NjUsMTYgQEAgZW51bSBydGw4MTI1X3JlZ2lzdGVycyB7XG4gXHRUeFBvbGxfODEyNVx0XHQ9IDB4OTAsXG4gXHRMRURTRUwzXHRcdFx0PSAweDk2LFxuIFx0TUFDMF9CS1BcdFx0PSAweDE5ZTAsXG4mIzQzO1x0UkRTQVJfUTFfTE9XXHRcdD0gMHg0MDAwLFxuIFx0UlNTX0NUUkxfODEyNVx0XHQ9IDB4NDUwMCxcbiBcdFFfTlVNX0NUUkxfODEyNVx0XHQ9IDB4NDgwMCxcbiBcdEVFRV9UWElETEVfVElNRVJfODEyNVx0PSAweDYwNDgsXG4mIzQzO1x0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXHQ9IDB4MGQwMCxcbiYjNDM7XHRJU1JfVkVDX01BUF9SRUdcdFx0PSAweDBkMDQsXG4mIzQzO1x0SU1SX1NFVF9WRUNfTUFQX1JFR1x0PSAweDBkMGMsXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIR1x0MjlcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcdDB4MjNmXG4gXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcdEJJVCgyMilcbkBAIC01NzYsNiAmIzQzOzYwNSwyMyBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuJiM0MzsjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuJiM0MzsjZGVmaW5lXHRJU1JJTVJfVE9LX1EwXHRCSVQoOClcbiYjNDM7I2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbiYjNDM7I2RlZmluZSBSU1NfS0VZX1JFR1x0XHRcdDB4NDYwMFxuJiM0MzsjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9SU1NcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNl9TVVBQXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuJiM0MzsjZGVmaW5lXHRSWF9SRVNfUlNTXHRcdFx0QklUKDIyKVxuJiM0MzsjZGVmaW5lXHRSWF9SVU5UX1JTU1x0XHRcdEJJVCgyMSlcbiYjNDM7I2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBSVExfUlhfUV9OVU1fTUFTS1x0XHRHRU5NQVNLKDQsIDIpXG4gfTtcbiBcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XG5AQCAtNjMzLDYgJiM0Mzs2NzksMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xuICNkZWZpbmUgUnhQcm90b0lQXHQoUElEMSB8IFBJRDApXG4gI2RlZmluZSBSeFByb3RvTWFza1x0UnhQcm90b0lQXG4gXG4mIzQzOyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbiYjNDM7I2RlZmluZVx0UlhfVENQVF9ERVNDX1JTU1x0QklUKDE4KVxuJiM0MzsjZGVmaW5lXHRSWF9VRFBGX0RFU0NfUlNTXHRCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbiYjNDM7I2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4mIzQzO1xuIFx0SVBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRVRFBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE1KSwgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuIFx0VENQRmFpbFx0XHQ9ICgxIFx1MDAzY1x1MDAzYyAxNCksIC8qIFRDUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbkBAIC02NTQsOSAmIzQzOzcwNSwyNyBAQCBzdHJ1Y3QgVHhEZXNjIHtcbiB9O1xuIFxuIHN0cnVjdCBSeERlc2Mge1xuLVx0X19sZTMyIG9wdHMxO1xuLVx0X19sZTMyIG9wdHMyO1xuLVx0X19sZTY0IGFkZHI7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX0RFRkFVTFQgKi9cbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdF9fbGUzMiBvcHRzMTtcbiYjNDM7XHRcdFx0X19sZTMyIG9wdHMyO1xuJiM0MztcdFx0XHRfX2xlNjQgYWRkcjtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX1JTUyAqL1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdF9fbGU2NCByc3NfYWRkcjtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19pbmZvO1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19yZXN1bHQ7XG4mIzQzO1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czI7XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgcmluZ19pbmZvIHtcbkBAIC03MjgsMjcgJiM0Mzs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4mIzQzO2VudW0gcnhfZGVzY190eXBlIHtcbiYjNDM7XHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRSWF9ERVNDX1RZUEVfUlNTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4mIzQzO1x0dTMyIGluZGV4O1x0XHRcdFx0XHQvKiBSeCBxdWV1ZSBpbmRleCAqL1xuJiM0MztcdHUzMiBjdXJfcng7XHRcdFx0XHRcdC8qIEluZGV4IG9mIG5leHQgUnggcGt0LiAqL1xuJiM0MztcdHUzMiBkaXJ0eV9yeDtcdFx0XHRcdFx0LyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi9cbiYjNDM7XHRzdHJ1Y3QgUnhEZXNjICpyeF9kZXNjX2FycmF5O1x0XHRcdC8qIGFycmF5IG9mIFJ4IERlc2MqL1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XHQvKiBSeCBkYXRhIGJ1ZmZlciBwaHlzaWNhbCBkbWEgYWRkcmVzcyAqL1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XHRcdFx0XHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1x0XHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcbiYjNDM7XHR1MzIgcnNzX2tleVtSVExfUlNTX0tFWV9TSVpFIC8gc2l6ZW9mKHUzMildO1xuJiM0MztcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4tXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuIFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi9cbi1cdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcbi1cdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xuLVx0c3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuIFx0c3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdO1x0LyogVHggZGF0YSBidWZmZXJzICovXG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyByeF9yaW5nW1I4MTY5X01BWF9SWF9RVUVVRVNdO1xuJiM0MztcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGh3X3N1cHBfbnVtX3J4X3F1ZXVlcztcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSAqcnNzX2RhdGE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbiYjNDM7XHRlbnVtIHJ4X2Rlc2NfdHlwZSBpbml0X3J4X2Rlc2NfdHlwZTtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcbiBcdHN0cnVjdCB7XG5AQCAtMTU3OCw2ICYjNDM7MTY2OSwxMSBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5AQCAtMTY0NCwyNiAmIzQzOzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdm9pZCBydGxfYWNrX2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIGJpdHMpXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50clN0YXR1c184MTI1LCBiaXRzKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIGJpdHMpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJTdGF0dXMsIGJpdHMpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtXHUwMDNlaXJxX21hc2spO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTE4NjcsOSAmIzQzOzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgUnhEZXNjICpkZXNjLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4mIzQzO1x0dTMyIG9wdHMyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuJiM0MztcdFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19vcHRzMik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcbiBcdGlmIChvcHRzMiBcdTAwMjYgUnhWbGFuVGFnKVxuIFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgXHUwMDI2IDB4ZmZmZikpO1xuQEAgLTI0MTYsMzQgJiM0MzsyNTM1LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4tXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuLVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXG4tXHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuLVx0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuLVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbi1cdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuLVx0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4tXHQuZ2V0X3JlZ3NcdFx0PSBydGw4MTY5X2dldF9yZWdzLFxuLVx0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4tXHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbi1cdC5nZXRfc3RyaW5nc1x0XHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXG4tXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuLVx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4tXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuLVx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4tXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuLVx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuLVx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXG4tXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuLVx0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXG4tXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuLX07XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpydGw4MTY5X2dldF9jaGlwX3ZlcnNpb24odTMyIHhpZCwgYm9vbCBnbWlpKVxuIHtcbiBcdC8qIENoaXBzIGNvbWJpbmluZyBhIDFHYnBzIE1BQyB3aXRoIGEgMTAwTWJwcyBQSFkgKi9cbkBAIC0yNjE5LDkgJiM0MzsyNzEwLDI3IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSwgMHgwLCBSODE2OV9SWF9SSU5HX0JZVEVTKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VkaXJ0eV90eCA9IHRwLVx1MDAzZWN1cl90eCA9IHRwLVx1MDAzZWN1cl9yeCA9IDA7XG4mIzQzO1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuJiM0MztcdHRwLVx1MDAzZWN1cl90eCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRyaW5nLVx1MDAzZWRpcnR5X3J4ID0gMDtcbiYjNDM7XHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbiYjNDM7XHRcdHJpbmctXHUwMDNlaW5kZXggPSBpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgJiM0MzsyNzg5LDM0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3MpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgbnVtX3J4X3JpbmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0bmV0ZGV2X3Jzc19rZXlfZmlsbCh0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3Nfa2V5LCBSVExfUlNTX0tFWV9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldHVwX3J4X3BhcmFtcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcbiYjNDM7XHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX0RFRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xuQEAgLTI4MDIsOCAmIzQzOzI5MzksNjMgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMTYodHAsIFJ4TWF4U2l6ZSwgUjgxNjlfUlhfQlVGX1NJWkUgJiM0MzsgMSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnVtX2VudHJpZXMgPSBSVExfUlNTX0tFWV9TSVpFIC8gc2l6ZW9mKHUzMik7XG4mIzQzO1x0dTMyICpyc3Nfa2V5ID0gdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleTtcbiYjNDM7XHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbnVtX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgJiM0MzsgKGkgKiA0KSwgcnNzX2tleVtpXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcmV0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHU4ICppbmRpcl90YmwgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfFxuJiM0MztcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICYjNDM7IDFdIFx1MDAzY1x1MDAzYyA4IHxcbiYjNDM7XHRcdFx0ICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAyXSBcdTAwM2NcdTAwM2MgMTYgfFxuJiM0MztcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICYjNDM7IDNdIFx1MDAzY1x1MDAzYyAyNDtcbiYjNDM7XHRcdFJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICYjNDM7IGksIHJldGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJzc19jdHJsO1xuJiM0MztcbiYjNDM7XHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXHUwMDNlbnVtX3J4X3JpbmdzKSk7XG4mIzQzO1xuJiM0MztcdC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi9cbiYjNDM7XHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQXG4mIzQzO1x0XHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcbiYjNDM7XHRcdCB8IFJTU19DVFJMX0lQVjZfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxuJiM0MztcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFA7XG4mIzQzO1xuJiM0MztcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbiYjNDM7XHRcdFx0ICAgICAgIGlsb2cyKHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMpKTtcbiYjNDM7XG4mIzQzO1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQodHApO1xuJiM0MztcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4mIzQzO1x0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcbiBcdCAqIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIFR4RGVzY0FkZHJMb3cgdG8gd29yay5cbkBAIC0yODExLDggJiM0MzszMDAzLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyAmIzQzOyAoaSAtIDEpICogODtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMzg1OCw2ICYjNDM7NDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUxNiByeF9xX251bTtcbiYjNDM7XHR1MTYgcV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcbiYjNDM7XHRxX2N0cmwgXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XG4mIzQzO1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIHFfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggdG1wO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xuJiM0MztcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbiYjNDM7XHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICYjNDM7NDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xuIFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCAwKTtcbiBcbiYjNDM7XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuJiM0MztcbiBcdC8qIGRpc2FibGUgVVBTICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XG4gXG5AQCAtMzg4NSw2ICYjNDM7NDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFx1MDAyNiB+MHgwMik7XG4gXG4mIzQzO1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cbiYjNDM7XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRydGw4MTI1X3NldF9yeF9xX251bSh0cCk7XG4mIzQzO1x0XHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcbiYjNDM7XHRcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XG4gXHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuQEAgLTQxMjEsNiAmIzQzOzQzNTIsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xuIFx0cnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7XG4gXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcbiYjNDM7XHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRydGxfc2V0X3Jzc19jb25maWcodHApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTtcbiYjNDM7XHR9XG4gXHRydGxfbG9ja19jb25maWdfcmVncyh0cCk7XG4gXG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbkBAIC00MTQ4LDE5ICYjNDM7NDM4NSwzMiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiB7XG4tXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0dTMyIGVvcjtcbiBcbi1cdGRlc2MtXHUwMDNlb3B0czIgPSAwO1xuLVx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbi1cdGRtYV93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnNzX29wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0ZG1hX3dtYigpO1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0ZG1hX3dtYigpO1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4tXHRcdFx0XHRcdCAgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICYjNDM7IGluZGV4O1xuIFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4gXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpO1xuIFx0ZG1hX2FkZHJfdCBtYXBwaW5nO1xuQEAgLTQxNzcsNTYgJiM0Mzs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbi1cdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuJiM0MztcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xuJiM0MztcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuJiM0MztcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRlc2MtXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuJiM0MztcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcbiBcdHJldHVybiBkYXRhO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsXG4mIzQzO1x0XHRcdCAgICAgZW51bSByeF9kZXNjX3R5cGUgZGVzY190eXBlKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuIFx0XHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxuLVx0XHRcdCAgICAgICBsZTY0X3RvX2NwdSh0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcbiYjNDM7XHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbiYjNDM7XHRcdGlmIChkZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykge1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuJiM0MztcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXG4ge1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOVU1fUlhfREVTQzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKmRhdGE7XG4gXG4tXHRcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLVx1MDAzZVJ4RGVzY0FycmF5ICYjNDM7IGkpO1xuJiM0MztcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuJiM0MztcdFx0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbi1cdFx0dHAtXHUwMDNlUnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4gXHR9XG4gXG4gXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHRwLCBcdTAwMjZyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9hbGxvY19yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2cmluZy1cdTAwM2VyeF9waHlfYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRpZiAocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4mIzQzO1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBSODE2OV9SWF9SSU5HX0JZVEVTLFxuJiM0MztcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksXG4mIzQzO1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuJiM0MztcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcbiBcbiBcdG1lbXNldCh0cC1cdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cdTAwM2V0eF9za2IpKTtcbi1cdG1lbXNldCh0cC1cdTAwM2VSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLVx1MDAzZVJ4X2RhdGFidWZmKSk7XG4gXG4tXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbiYjNDM7XHRcdHJldCA9IHJ0bDgxNjlfcnhfZmlsbCh0cCwgcmluZyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9jbGVhcjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfY2xlYXI6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgJiM0Mzs0NTg5LDIxIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuYXBpX2Rpc2FibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggJiM0Mzs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGRtYV9hZGRyX3QgcGh5X2FkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgJiM0Mzsgaik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KVxuLVx0XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBpKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xuIFxuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XG4gXHRydGxfaHdfc3RhcnQodHApO1xuIH1cbiBcbkBAIC00NzU4LDMwICYjNDM7NTEwNSwxMDQgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2hhc2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbiYjNDM7XHR1MzIgcnNzX2hlYWRlcl9pbmZvO1xuJiM0MztcdHUzMiBoYXNoX3ZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEodHAtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYSEFTSCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJzc19oZWFkZXJfaW5mbyA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX2R3b3JkLnJzc19pbmZvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLFxuJiM0MztcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuJiM0MztcdFx0ICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICB1MzIgb3B0czEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNzdW1fb2sgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4mIzQzO1x0XHQgICAgKChvcHRzMSBcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXHUwMDI2XHUwMDI2ICEob3B0czEgXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKG9wdHMxID09IFJ4UHJvdG9UQ1AgfHwgb3B0czEgPT0gUnhQcm90b1VEUClcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXG4tXHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4mIzQzO1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0XHR1MzIgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJYX1JFU19SU1MpKSB7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuJiM0MztcdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUlhfQ1JDX1JTUylcbiYjNDM7XHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxuJiM0MztcdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4mIzQzO1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4gXHRpbnQgY291bnQ7XG4gXG4tXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCB0cC1cdTAwM2VjdXJfcngmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICYjNDM7IGVudHJ5O1xuJiM0MztcdGZvciAoY291bnQgPSAwOyBjb3VudCBcdTAwM2MgYnVkZ2V0OyBjb3VudCYjNDM7JiM0MzssIHJpbmctXHUwMDNlY3VyX3J4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHJpbmctXHUwMDNlY3VyX3J4ICUgTlVNX1JYX0RFU0M7XG4mIzQzO1x0XHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICYjNDM7IGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbiYjNDM7XHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KHJ0bDgxNjlfcnhfZGVzY19vcHRzMSh0cCwgZGVzYykpO1xuIFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBEZXNjT3duKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTQ3OTEsMTkgJiM0Mzs1MjEyLDE2IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdCAqL1xuIFx0XHRkbWFfcm1iKCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XG4gXHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7UnggRVJST1IuIHN0YXR1cyA9ICUwOHhcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICBzdGF0dXMpO1xuIFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4gXG4gXHRcdFx0aWYgKCEoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcbiBcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuLVx0XHRcdGVsc2UgaWYgKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKVxuJiM0MztcdFx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKVxuIFx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbkBAIC00ODIwLDE0ICYjNDM7NTIzOCwxNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuIFx0XHR9XG4gXG4tXHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnRwLVx1MDAzZW5hcGksIHBrdF9zaXplKTtcbiYjNDM7XHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuIFx0XHR9XG4gXG4tXHRcdGFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLVx1MDAzZWFkZHIpO1xuLVx0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXHUwMDNlUnhfZGF0YWJ1ZmZbZW50cnldKTtcbiYjNDM7XHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuJiM0MztcdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbZW50cnldKTtcbiBcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdHByZWZldGNoKHJ4X2J1Zik7XG5AQCAtNDgzNiwxOSAmIzQzOzUyNTQsMjMgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcdFx0c2tiLVx1MDAzZWxlbiA9IHBrdF9zaXplO1xuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbi1cdFx0cnRsODE2OV9yeF9jc3VtKHNrYiwgc3RhdHVzKTtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTtcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpO1xuIFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4gXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOztcbiBcbi1cdFx0bmFwaV9ncm9fcmVjZWl2ZShcdTAwMjZ0cC1cdTAwM2VuYXBpLCBza2IpO1xuJiM0MztcdFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xuIFxuIFx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgcGt0X3NpemUpO1xuIHJlbGVhc2VfZGVzY3JpcHRvcjpcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltlbnRyeV0pO1xuJiM0MztcdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQ4NTYsOCAmIzQzOzUyNzgsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuLVx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBkZXZfaW5zdGFuY2U7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1x0dTMyIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihuYXBpLVx1MDAzZWRldik7XG4mIzQzO1x0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuIFxuIFx0aWYgKChzdGF0dXMgXHUwMDI2IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzIFx1MDAyNiB0cC1cdTAwM2VpcnFfbWFzaykpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbkBAIC00ODczLDEzICYjNDM7NTI5OSw4NiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbi1cdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0bmFwaV9zY2hlZHVsZShuYXBpKTtcbiBvdXQ6XG4gXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuJiM0MztcbiYjNDM7XHRcdHBjaV9mcmVlX2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBuYXBpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcbiYjNDM7e1xuJiM0MztcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBtZXNzYWdlX2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X21zaXgoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XHRpbnQgbWVzc2FnZV9pZDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVzc2FnZV9pZCA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRykge1xuJiM0MztcdFx0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XG4mIzQzO1x0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcbiYjNDM7XHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yZXF1ZXN0X2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuJiM0MztcdGludCBpLCByYztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bmFwaSA9IFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0X21zaXgsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgaSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBOVUxMLCBuYXBpLCBcJiMzNDslcy0lZFwmIzM0OywgZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfaXJxO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfaXJxOlxuJiM0MztcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyAmIzQzOzU0MTMsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4tXHRpbnQgd29ya19kb25lO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiBcbiBcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuIFxuLVx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1x0LyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi9cbiYjNDM7XHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgJiM0Mzs1NTM1LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4gXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4gXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbi1cdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG5AQCAtNTA1MSwxOCAmIzQzOzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gXG4tXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiYjNDM7XHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBcbiBcdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVx1MDAzZVR4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlVHhQaHlBZGRyKTtcbiBcdHRwLVx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbiYjNDM7XHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC01MDc0LDcgJiM0Mzs1NTczLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0XHRydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcdH1cbiB9XG4gI2VuZGlmXG4gXG5AQCAtNTA4Miw3ICYjNDM7NTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4tXHR1bnNpZ25lZCBsb25nIGlycWZsYWdzO1xuIFx0aW50IHJldHZhbCA9IC1FTk9NRU07XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbkBAIC01MDk2LDEwICYjNDM7NTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmICghdHAtXHUwMDNlVHhEZXNjQXJyYXkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXG4tXHRcdFx0XHRcdCAgICAgXHUwMDI2dHAtXHUwMDNlUnhQaHlBZGRyLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghdHAtXHUwMDNlUnhEZXNjQXJyYXkpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdHhfMDtcbiYjNDM7XHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcbiBcbiBcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG5AQCAtNTEwNyw4ICYjNDM7NTYxMCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTtcbiBcbi1cdGlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7XG4tXHRyZXR2YWwgPSByZXF1ZXN0X2lycSh0cC1cdTAwM2VpcnEsIHJ0bDgxNjlfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LVx1MDAzZW5hbWUsIHRwKTtcbiYjNDM7XHRyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbkBAIC01MTI1LDE1ICYjNDM7NTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIFxuIGVycl9mcmVlX2lycTpcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xuIGVycl9yZWxlYXNlX2Z3XzI6XG4gXHRydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7XG4tXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBlcnJfZnJlZV9yeF8xOlxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuLVx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbi1lcnJfZnJlZV90eF8wOlxuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG5AQCAtNTI3NSw2ICYjNDM7NTc3NSwxNCBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiAmIzQzOzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuIFxuQEAgLTUzMjAsMTUgJiM0Mzs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuIFxuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNilcbi1cdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4mIzQzO1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbiYjNDM7XG4mIzQzO1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XG4mIzQzO1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyAmIzQzOzU4ODgsMTcgQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChudmVjcyBcdTAwM2MgMClcbiYjNDM7XHRcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG52ZWNzO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VpcnFfbnZlY3MgPSBudmVjcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuQEAgLTU1OTksNiAmIzQzOzYxNTMsMjQxIEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiYjNDM7XHRpbnQgbWVzc2FnZV9pZDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVzc2FnZV9pZCBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKVxuJiM0MztcdFx0d29ya19kb25lICYjNDM7PSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1ttZXNzYWdlX2lkXSwgYnVkZ2V0LCBuYXBpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdvcmtfZG9uZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1xuJiM0MztcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXG4mIzQzO1x0XHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4mIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4mIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4mIzQzOyAqIFZlY3RvciAoUnhRcyAmIzQzOyBUeFFzKSBhbmQgdXBcdFx0OiBPdGhlciBldmVudHMgKExpbmsgc3RhdHVzKDI5KSwgZXRjLilcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgKCpwb2xsX2ZuKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSA9IHJ0bDgxNjlfcG9sbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUyAmIzQzOyBSODEyN19NQVhfVFhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF90eDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG5ldGlmX25hcGlfYWRkKHRwLVx1MDAzZWRldiwgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0Y2gtXHUwMDNlbWF4X3J4ID0gdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuJiM0MztcdGNoLVx1MDAzZW1heF90eCA9IDE7XG4mIzQzO1xuJiM0MztcdGNoLVx1MDAzZXJ4X2NvdW50ID0gdHAtXHUwMDNlbnVtX3J4X3JpbmdzO1xuJiM0MztcdGNoLVx1MDAzZXR4X2NvdW50ID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3JlYWxsb2Nfcngoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG5ld19jb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ld19jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZuZXdfcnhbaV07XG4mIzQzO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4mIzQzO1x0XHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZ0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LCByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZnJlZTpcbiYjNDM7XHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2bmV3X3J4W2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4mIzQzO1x0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZ0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHQgIG5ld19yeFtpXS5yeF9kZXNjX2FycmF5LCBuZXdfcnhbaV0ucnhfcGh5X2FkZHIpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcbiYjNDM7XHRlbnVtIHJ4X2Rlc2NfdHlwZSBvbGRfcnhfZGVzY190eXBlO1xuJiM0MztcdGVudW0gcnhfZGVzY190eXBlIG5ld19kZXNjX3R5cGU7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjaC1cdTAwM2VyeF9jb3VudCA9PSB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3J4X2Rlc2NfdHlwZSA9IHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcbiYjNDM7XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7VGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyB8fCAhaXNfcG93ZXJfb2ZfMihjaC1cdTAwM2VyeF9jb3VudCkgfHxcbiYjNDM7XHQgICAgdHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzYyBnZXRfbWluX2lycV9udmVjcyh0cCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X2Rlc2NfdHlwZSA9IGNoLVx1MDAzZXJ4X2NvdW50IFx1MDAzZSAxID8gUlhfREVTQ19UWVBFX1JTUyA6IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3J1bm5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBjaC1cdTAwM2VyeF9jb3VudCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IGNoLVx1MDAzZXJ4X2NvdW50O1xuJiM0MztcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3X3J4ID0ga3phbGxvY19vYmpzKCpuZXdfcngsIFI4MTY5X01BWF9SWF9RVUVVRVMpO1xuJiM0MztcdGlmICghbmV3X3J4KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiYjNDM7XHRydGw4MTY5X2Rvd24odHApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGRldiwgY2gtXHUwMDNlcnhfY291bnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl91cDtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBydGw4MTY5X3JlYWxsb2NfcngodHAsIG5ld19yeCwgY2gtXHUwMDNlcnhfY291bnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXHUwMDNlcnhfY291bnQ7XG4mIzQzO1xuJiM0MztcdG1lbXNldCh0cC1cdTAwM2VyeF9yaW5nLCAwLCBzaXplb2YodHAtXHUwMDNlcnhfcmluZykpO1xuJiM0MztcdG1lbWNweSh0cC1cdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVx1MDAzZXJ4X2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnNzX2luZGlyX3RibCh0cCwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbiYjNDM7XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV91cCh0cCk7XG4mIzQzO1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUobmV3X3J4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzZXQ6XG4mIzQzO1x0aWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpKVxuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXFxuXCYjMzQ7KTtcbiYjNDM7XHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7XG4mIzQzO2Vycl91cDpcbiYjNDM7XHRydGw4MTY5X3VwKHRwKTtcbiYjNDM7XHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuJiM0MztcdGtmcmVlKG5ld19yeCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbiYjNDM7XHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuJiM0MztcdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuJiM0MztcdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4mIzQzO1x0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuJiM0MztcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4mIzQzO1x0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4mIzQzO1x0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4mIzQzO1x0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbiYjNDM7XHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbiYjNDM7XHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbiYjNDM7XHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4mIzQzO1x0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4mIzQzO1x0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbiYjNDM7XHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4mIzQzO1x0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4mIzQzO1x0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4mIzQzO1x0LmdldF9jaGFubmVsc1x0XHQ9IHJ0bDgxNjlfZ2V0X2NoYW5uZWxzLFxuJiM0MztcdC5zZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X3NldF9jaGFubmVscyxcbiYjNDM7XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbiYjNDM7XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuJiM0MztcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4mIzQzO1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbiYjNDM7XHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2MDksNyAmIzQzOzYzOTgsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbiYjNDM7XHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4mIzQzO1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcbiYjNDM7XHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbiYjNDM7XG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICYjNDM7NjQ4MSwxMiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCF0cC1cdTAwM2Vyc3NfZGF0YSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdHRwLVx1MDAzZWNwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSBcdTAwMjYgQ1BDTURfTUFTSztcbiBcbiBcdGlmIChzaXplb2YoZG1hX2FkZHJfdCkgXHUwMDNlIDQgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xOCBcdTAwMjZcdTAwMjZcbkBAIC01NzAzLDExICYjNDM7NjUwMSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdHJ0bF9od19yZXNldCh0cCk7XG4gXG4mIzQzO1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4mIzQzO1xuIFx0cmMgPSBydGxfYWxsb2NfaXJxKHRwKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHJjLCBcJiMzNDtDYW4mIzM5O3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCYjMzQ7KTtcbiBcbi1cdHRwLVx1MDAzZWlycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xuJiM0MztcdHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHRwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpXG4mIzQzO1x0XHRydGw4MTY5X2luaXRfcnNzKHRwKTtcbiBcbiBcdElOSVRfV09SSyhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrLCBydGxfdGFzayk7XG4gXHRkaXNhYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG5AQCAtNTcxNiwxMyAmIzQzOzY1MTksMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbiYjNDM7XHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlXG4gXHQgKiBJbnRlcnJ1cHRzIHN0b3AgZmxvd2luZyBvbiBoaWdoIGxvYWQgb24gODExMFNDZCBjb250cm9sbGVycy5cbkBAIC01Nzc4LDYgJiM0Mzs2NTg0LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4mIzQzO1x0cmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLVx1MDAzZWRldiwgMSwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwmIzM0O3NldCB0eC9yeCBudW0gZmFpbHVyZVxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgJiM0Mzs2NjAyLDE1IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0dHAtXHUwMDNlcnRsODE2OV9uYXBpID0ga2NhbGxvYyh0cC1cdTAwM2VpcnFfbnZlY3MsIHNpemVvZihzdHJ1Y3QgbmFwaV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyODE2OV9pbml0X25hcGkodHApO1xuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MDMsOCAmIzQzOzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHR0cC1cdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcbiBcdH1cbiBcbi1cdG5ldGRldl9pbmZvKGRldiwgXCYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLCB0cC1cdTAwM2VpcnEpO1xuJiM0MztcdG5ldGRldl9pbmZvKGRldiwgXCYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZCAoJWQgdG90YWwpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxuJiM0MztcdFx0ICAgIHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCB0cC1cdTAwM2VpcnFfbnZlY3MpO1xuIFxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXG5cJiMzNDssXG5AQCAtNTgyMSw2ICYjNDM7NjYzOCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX25hcGk6XG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4MTY5X3BjaV9kcml2ZXIgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X3NldF9jaGFubmVscyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3JlYWxsb2NfcngmIzM0OywKICAgICYjMzQ7cnRsX3NldF9yc3NfY29uZmlnJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW5pdF9yc3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfcnhfcmluZ19udW0mIzM0OywKICAgICYjMzQ7cnRsX2FsbG9jX2lycSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2FsbG9jX3J4X2Rlc2MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9mcmVlX3J4X2Rlc2MmIzM0OywKICAgICYjMzQ7cjgxNjlfaW5pdF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIFJlY2VpdmUgU2lkZSBTY2FsaW5nIChSU1MpLCBtdWx0aXBsZSBSWCBxdWV1ZXMsIGFuZCBNU0ktWCBpbnRlcnJ1cHRzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29tcGxleCByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgZXRodG9vbCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OWJjNzMzZjlmNDFlZWVhYTU3YjM2MzhmNTRhYTkzODJlNjg1N2VjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMDc6MzA6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCmluZGV4IGVjNGZjMjFmYTIxZmIwLi45MTk0YzIxNDJmOTVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKQEAgLTc0LDkgJiM0Mzs3NCwzMyBAQAogI2RlZmluZSBOVU1fVFhfREVTQwkyNTYJLyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5VTV9SWF9ERVNDCTI1NgkvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi8KICNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFUwkoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpCi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVMJKE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKQomIzQzOwomIzQzOy8qCiYjNDM7ICogV29ya2Fyb3VuZCBmb3IgdGhlIGhhcmR3YXJlIERNQSBwcmVmZXRjaGVyLiBUaGUgSC9XIG1pZ2h0IGFnZ3Jlc3NpdmVseQomIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlCiYjNDM7ICogYWxsb2NhdGUgdGhpcyBleHRyYSBkdW1teSBzcGFjZSBhcyBwYWRkaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcwomIzQzOyAqIGFjY2VzcyBhbmQgcG90ZW50aWFsIElPTU1VIGZhdWx0cy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVMJKChOVU1fUlhfREVTQyAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSkKICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTCShNQVhfU0tCX0ZSQUdTICYjNDM7IDEpCiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlMJKDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpCiYjNDM7I2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTCTgKJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9UWF9RVUVVRVMJOAomIzQzOyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVMJMQomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFUwkxCiYjNDM7I2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQwkzMgomIzQzOyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUMJMzAKJiM0MzsjZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUCTEKJiM0MzsjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkUJNDAKJiM0MzsjZGVmaW5lIFJTU19DUFVfTlVNX01BU0sJR0VOTUFTSygxOCwgMTYpCiYjNDM7I2RlZmluZSBSU1NfSEFTSF9NQVNLCQlHRU5NQVNLKDEwLCA4KQomIzQzOyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOAomIzQzOyNkZWZpbmUgUlhTX1JTU19VRFAJCUJJVCgyNykKJiM0MzsjZGVmaW5lIFJYU19SU1NfSVBWNAkJQklUKDI4KQomIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY2CQlCSVQoMjkpCiYjNDM7I2RlZmluZSBSWFNfUlNTX1RDUAkJQklUKDMwKQomIzQzOyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0sJKFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNikKJiM0MzsjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLCShSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKQogCiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0UJMHhhNDAwCiAKQEAgLTQ0MSwxMSAmIzQzOzQ2NSwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHsKIAlUeFBvbGxfODEyNQkJPSAweDkwLAogCUxFRFNFTDMJCQk9IDB4OTYsCiAJTUFDMF9CS1AJCT0gMHgxOWUwLAomIzQzOwlSRFNBUl9RMV9MT1cJCT0gMHg0MDAwLAogCVJTU19DVFJMXzgxMjUJCT0gMHg0NTAwLAogCVFfTlVNX0NUUkxfODEyNQkJPSAweDQ4MDAsCiAJRUVFX1RYSURMRV9USU1FUl84MTI1CT0gMHg2MDQ4LAomIzQzOwlJTVJfQ0xFQVJfVkVDX01BUF9SRUcJPSAweDBkMDAsCiYjNDM7CUlTUl9WRUNfTUFQX1JFRwkJPSAweDBkMDQsCiYjNDM7CUlNUl9TRVRfVkVDX01BUF9SRUcJPSAweDBkMGMsCiB9OwogCiYjNDM7I2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRwkyOQogI2RlZmluZSBMRURTRUxfTUFTS184MTI1CTB4MjNmCiAKICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1CUJJVCgyMikKQEAgLTU3Niw2ICYjNDM7NjA1LDIzIEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewogCiAJLyogbWFnaWMgZW5hYmxlIHYyICovCiAJTWFnaWNQYWNrZXRfdjIJPSAoMSAmbHQ7Jmx0OyAxNiksCS8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqLwomIzQzOyNkZWZpbmUJSVNSSU1SX0xJTktDSEcJQklUKDI5KQomIzQzOyNkZWZpbmUJSVNSSU1SX1RPS19RMAlCSVQoOCkKJiM0MzsjZGVmaW5lCUlTUklNUl9ST0tfUTAJQklUKDApCiYjNDM7I2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkwJCTB4ZDgKJiM0MzsjZGVmaW5lIFJTU19LRVlfUkVHCQkJMHg0NjAwCiYjNDM7I2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRwkJMHg0NzAwCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUAkJQklUKDEpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQCQlCSVQoMikKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUAkJQklUKDMpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQCUJJVCg1KQomIzQzOyNkZWZpbmUJUlhfUkVTX1JTUwkJCUJJVCgyMikKJiM0MzsjZGVmaW5lCVJYX1JVTlRfUlNTCQkJQklUKDIxKQomIzQzOyNkZWZpbmUJUlhfQ1JDX1JTUwkJCUJJVCgyMCkKJiM0MzsjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLCQlHRU5NQVNLKDQsIDIpCiB9OwogCiBlbnVtIHJ0bF9kZXNjX2JpdCB7CkBAIC02MzMsNiAmIzQzOzY3OSwxMSBAQCBlbnVtIHJ0bF9yeF9kZXNjX2JpdCB7CiAjZGVmaW5lIFJ4UHJvdG9JUAkoUElEMSB8IFBJRDApCiAjZGVmaW5lIFJ4UHJvdG9NYXNrCVJ4UHJvdG9JUAogCiYjNDM7I2RlZmluZQlSWF9VRFBUX0RFU0NfUlNTCUJJVCgxOSkKJiM0MzsjZGVmaW5lCVJYX1RDUFRfREVTQ19SU1MJQklUKDE4KQomIzQzOyNkZWZpbmUJUlhfVURQRl9ERVNDX1JTUwlCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KJiM0MzsjZGVmaW5lCVJYX1RDUEZfREVTQ19SU1MJQklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovCiYjNDM7CiAJSVBGYWlsCQk9ICgxICZsdDsmbHQ7IDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovCiAJVURQRmFpbAkJPSAoMSAmbHQ7Jmx0OyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KIAlUQ1BGYWlsCQk9ICgxICZsdDsmbHQ7IDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqLwpAQCAtNjU0LDkgJiM0Mzs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7CiB9OwogCiBzdHJ1Y3QgUnhEZXNjIHsKLQlfX2xlMzIgb3B0czE7Ci0JX19sZTMyIG9wdHMyOwotCV9fbGU2NCBhZGRyOwomIzQzOwl1bmlvbiB7CiYjNDM7CQkvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqLwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlfX2xlMzIgb3B0czE7CiYjNDM7CQkJX19sZTMyIG9wdHMyOwomIzQzOwkJCV9fbGU2NCBhZGRyOwomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCS8qIFJYX0RFU0NfVFlQRV9SU1MgKi8KJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlfX2xlNjQgcnNzX2FkZHI7CiYjNDM7CQkJCXN0cnVjdCB7CiYjNDM7CQkJCQlfX2xlMzIgcnNzX2luZm87CiYjNDM7CQkJCQlfX2xlMzIgcnNzX3Jlc3VsdDsKJiM0MzsJCQkJfSByc3NfZHdvcmQ7CiYjNDM7CQkJfTsKJiM0MzsJCQlfX2xlMzIgcnNzX29wdHMyOwomIzQzOwkJCV9fbGUzMiByc3Nfb3B0czE7CiYjNDM7CQl9OwomIzQzOwl9OwogfTsKIAogc3RydWN0IHJpbmdfaW5mbyB7CkBAIC03MjgsMjcgJiM0Mzs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ4X2Rlc2NfdHlwZSB7CiYjNDM7CVJYX0RFU0NfVFlQRV9ERUZBVUxULAomIzQzOwlSWF9ERVNDX1RZUEVfUlNTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7CiYjNDM7CXUzMiBpbmRleDsJCQkJCS8qIFJ4IHF1ZXVlIGluZGV4ICovCiYjNDM7CXUzMiBjdXJfcng7CQkJCQkvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi8KJiM0MzsJdTMyIGRpcnR5X3J4OwkJCQkJLyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi8KJiM0MzsJc3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTsJCQkvKiBhcnJheSBvZiBSeCBEZXNjKi8KJiM0MzsJZG1hX2FkZHJfdCByeF9kZXNjX3BoeV9hZGRyW05VTV9SWF9ERVNDXTsJLyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi8KJiM0MzsJZG1hX2FkZHJfdCByeF9waHlfYWRkcjsJCQkJLyogUnggZGVzYyBwaHlzaWNhbCBhZGRyZXNzICovCiYjNDM7CXN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107CQkvKiBSeCBkYXRhIGJ1ZmZlcnMgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHsKJiM0MzsJdTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTsKJiM0MzsJdTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdOwomIzQzOwl1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJdm9pZCBfX2lvbWVtICptbWlvX2FkZHI7CS8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAllbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uOwogCWVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7Ci0JdTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGRpcnR5X3R4OwogCXN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5OwkvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi8KLQlzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTsJLyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBUeFBoeUFkZHI7Ci0JZG1hX2FkZHJfdCBSeFBoeUFkZHI7Ci0Jc3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTsJLyogUnggZGF0YSBidWZmZXJzICovCiAJc3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdOwkvKiBUeCBkYXRhIGJ1ZmZlcnMgKi8KJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9yeF9yaW5nczsKIAl1MTYgY3BfY21kOwogCXUxNiB0eF9scGlfdGltZXI7CiAJdTMyIGlycV9tYXNrOwotCWludCBpcnE7CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTsKJiM0MzsJdW5zaWduZWQgaW50IGlycV9udmVjczsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7CiAJc3RydWN0IGNsayAqY2xrOwogCiAJc3RydWN0IHsKQEAgLTE1NzgsNiAmIzQzOzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY0NCwyNiAmIzQzOzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JaWYgKHJ0bF9pc184MTI1KHRwKSkKLQkJUlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJUlRMX1cxNih0cCwgSW50ck1hc2ssIDApOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLSZndDtpcnFfbWFzayk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC0mZ3Q7aXJxX21hc2spOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0xODY3LDkgJiM0MzsxOTc1LDIwIEBAIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxNjlfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJVHhWbGFuVGFnIHwgc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJc3RydWN0IFJ4RGVzYyAqZGVzYywKJiM0MzsJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtvcHRzMik7CiYjNDM7CXUzMiBvcHRzMjsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAKIAlpZiAob3B0czIgJmFtcDsgUnhWbGFuVGFnKQogCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgJmFtcDsgMHhmZmZmKSk7CkBAIC0yNDE2LDM0ICYjNDM7MjUzNSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKLQkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAotCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLAotCS5nZXRfZHJ2aW5mbwkJPSBydGw4MTY5X2dldF9kcnZpbmZvLAotCS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCi0JLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9jb2FsZXNjZQkJPSBydGxfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKLQkuZ2V0X3JlZ3MJCT0gcnRsODE2OV9nZXRfcmVncywKLQkuZ2V0X3dvbAkJPSBydGw4MTY5X2dldF93b2wsCi0JLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAotCS5nZXRfc3RyaW5ncwkJPSBydGw4MTY5X2dldF9zdHJpbmdzLAotCS5nZXRfc3NldF9jb3VudAkJPSBydGw4MTY5X2dldF9zc2V0X2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF90c19pbmZvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sCi0JLm53YXlfcmVzZXQJCT0gcGh5X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCi0JLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCi0JLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAotCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCi0JLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9ldGhfbWFjX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cywKLQkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpCiB7CiAJLyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqLwpAQCAtMjYxOSw5ICYjNDM7MjcxMCwyNyBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJbWVtc2V0KHJpbmctJmd0O3J4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXRwLSZndDtkaXJ0eV90eCA9IHRwLSZndDtjdXJfdHggPSB0cC0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJdHAtJmd0O2RpcnR5X3R4ID0gMDsKJiM0MzsJdHAtJmd0O2N1cl90eCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJcmluZy0mZ3Q7ZGlydHlfcnggPSAwOwomIzQzOwkJcmluZy0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJCXJpbmctJmd0O2luZGV4ID0gaTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjY4MCw2ICYjNDM7Mjc4OSwzNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cnRsX2NoaXBjbWRfY29uZCwgMTAwLCAxMDApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2luZGlyX3RibChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9yeF9yaW5ncykKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIG51bV9yeF9yaW5ncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJbmV0ZGV2X3Jzc19rZXlfZmlsbCh0cC0mZ3Q7cnNzX2RhdGEtJmd0O3Jzc19rZXksIFJUTF9SU1NfS0VZX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0dXBfcnhfcGFyYW1zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdHAtJmd0O251bV9yeF9yaW5ncyA9IDE7CiYjNDM7CXN3aXRjaCAodHAtJmd0O21hY192ZXJzaW9uKSB7CiYjNDM7CWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDoKJiM0MzsJCXRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9NQVhfUlhfUVVFVUVTOwomIzQzOwkJdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfREVGQVVMVF9SWF9RVUVVRVM7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdHJ1Y3QgcnRsX2Z3ICpydGxfZnc7CkBAIC0yODAyLDggJiM0MzsyOTM5LDYzIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJUlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSAmIzQzOyAxKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcnNzX2tleShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUzMiBudW1fZW50cmllcyA9IFJUTF9SU1NfS0VZX1NJWkUgLyBzaXplb2YodTMyKTsKJiM0MzsJdTMyICpyc3Nfa2V5ID0gdHAtJmd0O3Jzc19kYXRhLSZndDtyc3Nfa2V5OwomIzQzOwljb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRzsKJiM0MzsKJiM0MzsJLyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBudW1fZW50cmllczsgaSYjNDM7JiM0MzspCiYjNDM7CQlSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyAmIzQzOyAoaSAqIDQpLCByc3Nfa2V5W2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTggKmluZGlyX3RibCA9IHRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CS8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkgJiM0Mzs9IDQpIHsKJiM0MzsJCXUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfAomIzQzOwkJCSAgICh1MzIpaW5kaXJfdGJsW2kgJiM0MzsgMV0gJmx0OyZsdDsgOCB8CiYjNDM7CQkJICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAyXSAmbHQ7Jmx0OyAxNiB8CiYjNDM7CQkJICAgKHUzMilpbmRpcl90YmxbaSAmIzQzOyAzXSAmbHQ7Jmx0OyAyNDsKJiM0MzsJCVJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICYjNDM7IGksIHJldGEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUzMiByc3NfY3RybDsKJiM0MzsKJiM0MzsJcnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLSZndDtudW1fcnhfcmluZ3MpKTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqLwomIzQzOwlyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCiYjNDM7CQkgfCBSU1NfQ1RSTF9JUFY0X1NVUFAKJiM0MzsJCSB8IFJTU19DVFJMX0lQVjZfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUAomIzQzOwkJIHwgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFA7CiYjNDM7CiYjNDM7CXJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSywKJiM0MzsJCQkgICAgICAgaWxvZzIodHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzKSk7CiYjNDM7CiYjNDM7CVJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIHJzc19jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldF9yc3NfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTsKJiM0MzsJcnRsODE2OV9zdG9yZV9yZXRhKHRwKTsKJiM0MzsJcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1swXTsKJiM0MzsKIAkvKgogCSAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoCiAJICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLgpAQCAtMjgxMSw4ICYjNDM7MzAwMywxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCSAqLwogCVJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC0mZ3Q7VHhQaHlBZGRyKSAmZ3Q7Jmd0OyAzMik7CiAJUlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRyTG93LCAoKHU2NCkgdHAtJmd0O1R4UGh5QWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JUlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSB0cC0mZ3Q7UnhQaHlBZGRyKSAmZ3Q7Jmd0OyAzMik7Ci0JUlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLSZndDtSeFBoeUFkZHIpICZhbXA7IERNQV9CSVRfTUFTSygzMikpOwomIzQzOwlSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHJpbmctJmd0O3J4X3BoeV9hZGRyKSAmZ3Q7Jmd0OyAzMik7CiYjNDM7CVJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csICgodTY0KSByaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAxOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZHNhcl9yZWcgPSBSRFNBUl9RMV9MT1cgJiM0MzsgKGkgLSAxKSAqIDg7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCVJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkciAmZ3Q7Jmd0OyAzMikpOwomIzQzOwkJUlRMX1czMih0cCwgcmRzYXJfcmVnLCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMzg1OCw2ICYjNDM7NDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZCkKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpICZhbXA7IEJJVCgxMyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUxNiByeF9xX251bTsKJiM0MzsJdTE2IHFfY3RybDsKJiM0MzsKJiM0MzsJcnhfcV9udW0gPSBpbG9nMih0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJcV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTsKJiM0MzsJcV9jdHJsICZhbXA7PSB+UlRMX1JYX1FfTlVNX01BU0s7CiYjNDM7CXFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7CiYjNDM7CVJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCB0bXA7CiYjNDM7CiYjNDM7CXRtcCA9IFJUTF9SOCh0cCwgSU5UX0NGRzBfODEyNSk7CiYjNDM7CXRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTsKJiM0MzsJUlRMX1c4KHRwLCBJTlRfQ0ZHMF84MTI1LCB0bXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApOwpAQCAtMzg2Niw2ICYjNDM7NDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAwKTsKIAlSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApOwogCiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCXJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTsKJiM0MzsKIAkvKiBkaXNhYmxlIFVQUyAqLwogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTsKIApAQCAtMzg4NSw2ICYjNDM7NDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlSVExfVzgodHAsIDB4RDgsIFJUTF9SOCh0cCwgMHhEOCkgJmFtcDsgfjB4MDIpOwogCiYjNDM7CS8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyovCiYjNDM7CWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkgewomIzQzOwkJcnRsODEyNV9zZXRfcnhfcV9udW0odHApOwomIzQzOwkJUlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsCiYjNDM7CQkgICAgICAgUlRMX1I4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwpIHwgUlRMX0RFU0NfVFlQRV9SU1MpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7CiAJZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApCkBAIC00MTIxLDYgJiM0Mzs0MzUyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7CiAJcnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7CiAJcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkKJiM0MzsJCQlydGxfc2V0X3Jzc19jb25maWcodHApOwomIzQzOwkJZWxzZQomIzQzOwkJCVJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDB4MDApOwomIzQzOwl9CiAJcnRsX2xvY2tfY29uZmlnX3JlZ3ModHApOwogCiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CkBAIC00MTQ4LDE5ICYjNDM7NDM4NSwzMiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKIHsKLQl1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7b3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CXUzMiBlb3I7CiAKLQlkZXNjLSZndDtvcHRzMiA9IDA7Ci0JLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KLQlkbWFfd21iKCk7Ci0JV1JJVEVfT05DRShkZXNjLSZndDtvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3Jzc19vcHRzMSkgJmFtcDsgUmluZ0VuZDsKJiM0MzsJCWRlc2MtJmd0O3Jzc19vcHRzMiA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KJiM0MzsJCWRtYV93bWIoKTsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7cnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZW9yID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7b3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CQlkZXNjLSZndDtvcHRzMiA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi8KJiM0MzsJCWRtYV93bWIoKTsKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7b3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCi0JCQkJCSAgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0MzsJCQkJCSAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KQogewomIzQzOwlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy0mZ3Q7cnhfZGVzY19hcnJheSAmIzQzOyBpbmRleDsKIAlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKIAlpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKQEAgLTQxNzcsNTYgJiM0Mzs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZGVzYy0mZ3Q7YWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpOwotCXJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpOwomIzQzOwlyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7CiYjNDM7CWlmICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykKJiM0MzsJCWRlc2MtJmd0O3Jzc19hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiYjNDM7CWVsc2UKJiM0MzsJCWRlc2MtJmd0O2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKJiM0MzsJcnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsCiYjNDM7CQkJICAgICBlbnVtIHJ4X2Rlc2NfdHlwZSBkZXNjX3R5cGUpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0MgJmFtcDsmYW1wOyB0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOVU1fUlhfREVTQyAmYW1wOyZhbXA7IHJpbmctJmd0O3J4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykgewogCQlkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLAotCQkJICAgICAgIGxlNjRfdG9fY3B1KHRwLSZndDtSeERlc2NBcnJheVtpXS5hZGRyKSwKJiM0MzsJCQkgICAgICAgcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpXSwKIAkJCSAgICAgICBSODE2OV9SWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJX19mcmVlX3BhZ2VzKHRwLSZndDtSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7Ci0JCXRwLSZndDtSeF9kYXRhYnVmZltpXSA9IE5VTEw7Ci0JCXRwLSZndDtSeERlc2NBcnJheVtpXS5hZGRyID0gMDsKLQkJdHAtJmd0O1J4RGVzY0FycmF5W2ldLm9wdHMxID0gMDsKJiM0MzsJCV9fZnJlZV9wYWdlcyhyaW5nLSZndDtyeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CQlyaW5nLSZndDtyeF9kYXRhYnVmZltpXSA9IE5VTEw7CiYjNDM7CQlyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDsKJiM0MzsJCWlmIChkZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUykgewomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwOwomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJZGVzYy0mZ3Q7cnNzX29wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXNjLSZndDtvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwYWdlICpkYXRhOwogCi0JCWRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLSZndDtSeERlc2NBcnJheSAmIzQzOyBpKTsKJiM0MzsJCWRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHJpbmcsIGkpOwogCQlpZiAoIWRhdGEpIHsKLQkJCXJ0bDgxNjlfcnhfY2xlYXIodHApOwomIzQzOwkJCXJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQl0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0gPSBkYXRhOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0gPSBkYXRhOwogCX0KIAogCS8qIG1hcmsgYXMgbGFzdCBkZXNjcmlwdG9yIGluIHRoZSByaW5nICovCi0JdHAtJmd0O1J4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7CiYjNDM7CXJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsICZhbXA7cmluZy0mZ3Q7cnhfZGVzY19hcnJheVtOVU1fUlhfREVTQyAtIDFdKTsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLSZndDtwY2lfZGV2OwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkJCSBSODE2OV9SWF9SSU5HX0JZVEVTLAomIzQzOwkJCQkJCQkgJmFtcDtyaW5nLSZndDtyeF9waHlfYWRkciwKJiM0MzsJCQkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFyaW5nLSZndDtyeF9kZXNjX2FycmF5KQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwkJaWYgKHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkpIHsKJiM0MzsJCQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfZGVzY19hcnJheSwKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfcGh5X2FkZHIpOwomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKJiM0MzsJcnRsODE2OV9yeF9kZXNjX2luaXQodHApOwogCiAJbWVtc2V0KHRwLSZndDt0eF9za2IsIDAsIHNpemVvZih0cC0mZ3Q7dHhfc2tiKSk7Ci0JbWVtc2V0KHRwLSZndDtSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLSZndDtSeF9kYXRhYnVmZikpOwogCi0JcmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQltZW1zZXQocmluZy0mZ3Q7cnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLSZndDtyeF9kYXRhYnVmZikpOwomIzQzOwkJcmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX2NsZWFyOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jbGVhcjoKJiM0MzsJd2hpbGUgKC0taSAmZ3Q7PSAwKQomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXSwgdHAtJmd0O2luaXRfcnhfZGVzY190eXBlKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSkKQEAgLTQyNjYsOSAmIzQzOzQ1ODksMjEgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAluZXRkZXZfcmVzZXRfcXVldWUodHAtJmd0O2Rldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2VuYWJsZSgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTsKIAogCS8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKQEAgLTQzMDMsMTggJiM0Mzs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWludCBpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbal07CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpOwomIzQzOwkJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLSZndDtyeF9kZXNjX2FycmF5ICYjNDM7IGopOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewogCW5ldGlmX3N0b3BfcXVldWUodHAtJmd0O2Rldik7CiAKIAlydGw4MTY5X2NsZWFudXAodHApOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGkpOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApOwogCi0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCXJ0bF9od19zdGFydCh0cCk7CiB9CiAKQEAgLTQ3NTgsMzAgJiM0Mzs1MTA1LDEwNCBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cykKIAlyZXR1cm4gKHN0YXR1cyAmYW1wOyAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBzdGF0dXMgPSBvcHRzMSAmYW1wOyAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spOwomIzQzOwl1MzIgcnNzX2hlYWRlcl9pbmZvOwomIzQzOwl1MzIgaGFzaF92YWw7CiYjNDM7CiYjNDM7CWlmICghKHRwLSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfUlhIQVNIKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnNzX2R3b3JkLnJzc19pbmZvKTsKJiM0MzsKJiM0MzsJaWYgKCEocnNzX2hlYWRlcl9pbmZvICZhbXA7IFJYU19SU1NfTDNfVFlQRV9NQVNLKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaGFzaF92YWwgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3NfZHdvcmQucnNzX3Jlc3VsdCk7CiYjNDM7CiYjNDM7CXNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLAomIzQzOwkJICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgJmFtcDsgcnNzX2hlYWRlcl9pbmZvKSA/CiYjNDM7CQkgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgdTMyIG9wdHMxKQomIzQzO3sKJiM0MzsJYm9vbCBjc3VtX29rID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWlmICgoKG9wdHMxICZhbXA7IFJYX1RDUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9UQ1BGX0RFU0NfUlNTKSkgfHwKJiM0MzsJCSAgICAoKG9wdHMxICZhbXA7IFJYX1VEUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9VRFBGX0RFU0NfUlNTKSkpCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWlmIChvcHRzMSA9PSBSeFByb3RvVENQIHx8IG9wdHMxID09IFJ4UHJvdG9VRFApCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCi0JaWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKQomIzQzOwlpZiAoY3N1bV9vaykKIAkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAllbHNlCiAJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogfQogCi1zdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldCkKJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UoZGVzYy0mZ3Q7cnNzX29wdHMxKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UoZGVzYy0mZ3Q7b3B0czEpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJCQl1MzIgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmYW1wOyBSWF9SRVNfUlNTKSkgewomIzQzOwkJCWlmIChzdGF0dXMgJmFtcDsgUlhfUlVOVF9SU1MpCiYjNDM7CQkJCWRldi0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJaWYgKHN0YXR1cyAmYW1wOyBSWF9DUkNfUlNTKQomIzQzOwkJCQlkZXYtJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJ4UkVTKSkgewomIzQzOwkJCWlmIChzdGF0dXMgJmFtcDsgKFJ4UldUIHwgUnhSVU5UKSkKJiM0MzsJCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJ4Q1JDKQomIzQzOwkJCQlkZXYtJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCSAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewogCXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwogCWludCBjb3VudDsKIAotCWZvciAoY291bnQgPSAwOyBjb3VudCAmbHQ7IGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCB0cC0mZ3Q7Y3VyX3J4JiM0MzsmIzQzOykgewotCQl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gdHAtJmd0O2N1cl9yeCAlIE5VTV9SWF9ERVNDOwotCQlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gdHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGVudHJ5OwomIzQzOwlmb3IgKGNvdW50ID0gMDsgY291bnQgJmx0OyBidWRnZXQ7IGNvdW50JiM0MzsmIzQzOywgcmluZy0mZ3Q7Y3VyX3J4JiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHJpbmctJmd0O2N1cl9yeCAlIE5VTV9SWF9ERVNDOwomIzQzOwkJc3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgJiM0MzsgZW50cnk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWNvbnN0IHZvaWQgKnJ4X2J1ZjsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQl1MzIgc3RhdHVzOwogCi0JCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLSZndDtvcHRzMSkpOwomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7CiAJCWlmIChzdGF0dXMgJmFtcDsgRGVzY093bikKIAkJCWJyZWFrOwogCkBAIC00NzkxLDE5ICYjNDM7NTIxMiwxNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQkgKi8KIAkJZG1hX3JtYigpOwogCi0JCWlmICh1bmxpa2VseShzdGF0dXMgJmFtcDsgUnhSRVMpKSB7CiYjNDM7CQlpZiAocnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKGRldiwgdHAsIHN0YXR1cykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O1J4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XG4mIzM0OywKIAkJCQkJICAgIHN0YXR1cyk7CiAJCQlkZXYtJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7Ci0JCQlpZiAoc3RhdHVzICZhbXA7IChSeFJXVCB8IFJ4UlVOVCkpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKLQkJCWlmIChzdGF0dXMgJmFtcDsgUnhDUkMpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKIAogCQkJaWYgKCEoZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYQUxMKSkKIAkJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKLQkJCWVsc2UgaWYgKHN0YXR1cyAmYW1wOyBSeFJXVCB8fCAhKHN0YXR1cyAmYW1wOyAoUnhSVU5UIHwgUnhDUkMpKSkKJiM0MzsJCQlpZiAoKHN0YXR1cyAmYW1wOyBSeFJXVCB8fCAhKHN0YXR1cyAmYW1wOyAoUnhSVU5UIHwgUnhDUkMpKSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICB0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX0RFRkFVTFQpCiAJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiAJCX0KIApAQCAtNDgyMCwxNCAmIzQzOzUyMzgsMTQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXQKIAkJCWdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yOwogCQl9CiAKLQkJc2tiID0gbmFwaV9hbGxvY19za2IoJmFtcDt0cC0mZ3Q7bmFwaSwgcGt0X3NpemUpOwomIzQzOwkJc2tiID0gbmFwaV9hbGxvY19za2IobmFwaSwgcGt0X3NpemUpOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWRldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCWFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLSZndDthZGRyKTsKLQkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLSZndDtSeF9kYXRhYnVmZltlbnRyeV0pOwomIzQzOwkJYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbZW50cnldOwomIzQzOwkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctJmd0O3J4X2RhdGFidWZmW2VudHJ5XSk7CiAKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCXByZWZldGNoKHJ4X2J1Zik7CkBAIC00ODM2LDE5ICYjNDM7NTI1NCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQlza2ItJmd0O2xlbiA9IHBrdF9zaXplOwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAotCQlydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpOwomIzQzOwkJaWYgKHRwLSZndDtudW1fcnhfcmluZ3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpOwogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7CiAKIAkJaWYgKHNrYi0mZ3Q7cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkKIAkJCWRldi0mZ3Q7c3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOzsKIAotCQluYXBpX2dyb19yZWNlaXZlKCZhbXA7dHAtJmd0O25hcGksIHNrYik7CiYjNDM7CQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAKIAkJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTsKIHJlbGVhc2VfZGVzY3JpcHRvcjoKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7CiYjNDM7CQlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpCiYjNDM7CQkJZGVzYy0mZ3Q7cnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLSZndDtyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7CiYjNDM7CQlydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtNDg1Niw4ICYjNDM7NTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlOwotCXUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CXUzMiBzdGF0dXM7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYobmFwaS0mZ3Q7ZGV2KTsKJiM0MzsJc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApOwogCiAJaWYgKChzdGF0dXMgJmFtcDsgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgJmFtcDsgdHAtJmd0O2lycV9tYXNrKSkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNDg3MywxMyAmIzQzOzUyOTksODYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIAkJcGh5X21hY19pbnRlcnJ1cHQodHAtJmd0O3BoeWRldik7CiAKIAlydGxfaXJxX2Rpc2FibGUodHApOwotCW5hcGlfc2NoZWR1bGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CW5hcGlfc2NoZWR1bGUobmFwaSk7CiBvdXQ6CiAJcnRsX2Fja19ldmVudHModHAsIHN0YXR1cyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldOwomIzQzOwomIzQzOwkJcGNpX2ZyZWVfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCBuYXBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2Rpc2FibGVfaHdfaW50ZXJydXB0X21zaXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBtZXNzYWdlX2lkKQomIzQzO3sKJiM0MzsJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpCiYjNDM7ewomIzQzOwlSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZCkKJiM0Mzt7CiYjNDM7CVJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CWludCBtZXNzYWdlX2lkOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CW1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaTsKJiM0MzsKJiM0MzsJaWYgKG1lc3NhZ2VfaWQgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpIHsKJiM0MzsJCXJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7CiYjNDM7CXJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsKJiM0MzsJbmFwaV9zY2hlZHVsZShuYXBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwomIzQzOwlpbnQgaSwgcmM7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbmFwaSA9ICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXTsKJiM0MzsJCWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCQlyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LCBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LCBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZnJlZV9pcnE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9pcnE6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCXBjaV9mcmVlX2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CkBAIC00OTE0LDEzICYjNDM7NTQxMywxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKLQlpbnQgd29ya19kb25lOwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CWludCB3b3JrX2RvbmUgPSAwOwogCiAJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiAKLQl3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTsKJiM0MzsJLyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi8KJiM0MzsJd29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7CiAKIAlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiAJCXJ0bF9pcnFfZW5hYmxlKHRwKTsKQEAgLTUwMzUsNyAmIzQzOzU1MzUsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwogCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcnRsODE2OV9pbml0X3BoeSh0cCk7Ci0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKIApAQCAtNTA1MSwxOCAmIzQzOzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcnRsODE2OV9kb3duKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiAKLQlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9pcnEodHApOwogCiAJcGh5X2Rpc2Nvbm5lY3QodHAtJmd0O3BoeWRldik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAotCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtJmd0O1R4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7VHhQaHlBZGRyKTsKIAl0cC0mZ3Q7VHhEZXNjQXJyYXkgPSBOVUxMOwotCXRwLSZndDtSeERlc2NBcnJheSA9IE5VTEw7CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKIAogCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCkBAIC01MDc0LDcgJiM0Mzs1NTczLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJ0bDgxNjlfaW50ZXJydXB0KHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7aXJxX252ZWNzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtJmd0O3BjaV9kZXYsIGkpLAomIzQzOwkJCQkJICAgICAgICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtJmd0O3BjaV9kZXYsIGkpLAomIzQzOwkJCQkJICAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwl9CiB9CiAjZW5kaWYKIApAQCAtNTA4Miw3ICYjNDM7NTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0mZ3Q7cGNpX2RldjsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmYW1wO3BkZXYtJmd0O2Rldik7CkBAIC01MDk2LDEwICYjNDM7NTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAoIXRwLSZndDtUeERlc2NBcnJheSkKIAkJZ290byBvdXQ7CiAKLQl0cC0mZ3Q7UnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsCi0JCQkJCSAgICAgJmFtcDt0cC0mZ3Q7UnhQaHlBZGRyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRwLSZndDtSeERlc2NBcnJheSkKLQkJZ290byBlcnJfZnJlZV90eF8wOwomIzQzOwlpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9mcmVlX3J4XzE7CiAKIAlyZXR2YWwgPSBydGw4MTY5X2luaXRfcmluZyh0cCk7CiAJaWYgKHJldHZhbCAmbHQ7IDApCkBAIC01MTA3LDggJiM0Mzs1NjEwLDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJcnRsX3JlcXVlc3RfZmlybXdhcmUodHApOwogCi0JaXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh0cC0mZ3Q7aXJxLCBydGw4MTY5X2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi0mZ3Q7bmFtZSwgdHApOwomIzQzOwlyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTsKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCkBAIC01MTI1LDE1ICYjNDM7NTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIHJldHZhbDsKIAogZXJyX2ZyZWVfaXJxOgotCWZyZWVfaXJxKHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJcnRsODE2OV9mcmVlX2lycSh0cCk7CiBlcnJfcmVsZWFzZV9md18yOgogCXJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiBlcnJfZnJlZV9yeF8xOgotCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC0mZ3Q7UnhEZXNjQXJyYXksCi0JCQkgIHRwLSZndDtSeFBoeUFkZHIpOwotCXRwLSZndDtSeERlc2NBcnJheSA9IE5VTEw7Ci1lcnJfZnJlZV90eF8wOgomIzQzOwlydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLSZndDtUeERlc2NBcnJheSwKIAkJCSAgdHAtJmd0O1R4UGh5QWRkcik7CiAJdHAtJmd0O1R4RGVzY0FycmF5ID0gTlVMTDsKQEAgLTUyNzUsNiAmIzQzOzU3NzUsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2ZyZWVfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRpZl9uYXBpX2RlbCgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnRsODE2OV9uYXBpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTUyODksNiAmIzQzOzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHRwLSZndDtkZXYpOwogCiYjNDM7CXI4MTY5X2ZyZWVfbmFwaSh0cCk7CiYjNDM7CiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CiAKQEAgLTUzMjAsMTUgJiM0Mzs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdHAtJmd0O2lycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZzsKJiM0MzsJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXRwLSZndDtpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwICZsdDsmbHQ7IGk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnOwogCi0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmbHQ7PSBSVExfR0lHQV9NQUNfVkVSXzA2KQotCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikKJiM0MzsJCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJcmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDOwomIzQzOwlyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQlyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7CiYjNDM7CXJldHVybiBSODE2OV9JUlFfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7PSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHsKJiM0MzsJCXVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTsKJiM0MzsKJiM0MzsJCXRwLSZndDtudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSwKJiM0MzsJCQkJCQkJICAgIHRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMpKTsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDs9IDIpCiYjNDM7CQkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUzsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOwlpbnQgbnZlY3M7CiAKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjoKQEAgLTUzNDQsNyAmIzQzOzU4ODgsMTcgQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLSZndDtwY2lfZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CW52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQludmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gbnZlY3M7CiYjNDM7CiYjNDM7CXRwLSZndDtpcnFfbnZlY3MgPSBudmVjczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLApAQCAtNTU5OSw2ICYjNDM7NjE1MywyNDEgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwlpbnQgd29ya19kb25lID0gMDsKJiM0MzsJaW50IG1lc3NhZ2VfaWQ7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJbWVzc2FnZV9pZCA9IG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpOwomIzQzOwomIzQzOwlpZiAobWVzc2FnZV9pZCAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQl3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW21lc3NhZ2VfaWRdLCBidWRnZXQsIG5hcGkpOwomIzQzOwomIzQzOwlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiYjNDM7CQlydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7CiYjNDM7CiYjNDM7CXJldHVybiB3b3JrX2RvbmU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiYjNDM7CiYjNDM7CWlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpCiYjNDM7CQlydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLSZndDtydGw4MTY5X25hcGkpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfb3RoZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSkKJiM0MzsJCXJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUlRMODEyNyBNU0ktWCB2ZWN0b3IgbGF5b3V0OgomIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpCQk6IFJ4IFF1ZXVlcwomIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSkJOiBUeCBRdWV1ZXMKJiM0MzsgKiBWZWN0b3IgKFJ4UXMgJiM0MzsgVHhRcykgYW5kIHVwCQk6IE90aGVyIGV2ZW50cyAoTGluayBzdGF0dXMoMjkpLCBldGMuKQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUlhfUVVFVUVTKQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7CiYjNDM7CQkJZWxzZSBpZiAoaSAmbHQ7IFI4MTY5X01BWF9SWF9RVUVVRVMgJiM0MzsgUjgxMjdfTUFYX1RYX1FVRVVFUykKJiM0MzsJCQkJcG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyOwomIzQzOwkJfQomIzQzOwkJbmV0aWZfbmFwaV9hZGQodHAtJmd0O2RldiwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwljaC0mZ3Q7bWF4X3J4ID0gdHAtJmd0O2h3X3N1cHBfbnVtX3J4X3F1ZXVlczsKJiM0MzsJY2gtJmd0O21heF90eCA9IDE7CiYjNDM7CiYjNDM7CWNoLSZndDtyeF9jb3VudCA9IHRwLSZndDtudW1fcnhfcmluZ3M7CiYjNDM7CWNoLSZndDt0eF9jb3VudCA9IDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCwKJiM0MzsJCQkgICAgICBpbnQgbmV3X2NvdW50KQomIzQzO3sKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5ld19jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO25ld19yeFtpXTsKJiM0MzsKJiM0MzsJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFtcDt0cC0mZ3Q7cGNpX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCQkJICZhbXA7cmluZy0mZ3Q7cnhfcGh5X2FkZHIsCiYjNDM7CQkJCQkJCSBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghcmluZy0mZ3Q7cnhfZGVzY19hcnJheSkgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfZnJlZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW1lbXNldChyaW5nLSZndDtyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctJmd0O3J4X2RhdGFidWZmKSk7CiYjNDM7CQlyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7dHAtJmd0O3BjaV9kZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywKJiM0MzsJCQkJCSAgcmluZy0mZ3Q7cnhfZGVzY19hcnJheSwgcmluZy0mZ3Q7cnhfcGh5X2FkZHIpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkgewomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDtuZXdfcnhbaV0sIHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSk7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3RwLSZndDtwY2lfZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsCiYjNDM7CQkJCSAgbmV3X3J4W2ldLnJ4X2Rlc2NfYXJyYXksIG5ld19yeFtpXS5yeF9waHlfYWRkcik7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgb2xkX3J4X2Rlc2NfdHlwZTsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgbmV3X2Rlc2NfdHlwZTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4OwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlpZiAoY2gtJmd0O3J4X2NvdW50ID09IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb2xkX3J4X2Rlc2NfdHlwZSA9IHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJaWYgKCFydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQluZXRkZXZfd2FybihkZXYsICYjMzQ7VGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaC0mZ3Q7cnhfY291bnQgJmd0OyB0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzIHx8ICFpc19wb3dlcl9vZl8yKGNoLSZndDtyeF9jb3VudCkgfHwKJiM0MzsJICAgIHRwLSZndDtpcnFfbnZlY3MgJmx0OyBnZXRfbWluX2lycV9udmVjcyh0cCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmV3X2Rlc2NfdHlwZSA9IGNoLSZndDtyeF9jb3VudCAmZ3Q7IDEgPyBSWF9ERVNDX1RZUEVfUlNTIDogUlhfREVTQ19UWVBFX0RFRkFVTFQ7CiYjNDM7CiYjNDM7CWlmICghaWZfcnVubmluZykgewomIzQzOwkJcmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQl0cC0mZ3Q7bnVtX3J4X3JpbmdzID0gY2gtJmd0O3J4X2NvdW50OwomIzQzOwkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gbmV3X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJCXJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwkJcnRsX3NldF9pcnFfbWFzayh0cCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CWlmICghbmV3X3J4KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKJiM0MzsJcnRsODE2OV9kb3duKHRwKTsKJiM0MzsKJiM0MzsJcmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl91cDsKJiM0MzsKJiM0MzsJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gbmV3X2Rlc2NfdHlwZTsKJiM0MzsKJiM0MzsJcmV0ID0gcnRsODE2OV9yZWFsbG9jX3J4KHRwLCBuZXdfcngsIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXNldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJcnRsODE2OV9yeF9jbGVhcih0cCwgJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXSwgb2xkX3J4X2Rlc2NfdHlwZSk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKJiM0MzsKJiM0MzsJdHAtJmd0O251bV9yeF9yaW5ncyA9IGNoLSZndDtyeF9jb3VudDsKJiM0MzsKJiM0MzsJbWVtc2V0KHRwLSZndDtyeF9yaW5nLCAwLCBzaXplb2YodHAtJmd0O3J4X3JpbmcpKTsKJiM0MzsJbWVtY3B5KHRwLSZndDtyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLSZndDtyeF9jb3VudCk7CiYjNDM7CiYjNDM7CXJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwlydGxfc2V0X2lycV9tYXNrKHRwKTsKJiM0MzsKJiM0MzsJcnRsODE2OV91cCh0cCk7CiYjNDM7CW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiYjNDM7CiYjNDM7CWtmcmVlKG5ld19yeCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXNldDoKJiM0MzsJaWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC0mZ3Q7bnVtX3J4X3JpbmdzKSkKJiM0MzsJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXG4mIzM0Oyk7CiYjNDM7CXRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7CiYjNDM7ZXJyX3VwOgomIzQzOwlydGw4MTY5X3VwKHRwKTsKJiM0MzsJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKJiM0MzsJa2ZyZWUobmV3X3J4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0gewomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAomIzQzOwkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUywKJiM0MzsJLmdldF9kcnZpbmZvCQk9IHJ0bDgxNjlfZ2V0X2RydmluZm8sCiYjNDM7CS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCiYjNDM7CS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAomIzQzOwkuZ2V0X2NvYWxlc2NlCQk9IHJ0bF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKJiM0MzsJLmdldF9yZWdzCQk9IHJ0bDgxNjlfZ2V0X3JlZ3MsCiYjNDM7CS5nZXRfd29sCQk9IHJ0bDgxNjlfZ2V0X3dvbCwKJiM0MzsJLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAomIzQzOwkuZ2V0X3N0cmluZ3MJCT0gcnRsODE2OV9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAomIzQzOwkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiYjNDM7CS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKJiM0MzsJLmdldF9jaGFubmVscwkJPSBydGw4MTY5X2dldF9jaGFubmVscywKJiM0MzsJLnNldF9jaGFubmVscwkJPSBydGw4MTY5X3NldF9jaGFubmVscywKJiM0MzsJLmdldF9saW5rX2tzZXR0aW5ncwk9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKJiM0MzsJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X3JpbmdwYXJhbQkJPSBydGw4MTY5X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCiYjNDM7CS5zZXRfcGF1c2VwYXJhbQkJPSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwOwpAQCAtNTYwOSw3ICYjNDM7NjM5OCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl1MzIgdHhjb25maWc7CiAJdTMyIHhpZDsKIAotCWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZiAoKnRwKSk7CiYjNDM7CWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnRwKSwKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUywKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01Njg5LDYgJiM0Mzs2NDgxLDEyIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O3Jzc19kYXRhKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXRwLSZndDtyc3NfZGF0YSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCXRwLSZndDtjcF9jbWQgPSBSVExfUjE2KHRwLCBDUGx1c0NtZCkgJmFtcDsgQ1BDTURfTUFTSzsKIAogCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgJmd0OyA0ICZhbXA7JmFtcDsgdHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfMTggJmFtcDsmYW1wOwpAQCAtNTcwMywxMSAmIzQzOzY1MDEsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlydGxfaHdfcmVzZXQodHApOwogCiYjNDM7CXJ0bF9zZXR1cF9yeF9wYXJhbXModHApOwomIzQzOwogCXJjID0gcnRsX2FsbG9jX2lycSh0cCk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJjLCAmIzM0O0NhbiYjMzk7dCBhbGxvY2F0ZSBpbnRlcnJ1cHRcbiYjMzQ7KTsKIAotCXRwLSZndDtpcnEgPSBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKTsKJiM0MzsJcnRsODE2OV9zZXRfcnhfcmluZ19udW0odHApOwomIzQzOwomIzQzOwlpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSkKJiM0MzsJCXJ0bDgxNjlfaW5pdF9yc3ModHApOwogCiAJSU5JVF9XT1JLKCZhbXA7dHAtJmd0O3drLndvcmssIHJ0bF90YXNrKTsKIAlkaXNhYmxlX3dvcmsoJmFtcDt0cC0mZ3Q7d2sud29yayk7CkBAIC01NzE2LDEzICYjNDM7NjUxOSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO3J0bDgxNjlfZXRodG9vbF9vcHM7CiAKLQluZXRpZl9uYXBpX2FkZChkZXYsICZhbXA7dHAtJmd0O25hcGksIHJ0bDgxNjlfcG9sbCk7Ci0KIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDsKIAlkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087CiAJZGV2LSZndDtwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApICZhbXA7JmFtcDsgdHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpIHsKJiM0MzsJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7CiYjNDM7CQlkZXYtJmd0O2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZQogCSAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLgpAQCAtNTc3OCw2ICYjNDM7NjU4NCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlpZiAoanVtYm9fbWF4KQogCQlkZXYtJmd0O21heF9tdHUgPSBqdW1ib19tYXg7CiAKJiM0MzsJcmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLSZndDtkZXYsIDEsIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJjLCAmIzM0O3NldCB0eC9yeCBudW0gZmFpbHVyZVxuJiMzNDspOwomIzQzOwogCXJ0bF9zZXRfaXJxX21hc2sodHApOwogCiAJdHAtJmd0O2NvdW50ZXJzID0gZG1hbV9hbGxvY19jb2hlcmVudCAoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O2NvdW50ZXJzKSwKQEAgLTU3OTIsOSAmIzQzOzY2MDIsMTUgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKJiM0MzsJdHAtJmd0O3J0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtJmd0O2lycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtydGw4MTY5X25hcGkpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcjgxNjlfaW5pdF9uYXBpKHRwKTsKJiM0MzsKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byBlcnJfZnJlZV9uYXBpOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7CiAJCWlmIChydGxfaXNfODEyNSh0cCkpCkBAIC01ODAzLDggJiM0Mzs2NjE5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJCQl0cC0mZ3Q7bGVkcyA9IHJ0bDgxNjhfaW5pdF9sZWRzKGRldik7CiAJfQogCi0JbmV0ZGV2X2luZm8oZGV2LCAmIzM0OyVzLCAlcE0sICVzWElEICV4LCBJUlEgJWRcbiYjMzQ7LAotCQkgICAgY2hpcC0mZ3Q7bmFtZSwgZGV2LSZndDtkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtJmd0O2lycSk7CiYjNDM7CW5ldGRldl9pbmZvKGRldiwgJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcbiYjMzQ7LAomIzQzOwkJICAgIGNoaXAtJmd0O25hbWUsIGRldi0mZ3Q7ZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsCiYjNDM7CQkgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLSZndDtpcnFfbnZlY3MpOwogCiAJaWYgKGp1bWJvX21heCkKIAkJbmV0ZGV2X2luZm8oZGV2LCAmIzM0O2p1bWJvIGZlYXR1cmVzIFtmcmFtZXM6ICVkIGJ5dGVzLCB0eCBjaGVja3N1bW1pbmc6ICVzXVxuJiMzNDssCkBAIC01ODIxLDYgJiM0Mzs2NjM4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9mcmVlX25hcGk6CiYjNDM7CXI4MTY5X2ZyZWVfbmFwaSh0cCk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSByODE2OSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgZm9yIHRoZSBgcjgxNjlgIG5ldHdvcmsgZHJpdmVyLiBJbnRyaWd1aW5nLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBzdWJzdGFudGlhbCBjaGFuZ2VzOiBSU1Mgc3VwcG9ydCBhbmQgbXVsdGlwbGUgUlggcXVldWVzLiBMb29raW5nIGF0IHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCB3aGljaCwgYXMgZXhwZWN0ZWQsIGlzIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgZm9yIFJlYWx0ZWsgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9naWMgcmVzaWRlcy4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc2lnbmlmaWNhbnQ7IGl0IGFkZHMgbXVsdGlwbGUgUlggcmluZ3MsIHdoaWNoIHN1Z2dlc3RzIGRlZXBlciBwYXJhbGxlbCBwcm9jZXNzaW5nIG9uIHRoZSByZWNlaXZlIHNpZGUuIE1TSS1YIHN1cHBvcnQgaXMgYWxzbyBhIGdvb2QgYWRkaXRpb24sIGluZGljYXRpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVycnVwdCBoYW5kbGluZy4gUlNTIGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhpcyBraW5kIG9mIHNldHVwOyBpdCBtZWFucyB3ZSBjYW4gZGlzdHJpYnV0ZSBpbmNvbWluZyB0cmFmZmljIGVmZmljaWVudGx5IGFjcm9zcyB0aG9zZSBuZXcgcXVldWVzLCBsZXZlcmFnaW5nIHRoZSBDUFUgY29yZXMgZWZmZWN0aXZlbHkuIEFuZCwgb2YgY291cnNlLCBOQVBJIGZvciBlYWNoIFJYIHF1ZXVlIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGluIHRoZXNlIG1vZGVybiBkcml2ZXJzLgoKVGhpcyBhbGwgcG9pbnRzIHRvIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcjgxNjlgIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHVzdWFsbHkgZW5hYmxlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfUjgxNjlgLiBUaW1lIHRvIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgZG91YmxlLWNoZWNrLCBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFI4MTY5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAyOmNvbmZpZyBSODE2OV9MRURTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTklDIExFRHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkxNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgUjgxNjkgRHJpdmVyOiBBIFBsYW4gb2YgQXR0YWNrKioKCk9rYXksIGBSODE2OWAuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gcmVhY2ggdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBRRU1VIGdpdmVzIG1lIGBydGw4MTM5YCwgYnV0IGRvZXMgaXQgc3VwcG9ydCB0aGUgUjgxNjkgc3BlY2lmaWNhbGx5LCBvciBwb3RlbnRpYWxseSBldmVuIGByODE2OGAgb3IgYHI4MTI1YD8gTm8sIFFFTVUgZG9lc24mIzM5O3QgbmF0aXZlbHkgZW11bGF0ZSBgcjgxNjlgLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBvZmZlciBhIHBhdGggdG8gZnV6eiBQQ0kgZGV2aWNlcy4gSXQgdXNlcyB0aGUgYHN5el9wY2lfZGV2aWNlYCBwc2V1ZG8tc3lzY2FsbCBvciB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uIFJpZ2h0LCBzeXprYWxsZXIgaGFzIFBDSSBmdXp6aW5nLiBHb29kLgoKYHI4MTY5YCBpcyBhIFBDSSBkcml2ZXIuIFRoYXQgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpXypgIHBzZXVkby1zeXNjYWxscywgb3IgYHZoY2lgIGlmIGl0IHdlcmUgVVNCLiBGb3IgUENJIHRob3VnaCwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCB1c2UgYHN5el9wY2lfZGV2aWNlYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbnN0cnVjdGlvbnMuIFRob3NlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCwgZG9lcyBzeXprYWxsZXIgZW11bGF0ZSBQQ0kgZGV2aWNlcz8gWWVzLCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIsIHdoaWNoIGluY2x1ZGVzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzaW1pbGFyIGNhbGxzLiBPciBgc3l6X3BjaV9idXNgLgoKU28sIGNhbiBJIHJlYWNoIGl0PyBZZXMsIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IFBDSSBkcml2ZXJzLiBJcyB0aGlzIGZ1enppbmcgZWZmb3J0IHdvcnRod2hpbGU/IEFic29sdXRlbHkuIEl0IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBpbnRlcmVzdGluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHdoZXJlIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9uczoKCiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgCiogICBgcnRsODE2OV9yZWFsbG9jX3J4YAoqICAgYHJ0bDgxNjlfZ2V0X2NoYW5uZWxzYAoqICAgYHI4MTY5X2luaXRfbmFwaWAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9yeGAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF90eGAKKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcmAKKiAgIGBydGw4MTY5X2ludGVycnVwdF9tc2l4YAoqICAgYHJ0bDgxNjlfcmVxdWVzdF9pcnFgCiogICBgcnRsODE2OV9mcmVlX2lycWAKKiAgIGBydGxfcnhgCiogICBgcnRsODE2OV9yeF9maWxsYAoqICAgYHJ0bDgxNjlfcnhfY2xlYXJgCiogICBgcnRsODE2OV9hbGxvY19yeF9kYXRhYAoqICAgYHJ0bDgxNjlfYWxsb2NfcnhfZGVzY2AKKiAgIGBydGw4MTY5X2ZyZWVfcnhfZGVzY2AKKiAgIGBydGw4MTY5X2luaXRfcmluZ2AKKiAgIGBydGw4MTY5X3J4X2Rlc2NfcmVzZXRgCiogICBgcnRsODE2OV9yeF9oYXNoYAoqICAgYHJ0bDgxNjlfcnhfY3N1bWAKKiAgIGBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3JgCiogICBgcnRsX3NldF9yc3NfY29uZmlnYAoqICAgYHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdGAKKiAgIGBydGw4MTY5X3N0b3JlX3JldGFgCiogICBgcnRsODE2OV9zdG9yZV9yc3Nfa2V5YAoqICAgYHJ0bF9zZXR1cF9yeF9wYXJhbXNgCiogICBgcnRsODE2OV9pbml0X3Jzc2AKKiAgIGBydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsYAoqICAgYHJ0bDgxMjVfc2V0X3J4X3FfbnVtYAoqICAgYHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nYAoqICAgYHJ0bF9od19zdGFydF84MTI1X2NvbW1vbmAKKiAgIGBydGxfaHdfc3RhcnRgCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAoqICAgYHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtYAoqICAgYHJ0bF9hbGxvY19pcnFgCiogICBgcnRsX2luaXRfb25lYAoqICAgYHJ0bF9yZW1vdmVfb25lYAoqICAgYHJ0bF9vcGVuYAoqICAgYHJ0bDgxNjlfY2xvc2VgCgpJIG5lZWQgdG8gcXVpY2tseSB3ZWVkIG91dCB0aGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHdhc3RpbmcgdGltZToKCiogICBgcnRsX3J4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3J4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3R4YAoqICAgYHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTY5X3NldF9jaGFubmVscyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz02MjM3PXN0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYyNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2Mjc0OnN0YXRpYyBpbnQgcnRsODE2OV9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYyNzUtXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjM2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjM3OS1cdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjYzODA6XHQuc2V0X2NoYW5uZWxzXHRcdD0gcnRsODE2OV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02MzgxLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MjAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogNTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHI4MTY5YCBkcml2ZXIsIHNwZWNpZmljYWxseSBSU1Mgc3VwcG9ydCwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggc3VwcG9ydC4gVGhpcyBpcyByaWdodCB1cCBTeXprYWxsZXImIzM5O3MgYWxsZXkg4oCTIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCkkmIzM5O20gdGhpbmtpbmcsIGdpdmVuIHRoZSBzY29wZSwgd2Ugc2hvdWxkIGVuYWJsZSBgQ09ORklHX1I4MTY5YC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRyaXZlciwgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgc28gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIGhhdmUgdG8gd29ycnkgYWJvdXQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjYXN0IGEgd2lkZSBuZXQsIHNvIEkgaGF2ZSBhIGxpc3Qgb2Ygc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbi4gQnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQsIHNvIEkmIzM5O2xsIHRyaW0gZG93biB0aGUgbGlzdCB0byB3aGF0JiMzOTtzIG1vc3QgY3J1Y2lhbDoKCiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgCiogICBgcnRsODE2OV9yZWFsbG9jX3J4YAoqICAgYHJ0bF9zZXRfcnNzX2NvbmZpZ2AKKiAgIGBydGw4MTY5X2luaXRfcnNzYAoqICAgYHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtYAoqICAgYHJ0bF9hbGxvY19pcnFgCiogICBgcnRsODE2OV9hbGxvY19yeF9kZXNjYAoqICAgYHJ0bDgxNjlfZnJlZV9yeF9kZXNjYAoqICAgYHI4MTY5X2luaXRfbmFwaWAKClRoZXNlIHNob3VsZCBjb3ZlciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBuZXcgUlNTIGFuZCBSWCBxdWV1ZSBmZWF0dXJlcy4gRm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9scywgSSBleHBlY3Qgd2UmIzM5O2xsIGdldCBnb29kIGNvdmVyYWdlIGFuZCBmaW5kIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgcXVpY2tseS4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfc2V0X2NoYW5uZWxzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcmVhbGxvY19yeCYjMzQ7LAogICAgJiMzNDtydGxfc2V0X3Jzc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pbml0X3JzcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9yeF9yaW5nX251bSYjMzQ7LAogICAgJiMzNDtydGxfYWxsb2NfaXJxJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfYWxsb2NfcnhfZGVzYyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2ZyZWVfcnhfZGVzYyYjMzQ7LAogICAgJiMzNDtyODE2OV9pbml0X25hcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVjZWl2ZSBTaWRlIFNjYWxpbmcgKFJTUyksIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIGludGVycnVwdHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb21wbGV4IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCBldGh0b29sIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE2OV9zZXRfY2hhbm5lbHMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9yZWFsbG9jX3J4JiMzNDssCiAgICAmIzM0O3J0bF9zZXRfcnNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2luaXRfcnNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X3J4X3JpbmdfbnVtJiMzNDssCiAgICAmIzM0O3J0bF9hbGxvY19pcnEmIzM0OywKICAgICYjMzQ7cnRsODE2OV9hbGxvY19yeF9kZXNjJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZnJlZV9yeF9kZXNjJiMzNDssCiAgICAmIzM0O3I4MTY5X2luaXRfbmFwaSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjQ2LjAzNDIzNzA3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5Njk4MjU5Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODE2OV9zZXRfY2hhbm5lbHNcIixcbiAgICBcInJ0bDgxNjlfcmVhbGxvY19yeFwiLFxuICAgIFwicnRsX3NldF9yc3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X2luaXRfcnNzXCIsXG4gICAgXCJydGw4MTY5X3NldF9yeF9yaW5nX251bVwiLFxuICAgIFwicnRsX2FsbG9jX2lycVwiLFxuICAgIFwicnRsODE2OV9hbGxvY19yeF9kZXNjXCIsXG4gICAgXCJydGw4MTY5X2ZyZWVfcnhfZGVzY1wiLFxuICAgIFwicjgxNjlfaW5pdF9uYXBpXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVjZWl2ZSBTaWRlIFNjYWxpbmcgKFJTUyksIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIGludGVycnVwdHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb21wbGV4IHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCBldGh0b29sIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjQ2LjAzNDI0NDMwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MDczNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjliYzczM2Y5ZjQxZWVlYWE1N2IzNjM4ZjU0YWE5MzgyZTY4NTdlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwNzozMDo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjkxOTRjMjE0MmY5NWQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtNzQsOSArNzQsMzMgQEBcXG4gI2RlZmluZSBOVU1fVFhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIE5VTV9SWF9ERVNDXFx0MjU2XFx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1xcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXFx0KE5VTV9SWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxcbitcXG4rLypcXG4rICogV29ya2Fyb3VuZCBmb3IgdGhlIGhhcmR3YXJlIERNQSBwcmVmZXRjaGVyLiBUaGUgSC9XIG1pZ2h0IGFnZ3Jlc3NpdmVseVxcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxcbisgKiBhbGxvY2F0ZSB0aGlzIGV4dHJhIGR1bW15IHNwYWNlIGFzIHBhZGRpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzXFxuKyAqIGFjY2VzcyBhbmQgcG90ZW50aWFsIElPTU1VIGZhdWx0cy5cXG4rICovXFxuKyNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdCgoTlVNX1JYX0RFU0MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcXHQoTUFYX1NLQl9GUkFHUyArIDEpXFxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1xcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxcbisjZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcXHQ4XFxuKyNkZWZpbmUgUjgxMjdfTUFYX1RYX1FVRVVFU1xcdDhcXG4rI2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFU1xcdDFcXG4rI2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXFx0MVxcbisjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXFx0MzJcXG4rI2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQ1xcdDMwXFxuKyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcXHQxXFxuKyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVxcdDQwXFxuKyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTS1xcdEdFTk1BU0soMTgsIDE2KVxcbisjZGVmaW5lIFJTU19IQVNIX01BU0tcXHRcXHRHRU5NQVNLKDEwLCA4KVxcbisjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcXG4rI2RlZmluZSBSWFNfUlNTX1VEUFxcdFxcdEJJVCgyNylcXG4rI2RlZmluZSBSWFNfUlNTX0lQVjRcXHRcXHRCSVQoMjgpXFxuKyNkZWZpbmUgUlhTX1JTU19JUFY2XFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIFJYU19SU1NfVENQXFx0XFx0QklUKDMwKVxcbisjZGVmaW5lIFJYU19SU1NfTDNfVFlQRV9NQVNLXFx0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcXG4rI2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1xcdChSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKVxcbiBcXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXFx0MHhhNDAwXFxuIFxcbkBAIC00NDEsMTEgKzQ2NSwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHtcXG4gXFx0VHhQb2xsXzgxMjVcXHRcXHQ9IDB4OTAsXFxuIFxcdExFRFNFTDNcXHRcXHRcXHQ9IDB4OTYsXFxuIFxcdE1BQzBfQktQXFx0XFx0PSAweDE5ZTAsXFxuK1xcdFJEU0FSX1ExX0xPV1xcdFxcdD0gMHg0MDAwLFxcbiBcXHRSU1NfQ1RSTF84MTI1XFx0XFx0PSAweDQ1MDAsXFxuIFxcdFFfTlVNX0NUUkxfODEyNVxcdFxcdD0gMHg0ODAwLFxcbiBcXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcXHQ9IDB4NjA0OCxcXG4rXFx0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXFx0PSAweDBkMDAsXFxuK1xcdElTUl9WRUNfTUFQX1JFR1xcdFxcdD0gMHgwZDA0LFxcbitcXHRJTVJfU0VUX1ZFQ19NQVBfUkVHXFx0PSAweDBkMGMsXFxuIH07XFxuIFxcbisjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHXFx0MjlcXG4gI2RlZmluZSBMRURTRUxfTUFTS184MTI1XFx0MHgyM2ZcXG4gXFxuICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1XFx0QklUKDIyKVxcbkBAIC01NzYsNiArNjA1LDIzIEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQge1xcbiBcXG4gXFx0LyogbWFnaWMgZW5hYmxlIHYyICovXFxuIFxcdE1hZ2ljUGFja2V0X3YyXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksXFx0LyogV2FrZSB1cCB3aGVuIHJlY2VpdmVzIGEgTWFnaWMgUGFja2V0ICovXFxuKyNkZWZpbmVcXHRJU1JJTVJfTElOS0NIR1xcdEJJVCgyOSlcXG4rI2RlZmluZVxcdElTUklNUl9UT0tfUTBcXHRCSVQoOClcXG4rI2RlZmluZVxcdElTUklNUl9ST0tfUTBcXHRCSVQoMClcXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkxcXHRcXHQweGQ4XFxuKyNkZWZpbmUgUlNTX0tFWV9SRUdcXHRcXHRcXHQweDQ2MDBcXG4rI2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFR1xcdFxcdDB4NDcwMFxcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX1JTU1xcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X1NVUFBcXHRcXHRCSVQoMylcXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcXHRCSVQoNSlcXG4rI2RlZmluZVxcdFJYX1JFU19SU1NcXHRcXHRcXHRCSVQoMjIpXFxuKyNkZWZpbmVcXHRSWF9SVU5UX1JTU1xcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZVxcdFJYX0NSQ19SU1NcXHRcXHRcXHRCSVQoMjApXFxuKyNkZWZpbmUgUlRMX1JYX1FfTlVNX01BU0tcXHRcXHRHRU5NQVNLKDQsIDIpXFxuIH07XFxuIFxcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XFxuQEAgLTYzMyw2ICs2NzksMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xcbiAjZGVmaW5lIFJ4UHJvdG9JUFxcdChQSUQxIHwgUElEMClcXG4gI2RlZmluZSBSeFByb3RvTWFza1xcdFJ4UHJvdG9JUFxcbiBcXG4rI2RlZmluZVxcdFJYX1VEUFRfREVTQ19SU1NcXHRCSVQoMTkpXFxuKyNkZWZpbmVcXHRSWF9UQ1BUX0RFU0NfUlNTXFx0QklUKDE4KVxcbisjZGVmaW5lXFx0UlhfVURQRl9ERVNDX1JTU1xcdEJJVCgxNikgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbisjZGVmaW5lXFx0UlhfVENQRl9ERVNDX1JTU1xcdEJJVCgxNSkgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbitcXG4gXFx0SVBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksIC8qIElQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbiBcXHRVRFBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cXG4gXFx0VENQRmFpbFxcdFxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpLCAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXFxuQEAgLTY1NCw5ICs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgUnhEZXNjIHtcXG4tXFx0X19sZTMyIG9wdHMxO1xcbi1cXHRfX2xlMzIgb3B0czI7XFxuLVxcdF9fbGU2NCBhZGRyO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9ERUZBVUxUICovXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdF9fbGUzMiBvcHRzMTtcXG4rXFx0XFx0XFx0X19sZTMyIG9wdHMyO1xcbitcXHRcXHRcXHRfX2xlNjQgYWRkcjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRfX2xlNjQgcnNzX2FkZHI7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdFxcdFxcdF9fbGUzMiByc3NfaW5mbztcXG4rXFx0XFx0XFx0XFx0XFx0X19sZTMyIHJzc19yZXN1bHQ7XFxuK1xcdFxcdFxcdFxcdH0gcnNzX2R3b3JkO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMyO1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMxO1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gc3RydWN0IHJpbmdfaW5mbyB7XFxuQEAgLTcyOCwyNyArNzk3LDQ5IEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSByeF9kZXNjX3R5cGUge1xcbitcXHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcXG4rXFx0UlhfREVTQ19UWVBFX1JTUyxcXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbitcXHR1MzIgaW5kZXg7XFx0XFx0XFx0XFx0XFx0LyogUnggcXVldWUgaW5kZXggKi9cXG4rXFx0dTMyIGN1cl9yeDtcXHRcXHRcXHRcXHRcXHQvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4rXFx0dTMyIGRpcnR5X3J4O1xcdFxcdFxcdFxcdFxcdC8qIEluZGV4IGZvciByZWN5Y2xpbmcuICovXFxuK1xcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XFx0XFx0XFx0LyogYXJyYXkgb2YgUnggRGVzYyovXFxuK1xcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XFx0LyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi9cXG4rXFx0ZG1hX2FkZHJfdCByeF9waHlfYWRkcjtcXHRcXHRcXHRcXHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4rXFx0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcXHRcXHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcXG4rXFx0dTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTtcXG4rXFx0dTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdO1xcbitcXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcztcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuLVxcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xcbiBcXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xcbiBcXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xcbi1cXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG4gXFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XFx0LyogMjU2LWFsaWduZWQgVHggZGVzY3JpcHRvciByaW5nICovXFxuLVxcdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1xcdC8qIDI1Ni1hbGlnbmVkIFJ4IGRlc2NyaXB0b3IgcmluZyAqL1xcbiBcXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcXG4tXFx0ZG1hX2FkZHJfdCBSeFBoeUFkZHI7XFxuLVxcdHN0cnVjdCBwYWdlICpSeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XFx0LyogUnggZGF0YSBidWZmZXJzICovXFxuIFxcdHN0cnVjdCByaW5nX2luZm8gdHhfc2tiW05VTV9UWF9ERVNDXTtcXHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpydGw4MTY5X25hcGk7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTtcXG4rXFx0dW5zaWduZWQgaW50IG51bV9yeF9yaW5ncztcXG4gXFx0dTE2IGNwX2NtZDtcXG4gXFx0dTE2IHR4X2xwaV90aW1lcjtcXG4gXFx0dTMyIGlycV9tYXNrO1xcbi1cXHRpbnQgaXJxO1xcbitcXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSAqcnNzX2RhdGE7XFxuK1xcdHVuc2lnbmVkIGludCBpcnFfbnZlY3M7XFxuK1xcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuIFxcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0xNTc4LDYgKzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cmV0dXJuIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuQEAgLTE2NDQsMjYgKzE3NDAsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9hY2tfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgYml0cylcXG4ge1xcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbi1cXHRcXHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIGJpdHMpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdFJUTF9XMTYodHAsIEludHJTdGF0dXMsIGJpdHMpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbi1cXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIHRwLVxcdTAwM2VpcnFfbWFzayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0xODY3LDkgKzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VvcHRzMik7XFxuK1xcdHUzMiBvcHRzMjtcXG4rXFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3Nfb3B0czIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0b3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VvcHRzMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAob3B0czIgXFx1MDAyNiBSeFZsYW5UYWcpXFxuIFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcXHUwMDI2IDB4ZmZmZikpO1xcbkBAIC0yNDE2LDM0ICsyNTM1LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4tXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4tXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXFxuLVxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcXG4tXFx0LmdldF9yZWdzX2xlblxcdFxcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXFxuLVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4tXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gcnRsX2dldF9jb2FsZXNjZSxcXG4tXFx0LnNldF9jb2FsZXNjZVxcdFxcdD0gcnRsX3NldF9jb2FsZXNjZSxcXG4tXFx0LmdldF9yZWdzXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzLFxcbi1cXHQuZ2V0X3dvbFxcdFxcdD0gcnRsODE2OV9nZXRfd29sLFxcbi1cXHQuc2V0X3dvbFxcdFxcdD0gcnRsODE2OV9zZXRfd29sLFxcbi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXFxuLVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4tXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbi1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLVxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbi1cXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbi1cXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbi1cXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuLVxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbi1cXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbi1cXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG4tXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxcbi1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXFxuLVxcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcXG4tXFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuLX07XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpXFxuIHtcXG4gXFx0LyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqL1xcbkBAIC0yNjE5LDkgKzI3MTAsMjcgQEAgc3RhdGljIHZvaWQgcnRsX2luaXRfcnhjZmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdG1lbXNldChyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5LCAweDAsIFI4MTY5X1JYX1JJTkdfQllURVMpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dHAtXFx1MDAzZWRpcnR5X3R4ID0gdHAtXFx1MDAzZWN1cl90eCA9IHRwLVxcdTAwM2VjdXJfcnggPSAwO1xcbitcXHR0cC1cXHUwMDNlZGlydHlfdHggPSAwO1xcbitcXHR0cC1cXHUwMDNlY3VyX3R4ID0gMDtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRyaW5nLVxcdTAwM2VkaXJ0eV9yeCA9IDA7XFxuK1xcdFxcdHJpbmctXFx1MDAzZWN1cl9yeCA9IDA7XFxuK1xcdFxcdHJpbmctXFx1MDAzZWluZGV4ID0gaTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0yNjgwLDYgKzI3ODksMzQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2luZGlyX3RibChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yeF9yaW5ncylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxcbitcXHRcXHR0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBudW1fcnhfcmluZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpO1xcbitcXHRuZXRkZXZfcnNzX2tleV9maWxsKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dHAtXFx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcXG4rXFx0XFx0dHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XFxuK1xcdFxcdHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0dHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX0RFRkFVTFQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN0cnVjdCBydGxfZncgKnJ0bF9mdztcXG5AQCAtMjgwMiw4ICsyOTM5LDYzIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMTYodHAsIFJ4TWF4U2l6ZSwgUjgxNjlfUlhfQlVGX1NJWkUgKyAxKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHUzMiBudW1fZW50cmllcyA9IFJUTF9SU1NfS0VZX1NJWkUgLyBzaXplb2YodTMyKTtcXG4rXFx0dTMyICpyc3Nfa2V5ID0gdHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vyc3Nfa2V5O1xcbitcXHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcXG4rXFxuK1xcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX2VudHJpZXM7IGkrKylcXG4rXFx0XFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgKyAoaSAqIDQpLCByc3Nfa2V5W2ldKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHU4ICppbmRpcl90YmwgPSB0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90Ymw7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSArPSA0KSB7XFxuK1xcdFxcdHUzMiByZXRhID0gKHUzMilpbmRpcl90YmxbaV0gfFxcbitcXHRcXHRcXHQgICAodTMyKWluZGlyX3RibFtpICsgMV0gXFx1MDAzY1xcdTAwM2MgOCB8XFxuK1xcdFxcdFxcdCAgICh1MzIpaW5kaXJfdGJsW2kgKyAyXSBcXHUwMDNjXFx1MDAzYyAxNiB8XFxuK1xcdFxcdFxcdCAgICh1MzIpaW5kaXJfdGJsW2kgKyAzXSBcXHUwMDNjXFx1MDAzYyAyNDtcXG4rXFx0XFx0UlRMX1czMih0cCwgUlNTX0lORElSRUNUSU9OX1RCTF9SRUcgKyBpLCByZXRhKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTMyIHJzc19jdHJsO1xcbitcXG4rXFx0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpKTtcXG4rXFxuK1xcdC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi9cXG4rXFx0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxcbitcXHRcXHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcXG4rXFx0XFx0IHwgUlNTX0NUUkxfSVBWNl9TVVBQXFxuK1xcdFxcdCB8IFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcXG4rXFx0XFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxcbitcXHRcXHQgfCBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUDtcXG4rXFxuK1xcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgIGlsb2cyKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xcbitcXG4rXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yZXRhKHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcXG4gXFx0ICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLlxcbkBAIC0yODExLDggKzMwMDMsMTYgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICovXFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cXHUwMDNlVHhQaHlBZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckxvdywgKCh1NjQpIHRwLVxcdTAwM2VUeFBoeUFkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuLVxcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbi1cXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSByaW5nLVxcdTAwM2VyeF9waHlfYWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbitcXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgcmluZy1cXHUwMDNlcnhfcGh5X2FkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICsgKGkgLSAxKSAqIDg7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRSVExfVzMyKHRwLCByZHNhcl9yZWcgKyA0LCAoKHU2NClyaW5nLVxcdTAwM2VyeF9waHlfYWRkciBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRcXHRSVExfVzMyKHRwLCByZHNhcl9yZWcsICgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5AQCAtMzg1OCw2ICs0MDU4LDI3IEBAIERFQ0xBUkVfUlRMX0NPTkQocnRsX21hY19vY3BfZTAwZV9jb25kKVxcbiBcXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpIFxcdTAwMjYgQklUKDEzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODEyNV9zZXRfcnhfcV9udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTE2IHJ4X3FfbnVtO1xcbitcXHR1MTYgcV9jdHJsO1xcbitcXG4rXFx0cnhfcV9udW0gPSBpbG9nMih0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcXG4rXFx0cV9jdHJsIFxcdTAwMjY9IH5SVExfUlhfUV9OVU1fTUFTSztcXG4rXFx0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcXG4rXFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCBxX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR1OCB0bXA7XFxuK1xcbitcXHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xcbitcXHR0bXAgfD0gSU5UX0NGRzBfRU5BQkxFXzgxMjU7XFxuK1xcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuQEAgLTM4NjYsNiArNDA4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XFxuIFxcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgMCk7XFxuIFxcbitcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTtcXG4rXFxuIFxcdC8qIGRpc2FibGUgVVBTICovXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcXG4gXFxuQEAgLTM4ODUsNiArNDEwOSwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdCAgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4gXFx0XFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFxcdTAwMjYgfjB4MDIpO1xcbiBcXG4rXFx0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cXG4rXFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTtcXG4rXFx0XFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXFxuK1xcdFxcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xcbiBcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcXG5AQCAtNDEyMSw2ICs0MzUyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xcbiBcXHRydGxfc2V0X3J4X21heF9zaXplKHRwKTtcXG4gXFx0cnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7XFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRydGxfc2V0X3Jzc19jb25maWcodHApO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDB4MDApO1xcbitcXHR9XFxuIFxcdHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTtcXG4gXFxuIFxcdHJ0bF9qdW1ib19jb25maWcodHApO1xcbkBAIC00MTQ4LDE5ICs0Mzg1LDMyIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXFxuIHtcXG4tXFx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdHUzMiBlb3I7XFxuIFxcbi1cXHRkZXNjLVxcdTAwM2VvcHRzMiA9IDA7XFxuLVxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuLVxcdGRtYV93bWIoKTtcXG4tXFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnNzX29wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xcbitcXHRcXHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xcbitcXHRcXHRkbWFfd21iKCk7XFxuK1xcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMxKSBcXHUwMDI2IFJpbmdFbmQ7XFxuK1xcdFxcdGRlc2MtXFx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuK1xcdFxcdGRtYV93bWIoKTtcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxcbiB7XFxuK1xcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ICsgaW5kZXg7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xcbiBcXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGQpO1xcbiBcXHRkbWFfYWRkcl90IG1hcHBpbmc7XFxuQEAgLTQxNzcsNTYgKzQ0MjcsMTI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0ZGVzYy1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xcbi1cXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcXG4rXFx0cmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xcbitcXHRpZiAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xcbitcXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XFxuIFxcbiBcXHRyZXR1cm4gZGF0YTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHQgICAgIGVudW0gcnhfZGVzY190eXBlIGRlc2NfdHlwZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQyBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlUnhfZGF0YWJ1ZmZbaV07IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0MgXFx1MDAyNlxcdTAwMjYgcmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV07IGkrKykge1xcbiBcXHRcXHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxcbi1cXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUodHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIpLFxcbitcXHRcXHRcXHQgICAgICAgcmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcXG4gXFx0XFx0XFx0ICAgICAgIFI4MTY5X1JYX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXHRcXHRfX2ZyZWVfcGFnZXModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIgPSAwO1xcbi1cXHRcXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXlbaV0ub3B0czEgPSAwO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZltpXSA9IE5VTEw7XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0gPSAwO1xcbitcXHRcXHRpZiAoZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpIHtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3NfYWRkciA9IDA7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5hZGRyID0gMDtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtpXS5vcHRzMSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX29wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQzsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpkYXRhO1xcbiBcXG4tXFx0XFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXFx1MDAzZVJ4RGVzY0FycmF5ICsgaSk7XFxuK1xcdFxcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHJpbmcsIGkpO1xcbiBcXHRcXHRpZiAoIWRhdGEpIHtcXG4tXFx0XFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XFxuK1xcdFxcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSA9IGRhdGE7XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldID0gZGF0YTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XFxuK1xcdHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsIFxcdTAwMjZyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9hbGxvY19yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHRpZiAocmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSkge1xcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIFI4MTY5X1JYX1JJTkdfQllURVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSxcXG4rXFx0XFx0XFx0XFx0XFx0ICByaW5nLVxcdTAwM2VyeF9waHlfYWRkcik7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4gXFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XFxuK1xcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcXG4gXFxuIFxcdG1lbXNldCh0cC1cXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXFx1MDAzZXR4X3NrYikpO1xcbi1cXHRtZW1zZXQodHAtXFx1MDAzZVJ4X2RhdGFidWZmLCAwLCBzaXplb2YodHAtXFx1MDAzZVJ4X2RhdGFidWZmKSk7XFxuIFxcbi1cXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmLCAwLCBzaXplb2YocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcXG4rXFx0XFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2NsZWFyO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2NsZWFyOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSwgdHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcXG5AQCAtNDI2Niw5ICs0NTg5LDIxIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdG5hcGlfZGlzYWJsZShcXHUwMDI2dHAtXFx1MDAzZW5hcGkpO1xcbitcXHRydGw4MTY5X25hcGlfZGlzYWJsZSh0cCk7XFxuIFxcbiBcXHQvKiBHaXZlIGEgcmFjaW5nIGhhcmRfc3RhcnRfeG1pdCBhIGZldyBjeWNsZXMgdG8gY29tcGxldGUuICovXFxuIFxcdHN5bmNocm9uaXplX25ldCgpO1xcbkBAIC00MzAzLDE4ICs0NjM4LDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRmb3IgKGludCBqID0gMDsgaiBcXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcXG4rXFx0XFx0XFx0ZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XFxuK1xcbitcXHRcXHRcXHRpZiAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXFxuK1xcdFxcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XFxuK1xcdFxcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5ICsgaik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuIFxcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0cnRsODE2OV9jbGVhbnVwKHRwKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fUlhfREVTQzsgaSsrKVxcbi1cXHRcXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcXG4rXFx0cnRsODE2OV9yeF9kZXNjX3Jlc2V0KHRwKTtcXG4gXFxuLVxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xcbiBcXHRydGxfaHdfc3RhcnQodHApO1xcbiB9XFxuIFxcbkBAIC00NzU4LDMwICs1MTA1LDEwNCBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cylcXG4gXFx0cmV0dXJuIChzdGF0dXMgXFx1MDAyNiAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSlcXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR1MzIgc3RhdHVzID0gb3B0czEgXFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xcbitcXHR1MzIgcnNzX2hlYWRlcl9pbmZvO1xcbitcXHR1MzIgaGFzaF92YWw7XFxuK1xcbitcXHRpZiAoISh0cC1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnNzX2R3b3JkLnJzc19pbmZvKTtcXG4rXFxuK1xcdGlmICghKHJzc19oZWFkZXJfaW5mbyBcXHUwMDI2IFJYU19SU1NfTDNfVFlQRV9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGFzaF92YWwgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XFxuK1xcbitcXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcXG4rXFx0XFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXFx1MDAyNiByc3NfaGVhZGVyX2luZm8pID9cXG4rXFx0XFx0ICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBvcHRzMSlcXG4re1xcbitcXHRib29sIGNzdW1fb2sgPSBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKCgob3B0czEgXFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcXHUwMDI2XFx1MDAyNiAhKG9wdHMxIFxcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XFxuK1xcdFxcdCAgICAoKG9wdHMxIFxcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXFx1MDAyNlxcdTAwMjYgIShvcHRzMSBcXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcXG4rXFx0XFx0XFx0Y3N1bV9vayA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAob3B0czEgPT0gUnhQcm90b1RDUCB8fCBvcHRzMSA9PSBSeFByb3RvVURQKVxcbitcXHRcXHRcXHRjc3VtX29rID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0aWYgKGNzdW1fb2spXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxcbitzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVxcdTAwM2VvcHRzMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHN0YXR1cyBcXHUwMDI2IFJYX1JFU19SU1MpKSB7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9SVU5UX1JTUylcXG4rXFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9DUkNfUlNTKVxcbitcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuK1xcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhDUkMpXFxuK1xcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIGludCBidWRnZXQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4tXFx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFxcdTAwM2MgYnVkZ2V0OyBjb3VudCsrLCB0cC1cXHUwMDNlY3VyX3J4KyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHRwLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4tXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGVudHJ5O1xcbitcXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHJpbmctXFx1MDAzZWN1cl9yeCsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4rXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBlbnRyeTtcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0XFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xcbiBcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlb3B0czEpKTtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XFxuIFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBEZXNjT3duKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ3OTEsMTkgKzUyMTIsMTYgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRtYV9ybWIoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XFxuIFxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuIFxcdFxcdFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIlJ4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RhdHVzKTtcXG4gXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuLVxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhDUkMpXFxuLVxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhBTEwpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4tXFx0XFx0XFx0ZWxzZSBpZiAoc3RhdHVzIFxcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcXG4rXFx0XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgdHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNDgyMCwxNCArNTIzOCwxNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2tiID0gbmFwaV9hbGxvY19za2IoXFx1MDAyNnRwLVxcdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XFxuK1xcdFxcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuIFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuK1xcdFxcdGFkZHIgPSByaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XTtcXG4rXFx0XFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuIFxcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFx0XFx0cHJlZmV0Y2gocnhfYnVmKTtcXG5AQCAtNDgzNiwxOSArNTI1NCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRza2ItXFx1MDAzZWxlbiA9IHBrdF9zaXplO1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xcbitcXHRcXHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcXG4rXFx0XFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcXG4gXFxuIFxcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpXFxuIFxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XFxuIFxcbi1cXHRcXHRuYXBpX2dyb19yZWNlaXZlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSwgc2tiKTtcXG4rXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xcbiBcXG4gXFx0XFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcXG4gcmVsZWFzZV9kZXNjcmlwdG9yOlxcbi1cXHRcXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxcbitcXHRcXHRcXHRkZXNjLVxcdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcXG4rXFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gY291bnQ7XFxuQEAgLTQ4NTYsOCArNTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXG4gc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTtcXG4tXFx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0dTMyIHN0YXR1cztcXG4rXFxuK1xcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cXHUwMDNlZGV2KTtcXG4rXFx0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xcbiBcXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAyNiAweGZmZmYpID09IDB4ZmZmZiB8fCAhKHN0YXR1cyBcXHUwMDI2IHRwLVxcdTAwM2VpcnFfbWFzaykpXFxuIFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG5AQCAtNDg3MywxMyArNTI5OSw4NiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRwaHlfbWFjX2ludGVycnVwdCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuLVxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0bmFwaV9zY2hlZHVsZShuYXBpKTtcXG4gb3V0OlxcbiBcXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcXG4rXFxuK1xcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgbmFwaSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdGlmIChtZXNzYWdlX2lkID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKSB7XFxuK1xcdFxcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcXG4rXFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fVxcbitcXG4rXFx0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcXG4rXFx0cnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpO1xcbitcXG4rXFx0bmFwaV9zY2hlZHVsZShuYXBpKTtcXG4rXFxuK1xcdHJldHVybiBJUlFfSEFORExFRDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XFxuK1xcdGludCBpLCByYztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcXG4rXFx0XFx0bmFwaSA9IFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdF9tc2l4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwsIG5hcGksIFxcXCIlcy0lZFxcXCIsIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXFx1MDAzZXBjaV9kZXYsIGksIHJ0bDgxNjlfaW50ZXJydXB0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwsIG5hcGksIFxcXCIlcy0lZFxcXCIsIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Z290byBmcmVlX2lycTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfaXJxOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XFxuQEAgLTQ5MTQsMTMgKzU0MTMsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiB7XFxuLVxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXFx1MDAzZWRldjtcXG4tXFx0aW50IHdvcmtfZG9uZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuYXBpLVxcdTAwM2VkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRpbnQgd29ya19kb25lID0gMDtcXG4gXFxuIFxcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xcbiBcXG4tXFx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XFxuK1xcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXFxuK1xcdHdvcmtfZG9uZSA9IHJ0bF9yeChkZXYsIHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7XFxuIFxcbiBcXHRpZiAod29ya19kb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxcbiBcXHRcXHRydGxfaXJxX2VuYWJsZSh0cCk7XFxuQEAgLTUwMzUsNyArNTUzNSw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4tXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XFxuIFxcdGVuYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuIFxcdHJ0bF9yZXNldF93b3JrKHRwKTtcXG4gXFxuQEAgLTUwNTEsMTggKzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuLVxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKylcXG4rXFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldLCB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xcbiBcXG4tXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcXG4gXFxuIFxcdHBoeV9kaXNjb25uZWN0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG4tXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbi1cXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuLVxcdHRwLVxcdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XFxuK1xcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcXG4gXFxuIFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC01MDc0LDcgKzU1NzMsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXFx1MDAzZXBjaV9kZXYsIGkpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVxcdTAwM2VwY2lfZGV2LCBpKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdH1cXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTUwODIsNyArNTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXFx1MDAzZXBjaV9kZXY7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XFxuIFxcdGludCByZXR2YWwgPSAtRU5PTUVNO1xcbiBcXG4gXFx0cG1fcnVudGltZV9nZXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG5AQCAtNTA5NiwxMCArNTYwMSw4IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKCF0cC1cXHUwMDNlVHhEZXNjQXJyYXkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRwLVxcdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIXRwLVxcdTAwM2VSeERlc2NBcnJheSlcXG4tXFx0XFx0Z290byBlcnJfZnJlZV90eF8wO1xcbitcXHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcXG4gXFxuIFxcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuQEAgLTUxMDcsOCArNTYxMCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTtcXG4gXFxuLVxcdGlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7XFxuLVxcdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVxcdTAwM2VpcnEsIHJ0bDgxNjlfaW50ZXJydXB0LCBpcnFmbGFncywgZGV2LVxcdTAwM2VuYW1lLCB0cCk7XFxuK1xcdHJldHZhbCA9IHJ0bDgxNjlfcmVxdWVzdF9pcnEodHApO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xcbiBcXG5AQCAtNTEyNSwxNSArNTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiByZXR2YWw7XFxuIFxcbiBlcnJfZnJlZV9pcnE6XFxuLVxcdGZyZWVfaXJxKHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4rXFx0cnRsODE2OV9mcmVlX2lycSh0cCk7XFxuIGVycl9yZWxlYXNlX2Z3XzI6XFxuIFxcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcXG4tXFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0sIHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XFxuIGVycl9mcmVlX3J4XzE6XFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4tXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4tZXJyX2ZyZWVfdHhfMDpcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuQEAgLTUyNzUsNiArNTc3NSwxNCBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlaXJxX252ZWNzOyBpKyspXFxuK1xcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFxuK1xcdGtmcmVlKHRwLVxcdTAwM2VydGw4MTY5X25hcGkpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5AQCAtNTI4OSw2ICs1Nzk3LDggQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cXHUwMDNlZGV2KTtcXG4gXFxuK1xcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XFxuK1xcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG4gXFxuQEAgLTUzMjAsMTUgKzU4MzAsNDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dHAtXFx1MDAzZWlycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZztcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IElTUklNUl9MSU5LQ0hHIHwgSVNSSU1SX1RPS19RMDtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwIFxcdTAwM2NcXHUwMDNjIGk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXFxuLVxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X21heF9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XFxuK1xcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBnZXRfbWluX2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuK1xcdFxcdHJldHVybiBSODEyN19NSU5fTlVNX0lSUVZFQztcXG4rXFx0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHJzc19xdWV1ZV9udW0gPSBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpO1xcbitcXG4rXFx0XFx0dHAtXFx1MDAzZW51bV9yeF9yaW5ncyA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKG1pbihyc3NfcXVldWVfbnVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcykpO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlPSAyKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsX2FsbG9jX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVxcdTAwM2VwY2lfZGV2O1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuK1xcdGludCBudmVjcztcXG4gXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcXG5AQCAtNTM0NCw3ICs1ODg4LDE3IEBAIHN0YXRpYyBpbnQgcnRsX2FsbG9jX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXFx1MDAzZXBjaV9kZXYsIDEsIDEsIGZsYWdzKTtcXG4rXFx0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgZ2V0X21pbl9pcnFfbnZlY3ModHApLCBnZXRfbWF4X2lycV9udmVjcyh0cCksIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChudmVjcyBcXHUwMDNjIDApXFxuK1xcdFxcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcXG4rXFxuK1xcdGlmIChudmVjcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBudmVjcztcXG4rXFxuK1xcdHRwLVxcdTAwM2VpcnFfbnZlY3MgPSBudmVjcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG5AQCAtNTU5OSw2ICs2MTUzLDI0MSBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xcbitcXHRpbnQgd29ya19kb25lID0gMDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdGlmIChtZXNzYWdlX2lkIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5ncylcXG4rXFx0XFx0d29ya19kb25lICs9IHJ0bF9yeChkZXYsIHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbbWVzc2FnZV9pZF0sIGJ1ZGdldCwgbmFwaSk7XFxuK1xcbitcXHRpZiAod29ya19kb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxcbitcXHRcXHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XFxuK1xcbitcXHRyZXR1cm4gd29ya19kb25lO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFxuK1xcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xcbitcXG4rXFx0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcXG4rXFx0XFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cXHUwMDNlcnRsODE2OV9uYXBpKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9vdGhlcihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAobmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIDApKVxcbitcXHRcXHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgKGludCkobmFwaSAtIHRwLVxcdTAwM2VydGw4MTY5X25hcGkpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XFxuKyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXFx0XFx0OiBSeCBRdWV1ZXNcXG4rICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICsgVHhRcyAtIDEpXFx0OiBUeCBRdWV1ZXNcXG4rICogVmVjdG9yIChSeFFzICsgVHhRcykgYW5kIHVwXFx0XFx0OiBPdGhlciBldmVudHMgKExpbmsgc3RhdHVzKDI5KSwgZXRjLilcXG4rICovXFxuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRpbnQgKCpwb2xsX2ZuKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSA9IHJ0bDgxNjlfcG9sbDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMpXFxuK1xcdFxcdFxcdFxcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMgKyBSODEyN19NQVhfVFhfUVVFVUVTKVxcbitcXHRcXHRcXHRcXHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyO1xcbitcXHRcXHR9XFxuK1xcdFxcdG5ldGlmX25hcGlfYWRkKHRwLVxcdTAwM2VkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VtYXhfcnggPSB0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRjaC1cXHUwMDNlbWF4X3R4ID0gMTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VyeF9jb3VudCA9IHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7XFxuK1xcdGNoLVxcdTAwM2V0eF9jb3VudCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpuZXdfcngsXFxuK1xcdFxcdFxcdCAgICAgIGludCBuZXdfY291bnQpXFxuK3tcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZXdfY291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNm5ld19yeFtpXTtcXG4rXFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnRwLVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghcmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZW1zZXQocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZikpO1xcbitcXHRcXHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZ0cC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXksIHJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdHdoaWxlICgtLWkgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2bmV3X3J4W2ldLCB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xcbitcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2dHAtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4rXFx0XFx0XFx0XFx0ICBuZXdfcnhbaV0ucnhfZGVzY19hcnJheSwgbmV3X3J4W2ldLnJ4X3BoeV9hZGRyKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgb2xkX3J4X2Rlc2NfdHlwZTtcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgbmV3X2Rlc2NfdHlwZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0aWYgKGNoLVxcdTAwM2VyeF9jb3VudCA9PSB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG9sZF9yeF9kZXNjX3R5cGUgPSB0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGU7XFxuK1xcbitcXHRpZiAoIXJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiVGhpcyBjaGlwIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5lbHMvUlNTLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNoLVxcdTAwM2VyeF9jb3VudCBcXHUwMDNlIHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgfHwgIWlzX3Bvd2VyX29mXzIoY2gtXFx1MDAzZXJ4X2NvdW50KSB8fFxcbitcXHQgICAgdHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNjIGdldF9taW5faXJxX252ZWNzKHRwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRuZXdfZGVzY190eXBlID0gY2gtXFx1MDAzZXJ4X2NvdW50IFxcdTAwM2UgMSA/IFJYX0RFU0NfVFlQRV9SU1MgOiBSWF9ERVNDX1RZUEVfREVGQVVMVDtcXG4rXFxuK1xcdGlmICghaWZfcnVubmluZykge1xcbitcXHRcXHRyZXQgPSBuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGRldiwgY2gtXFx1MDAzZXJ4X2NvdW50KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgPSBjaC1cXHUwMDNlcnhfY291bnQ7XFxuK1xcdFxcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG5ld19kZXNjX3R5cGU7XFxuK1xcbitcXHRcXHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0XFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRuZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XFxuK1xcdGlmICghbmV3X3J4KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4rXFx0cnRsODE2OV9kb3duKHRwKTtcXG4rXFxuK1xcdHJldCA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBjaC1cXHUwMDNlcnhfY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl91cDtcXG4rXFxuK1xcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG5ld19kZXNjX3R5cGU7XFxuK1xcbitcXHRyZXQgPSBydGw4MTY5X3JlYWxsb2NfcngodHAsIG5ld19yeCwgY2gtXFx1MDAzZXJ4X2NvdW50KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xcbitcXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXFx1MDAzZXJ4X2NvdW50O1xcbitcXG4rXFx0bWVtc2V0KHRwLVxcdTAwM2VyeF9yaW5nLCAwLCBzaXplb2YodHAtXFx1MDAzZXJ4X3JpbmcpKTtcXG4rXFx0bWVtY3B5KHRwLVxcdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVxcdTAwM2VyeF9jb3VudCk7XFxuK1xcbitcXHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuK1xcbitcXHRydGw4MTY5X3VwKHRwKTtcXG4rXFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcXG4rXFxuK1xcdGtmcmVlKG5ld19yeCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXNldDpcXG4rXFx0aWYgKG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKSlcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmV2ZXJ0IHJ4X3F1ZXVlcywgc3RhdGUgbWlnaHQgYmUgaW5jb25zaXN0ZW50IVxcXFxuXFxcIik7XFxuK1xcdHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IG9sZF9yeF9kZXNjX3R5cGU7XFxuK2Vycl91cDpcXG4rXFx0cnRsODE2OV91cCh0cCk7XFxuK1xcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuK1xcdGtmcmVlKG5ld19yeCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuK1xcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuK1xcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxcbitcXHQuZ2V0X2RydmluZm9cXHRcXHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXFxuK1xcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxcbitcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuK1xcdC5nZXRfY29hbGVzY2VcXHRcXHQ9IHJ0bF9nZXRfY29hbGVzY2UsXFxuK1xcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IHJ0bF9zZXRfY29hbGVzY2UsXFxuK1xcdC5nZXRfcmVnc1xcdFxcdD0gcnRsODE2OV9nZXRfcmVncyxcXG4rXFx0LmdldF93b2xcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcXG4rXFx0LnNldF93b2xcXHRcXHQ9IHJ0bDgxNjlfc2V0X3dvbCxcXG4rXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxcbitcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcXG4rXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbitcXHQubndheV9yZXNldFxcdFxcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcXG4rXFx0LmdldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcXG4rXFx0LnNldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfc2V0X2VlZSxcXG4rXFx0LmdldF9jaGFubmVsc1xcdFxcdD0gcnRsODE2OV9nZXRfY2hhbm5lbHMsXFxuK1xcdC5zZXRfY2hhbm5lbHNcXHRcXHQ9IHJ0bDgxNjlfc2V0X2NoYW5uZWxzLFxcbitcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbitcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxcbitcXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXFxuK1xcdC5nZXRfZXRoX21hY19zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcXG4rXFx0LmdldF9ldGhfY3RybF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTYwOSw3ICs2Mzk4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR1MzIgdHhjb25maWc7XFxuIFxcdHUzMiB4aWQ7XFxuIFxcbi1cXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZiAoKnRwKSk7XFxuK1xcdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHApLFxcbitcXHRcXHRcXHRcXHQgICAgICBSODE2OV9NQVhfVFhfUVVFVUVTLFxcbitcXHRcXHRcXHRcXHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcXG4rXFxuIFxcdGlmICghZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTU2ODksNiArNjQ4MSwxMiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0dHAtXFx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcXG4gXFx0dHAtXFx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkpIHtcXG4rXFx0XFx0dHAtXFx1MDAzZXJzc19kYXRhID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHAtXFx1MDAzZXJzc19kYXRhKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghdHAtXFx1MDAzZXJzc19kYXRhKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0dHAtXFx1MDAzZWNwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSBcXHUwMDI2IENQQ01EX01BU0s7XFxuIFxcbiBcXHRpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpIFxcdTAwM2UgNCBcXHUwMDI2XFx1MDAyNiB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xOCBcXHUwMDI2XFx1MDAyNlxcbkBAIC01NzAzLDExICs2NTAxLDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0cnRsX2h3X3Jlc2V0KHRwKTtcXG4gXFxuK1xcdHJ0bF9zZXR1cF9yeF9wYXJhbXModHApO1xcbitcXG4gXFx0cmMgPSBydGxfYWxsb2NfaXJxKHRwKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmMsIFxcXCJDYW4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRcXFxcblxcXCIpO1xcbiBcXG4tXFx0dHAtXFx1MDAzZWlycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xcbitcXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XFxuK1xcbitcXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcXG4rXFx0XFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XFxuIFxcbiBcXHRJTklUX1dPUksoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrLCBydGxfdGFzayk7XFxuIFxcdGRpc2FibGVfd29yayhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmspO1xcbkBAIC01NzE2LDEzICs2NTE5LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xcbiBcXG4tXFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHJ0bDgxNjlfcG9sbCk7XFxuLVxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYO1xcbiBcXHRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087XFxuIFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTElWRV9BRERSX0NIQU5HRTtcXG4gXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XFxuK1xcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlXFxuIFxcdCAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLlxcbkBAIC01Nzc4LDYgKzY1ODQsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdGlmIChqdW1ib19tYXgpXFxuIFxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IGp1bWJvX21heDtcXG4gXFxuK1xcdHJjID0gbmV0aWZfc2V0X3JlYWxfbnVtX3F1ZXVlcyh0cC1cXHUwMDNlZGV2LCAxLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcmMsIFxcXCJzZXQgdHgvcnggbnVtIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXG4gXFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XFxuIFxcbiBcXHR0cC1cXHUwMDNlY291bnRlcnMgPSBkbWFtX2FsbG9jX2NvaGVyZW50IChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwLVxcdTAwM2Vjb3VudGVycyksXFxuQEAgLTU3OTIsOSArNjYwMiwxNSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcbitcXHR0cC1cXHUwMDNlcnRsODE2OV9uYXBpID0ga2NhbGxvYyh0cC1cXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyODE2OV9pbml0X25hcGkodHApO1xcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4gXFx0aWYgKHJjKVxcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xcbiBcXHRcXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbkBAIC01ODAzLDggKzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0XFx0dHAtXFx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xcbiBcXHR9XFxuIFxcbi1cXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgY2hpcC1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2VkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtXFx1MDAzZWlycSk7XFxuK1xcdG5ldGRldl9pbmZvKGRldiwgXFxcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWQgKCVkIHRvdGFsKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGNoaXAtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXFxuK1xcdFxcdCAgICBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgdHAtXFx1MDAzZWlycV9udmVjcyk7XFxuIFxcbiBcXHRpZiAoanVtYm9fbWF4KVxcbiBcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXFxcblxcXCIsXFxuQEAgLTU4MjEsNiArNjYzOCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWVfbmFwaTpcXG4rXFx0cjgxNjlfZnJlZV9uYXBpKHRwKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMDo0Ni42MjM1NDc3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMDg5MzY3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X3NldF9jaGFubmVsc1wiLFxuICAgIFwicnRsODE2OV9yZWFsbG9jX3J4XCIsXG4gICAgXCJydGxfc2V0X3Jzc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfaW5pdF9yc3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtXCIsXG4gICAgXCJydGxfYWxsb2NfaXJxXCIsXG4gICAgXCJydGw4MTY5X2FsbG9jX3J4X2Rlc2NcIixcbiAgICBcInJ0bDgxNjlfZnJlZV9yeF9kZXNjXCIsXG4gICAgXCJyODE2OV9pbml0X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OWJjNzMzZjlmNDFlZWVhYTU3YjM2MzhmNTRhYTkzODJlNjg1N2VjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDc6MzA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uOTE5NGMyMTQyZjk1ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC03NCw5ICs3NCwzMyBAQFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcbi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcbitcbisvKlxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxuKyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXG4rICovXG4rI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcdChNQVhfU0tCX0ZSQUdTICsgMSlcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxuKyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1x0OFxuKyNkZWZpbmUgUjgxMjdfTUFYX1RYX1FVRVVFU1x0OFxuKyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbisjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcdDFcbisjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXHQzMlxuKyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG4rI2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFx0MVxuKyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVx0NDBcbisjZGVmaW5lIFJTU19DUFVfTlVNX01BU0tcdEdFTk1BU0soMTgsIDE2KVxuKyNkZWZpbmUgUlNTX0hBU0hfTUFTS1x0XHRHRU5NQVNLKDEwLCA4KVxuKyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOFxuKyNkZWZpbmUgUlhTX1JTU19VRFBcdFx0QklUKDI3KVxuKyNkZWZpbmUgUlhTX1JTU19JUFY0XHRcdEJJVCgyOClcbisjZGVmaW5lIFJYU19SU1NfSVBWNlx0XHRCSVQoMjkpXG4rI2RlZmluZSBSWFNfUlNTX1RDUFx0XHRCSVQoMzApXG4rI2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTS1x0KFJYU19SU1NfSVBWNCB8IFJYU19SU1NfSVBWNilcbisjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLXHQoUlhTX1JTU19UQ1AgfCBSWFNfUlNTX1VEUClcbiBcbiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0VcdDB4YTQwMFxuIFxuQEAgLTQ0MSwxMSArNDY1LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xuIFx0VHhQb2xsXzgxMjVcdFx0PSAweDkwLFxuIFx0TEVEU0VMM1x0XHRcdD0gMHg5NixcbiBcdE1BQzBfQktQXHRcdD0gMHgxOWUwLFxuK1x0UkRTQVJfUTFfTE9XXHRcdD0gMHg0MDAwLFxuIFx0UlNTX0NUUkxfODEyNVx0XHQ9IDB4NDUwMCxcbiBcdFFfTlVNX0NUUkxfODEyNVx0XHQ9IDB4NDgwMCxcbiBcdEVFRV9UWElETEVfVElNRVJfODEyNVx0PSAweDYwNDgsXG4rXHRJTVJfQ0xFQVJfVkVDX01BUF9SRUdcdD0gMHgwZDAwLFxuK1x0SVNSX1ZFQ19NQVBfUkVHXHRcdD0gMHgwZDA0LFxuK1x0SU1SX1NFVF9WRUNfTUFQX1JFR1x0PSAweDBkMGMsXG4gfTtcbiBcbisjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHXHQyOVxuICNkZWZpbmUgTEVEU0VMX01BU0tfODEyNVx0MHgyM2ZcbiBcbiAjZGVmaW5lIFJYX1ZMQU5fSU5ORVJfODEyNVx0QklUKDIyKVxuQEAgLTU3Niw2ICs2MDUsMjMgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4gXG4gXHQvKiBtYWdpYyBlbmFibGUgdjIgKi9cbiBcdE1hZ2ljUGFja2V0X3YyXHQ9ICgxIFx1MDAzY1x1MDAzYyAxNiksXHQvKiBXYWtlIHVwIHdoZW4gcmVjZWl2ZXMgYSBNYWdpYyBQYWNrZXQgKi9cbisjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuKyNkZWZpbmVcdElTUklNUl9UT0tfUTBcdEJJVCg4KVxuKyNkZWZpbmVcdElTUklNUl9ST0tfUTBcdEJJVCgwKVxuKyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbisjZGVmaW5lIFJTU19LRVlfUkVHXHRcdFx0MHg0NjAwXG4rI2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFR1x0XHQweDQ3MDBcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX1JTU1x0XHRCSVQoMSlcbisjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUFx0XHRCSVQoMSlcbisjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X1NVUFBcdFx0QklUKDMpXG4rI2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQXHRcdEJJVCg0KVxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuKyNkZWZpbmVcdFJYX1JFU19SU1NcdFx0XHRCSVQoMjIpXG4rI2RlZmluZVx0UlhfUlVOVF9SU1NcdFx0XHRCSVQoMjEpXG4rI2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbisjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLXHRcdEdFTk1BU0soNCwgMilcbiB9O1xuIFxuIGVudW0gcnRsX2Rlc2NfYml0IHtcbkBAIC02MzMsNiArNjc5LDExIEBAIGVudW0gcnRsX3J4X2Rlc2NfYml0IHtcbiAjZGVmaW5lIFJ4UHJvdG9JUFx0KFBJRDEgfCBQSUQwKVxuICNkZWZpbmUgUnhQcm90b01hc2tcdFJ4UHJvdG9JUFxuIFxuKyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbisjZGVmaW5lXHRSWF9UQ1BUX0RFU0NfUlNTXHRCSVQoMTgpXG4rI2RlZmluZVx0UlhfVURQRl9ERVNDX1JTU1x0QklUKDE2KSAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rI2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rXG4gXHRJUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTYpLCAvKiBJUCBjaGVja3N1bSBmYWlsZWQgKi9cbiBcdFVEUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTUpLCAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRUQ1BGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuQEAgLTY1NCw5ICs3MDUsMjcgQEAgc3RydWN0IFR4RGVzYyB7XG4gfTtcbiBcbiBzdHJ1Y3QgUnhEZXNjIHtcbi1cdF9fbGUzMiBvcHRzMTtcbi1cdF9fbGUzMiBvcHRzMjtcbi1cdF9fbGU2NCBhZGRyO1xuK1x0dW5pb24ge1xuK1x0XHQvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqL1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdF9fbGUzMiBvcHRzMTtcbitcdFx0XHRfX2xlMzIgb3B0czI7XG4rXHRcdFx0X19sZTY0IGFkZHI7XG4rXHRcdH07XG4rXG4rXHRcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cbitcdFx0c3RydWN0IHtcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRfX2xlNjQgcnNzX2FkZHI7XG4rXHRcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0XHRfX2xlMzIgcnNzX2luZm87XG4rXHRcdFx0XHRcdF9fbGUzMiByc3NfcmVzdWx0O1xuK1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4rXHRcdFx0fTtcbitcdFx0XHRfX2xlMzIgcnNzX29wdHMyO1xuK1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4rXHRcdH07XG4rXHR9O1xuIH07XG4gXG4gc3RydWN0IHJpbmdfaW5mbyB7XG5AQCAtNzI4LDI3ICs3OTcsNDkgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSByeF9kZXNjX3R5cGUge1xuK1x0UlhfREVTQ19UWVBFX0RFRkFVTFQsXG4rXHRSWF9ERVNDX1RZUEVfUlNTLFxuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4rXHR1MzIgaW5kZXg7XHRcdFx0XHRcdC8qIFJ4IHF1ZXVlIGluZGV4ICovXG4rXHR1MzIgY3VyX3J4O1x0XHRcdFx0XHQvKiBJbmRleCBvZiBuZXh0IFJ4IHBrdC4gKi9cbitcdHUzMiBkaXJ0eV9yeDtcdFx0XHRcdFx0LyogSW5kZXggZm9yIHJlY3ljbGluZy4gKi9cbitcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XHRcdFx0LyogYXJyYXkgb2YgUnggRGVzYyovXG4rXHRkbWFfYWRkcl90IHJ4X2Rlc2NfcGh5X2FkZHJbTlVNX1JYX0RFU0NdO1x0LyogUnggZGF0YSBidWZmZXIgcGh5c2ljYWwgZG1hIGFkZHJlc3MgKi9cbitcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XHRcdFx0XHQvKiBSeCBkZXNjIHBoeXNpY2FsIGFkZHJlc3MgKi9cbitcdHN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XHRcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEge1xuK1x0dTMyIHJzc19rZXlbUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpXTtcbitcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcbitcdHVuc2lnbmVkIGludCBod19zdXBwX2luZGlyX3RibF9lbnRyaWVzO1xuK307XG4rXG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbi1cdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4tXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuIFx0c3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBUeCBkZXNjcmlwdG9yIHJpbmcgKi9cbi1cdHN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgUnggZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IFR4UGh5QWRkcjtcbi1cdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xuLVx0c3RydWN0IHBhZ2UgKlJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xuIFx0c3RydWN0IHJpbmdfaW5mbyB0eF9za2JbTlVNX1RYX0RFU0NdO1x0LyogVHggZGF0YSBidWZmZXJzICovXG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnJ0bDgxNjlfbmFwaTtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgcnhfcmluZ1tSODE2OV9NQVhfUlhfUVVFVUVTXTtcbitcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4rXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgKnJzc19kYXRhO1xuK1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbitcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgKzE2NjksMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICsxNzQwLDM4IEBAIHN0YXRpYyB1MzIgcnRsX2dldF9ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4tXHRlbHNlXG4rXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4rXHRcdFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0xODY3LDkgKzE5NzUsMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcbitcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHR1MzIgb3B0czI7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCArMjUzNSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuLVx0LmdldF9kcnZpbmZvXHRcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcbi1cdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbi1cdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4tXHQuZ2V0X2NvYWxlc2NlXHRcdD0gcnRsX2dldF9jb2FsZXNjZSxcbi1cdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuLVx0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbi1cdC5nZXRfd29sXHRcdD0gcnRsODE2OV9nZXRfd29sLFxuLVx0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4tXHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuLVx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbi1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbi1cdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuLVx0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4tXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbi1cdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQuZ2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxuLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcbi1cdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuLVx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcbi19O1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcbiB7XG4gXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXG5AQCAtMjYxOSw5ICsyNzEwLDI3IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4rXG4rXHRcdG1lbXNldChyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlZGlydHlfdHggPSB0cC1cdTAwM2VjdXJfdHggPSB0cC1cdTAwM2VjdXJfcnggPSAwO1xuK1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuK1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0cmluZy1cdTAwM2VkaXJ0eV9yeCA9IDA7XG4rXHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbitcdFx0cmluZy1cdTAwM2VpbmRleCA9IGk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMjY4MCw2ICsyNzg5LDM0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90Ymwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpKyspXG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCBudW1fcnhfcmluZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRuZXRkZXZfcnNzX2tleV9maWxsKHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19rZXksIFJUTF9SU1NfS0VZX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0dXBfcnhfcGFyYW1zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHRwLVx1MDAzZW51bV9yeF9yaW5ncyA9IDE7XG4rXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfODA6XG4rXHRcdHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7XG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMgPSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0dHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfREVGQVVMVF9SWF9RVUVVRVM7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xuQEAgLTI4MDIsOCArMjkzOSw2MyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21heF9zaXplKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSArIDEpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTMyIG51bV9lbnRyaWVzID0gUlRMX1JTU19LRVlfU0laRSAvIHNpemVvZih1MzIpO1xuK1x0dTMyICpyc3Nfa2V5ID0gdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleTtcbitcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xuK1xuK1x0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fZW50cmllczsgaSsrKVxuK1x0XHRSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyArIChpICogNCksIHJzc19rZXlbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggKmluZGlyX3RibCA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90Ymw7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpICs9IDQpIHtcbitcdFx0dTMyIHJldGEgPSAodTMyKWluZGlyX3RibFtpXSB8XG4rXHRcdFx0ICAgKHUzMilpbmRpcl90YmxbaSArIDFdIFx1MDAzY1x1MDAzYyA4IHxcbitcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICsgMl0gXHUwMDNjXHUwMDNjIDE2IHxcbitcdFx0XHQgICAodTMyKWluZGlyX3RibFtpICsgM10gXHUwMDNjXHUwMDNjIDI0O1xuK1x0XHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyArIGksIHJldGEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTMyIHJzc19jdHJsO1xuK1xuK1x0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncykpO1xuK1xuK1x0LyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqL1xuK1x0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxuK1x0XHQgfCBSU1NfQ1RSTF9JUFY0X1NVUFBcbitcdFx0IHwgUlNTX0NUUkxfSVBWNl9TVVBQXG4rXHRcdCB8IFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcbitcdFx0IHwgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxuK1x0XHQgfCBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUDtcbitcbitcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbitcdFx0XHQgICAgICAgaWxvZzIodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xuK1xuK1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbitcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4rXHRydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nWzBdO1xuK1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICszMDAzLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KSByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcbitcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICsgKGkgLSAxKSAqIDg7XG4rXHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1xuK1x0XHRSVExfVzMyKHRwLCByZHNhcl9yZWcgKyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0XHRSVExfVzMyKHRwLCByZHNhcl9yZWcsICgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTM4NTgsNiArNDA1OCwyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHUxNiByeF9xX251bTtcbitcdHUxNiBxX2N0cmw7XG4rXG4rXHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRxX2N0cmwgPSBSVExfUjE2KHRwLCBRX05VTV9DVFJMXzgxMjUpO1xuK1x0cV9jdHJsIFx1MDAyNj0gflJUTF9SWF9RX05VTV9NQVNLO1xuK1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbitcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggdG1wO1xuK1xuK1x0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcbitcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbitcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICs0MDg3LDkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XG4gXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xuIFxuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuK1xuIFx0LyogZGlzYWJsZSBVUFMgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcbiBcbkBAIC0zODg1LDYgKzQxMDksMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4gXHRcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcdTAwMjYgfjB4MDIpO1xuIFxuK1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzKi9cbitcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpIHtcbitcdFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xuK1x0XHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcbitcdFx0ICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTtcbitcdH1cbitcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XG4gXHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuQEAgLTQxMjEsNiArNDM1MiwxMiBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7XG4gXHRydGxfc2V0X3J4X21heF9zaXplKHRwKTtcbiBcdHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHApO1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKVxuK1x0XHRcdHJ0bF9zZXRfcnNzX2NvbmZpZyh0cCk7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTtcbitcdH1cbiBcdHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTtcbiBcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuQEAgLTQxNDgsMTkgKzQzODUsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiB7XG4tXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4rXHR1MzIgZW9yO1xuIFxuLVx0ZGVzYy1cdTAwM2VvcHRzMiA9IDA7XG4tXHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuLVx0ZG1hX3dtYigpO1xuLVx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xuK1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuK1x0XHRkbWFfd21iKCk7XG4rXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0XHRkZXNjLVx1MDAzZW9wdHMyID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXG4rXHRcdGRtYV93bWIoKTtcbitcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4rXHRcdFx0XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGluZGV4KVxuIHtcbitcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBpbmRleDtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTtcbiBcdGRtYV9hZGRyX3QgbWFwcGluZztcbkBAIC00MTc3LDU2ICs0NDI3LDEyOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbi1cdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuK1x0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7XG4rXHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbitcdFx0ZGVzYy1cdTAwM2Vyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpO1xuK1x0ZWxzZVxuK1x0XHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbitcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcbiBcdHJldHVybiBkYXRhO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxuK1x0XHRcdCAgICAgZW51bSByeF9kZXNjX3R5cGUgZGVzY190eXBlKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpKyspIHtcbiBcdFx0ZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSxcbi1cdFx0XHQgICAgICAgbGU2NF90b19jcHUodHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciksXG4rXHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0X19mcmVlX3BhZ2VzKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbitcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbitcdFx0aWYgKGRlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcsIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHR0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4rXHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuIFx0fVxuIFxuIFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHRwLCBcdTAwMjZyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcdFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2cmluZy1cdTAwM2VyeF9waHlfYWRkcixcbitcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0aWYgKHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuK1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgIFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LFxuK1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfcGh5X2FkZHIpO1xuK1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSA9IE5VTEw7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRpbnQgaSwgcmV0O1xuK1xuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4rXHRydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7XG4gXG4gXHRtZW1zZXQodHAtXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXHUwMDNldHhfc2tiKSk7XG4tXHRtZW1zZXQodHAtXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cdTAwM2VSeF9kYXRhYnVmZikpO1xuIFxuLVx0cmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4rXHRcdHJldCA9IHJ0bDgxNjlfcnhfZmlsbCh0cCwgcmluZyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfY2xlYXI7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfY2xlYXI6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbitcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSwgdHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgKzQ1ODksMjEgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cdTAwM2VkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspXG4rXHRcdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkrKylcbitcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggKzQ2MzgsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRpbnQgaTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcbitcdFx0XHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2pdO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpO1xuK1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcbitcdFx0fVxuK1x0fVxuK31cbiBcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKylcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19yZXNldCh0cCk7XG4gXG4tXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0cnRsX2h3X3N0YXJ0KHRwKTtcbiB9XG4gXG5AQCAtNDc1OCwzMCArNTEwNSwxMDQgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBSeERlc2MgKmRlc2MsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbitcdHUzMiByc3NfaGVhZGVyX2luZm87XG4rXHR1MzIgaGFzaF92YWw7XG4rXG4rXHRpZiAoISh0cC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xuK1xuK1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4rXHRcdHJldHVybjtcbitcbitcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4rXG4rXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbitcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuK1x0XHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICB1MzIgb3B0czEpXG4re1xuK1x0Ym9vbCBjc3VtX29rID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4rXHRcdCAgICAoKG9wdHMxIFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxuK1x0XHRcdGNzdW1fb2sgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGlmIChvcHRzMSA9PSBSeFByb3RvVENQIHx8IG9wdHMxID09IFJ4UHJvdG9VRFApXG4rXHRcdFx0Y3N1bV9vayA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuLVx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuK1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuK3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHRcdHUzMiBzdGF0dXMpXG4re1xuK1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuK1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSWF9SRVNfUlNTKSkge1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSWF9DUkNfUlNTKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4rXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuK1x0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHRwLVx1MDAzZWN1cl9yeCsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICsgZW50cnk7XG4rXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQrKywgcmluZy1cdTAwM2VjdXJfcngrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbitcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSArIGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDI2IERlc2NPd24pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDc5MSwxOSArNTIxMiwxNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihkZXYsIHRwLCBzdGF0dXMpKSB7XG4gXHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiBcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCJSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcblwiLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzKTtcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgKFJ4UldUIHwgUnhSVU5UKSlcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUnhDUkMpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xuIFxuIFx0XHRcdGlmICghKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWEFMTCkpXG4gXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbi1cdFx0XHRlbHNlIGlmIChzdGF0dXMgXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcbitcdFx0XHRpZiAoKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgdHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX0RFRkFVTFQpXG4gXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuQEAgLTQ4MjAsMTQgKzUyMzgsMTQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihcdTAwMjZ0cC1cdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XG4rXHRcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRhZGRyID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2VhZGRyKTtcbi1cdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLVx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XG4rXHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuK1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICs1MjU0LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBwa3Rfc2l6ZTtcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4rXHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuK1x0XHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIFxuLVx0XHRydGw4MTY5X3J4X3ZsYW5fdGFnKGRlc2MsIHNrYik7XG4rXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4gXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XG4gXG4tXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2dHAtXHUwMDNlbmFwaSwgc2tiKTtcbitcdFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xuIFxuIFx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgcGt0X3NpemUpO1xuIHJlbGVhc2VfZGVzY3JpcHRvcjpcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XG4rXHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcbitcdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQ4NTYsOCArNTI3OCwxMiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4ge1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XG4tXHR1MzIgc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHR1MzIgc3RhdHVzO1xuK1xuK1x0dHAgPSBuZXRkZXZfcHJpdihuYXBpLVx1MDAzZWRldik7XG4rXHRzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XG4gXG4gXHRpZiAoKHN0YXR1cyBcdTAwMjYgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgXHUwMDI2IHRwLVx1MDAzZWlycV9tYXNrKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuQEAgLTQ4NzMsMTMgKzUyOTksODYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4tXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuK1x0bmFwaV9zY2hlZHVsZShuYXBpKTtcbiBvdXQ6XG4gXHRydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuK1xuK1x0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgbmFwaSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgQklUKG1lc3NhZ2VfaWQpKTtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X21zaXgoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuK1x0aW50IG1lc3NhZ2VfaWQ7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbitcbitcdGlmIChtZXNzYWdlX2lkID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKSB7XG4rXHRcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0fVxuK1xuK1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbitcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcbitcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4rXG4rXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9yZXF1ZXN0X2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpO1xuK1x0aW50IGksIHJjO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0bmFwaSA9IFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXTtcbitcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBydGw4MTY5X2ludGVycnVwdF9tc2l4LFxuK1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIiwgZGV2LVx1MDAzZW5hbWUsIGkpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgcnRsODE2OV9pbnRlcnJ1cHQsXG4rXHRcdFx0XHRcdCAgICAgTlVMTCwgbmFwaSwgXCIlcy0lZFwiLCBkZXYtXHUwMDNlbmFtZSwgaSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRnb3RvIGZyZWVfaXJxO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZnJlZV9pcnE6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMClcbitcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyArNTQxMywxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVx1MDAzZWRldjtcbi1cdGludCB3b3JrX2RvbmU7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuIFxuIFx0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4gXG4tXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTtcbitcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXG4rXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgKzU1MzUsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRydGw4MTY5X25hcGlfZW5hYmxlKHRwKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuIFxuQEAgLTUwNTEsMTggKzU1NTEsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbiBcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuK1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gXG4gXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuLVx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuLVx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4rXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC01MDc0LDcgKzU1NzMsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0XHRydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLVx1MDAzZXBjaV9kZXYsIGkpLFxuK1x0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHR9XG4gfVxuICNlbmRpZlxuIFxuQEAgLTUwODIsNyArNTU4OCw2IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4tXHR1bnNpZ25lZCBsb25nIGlycWZsYWdzO1xuIFx0aW50IHJldHZhbCA9IC1FTk9NRU07XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbkBAIC01MDk2LDEwICs1NjAxLDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCF0cC1cdTAwM2VUeERlc2NBcnJheSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbi1cdFx0XHRcdFx0ICAgICBcdTAwMjZ0cC1cdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF0cC1cdTAwM2VSeERlc2NBcnJheSlcbi1cdFx0Z290byBlcnJfZnJlZV90eF8wO1xuK1x0aWYgKHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyh0cCkgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcnhfMTtcbiBcbiBcdHJldHZhbCA9IHJ0bDgxNjlfaW5pdF9yaW5nKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG5AQCAtNTEwNyw4ICs1NjEwLDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xuIFxuLVx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcbi1cdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXHUwMDNlbmFtZSwgdHApO1xuK1x0cmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG5AQCAtNTEyNSwxNSArNTYyNywxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gcmV0dmFsO1xuIFxuIGVycl9mcmVlX2lycTpcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuK1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gZXJyX3JlbGVhc2VfZndfMjpcbiBcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcbi1cdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldLCB0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSk7XG4gZXJyX2ZyZWVfcnhfMTpcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4tZXJyX2ZyZWVfdHhfMDpcbitcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VUeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVR4UGh5QWRkcik7XG4gXHR0cC1cdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XG5AQCAtNTI3NSw2ICs1Nzc1LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cGNpX3ByZXBhcmVfdG9fc2xlZXAocGRldik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHI4MTY5X2ZyZWVfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspXG4rXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXG4rXHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbkBAIC01Mjg5LDYgKzU3OTcsOCBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4rXHRyODE2OV9mcmVlX25hcGkodHApO1xuK1xuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbiBcbkBAIC01MzIwLDE1ICs1ODMwLDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4rXHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4rXHRcdHRwLVx1MDAzZWlycV9tYXNrID0gSVNSSU1SX0xJTktDSEcgfCBJU1JJTVJfVE9LX1EwO1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbitcdH0gZWxzZSB7XG4rXHRcdHRwLVx1MDAzZWlycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZztcbiBcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4tXHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4rXHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4rXHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBnZXRfbWF4X2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0cmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDO1xuK1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuK31cbitcbitzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuK1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4rXHRyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbitcdFx0dW5zaWduZWQgaW50IHJzc19xdWV1ZV9udW0gPSBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpO1xuK1xuK1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbitcdFx0XHRcdFx0XHRcdCAgICB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMpKTtcbitcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2U9IDIpXG4rXHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cdTAwM2VwY2lfZGV2O1xuIFx0dW5zaWduZWQgaW50IGZsYWdzO1xuK1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyArNTg4OCwxNyBAQCBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBjaV9hbGxvY19pcnFfdmVjdG9ycyh0cC1cdTAwM2VwY2lfZGV2LCAxLCAxLCBmbGFncyk7XG4rXHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCBnZXRfbWluX2lycV9udmVjcyh0cCksIGdldF9tYXhfaXJxX252ZWNzKHRwKSwgZmxhZ3MpO1xuK1xuK1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuK1x0XHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7XG4rXG4rXHRpZiAobnZlY3MgXHUwMDNjIDApXG4rXHRcdHJldHVybiBudmVjcztcbitcbitcdHRwLVx1MDAzZWlycV9udmVjcyA9IG52ZWNzO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuQEAgLTU1OTksNiArNjE1MywyNDEgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF9yeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHRpbnQgd29ya19kb25lID0gMDtcbitcdGludCBtZXNzYWdlX2lkO1xuK1xuK1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0bWVzc2FnZV9pZCA9IG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGk7XG4rXG4rXHRpZiAobWVzc2FnZV9pZCBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKVxuK1x0XHR3b3JrX2RvbmUgKz0gcnRsX3J4KGRldiwgdHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbbWVzc2FnZV9pZF0sIGJ1ZGdldCwgbmFwaSk7XG4rXG4rXHRpZiAod29ya19kb25lIFx1MDAzYyBidWRnZXQgXHUwMDI2XHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxuK1x0XHRydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XG4rXG4rXHRyZXR1cm4gd29ya19kb25lO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuK1xuK1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGkpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXG4rXHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUlRMODEyNyBNU0ktWCB2ZWN0b3IgbGF5b3V0OlxuKyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4rICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICsgVHhRcyAtIDEpXHQ6IFR4IFF1ZXVlc1xuKyAqIFZlY3RvciAoUnhRcyArIFR4UXMpIGFuZCB1cFx0XHQ6IE90aGVyIGV2ZW50cyAoTGluayBzdGF0dXMoMjkpLCBldGMuKVxuKyAqL1xuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlaXJxX252ZWNzOyBpKyspIHtcbitcdFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbitcdFx0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbitcdFx0XHRlbHNlIGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTICsgUjgxMjdfTUFYX1RYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF90eDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfb3RoZXI7XG4rXHRcdH1cbitcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4rXHRjaC1cdTAwM2VtYXhfdHggPSAxO1xuK1xuK1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4rXHRjaC1cdTAwM2V0eF9jb3VudCA9IDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKm5ld19yeCxcbitcdFx0XHQgICAgICBpbnQgbmV3X2NvdW50KVxuK3tcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZXdfY291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2bmV3X3J4W2ldO1xuK1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2dHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuK1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0fVxuK1xuK1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbitcdFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuK1x0XHRcdFx0XHQgIHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSwgcmluZy1cdTAwM2VyeF9waHlfYWRkcik7XG4rXHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZuZXdfcnhbaV0sIHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKTtcbitcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2dHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsXG4rXHRcdFx0XHQgIG5ld19yeFtpXS5yeF9kZXNjX2FycmF5LCBuZXdfcnhbaV0ucnhfcGh5X2FkZHIpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcoZGV2KTtcbitcdGVudW0gcnhfZGVzY190eXBlIG9sZF9yeF9kZXNjX3R5cGU7XG4rXHRlbnVtIHJ4X2Rlc2NfdHlwZSBuZXdfZGVzY190eXBlO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqbmV3X3J4O1xuK1x0aW50IGksIHJldDtcbitcbitcdGlmIChjaC1cdTAwM2VyeF9jb3VudCA9PSB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b2xkX3J4X2Rlc2NfdHlwZSA9IHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlO1xuK1xuK1x0aWYgKCFydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4rXHRcdG5ldGRldl93YXJuKGRldiwgXCJUaGlzIGNoaXAgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBjaGFubmVscy9SU1MuXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIHRwLVx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyB8fCAhaXNfcG93ZXJfb2ZfMihjaC1cdTAwM2VyeF9jb3VudCkgfHxcbitcdCAgICB0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNjIGdldF9taW5faXJxX252ZWNzKHRwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZXdfZGVzY190eXBlID0gY2gtXHUwMDNlcnhfY291bnQgXHUwMDNlIDEgPyBSWF9ERVNDX1RZUEVfUlNTIDogUlhfREVTQ19UWVBFX0RFRkFVTFQ7XG4rXG4rXHRpZiAoIWlmX3J1bm5pbmcpIHtcbitcdFx0cmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSBjaC1cdTAwM2VyeF9jb3VudDtcbitcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuK1xuK1x0XHRydGw4MTY5X3NldF9yc3NfaW5kaXJfdGJsKHRwLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0XHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRuZXdfcnggPSBremFsbG9jX29ianMoKm5ld19yeCwgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XG4rXHRpZiAoIW5ld19yeClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4rXHRydGw4MTY5X2Rvd24odHApO1xuK1xuK1x0cmV0ID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3VwO1xuK1xuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBuZXdfZGVzY190eXBlO1xuK1xuK1x0cmV0ID0gcnRsODE2OV9yZWFsbG9jX3J4KHRwLCBuZXdfcngsIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0sIG9sZF9yeF9kZXNjX3R5cGUpO1xuK1x0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xuK1xuK1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gY2gtXHUwMDNlcnhfY291bnQ7XG4rXG4rXHRtZW1zZXQodHAtXHUwMDNlcnhfcmluZywgMCwgc2l6ZW9mKHRwLVx1MDAzZXJ4X3JpbmcpKTtcbitcdG1lbWNweSh0cC1cdTAwM2VyeF9yaW5nLCBuZXdfcngsIHNpemVvZigqbmV3X3J4KSAqIGNoLVx1MDAzZXJ4X2NvdW50KTtcbitcbitcdHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmwodHAsIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbitcbitcdHJ0bDgxNjlfdXAodHApO1xuK1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbitcbitcdGtmcmVlKG5ld19yeCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfcmVzZXQ6XG4rXHRpZiAobmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhkZXYsIHRwLVx1MDAzZW51bV9yeF9yaW5ncykpXG4rXHRcdG5ldGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZXZlcnQgcnhfcXVldWVzLCBzdGF0ZSBtaWdodCBiZSBpbmNvbnNpc3RlbnQhXFxuXCIpO1xuK1x0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBvbGRfcnhfZGVzY190eXBlO1xuK2Vycl91cDpcbitcdHJ0bDgxNjlfdXAodHApO1xuK1x0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbitcdGtmcmVlKG5ld19yeCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4rXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuK1x0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXG4rXHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuK1x0LmdldF9yZWdzX2xlblx0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLFxuK1x0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbitcdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuK1x0LnNldF9jb2FsZXNjZVx0XHQ9IHJ0bF9zZXRfY29hbGVzY2UsXG4rXHQuZ2V0X3JlZ3NcdFx0PSBydGw4MTY5X2dldF9yZWdzLFxuK1x0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4rXHQuc2V0X3dvbFx0XHQ9IHJ0bDgxNjlfc2V0X3dvbCxcbitcdC5nZXRfc3RyaW5nc1x0XHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4rXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4rXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbitcdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbitcdC5zZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X3NldF9jaGFubmVscyxcbitcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbitcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuK1x0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbitcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXG4rXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuK307XG4rXG4gc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKmNoaXA7XG5AQCAtNTYwOSw3ICs2Mzk4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0dTMyIHR4Y29uZmlnO1xuIFx0dTMyIHhpZDtcbiBcbi1cdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZiAoKnRwKSk7XG4rXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4rXHRcdFx0XHQgICAgICBSODE2OV9NQVhfVFhfUVVFVUVTLFxuK1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XG4rXG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICs2NDgxLDEyIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG4gXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSkge1xuK1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgKzY1MDEsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRydGxfaHdfcmVzZXQodHApO1xuIFxuK1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4rXG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCIpO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4rXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XG4rXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbitcdFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2dHAtXHUwMDNld2sud29yaywgcnRsX3Rhc2spO1xuIFx0ZGlzYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuQEAgLTU3MTYsMTMgKzY1MTksMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuK1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuK1x0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XG4rXHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZVxuIFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXG5AQCAtNTc3OCw2ICs2NTg0LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4rXHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwic2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCIpO1xuK1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgKzY2MDIsMTUgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyODE2OV9pbml0X25hcGkodHApO1xuK1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycl9mcmVlX25hcGk7XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODAzLDggKzY2MTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHR0cC1cdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcbiBcdH1cbiBcbi1cdG5ldGRldl9pbmZvKGRldiwgXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxuXCIsXG4tXHRcdCAgICBjaGlwLVx1MDAzZW5hbWUsIGRldi1cdTAwM2VkZXZfYWRkciwgZXh0X3hpZF9zdHIsIHhpZCwgdHAtXHUwMDNlaXJxKTtcbitcdG5ldGRldl9pbmZvKGRldiwgXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXG5cIixcbitcdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxuK1x0XHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVx1MDAzZWlycV9udmVjcyk7XG4gXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwianVtYm8gZmVhdHVyZXMgW2ZyYW1lczogJWQgYnl0ZXMsIHR4IGNoZWNrc3VtbWluZzogJXNdXFxuXCIsXG5AQCAtNTgyMSw2ICs2NjM4LDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlX25hcGk6XG4rXHRyODE2OV9mcmVlX25hcGkodHApO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MzA6NDYuNjIzNTQ5NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQxMTcyMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcjgxNjkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSBmb3IgdGhlIGByODE2OWAgbmV0d29yayBkcml2ZXIuIEludHJpZ3VpbmcsIGl0J3MgaW50cm9kdWNpbmcgc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlczogUlNTIHN1cHBvcnQgYW5kIG11bHRpcGxlIFJYIHF1ZXVlcy4gTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGFsbCBjZW50ZXJlZCBhcm91bmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCB3aGljaCwgYXMgZXhwZWN0ZWQsIGlzIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgZm9yIFJlYWx0ZWsgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbG9naWMgcmVzaWRlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyBzaWduaWZpY2FudDsgaXQgYWRkcyBtdWx0aXBsZSBSWCByaW5ncywgd2hpY2ggc3VnZ2VzdHMgZGVlcGVyIHBhcmFsbGVsIHByb2Nlc3Npbmcgb24gdGhlIHJlY2VpdmUgc2lkZS4gTVNJLVggc3VwcG9ydCBpcyBhbHNvIGEgZ29vZCBhZGRpdGlvbiwgaW5kaWNhdGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgaW50ZXJydXB0IGhhbmRsaW5nLiBSU1MgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciB0aGlzIGtpbmQgb2Ygc2V0dXA7IGl0IG1lYW5zIHdlIGNhbiBkaXN0cmlidXRlIGluY29taW5nIHRyYWZmaWMgZWZmaWNpZW50bHkgYWNyb3NzIHRob3NlIG5ldyBxdWV1ZXMsIGxldmVyYWdpbmcgdGhlIENQVSBjb3JlcyBlZmZlY3RpdmVseS4gQW5kLCBvZiBjb3Vyc2UsIE5BUEkgZm9yIGVhY2ggUlggcXVldWUgLSB0aGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBpbiB0aGVzZSBtb2Rlcm4gZHJpdmVycy5cblxuVGhpcyBhbGwgcG9pbnRzIHRvIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcjgxNjlgIGlzIGV2ZW4gY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwuIEl0J3MgdXN1YWxseSBlbmFibGVkIHdpdGggc29tZXRoaW5nIGxpa2UgYENPTkZJR19SODE2OWAuIFRpbWUgdG8gZmlyZSB1cCBgZ2l0IGdyZXBgIGFuZCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSB3ZSdyZSBhY3R1YWxseSB3b3JraW5nIHdpdGggYSByZWxldmFudCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjMwOjUxLjc2NDcyNDYwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk0MTA1NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSODE2OVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9NzQ9Y29uZmlnIDgxMzlfT0xEX1JYX1JFU0VUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjg0OmNvbmZpZyBSODE2OVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04NS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDI6Y29uZmlnIFI4MTY5X0xFRFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBOSUMgTEVEc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MzA6NTUuMzU4ODM4MzcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcyMTU2MTg2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUjgxNjkgRHJpdmVyOiBBIFBsYW4gb2YgQXR0YWNrKipcblxuT2theSwgYFI4MTY5YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldC4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFFFTVUgZ2l2ZXMgbWUgYHJ0bDgxMzlgLCBidXQgZG9lcyBpdCBzdXBwb3J0IHRoZSBSODE2OSBzcGVjaWZpY2FsbHksIG9yIHBvdGVudGlhbGx5IGV2ZW4gYHI4MTY4YCBvciBgcjgxMjVgPyBObywgUUVNVSBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgYHI4MTY5YC4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXMgb2ZmZXIgYSBwYXRoIHRvIGZ1enogUENJIGRldmljZXMuIEl0IHVzZXMgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwgb3IgdmlydHVhbCBQQ0kgaW5qZWN0aW9uLiBSaWdodCwgc3l6a2FsbGVyIGhhcyBQQ0kgZnV6emluZy4gR29vZC5cblxuYHI4MTY5YCBpcyBhIFBDSSBkcml2ZXIuIFRoYXQgbWVhbnMgSSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyJ3MgYHN5el9wY2lfKmAgcHNldWRvLXN5c2NhbGxzLCBvciBgdmhjaWAgaWYgaXQgd2VyZSBVU0IuIEZvciBQQ0kgdGhvdWdoLCBJJ20gdGhpbmtpbmcgSSdsbCB1c2UgYHN5el9wY2lfZGV2aWNlYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbnN0cnVjdGlvbnMuIFRob3NlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoaW5ncyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCwgZG9lcyBzeXprYWxsZXIgZW11bGF0ZSBQQ0kgZGV2aWNlcz8gWWVzLCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIsIHdoaWNoIGluY2x1ZGVzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzaW1pbGFyIGNhbGxzLiBPciBgc3l6X3BjaV9idXNgLlxuXG5TbywgY2FuIEkgcmVhY2ggaXQ/IFllcywgc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogUENJIGRyaXZlcnMuIElzIHRoaXMgZnV6emluZyBlZmZvcnQgd29ydGh3aGlsZT8gQWJzb2x1dGVseS4gSXQgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgbmV0d29yayBkcml2ZXIsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHdoZXJlIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9uczpcblxuKiAgIGBydGw4MTY5X3NldF9jaGFubmVsc2BcbiogICBgcnRsODE2OV9yZWFsbG9jX3J4YFxuKiAgIGBydGw4MTY5X2dldF9jaGFubmVsc2BcbiogICBgcjgxNjlfaW5pdF9uYXBpYFxuKiAgIGBydGw4MTY5X3BvbGxfbXNpeF9yeGBcbiogICBgcnRsODE2OV9wb2xsX21zaXhfdHhgXG4qICAgYHJ0bDgxNjlfcG9sbF9tc2l4X290aGVyYFxuKiAgIGBydGw4MTY5X2ludGVycnVwdF9tc2l4YFxuKiAgIGBydGw4MTY5X3JlcXVlc3RfaXJxYFxuKiAgIGBydGw4MTY5X2ZyZWVfaXJxYFxuKiAgIGBydGxfcnhgXG4qICAgYHJ0bDgxNjlfcnhfZmlsbGBcbiogICBgcnRsODE2OV9yeF9jbGVhcmBcbiogICBgcnRsODE2OV9hbGxvY19yeF9kYXRhYFxuKiAgIGBydGw4MTY5X2FsbG9jX3J4X2Rlc2NgXG4qICAgYHJ0bDgxNjlfZnJlZV9yeF9kZXNjYFxuKiAgIGBydGw4MTY5X2luaXRfcmluZ2BcbiogICBgcnRsODE2OV9yeF9kZXNjX3Jlc2V0YFxuKiAgIGBydGw4MTY5X3J4X2hhc2hgXG4qICAgYHJ0bDgxNjlfcnhfY3N1bWBcbiogICBgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yYFxuKiAgIGBydGxfc2V0X3Jzc19jb25maWdgXG4qICAgYHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdGBcbiogICBgcnRsODE2OV9zdG9yZV9yZXRhYFxuKiAgIGBydGw4MTY5X3N0b3JlX3Jzc19rZXlgXG4qICAgYHJ0bF9zZXR1cF9yeF9wYXJhbXNgXG4qICAgYHJ0bDgxNjlfaW5pdF9yc3NgXG4qICAgYHJ0bDgxNjlfc2V0X3Jzc19pbmRpcl90YmxgXG4qICAgYHJ0bDgxMjVfc2V0X3J4X3FfbnVtYFxuKiAgIGBydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZ2BcbiogICBgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uYFxuKiAgIGBydGxfaHdfc3RhcnRgXG4qICAgYHJ0bDgxNjlfY2hhbmdlX210dWBcbiogICBgcnRsODE2OV9zZXRfcnhfcmluZ19udW1gXG4qICAgYHJ0bF9hbGxvY19pcnFgXG4qICAgYHJ0bF9pbml0X29uZWBcbiogICBgcnRsX3JlbW92ZV9vbmVgXG4qICAgYHJ0bF9vcGVuYFxuKiAgIGBydGw4MTY5X2Nsb3NlYFxuXG5JIG5lZWQgdG8gcXVpY2tseSB3ZWVkIG91dCB0aGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHdhc3RpbmcgdGltZTpcblxuKiAgIGBydGxfcnhgXG4qICAgYHJ0bDgxNjlfcG9sbF9tc2l4X3J4YFxuKiAgIGBydGw4MTY5X3BvbGxfbXNpeF90eGBcbiogICBgcnRsODE2OV9wb2xsX21zaXhfb3RoZXJcblxuIiwiSW5wdXRUb2tlbnMiOjI0OTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToxMi41NzQ0NjAxNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MDY4NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X3NldF9jaGFubmVsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz02MjM3PXN0YXRpYyBpbnQgcnRsODE2OV9yZWFsbG9jX3J4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjI3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2Mjc0OnN0YXRpYyBpbnQgcnRsODE2OV9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02Mjc1LVxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTYzNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjM3OS1cXHQuZ2V0X2NoYW5uZWxzXFx0XFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2MzgwOlxcdC5zZXRfY2hhbm5lbHNcXHRcXHQ9IHJ0bDgxNjlfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTYzODEtXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToxNi45MTUxNTM1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTk2MTg4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYHI4MTY5YCBEcml2ZXI6IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBpbnRlcmVzdGluZyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGByODE2OWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgUlNTIHN1cHBvcnQsIG11bHRpcGxlIFJYIHF1ZXVlcywgYW5kIE1TSS1YIHN1cHBvcnQuIFRoaXMgaXMgcmlnaHQgdXAgU3l6a2FsbGVyJ3MgYWxsZXkg4oCTIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGBldGh0b29sYCBvcGVyYXRpb25zIGFyZSByZWFjaGFibGUsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy5cblxuSSdtIHRoaW5raW5nLCBnaXZlbiB0aGUgc2NvcGUsIHdlIHNob3VsZCBlbmFibGUgYENPTkZJR19SODE2OWAuIEl0J3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRyaXZlciwgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSBzbmVha3kgZGVwZW5kZW5jaWVzIEkgaGF2ZSB0byB3b3JyeSBhYm91dC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjYXN0IGEgd2lkZSBuZXQsIHNvIEkgaGF2ZSBhIGxpc3Qgb2Ygc3ltYm9scyBJIHNob3VsZCBmb2N1cyBvbi4gQnV0IEkgd2FudCB0byBiZSBlZmZpY2llbnQsIHNvIEknbGwgdHJpbSBkb3duIHRoZSBsaXN0IHRvIHdoYXQncyBtb3N0IGNydWNpYWw6XG5cbiogICBgcnRsODE2OV9zZXRfY2hhbm5lbHNgXG4qICAgYHJ0bDgxNjlfcmVhbGxvY19yeGBcbiogICBgcnRsX3NldF9yc3NfY29uZmlnYFxuKiAgIGBydGw4MTY5X2luaXRfcnNzYFxuKiAgIGBydGw4MTY5X3NldF9yeF9yaW5nX251bWBcbiogICBgcnRsX2FsbG9jX2lycWBcbiogICBgcnRsODE2OV9hbGxvY19yeF9kZXNjYFxuKiAgIGBydGw4MTY5X2ZyZWVfcnhfZGVzY2BcbiogICBgcjgxNjlfaW5pdF9uYXBpYFxuXG5UaGVzZSBzaG91bGQgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbmV3IFJTUyBhbmQgUlggcXVldWUgZmVhdHVyZXMuIEZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHMsIEkgZXhwZWN0IHdlJ2xsIGdldCBnb29kIGNvdmVyYWdlIGFuZCBmaW5kIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgcXVpY2tseS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIwLCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzozMToyNS41MzQ3NzUyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzcwNDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X3NldF9jaGFubmVsc1wiLFxuICAgIFwicnRsODE2OV9yZWFsbG9jX3J4XCIsXG4gICAgXCJydGxfc2V0X3Jzc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfaW5pdF9yc3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtXCIsXG4gICAgXCJydGxfYWxsb2NfaXJxXCIsXG4gICAgXCJydGw4MTY5X2FsbG9jX3J4X2Rlc2NcIixcbiAgICBcInJ0bDgxNjlfZnJlZV9yeF9kZXNjXCIsXG4gICAgXCJyODE2OV9pbml0X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBSZWNlaXZlIFNpZGUgU2NhbGluZyAoUlNTKSwgbXVsdGlwbGUgUlggcXVldWVzLCBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIGV0aHRvb2wgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdXNlci1zcGFjZSBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfc2V0X2NoYW5uZWxzXCIsXG4gICAgXCJydGw4MTY5X3JlYWxsb2NfcnhcIixcbiAgICBcInJ0bF9zZXRfcnNzX2NvbmZpZ1wiLFxuICAgIFwicnRsODE2OV9pbml0X3Jzc1wiLFxuICAgIFwicnRsODE2OV9zZXRfcnhfcmluZ19udW1cIixcbiAgICBcInJ0bF9hbGxvY19pcnFcIixcbiAgICBcInJ0bDgxNjlfYWxsb2NfcnhfZGVzY1wiLFxuICAgIFwicnRsODE2OV9mcmVlX3J4X2Rlc2NcIixcbiAgICBcInI4MTY5X2luaXRfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIFJlY2VpdmUgU2lkZSBTY2FsaW5nIChSU1MpLCBtdWx0aXBsZSBSWCBxdWV1ZXMsIGFuZCBNU0ktWCBpbnRlcnJ1cHRzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29tcGxleCByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhbmQgZXRodG9vbCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[1] Phase: Succeeded StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 07:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 07:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2] Phase: Succeeded StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 07:32:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 07:31:37 +0000 UTC FinishedAt: 2026-06-29 07:31:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjt6ht/series-workflowjt6ht-convert-artifact-712227366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 07:32:05 +0000 UTC FinishedAt: 2026-06-29 08:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 07:32:05 +0000 UTC FinishedAt: 2026-06-29 08:05:10 +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:*e604e814-e533-4d4e-beab-e40ba8625e13,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-workflowjt6ht/series-workflowjt6ht-convert-artifact-712227366/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": "13107220-c79d-4497-aaa2-9c91974bdbca", "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-workflowjt6ht/series-workflowjt6ht-build-action-1547295420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 07:32:05 +0000 UTC FinishedAt: 2026-06-29 08:05:00 +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:*e604e814-e533-4d4e-beab-e40ba8625e13,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-workflowjt6ht/series-workflowjt6ht-convert-artifact-712227366/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": "13107220-c79d-4497-aaa2-9c91974bdbca", "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-workflowjt6ht/series-workflowjt6ht-build-action-1547295420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 08:05:10 +0000 UTC FinishedAt: 2026-06-29 08:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 08:05:10 +0000 UTC FinishedAt: 2026-06-29 08:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 08:05:10 +0000 UTC FinishedAt: 2026-06-29 08:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 08:05:10 +0000 UTC FinishedAt: 2026-06-29 08:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjt6ht/series-workflowjt6ht-convert-artifact-2375794041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 08:05:31 +0000 UTC FinishedAt: 2026-06-29 08:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 08:05:31 +0000 UTC FinishedAt: 2026-06-29 08:07:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13107220-c79d-4497-aaa2-9c91974bdbca,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-workflowjt6ht/series-workflowjt6ht-build-action-1547295420/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-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 08:07:40 +0000 UTC FinishedAt: 2026-06-29 08:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 08:07:40 +0000 UTC FinishedAt: 2026-06-29 08:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 08:07:40 +0000 UTC FinishedAt: 2026-06-29 08:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 08:07:40 +0000 UTC FinishedAt: 2026-06-29 08:39:05 +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:*e604e814-e533-4d4e-beab-e40ba8625e13,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-workflowjt6ht/series-workflowjt6ht-convert-artifact-2375794041/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": "9ea08c5c-8118-493e-b727-1f9bbbdfdbe5", "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-workflowjt6ht/series-workflowjt6ht-build-action-1358397269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 08:07:40 +0000 UTC FinishedAt: 2026-06-29 08:38:55 +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:*e604e814-e533-4d4e-beab-e40ba8625e13,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-workflowjt6ht/series-workflowjt6ht-convert-artifact-2375794041/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": "9ea08c5c-8118-493e-b727-1f9bbbdfdbe5", "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-workflowjt6ht/series-workflowjt6ht-build-action-1358397269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 08:39:05 +0000 UTC FinishedAt: 2026-06-29 08:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 08:39:05 +0000 UTC FinishedAt: 2026-06-29 08:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 08:39:05 +0000 UTC FinishedAt: 2026-06-29 08:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 08:39:05 +0000 UTC FinishedAt: 2026-06-29 08:41:00 +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:*9ea08c5c-8118-493e-b727-1f9bbbdfdbe5,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-workflowjt6ht/series-workflowjt6ht-build-action-1358397269/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-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +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":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"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:*13107220-c79d-4497-aaa2-9c91974bdbca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ea08c5c-8118-493e-b727-1f9bbbdfdbe5,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-workflowjt6ht/series-workflowjt6ht-build-action-1547295420/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-workflowjt6ht/series-workflowjt6ht-build-action-1358397269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:42:21 +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":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"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-workflowjt6ht/series-workflowjt6ht-convert-artifact-3250580974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 08:41:11 +0000 UTC FinishedAt: 2026-06-29 08:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 08:42:31 +0000 UTC FinishedAt: 2026-06-29 08:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_set_channels","rtl8169_realloc_rx","rtl_set_rss_config","rtl8169_init_rss","rtl8169_set_rx_ring_num","rtl_alloc_irq","rtl8169_alloc_rx_desc","rtl8169_free_rx_desc","r8169_init_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"e6ac8d60-e9a3-4ef5-bf5a-0c4fbe504675","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 08:42:31 +0000 UTC FinishedAt: 2026-06-29 08:44:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13107220-c79d-4497-aaa2-9c91974bdbca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ea08c5c-8118-493e-b727-1f9bbbdfdbe5,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-workflowjt6ht/series-workflowjt6ht-build-action-1547295420/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-workflowjt6ht/series-workflowjt6ht-build-action-1358397269/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-workflowjt6ht/series-workflowjt6ht-convert-artifact-3250580974/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,}