Name: series-workflow4n5jw Phase: Succeeded StartedAt: 2026-07-02 15:59:47 +0000 UTC FinishedAt: 2026-07-02 16:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[0] Phase: Succeeded StartedAt: 2026-07-02 15:59:47 +0000 UTC FinishedAt: 2026-07-02 16:15:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 15:59:47 +0000 UTC FinishedAt: 2026-07-02 16:15:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "0bebeab7-12e5-4969-83f3-2d1e71f3277c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph", "vfio_pci_core_feature_tph_resolve", "vfio_pci_core_feature_tph_st", "vfio_tph_config_write", "vfio_tph_capability_adjust", "vfio_pci_dma_buf_get_tph_by_fd", "vfio_pci_dma_buf_get_pci_tph", "pcie_tph_get_cpu_st_explicit", "pcie_enable_tph_explicit", "pcie_tph_supported", "pcie_tph_dsm_supported" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YmRlYmNhMjllNGYxNjdhZTNiZThlZDk1OWE2MTU5OTMwYjdmZDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNjoxMjowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2YS4uZmNkYmExMzVhNGYzMmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNjUsMTEgJiM0MzsxNjUsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xuIFxuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4mIzQzO1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg0LDkgJiM0MzsxODcsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMwLDIxICYjNDM7MjMwLDggQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xuIH1cbiBcbi0vKipcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4tICogd2l0aCBhIHNwZWNpZmljIENQVVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuLSAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4tICpcbi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcbi0gKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbi0gKlxuLSAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbi0gKi9cbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHQgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4ge1xuICNpZmRlZiBDT05GSUdfQUNQSVxuIFx0c3RydWN0IHBjaV9kZXYgKnJwO1xuQEAgLTI2OCwxOSAmIzQzOzI1NSw2NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuJiM0MztcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiBcbi1cdHBjaV9kYmcocGRldiwgXCYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuJiM0MztcdHBjaV9kYmcocGRldiwgXCYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0OyxcbiBcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4tXHRcdGNwdSwgKnRhZyk7XG4mIzQzO1x0XHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcbiBcbiBcdHJldHVybiAwO1xuICNlbHNlXG4gXHRyZXR1cm4gLUVOT0RFVjtcbiAjZW5kaWZcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuJiM0MzsgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbiYjNDM7ICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbiYjNDM7ICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxuJiM0MzsgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgY3B1LCB0YWcpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuXG4mIzQzOyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3tcbiYjNDM7XHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcmVxX3R5cGUsIGNwdSwgdGFnKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpO1xuJiM0MztcbiAvKipcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG4gICogQHBkZXY6IFBDSSBkZXZpY2VcbkBAIC0zMTUsOCAmIzQzOzM0Nyw2IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XG4gXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXG4tXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xuIFxuIFx0c3dpdGNoIChsb2MpIHtcbiBcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbkBAIC0zNjUsMjcgJiM0MzszOTUsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuLS8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuLSAqXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4tICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbi0gKi9cbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCYjMzQ7bm90cGhcJiMzNDsga2VybmVsIHBhcmFtZXRlciAqL1xuIFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXG5AQCAtNDAzLDI2ICYjNDM7NDE2LDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIG1vZGUpIFx1MDAyNiBkZXZfbW9kZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuLVxuLVx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbi1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4tXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbi1cdGVsc2Vcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbi1cbi1cdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4tXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4tXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuLVxuLVx0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gbWluKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4tXHR9XG4tXG4tXHRpZiAocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbiYjNDM7XHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIXBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xuJiM0MztcbiBcdC8qIFdyaXRlIHRoZW0gaW50byBUUEggY29udHJvbCByZWdpc3RlciAqL1xuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsIFx1MDAyNnJlZyk7XG4gXG5AQCAtNDM1LDggJiM0Mzs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbiYjNDM7ICpcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcbiYjNDM7ICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbiYjNDM7ICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4mIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1x0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0IC0gRW5hYmxlIFRQSCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciBzZWxlY3Rpb25cbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gb3BlcmF0ZVxuJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKVxuJiM0MzsgKiBAZXh0ZW5kZWQ6IHRydWUgPSBFWFRfVFBILCBmYWxzZSA9IHN0YW5kYXJkIFRQSCBvbmx5XG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGVcbiYjNDM7ICogbWFudWFsbHkgaW5zdGVhZCBvZiBoYXJkd2FyZSBhdXRvLXNlbGVjdGlvbi4gUmVqZWN0cyBFWFRfVFBIIHJlcXVlc3RcbiYjNDM7ICogaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UmIzM5O3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxuJiM0MzsgKi9cbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xuJiM0MztcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcbkBAIC01MDgsMTQgJiM0Mzs1NjIsODQgQEAgdm9pZCBwY2lfbm9fdHBoKHZvaWQpXG4gXG4gdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuJiM0MztcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuIFxuIFx0cGRldi1cdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcbiBcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuJiM0MztcdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4mIzQzO1x0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuJiM0MztcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4mIzQzO1x0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbiYjNDM7XHRcdHBkZXYtXHUwMDNldHBoX2NhcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbiYjNDM7XG4gXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuIFx0c2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgJiM0MzsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcbiBcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd2FudF9leHQpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSVxuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuJiM0MztcdGlmICghaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uN2VmODJiNDQ1NzIyNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgJiM0Mzs2MCwyOCBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XG4mIzQzO3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxuJiM0MztcdFx0XHRcdCAgICAgVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdHBoX3BhcmFtX29wcyA9IHtcbiYjNDM7XHQuc2V0ID0gdHBoX3NldCxcbiYjNDM7XHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4mIzQzO307XG4mIzQzO21vZHVsZV9wYXJhbV9jYih0cGgsIFx1MDAyNnRwaF9wYXJhbV9vcHMsIFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKHRwaCxcbiYjNDM7XHRcJiMzNDtHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDswID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDszID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVL0xJVEVSQUwgc291cmNlc1xcblwmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzd2l0Y2ggKHBkZXYtXHUwMDNldmVuZG9yKSB7XG5AQCAtMTQyLDYgJiM0MzsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXG4gXHR2ZGV2LVx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uMzg4ZGQ2ZmVkMTZiNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxMjcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXG4mIzQzO1x0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogUGVyIFBDSSBzcGVjaWZpY2F0aW9uOiBUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiA2NCBlbnRyaWVzXG4mIzQzO1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuJiM0MztcdCAqIENhcGFiaWxpdHkgc3RydWN0dXJlLlxuJiM0MztcdCAqIEFuZCB0aGUgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0gaXMgMHhGRiwgc28gdGhlXG4mIzQzO1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICYjNDM7IGkgKiBzaXplb2YodTE2KSxcbiYjNDM7XHRcdCAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBwb3MpXG4mIzQzO3tcbiYjNDM7XHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyAmIzQzOyBQQ0lfVFBIX0NBUF07XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbiYjNDM7XHRib29sIG5lZWRfYWRqdXN0ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XG4mIzQzO1x0XHQvKiBSZW1vdmUgZXh0ZW5kIFRQSCBpZiByb290LXBvcnQgZG9uJiMzOTt0IHN1cHBvcnQgKi9cbiYjNDM7XHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuJiM0MztcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XG4mIzQzO1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBtb2RlIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbiYjNDM7XHRcdFx0IFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuJiM0MztcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX1NUX0RTO1xuJiM0MztcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24mIzM5O3Qgc3VwcG9ydCBJViBtb2RlICovXG4mIzQzO1x0XHRpZiAoISh2YWwgXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSlcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuJiM0MztcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5lZWRfYWRqdXN0KVxuJiM0MztcdFx0KnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTtcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuJiM0MztcdHU4IG1vZGUsIHJlcSwgb3JnX3JlcTtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XG4mIzQzO1x0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0b3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTtcbiYjNDM7XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcdTAwMjZvcmdfdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSBjb3VudClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICYjNDM7IFBDSV9UUEhfQ1RSTF0pO1xuJiM0MztcdGlmIChuZXdfY3RybCA9PSBvcmdfY3RybClcbiYjNDM7XHRcdGdvdG8gb3V0OyAvKiBPbmx5IGNhcmUgYWJvdXQgY2hhbmdlcyBpbiBUUEhfQ1RSTC4gKi9cbiYjNDM7XG4mIzQzO1x0Y2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DQVBdKTtcbiYjNDM7XHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7XG4mIzQzO1x0cmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgbmV3X2N0cmwpO1xuJiM0MztcdGlmIChtb2RlIFx1MDAzZSBQQ0lfVFBIX1NUX0RTX01PREUgfHwgIShjYXAgXHUwMDI2ICgxdSBcdTAwM2NcdTAwM2MgbW9kZSkpIHx8IHJlcSA9PSAweDIgfHxcbiYjNDM7XHRcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIShjYXAgXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTsgLyogRHJvcCBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHdyaXRlIHZhbHVlICovXG4mIzQzO1xuJiM0MztcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XG4mIzQzO1x0aWYgKHJlcSA9PSBvcmdfcmVxKVxuJiM0MztcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7IC8qIERyb3AgdGhpcyB3cml0ZSAqL1xuJiM0MztcbiYjNDM7XHRpZiAocmVxID09IFBDSV9UUEhfUkVRX1RQSF9PTkxZIHx8IHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKSB7XG4mIzQzO1x0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbiYjNDM7XHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmU7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuJiM0MztcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztyZXN0b3JlOlxuJiM0MztcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcbiYjNDM7b3V0OlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyMjIsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjQzLDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xNDUwLDYgJiM0MzsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICYjNDM7IGJ5dGUgJiM0MzsgMTtcbiBcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxuJiM0MztcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNmR3b3JkKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbkBAIC0xNzAxLDYgJiM0MzsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcdTAwMjZcdTAwMjYgIWhpZGRlbilcbiYjNDM7XHRcdFx0dmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3QodmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJiMzOTtyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMDMuLjljMGYzYzdhMWVmNzM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuICNpbmNsdWRlIFx1MDAzY2FzbS9lZWguaFx1MDAzZVxuQEAgLTEyNywxMCAmIzQzOzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaF9wb2xpY3koc3RydWN0IHNlcV9maWxlICpzZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsldVxcblwmIzM0OywgdmRldi1cdTAwM2V0cGhfcG9saWN5KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuLSAqIGRpc2FibGVfaWRsZV9kMyBhbmQgbm9pbnR4bWFzayBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnMgbGF0Y2hlZFxuLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuJiM0MzsgKiBkaXNhYmxlX2lkbGVfZDMsIG5vaW50eG1hc2sgYW5kIHRwaF9wb2xpY3kgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzXG4mIzQzOyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4mIzQzOyAqIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuICAqIGhlcmUgZm9yIHZpc2liaWxpdHk7IHJlYWQtb25seSBwYXJhbWV0ZXJzIGNhbiYjMzk7dCBkcmlmdCBhbmQgYXJlIG9taXR0ZWQuXG4gICovXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuQEAgLTE0Niw2ICYjNDM7MTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwmIzM0O2Rpc2FibGVfaWRsZV9kM1wmIzM0OywgcGNpX2RpcixcbiBcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcJiMzNDt0cGhfcG9saWN5XCYjMzQ7LCBwY2lfZGlyLFxuJiM0MztcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC02MTAsNiAmIzQzOzYyMiw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXG4mIzQzO1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXHR2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcbiBcdGlmICghdmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXG5AQCAtNzU3LDYgJiM0Mzs3NzIsOSBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXG4gXHR2ZmlvX3BjaV96ZGV2X2Nsb3NlX2RldmljZSh2ZGV2KTtcbiBcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXG4mIzQzO1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB3ZSBoYXZlIHNhdmVkIHN0YXRlLCByZXN0b3JlIGl0LiAgSWYgd2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UsXG4gXHQgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW5cbkBAIC0xNjA3LDYgJiM0MzsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldiwgZmFsc2UpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuJiM0MztcdFx0XHRWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRzaXplb2YodHBoKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjtcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFU7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXG4mIzQzO1x0XHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MzIgcGVybWl0X3NyY19tYXNrW10gPSB7XG4mIzQzO1x0XHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcbiYjNDM7XHRcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUXSA9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGLFxuJiM0MztcdFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgLi4uIFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTF0gPVxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfFxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCxcbiYjNDM7XHR9O1xuJiM0MztcdHUzMiBwZXJtaXRfZmxhZ3MgPSBwZXJtaXRfc3JjX21hc2tbdmRldi1cdTAwM2V0cGhfcG9saWN5XSB8XG4mIzQzO1x0XHRcdCAgIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlID0gezB9O1xuJiM0MztcdGVudW0gdHBoX21lbV90eXBlIG10eXBlO1xuJiM0MztcdGJvb2wgZXh0ZW5kZWQ7XG4mIzQzO1x0dTMyIHNyY19iaXRzO1xuJiM0MztcdHUxNiB0YWcgPSAwO1xuJiM0MztcdHU4IHBoID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHNyY19iaXRzID0gcmVzb2x2ZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xuJiM0MztcdGlmICghKHJlc29sdmUuZmxhZ3MgXHUwMDI2IHBlcm1pdF9mbGFncykgfHwgIWlzX3Bvd2VyX29mXzIoc3JjX2JpdHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0ZXh0ZW5kZWQgPSAhIShyZXNvbHZlLmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuJiM0MztcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlc29sdmUudmFsaWQgPSAwO1xuJiM0MztcdHJlc29sdmUucGggPSAwO1xuJiM0MztcdHJlc29sdmUuc3QgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XG4mIzQzO1x0XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnRhZywgXHUwMDI2cGgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJlc29sdmUucGggPSBwaDtcbiYjNDM7XHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4mIzQzO1x0XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkge1xuJiM0MztcdFx0XHRyZXNvbHZlLnN0ID0gdGFnO1xuJiM0MztcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXR5cGUgPSAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKSA/XG4mIzQzO1x0XHRcdFRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTtcbiYjNDM7XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHZkZXYtXHUwMDNlcGRldiwgbXR5cGUsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0ICAgcmVzb2x2ZS5zcmMsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbiYjNDM7XHRyZXNvbHZlLnN0ID0gdGFnO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgdHBoX2NhbGNfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcbiYjNDM7XHRcdFx0ICBib29sIGV4dGVuZGVkLCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdHU4IHBoO1xuJiM0MztcbiYjNDM7XHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSlcbiYjNDM7XHRcdCp0YWcgPSAwO1xuJiM0MztcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbiYjNDM7XHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChzcmNfaG5kbCwgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxuJiM0MztcdFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4mIzQzO1x0XHRcdFx0XHRleHRlbmRlZCwgc3JjX2huZGwsIHRhZyk7XG4mIzQzO1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbiYjNDM7XHRcdFx0XHRcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMKVxuJiM0MztcdFx0KnRhZyA9IHNyY19obmRsO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ICE9IDApXG4mIzQzO1x0XHQqdGFnID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHUzMiBwZXJtaXRfZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0sgfCBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgc3JjX2JpdHMsIHN0X3NpemU7XG4mIzQzO1x0Ym9vbCBzdG9wX29uX3plcm9fc3Q7XG4mIzQzO1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4mIzQzO1x0dm9pZCBfX3VzZXIgKnVwdHI7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8IHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHRwaF9zdCkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0c3JjX2JpdHMgPSB0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSztcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcbiYjNDM7XHRcdHBlcm1pdF9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUw7XG4mIzQzO1x0aWYgKCEodHBoX3N0LmZsYWdzIFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGV4dGVuZGVkID0gISEodHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuJiM0MztcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHN0X3NpemUgPSB0cGhfY2FsY19zdF9zaXplKHZkZXYpO1xuJiM0MztcdGlmICh0cGhfc3Quc3RhcnQgXHUwMDNlPSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCBcdTAwM2Ugc3Rfc2l6ZSAtIHRwaF9zdC5zdGFydCB8fFxuJiM0MztcdFx0dHBoX3N0LmNvdW50ID09IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0dXB0ciA9IHU2NF90b191c2VyX3B0cih0cGhfc3QuZGVzdHMpO1xuJiM0MztcdGlmICghKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XG4mIzQzO1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpO1xuJiM0MztcdFx0aWYgKElTX0VSUihzcmNfaG5kbCkpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHNyY19obmRsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRzdG9wX29uX3plcm9fc3QgPSAhISh0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKTtcbiYjNDM7XHRpZiAodHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXG4mIzQzO1x0XHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSB0cGhfZ2V0X3N0X3RhZyhwZGV2LCBzcmNfYml0cywgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXG4mIzQzO1x0XHRcdFx0ICAgICBleHRlbmRlZCwgXHUwMDI2dGFnKTtcbiYjNDM7XHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcdTAwMjZcdTAwMjYgdGFnID09IDApKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCB0cGhfc3Quc3RhcnQgJiM0MzsgaSwgdGFnKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdGtmcmVlKHNyY19obmRsKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTYyNSw2ICYjNDM7MTg2NCwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kOWM1ZTQzNGU1ODZmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0xOSw3ICYjNDM7MTksMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbiYjNDM7XHR1OCByZXZva2VkOjE7XG4mIzQzO1x0dTggdHBoX3BoOjI7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3hzdF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHR1MTYgdHBoX3hzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC04MSw2ICYjNDM7ODgsMjYgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdFx0XHR1MTYgKnRhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF94c3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCp0YWcgPSBwcml2LVx1MDAzZXRwaF94c3Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCp0YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbiYjNDM7XHR9XG4mIzQzO1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbkBAIC0xMDYsNiAmIzQzOzEzMywyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbiB9O1xuIFxuJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhpcyBpcyBhIHRlbXBvcmFyeSBcJiMzNDtwcml2YXRlIGludGVyY29ubmVjdFwmIzM0OyBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiAmIzQzOzExLDEzIEBAXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFx0XHQxMDAwXG4gXG4mIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMID0gMyxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXh0O1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlXHQqdmRldjtcbkBAIC0xMTUsMTIgJiM0MzsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiYjNDM7aW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnLCB1OCAqcGgpO1xuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbiBcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbiAjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0XHQgdTE2ICp0YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWM5NjkyZDc0MGE2MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAgKi9cbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG5AQCAtMjYsMTAgJiM0MzsyNywxNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG5AQCAtMzgsOSAmIzQzOzQ2LDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgIGJvb2wgZXh0ZW5kZWQpXG4mIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuJiM0Mzt7IHJldHVybiBmYWxzZTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li5hOTllZWVhNTNjODE0YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OCw3ICYjNDM7NTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjE0O1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuJiM0MztcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfZW5hYmxlZDoxO1x0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xuIFx0dThcdFx0dHBoX21vZGU7XHQvKiBUUEggbW9kZSAqL1xuIFx0dThcdFx0dHBoX3JlcV90eXBlO1x0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggOWExNjc0YzE1MmFhMjkuLjlhNmU4MmM1YzAwY2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTQ5LDYgJiM0MzsxNDksOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbiYjNDM7XHR1OFx0XHRcdHRwaF9wb2xpY3k7XG4mIzQzO1x0Ym9vbFx0XHRcdHRwaF9wZXJtaXQ7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLmVkMDRiNjI4MGNkNjllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsNjggQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxM1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVcdDE0XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE1XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4mIzQzOyAqXG4mIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlOyBmbGFncyBtdXN0IGJlIHplcm8uXG4mIzQzOyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIGluIGZsYWdzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHtcbiYjNDM7XHRfX3UzMiBmbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIENhcGFiaWxpdHkgYml0cyByZXR1cm5lZCBieSBHRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRlx0KDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBETUFCVUYgc291cmNlcyByZXNvbHZhYmxlICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFVcdFx0KDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXHQoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXG4mIzQzOyAqIE5vdGU6IEdFVCBvbmx5XG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XHQvKiBJTjogc291cmNlIHR5cGUgJiM0MzsgbmFtZXNwYWNlIG1vZGlmaWVycyAqL1xuJiM0MztcdF9fdTMyIHNyYztcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xuJiM0MztcdF9fdTggdmFsaWQ7XHQvKiBPVVQ6IGJpdG1hcCBpbmRpY2F0aW5nIHZhbGlkIG91dHB1dCBmaWVsZHMgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEggKDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBwaCBob2xkcyB2YWxpZCBwcm9jZXNzaW5nIGhpbnQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbiYjNDM7XHRfX3U4IHBoO1x0LyogT1VUOiBUUEggcHJvY2Vzc2luZyBoaW50ICovXG4mIzQzO1x0X191MTYgc3Q7XHQvKiBPVVQ6IHJhdyBzdGVlcmluZyB0YWcgdmFsdWUgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBTVCB0YWJsZSBlbnRyaWVzXG4mIzQzOyAqIFJldHVybiB2YWx1ZTogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXNcbiYjNDM7ICogTm90ZTogU0VUIG9ubHlcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XHRcdC8qIElOOiBzb3VyY2UgdHlwZSAmIzQzOyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXG4mIzQzO1x0X191MTYgc3RhcnQ7XHRcdC8qIElOOiBmaXJzdCBTVCB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvciAqL1xuJiM0MztcdF9fdTE2IGNvdW50O1x0XHQvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovXG4mIzQzO1x0X19hbGlnbmVkX3U2NCBkZXN0cztcdC8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBUUEhfU1Qgb25seTogc2V0IFNUPTAgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRlx0ICAgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzcmMgPSBkbWEtYnVmIGZkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UICgxdSBcdTAwM2NcdTAwM2MgMykgLyogc3JjID0gcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMICAgICAgICAoMXUgXHUwMDNjXHUwMDNjIDQpIC8qIFRQSF9TVCBvbmx5OiBzcmMgPSByYXcgbGl0ZXJhbCBTVCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCAgICAgICAgICgxdSBcdTAwM2NcdTAwM2MgMzEpIC8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIFNUPTAgKi9cbiYjNDM7XG4mIzQzOy8qIE1hc2sgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZSBzb3VyY2UgdHlwZSBiaXRzLCBvbmx5IG9uZSBtYXkgYmUgc2V0ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLXHQoVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QmIzM0OywKICAgICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9kc21fc3VwcG9ydGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmJkZWJjYTI5ZTRmMTY3YWUzYmU4ZWQ5NTlhNjE1OTkzMGI3ZmQxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTY6MTI6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jCmluZGV4IDY1NWZmZDYwZTYyZjZhLi5mY2RiYTEzNWE0ZjMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTE2NSwxMSAmIzQzOzE2NSwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogICovCiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1MzIgcmVnOwomIzQzOwl1MzIgcmVnID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgcmVnKTsKJiM0MzsJcmV0dXJuIHJlZyAmYW1wOyBQQ0lfVFBIX0NBUF9MT0NfTUFTSzsKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7CiAKQEAgLTE4NCw5ICYjNDM7MTg3LDYgQEAgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJLyogQ2hlY2sgU1QgdGFibGUgbG9jYXRpb24gZmlyc3QgKi8KIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCi0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAJaWYgKGxvYyAhPSBQQ0lfVFBIX0xPQ19DQVApCiAJCXJldHVybiAwOwogCkBAIC0yMzAsMjEgJiM0MzsyMzAsOCBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpOwogfQogCi0vKioKLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKLSAqIHdpdGggYSBzcGVjaWZpYyBDUFUKLSAqIEBwZGV2OiBQQ0kgZGV2aWNlCi0gKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pCi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAotICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkCi0gKgotICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCi0gKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS4KLSAqCi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCi0gKi8KLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiB7CiAjaWZkZWYgQ09ORklHX0FDUEkKIAlzdHJ1Y3QgcGNpX2RldiAqcnA7CkBAIC0yNjgsMTkgJiM0MzsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LSZndDt0cGhfcmVxX3R5cGUsICZhbXA7aW5mbyk7CiYjNDM7CSp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCAmYW1wO2luZm8pOwogCi0JcGNpX2RiZyhwZGV2LCAmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxuJiMzNDssCiYjNDM7CXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XG4mIzM0OywKIAkJKG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyAmIzM0O3ZvbGF0aWxlJiMzNDsgOiAmIzM0O3BlcnNpc3RlbnQmIzM0OywKLQkJY3B1LCAqdGFnKTsKJiM0MzsJCXJlcV90eXBlLCBjcHUsICp0YWcpOwogCiAJcmV0dXJuIDA7CiAjZWxzZQogCXJldHVybiAtRU5PREVWOwogI2VuZGlmCiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZAomIzQzOyAqIHdpdGggYSBzcGVjaWZpYyBDUFUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCiYjNDM7ICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0IC0gR2V0IFNUIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAZXh0ZW5kZWQ6IHRydWU9RVhUX1RQSCwgZmFsc2U9c3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IG91dHB1dCBzdGVlcmluZyB0YWcgcG9pbnRlcgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuCiYjNDM7ICogUmVqZWN0cyBFWFQgcmVxdWVzdCBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQgJmFtcDsmYW1wOyAhcGRldi0mZ3Q7dHBoX2V4dF9zdXBwb3J0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpOwomIzQzOwogLyoqCiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5CiAgKiBAcGRldjogUENJIGRldmljZQpAQCAtMzE1LDggJiM0MzszNDcsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpCiAJc2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTsKIAogCWxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7Ci0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovCi0JbG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTsKIAogCXN3aXRjaCAobG9jKSB7CiAJY2FzZSBQQ0lfVFBIX0xPQ19NU0lYOgpAQCAtMzY1LDI3ICYjNDM7Mzk1LDEwIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7CiAKLS8qKgotICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlCi0gKiBAcGRldjogUENJIGRldmljZQotICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOgotICoKLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZQotICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGUKLSAqCi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZwotICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cywKLSAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgotICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCi0gKi8KLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKQogewogCXUzMiByZWc7CiAJdTggZGV2X21vZGVzOwotCXU4IHJwX3JlcV90eXBlOwogCiAJLyogSG9ub3IgJiMzNDtub3RwaCYjMzQ7IGtlcm5lbCBwYXJhbWV0ZXIgKi8KIAlpZiAocGNpX3RwaF9kaXNhYmxlZCkKQEAgLTQwMywyNiAmIzQzOzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKIAlpZiAoISgoMSAmbHQ7Jmx0OyBtb2RlKSAmYW1wOyBkZXZfbW9kZXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBkZXYtJmd0O3RwaF9tb2RlID0gbW9kZTsKLQotCS8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsICZhbXA7cmVnKTsKLQlpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpCi0JCXBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7Ci0JZWxzZQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKLQotCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovCi0JaWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkgewotCQlycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTsKLQotCQkvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovCi0JCXBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9IG1pbihwZGV2LSZndDt0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTsKLQl9Ci0KLQlpZiAocGRldi0mZ3Q7dHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpCiYjNDM7CWlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIICZhbXA7JmFtcDsgIXBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcGRldi0mZ3Q7dHBoX21vZGUgPSBtb2RlOwomIzQzOwlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSByZXFfdHlwZTsKJiM0MzsKIAkvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsICZhbXA7cmVnKTsKIApAQCAtNDM1LDggJiM0Mzs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKJiM0MzsgKgomIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKJiM0MzsgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLAomIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgomIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOgomIzQzOwkJCQkJICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CXJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvbgomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGUKJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdAomIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJdTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC4KJiM0MzsgKi8KJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9yZXFfdHlwZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTsKJiM0MzsKIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOwpAQCAtNTA4LDE0ICYjNDM7NTYyLDg0IEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKQogCiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKJiM0MzsJdTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTsKIAlpbnQgbnVtX2VudHJpZXM7CiAJdTMyIHNhdmVfc2l6ZTsKJiM0MzsJdTMyIHJlZyA9IDA7CiAKIAlwZGV2LSZndDt0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTsKIAlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiAJCXJldHVybjsKIAomIzQzOwkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwomIzQzOwlpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwomIzQzOwllbHNlCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi8KJiM0MzsJaWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkgewomIzQzOwkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7CiYjNDM7CQkvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7CiYjNDM7CQlwZGV2LSZndDt0cGhfY2FwID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQgPSAhISh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CiAJbnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKIAlzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpOwogCXBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfc3VwcG9ydGVkIC0gQ2hlY2sgVFBIIGNhcGFiaWxpdHkgYXR0cmlidXRlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBtYXRjaGVkIGNvbmRpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpCiYjNDM7ewomIzQzOwlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd2FudF9leHQpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQgLSBDaGVjayBpZiByb290IHBvcnQgZXhwb3NlcyBUUEggU1QgX0RTTQomIzQzOyAqIEBwZGV2OiB0YXJnZXQgUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRydWUgaWYgcm9vdCBwb3J0IG9mIEBwZGV2IHByb3ZpZGVzIFRQSCBTVCBEU00gZnVuY3Rpb24sCiYjNDM7ICogZmFsc2Ugb3RoZXJ3aXNlIChBQ1BJIGRpc2FibGVkIG9yIERTTSBtaXNzaW5nKS4KJiM0MzsgKi8KJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlhY3BpX2hhbmRsZSBoYW5kbGU7CiYjNDM7CiYjNDM7CWlmICghcnAgfHwgIXJwLSZndDtidXMgfHwgIXJwLSZndDtidXMtJmd0O2JyaWRnZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKTsKJiM0MzsJaWYgKCFoYW5kbGUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsICZhbXA7cGNpX2FjcGlfZHNtX2d1aWQsIDcsCiYjNDM7CQkJICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKaW5kZXggODMwMzY5ZmY4NzhkYmUuLjdlZjgyYjQ0NTcyMjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC02MCw2ICYjNDM7NjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgJiMzNDtEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuJiMzNDspOwogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5OwomIzQzO3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULAomIzQzOwkJCQkgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCk7CiYjNDM7fQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0gewomIzQzOwkuc2V0ID0gdHBoX3NldCwKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7bW9kdWxlX3BhcmFtX2NiKHRwaCwgJmFtcDt0cGhfcGFyYW1fb3BzLCAmYW1wO3RwaF9wb2xpY3ksIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0ModHBoLAomIzQzOwkmIzM0O0dsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxuJiMzNDsKJiM0MzsJJiMzNDswID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XG4mIzM0OwomIzQzOwkmIzM0OyAgICAgICAgICAgICAgICBTVCBwcm9ncmFtbWluZyB1bmF2YWlsYWJsZVxuJiMzNDsKJiM0MzsJJiMzNDsxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcbiYjMzQ7CiYjNDM7CSYjMzQ7MiA9IEFkZCBEUyBtb2RlOiBSRVNPTFZFIHJldHVybnMgUEgmIzQzO1NUIGZvciBETUFCVUYvQ1BVIHNvdXJjZXM7XG4mIzM0OwomIzQzOwkmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xuJiMzNDsKJiM0MzsJJiMzNDszID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcbiYjMzQ7CiYjNDM7CSYjMzQ7ICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcbiYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzd2l0Y2ggKHBkZXYtJmd0O3ZlbmRvcikgewpAQCAtMTQyLDYgJiM0MzsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KQogI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0EKIAl2ZGV2LSZndDtkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhOwogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzOwl2ZGV2LSZndDt0cGhfcG9saWN5ID0gdHBoX3BvbGljeTsKJiM0MzsjZW5kaWYKIAogCXJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwppbmRleCBhMTBlZDczM2YwZTNhZi4uMzg4ZGQ2ZmVkMTZiNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTEwODUsNiAmIzQzOzEwODYsMTI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqLwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTsKJiM0MzsJcF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpOwomIzQzOwomIzQzOwlwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCwKJiM0MzsJICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogUGVyIFBDSSBzcGVjaWZpY2F0aW9uOiBUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiA2NCBlbnRyaWVzCiYjNDM7CSAqIHdoZW4gdGhlIFNUIHRhYmxlIGlzIGxvY2F0ZWQgaW4gdGhlIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWQKJiM0MzsJICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuCiYjNDM7CSAqIEFuZCB0aGUgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0gaXMgMHhGRiwgc28gdGhlCiYjNDM7CSAqIGZvbGxvd2luZyBvcGVyYXRpb24gaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiAmIzQzOyBpICogc2l6ZW9mKHUxNiksCiYjNDM7CQkgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQkgICAgICAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwlib29sIG5lZWRfYWRqdXN0ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7CiYjNDM7CQkvKiBSZW1vdmUgZXh0ZW5kIFRQSCBpZiByb290LXBvcnQgZG9uJiMzOTt0IHN1cHBvcnQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7CiYjNDM7CQluZWVkX2FkanVzdCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCkgewomIzQzOwkJLyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHwKJiM0MzsJCQkgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTsKJiM0MzsJCW5lZWRfYWRqdXN0ID0gdHJ1ZTsKJiM0MzsJfSBlbHNlIGlmICh2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHsKJiM0MzsJCS8qIFJlcG9ydCBvbmx5IE5vLVNUIGFuZCBJViBtb2RlcyBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX1NUX0RTOwomIzQzOwkJLyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24mIzM5O3Qgc3VwcG9ydCBJViBtb2RlICovCiYjNDM7CQlpZiAoISh2YWwgJmFtcDsgUENJX1RQSF9DQVBfU1RfSVYpKQomIzQzOwkJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spOwomIzQzOwkJbmVlZF9hZGp1c3QgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChuZWVkX2FkanVzdCkKJiM0MzsJCSp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7CiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLAomIzQzOwkJCQkgaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLAomIzQzOwkJCQkgaW50IG9mZnNldCwgX19sZTMyIHZhbCkKJiM0Mzt7CiYjNDM7CXUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgb3JnX2N0cmwsIG5ld19jdHJsLCBjYXA7CiYjNDM7CXU4IG1vZGUsIHJlcSwgb3JnX3JlcTsKJiM0MzsJX19sZTMyIG9yZ192YWwgPSAwOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXZkZXYtJmd0O3RwaF9wZXJtaXQpCiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CiYjNDM7CWRvd25fd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CW9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CXZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsICZhbXA7b3JnX3ZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzOwlpZiAocmV0ICE9IGNvdW50KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CWlmIChuZXdfY3RybCA9PSBvcmdfY3RybCkKJiM0MzsJCWdvdG8gb3V0OyAvKiBPbmx5IGNhcmUgYWJvdXQgY2hhbmdlcyBpbiBUUEhfQ1RSTC4gKi8KJiM0MzsKJiM0MzsJY2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DQVBdKTsKJiM0MzsJbW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpOwomIzQzOwlyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7CiYjNDM7CWlmIChtb2RlICZndDsgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwICZhbXA7ICgxdSAmbHQ7Jmx0OyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fAomIzQzOwkJKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIICZhbXA7JmFtcDsgIShjYXAgJmFtcDsgUENJX1RQSF9DQVBfRVhUX1RQSCkpKQomIzQzOwkJZ290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi8KJiM0MzsKJiM0MzsJb3JnX3JlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG9yZ19jdHJsKTsKJiM0MzsJaWYgKHJlcSA9PSBvcmdfcmVxKQomIzQzOwkJZ290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovCiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi8KJiM0MzsKJiM0MzsJaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkgewomIzQzOwkJZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CQlyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmU7CiYjNDM7CX0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHsKJiM0MzsJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7cmVzdG9yZToKJiM0MzsJdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpOwomIzQzO291dDoKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzCiAgKi8KQEAgLTExMDAsNiAmIzQzOzEyMjIsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZCkKIAogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlmcmVlX3Blcm1fYml0cygmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKIH0KIAogaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQpAQCAtMTEyMCw2ICYjNDM7MTI0Myw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZCkKIAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7CiAJcmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pOwomIzQzOwlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7CiYjNDM7CWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlOwogCWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlOwogCkBAIC0xNDUwLDYgJiM0MzsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG8KIAkJYnl0ZSAmYW1wOz0gUENJX0RQQV9DQVBfU1VCU1RBVEVfTUFTSzsKIAkJcmV0dXJuIFBDSV9EUEFfQkFTRV9TSVpFT0YgJiM0MzsgYnl0ZSAmIzQzOyAxOwogCWNhc2UgUENJX0VYVF9DQVBfSURfVFBIOgomIzQzOwkJaWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKQomIzQzOwkJCXJldHVybiAwOwogCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtkd29yZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKQEAgLTE3MDEsNiAmIzQzOzE4MjgsOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggJmFtcDsmYW1wOyAhaGlkZGVuKQomIzQzOwkJCXZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0KHZkZXYsIGVwb3MpOwogCiAJCS8qCiAJCSAqIElmIHdlJiMzOTtyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCmluZGV4IDNmMTFhOTYyNGI5YzAzLi45YzBmM2M3YTFlZjczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdWZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXAycGRtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktdHBoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpCiAjaW5jbHVkZSAmbHQ7YXNtL2VlaC5oJmd0OwpAQCAtMTI3LDEwICYjNDM7MTI4LDE5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaF9wb2xpY3koc3RydWN0IHNlcV9maWxlICpzZXEsCiYjNDM7CQkJCQkgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyV1XG4mIzM0OywgdmRldi0mZ3Q7dHBoX3BvbGljeSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWQKLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGUKLSAqIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzCiYjNDM7ICogZGlzYWJsZV9pZGxlX2QzLCBub2ludHhtYXNrIGFuZCB0cGhfcG9saWN5IGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycwomIzQzOyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tCiYjNDM7ICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzCiAgKiBoZXJlIGZvciB2aXNpYmlsaXR5OyByZWFkLW9ubHkgcGFyYW1ldGVycyBjYW4mIzM5O3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLgogICovCiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC0xNDYsNiAmIzQzOzE1Niw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJCQkgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX25vaW50eG1hc2spOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsICYjMzQ7ZGlzYWJsZV9pZGxlX2QzJiMzNDssIHBjaV9kaXIsCiAJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCAmIzM0O3RwaF9wb2xpY3kmIzM0OywgcGNpX2RpciwKJiM0MzsJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGhfcG9saWN5KTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQpAQCAtNjEwLDYgJiM0Mzs2MjIsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKIAogCXZkZXYtJmd0O3Jlc2V0X3dvcmtzID0gIXJldDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IGZhbHNlOwomIzQzOwkvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi8KJiM0MzsJcGNpZV9kaXNhYmxlX3RwaCh2ZGV2LSZndDtwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAl2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7CiAJaWYgKCF2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUpCkBAIC03NTcsNiAmIzQzOzc3Miw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAogCXZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpOwogCiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gZXhpdCB1c2VyIHNlc3Npb24gKi8KJiM0MzsJcGNpZV9kaXNhYmxlX3RwaCh2ZGV2LSZndDtwZGV2KTsKJiM0MzsKIAkvKgogCSAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSwKIAkgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW4KQEAgLTE2MDcsNiAmIzQzOzE2MjUsMjI3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICBzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCBmYWxzZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osCiYjNDM7CQkJVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQlzaXplb2YodHBoKSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCkgewomIzQzOwkJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IDE7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCAmYW1wOyZhbXA7CiYjNDM7CQlwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQomIzQzOwkJdHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVOwomIzQzOwlpZiAodmRldi0mZ3Q7dHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpCiYjNDM7CQl0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMOwomIzQzOwomIzQzOwlyZXR1cm4gY29weV90b191c2VyKGFyZywgJmFtcDt0cGgsIHNpemVvZih0cGgpKSA/IC1FRkFVTFQgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJdTMyIGZsYWdzLAomIzQzOwkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLAomIzQzOwkJCXNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CWNvbnN0IHUzMiBwZXJtaXRfc3JjX21hc2tbXSA9IHsKJiM0MzsJCVtWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUXSA9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGLAomIzQzOwkJW1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsCiYjNDM7CQlbVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCAuLi4gVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMXSA9CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRiB8CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5ULAomIzQzOwl9OwomIzQzOwl1MzIgcGVybWl0X2ZsYWdzID0gcGVybWl0X3NyY19tYXNrW3ZkZXYtJmd0O3RwaF9wb2xpY3ldIHwKJiM0MzsJCQkgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHJlc29sdmUgPSB7MH07CiYjNDM7CWVudW0gdHBoX21lbV90eXBlIG10eXBlOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwl1MzIgc3JjX2JpdHM7CiYjNDM7CXUxNiB0YWcgPSAwOwomIzQzOwl1OCBwaCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsCiYjNDM7CQkJCSBzaXplb2YocmVzb2x2ZSkpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJc3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSzsKJiM0MzsJaWYgKCEocmVzb2x2ZS5mbGFncyAmYW1wOyBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCB0cnVlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXNvbHZlLnZhbGlkID0gMDsKJiM0MzsJcmVzb2x2ZS5waCA9IDA7CiYjNDM7CXJlc29sdmUuc3QgPSAwOwomIzQzOwomIzQzOwlpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHsKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsCiYjNDM7CQkJCQkJICAgICAmYW1wO3RhZywgJmFtcDtwaCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXNvbHZlLnBoID0gcGg7CiYjNDM7CQlyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIOwomIzQzOwkJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkgewomIzQzOwkJCXJlc29sdmUuc3QgPSB0YWc7CiYjNDM7CQkJcmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltdHlwZSA9IChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkgPwomIzQzOwkJCVRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTsKJiM0MzsJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCh2ZGV2LSZndDtwZGV2LCBtdHlwZSwgZXh0ZW5kZWQsCiYjNDM7CQkJCQkgICByZXNvbHZlLnNyYywgJmFtcDt0YWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDsKJiM0MzsJcmVzb2x2ZS5zdCA9IHRhZzsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3Jlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB0cGhfY2FsY19zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi0mZ3Q7cGRldjsKJiM0MzsJdTMyIGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChsb2MgPT0gUENJX1RQSF9MT0NfQ0FQKSB7CiYjNDM7CQlyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7CiYjNDM7CX0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHsKJiM0MzsJCXJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLAomIzQzOwkJCSAgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTggcGg7CiYjNDM7CiYjNDM7CWlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpCiYjNDM7CQkqdGFnID0gMDsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpCiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLAomIzQzOwkJCQkJCSAgICAgdGFnLCAmYW1wO3BoKTsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpCiYjNDM7CQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9WTSwKJiM0MzsJCQkJCWV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCkKJiM0MzsJCXJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQocGRldiwgVFBIX01FTV9UWVBFX1BNLAomIzQzOwkJCQkJZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpCiYjNDM7CQkqdGFnID0gc3JjX2huZGw7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gMCkKJiM0MzsJCSp0YWcgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJdTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDsKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgc3JjX2JpdHMsIHN0X3NpemU7CiYjNDM7CWJvb2wgc3RvcF9vbl96ZXJvX3N0OwomIzQzOwl1MzIgKnNyY19obmRsID0gTlVMTDsKJiM0MzsJdm9pZCBfX3VzZXIgKnVwdHI7CiYjNDM7CWJvb2wgZXh0ZW5kZWQ7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CXUxNiB0YWc7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCB8fCB2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHRwaF9zdCkpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXNyY19iaXRzID0gdHBoX3N0LmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKQomIzQzOwkJcGVybWl0X2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMOwomIzQzOwlpZiAoISh0cGhfc3QuZmxhZ3MgJmFtcDsgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZXh0ZW5kZWQgPSAhISh0cGhfc3QuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCB0cnVlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzdF9zaXplID0gdHBoX2NhbGNfc3Rfc2l6ZSh2ZGV2KTsKJiM0MzsJaWYgKHRwaF9zdC5zdGFydCAmZ3Q7PSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCAmZ3Q7IHN0X3NpemUgLSB0cGhfc3Quc3RhcnQgfHwKJiM0MzsJCXRwaF9zdC5jb3VudCA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXVwdHIgPSB1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKTsKJiM0MzsJaWYgKCEoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkgewomIzQzOwkJc3JjX2huZGwgPSBtZW1kdXBfYXJyYXlfdXNlcih1cHRyLCB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTsKJiM0MzsJCWlmIChJU19FUlIoc3JjX2huZGwpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKHNyY19obmRsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlzdG9wX29uX3plcm9fc3QgPSAhISh0cGhfc3QuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpOwomIzQzOwlpZiAodHBoX3N0LmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkKJiM0MzsJCXN0b3Bfb25femVyb19zdCA9IGZhbHNlOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdHBoX3N0LmNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gdHBoX2dldF9zdF90YWcocGRldiwgc3JjX2JpdHMsIHNyY19obmRsID8gc3JjX2huZGxbaV0gOiAwLAomIzQzOwkJCQkgICAgIGV4dGVuZGVkLCAmYW1wO3RhZyk7CiYjNDM7CQlpZiAocmV0IHx8IChzdG9wX29uX3plcm9fc3QgJmFtcDsmYW1wOyB0YWcgPT0gMCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICYjNDM7IGksIHRhZyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldCA9IGk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJa2ZyZWUoc3JjX2huZGwpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJCQl2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opCiB7CkBAIC0xNjI1LDYgJiM0MzsxODY0LDEzIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiAJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6CiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRToKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsCiYjNDM7CQkJCQkJCSBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwppbmRleCBjMTZmNDYwYzAxZDY4MS4uZDljNWU0MzRlNTg2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwpAQCAtMTksNyAmIzQzOzE5LDE0IEBAIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHsKIAl1MzIgbnJfcmFuZ2VzOwogCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKLQl1OCByZXZva2VkIDogMTsKJiM0MzsKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi0mZ3Q7cmVzdi4gKi8KJiM0MzsJdTggcmV2b2tlZDoxOwomIzQzOwl1OCB0cGhfcGg6MjsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF94c3RfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3N0OwomIzQzOwl1MTYgdHBoX3hzdDsKIH07CiAKIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKQEAgLTgxLDYgJiM0Mzs4OCwyNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJa3JlZl9wdXQoJmFtcDtwcml2LSZndDtrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpOwogfQogCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQl1MTYgKnRhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmIChleHRlbmRlZCkgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfeHN0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSp0YWcgPSBwcml2LSZndDt0cGhfeHN0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnRhZyA9IHByaXYtJmd0O3RwaF9zdDsKJiM0MzsJfQomIzQzOwkqcGggPSBwcml2LSZndDt0cGhfcGg7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQogewogCXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwpAQCAtMTA2LDYgJiM0MzsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0gewogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLAogfTsKIAomIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJaWYgKGRtYWJ1Zi0mZ3Q7b3BzICE9ICZhbXA7dmZpb19wY2lfZG1hYnVmX29wcykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgdGFnLCBwaCk7CiYjNDM7b3V0OgomIzQzOwlkbWFfYnVmX3B1dChkbWFidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5ICYjMzQ7cHJpdmF0ZSBpbnRlcmNvbm5lY3QmIzM0OyBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLgogICogSXQgYWxsb3dzIHRoZSB0d28gY28tb3BlcmF0aW5nIGRyaXZlcnMgdG8gZXhjaGFuZ2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMTEsNiAmIzQzOzExLDEzIEBACiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovCiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVgJCTEwMDAKIAomIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7CiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLAomIzQzOwlWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSwKJiM0MzsJVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsCiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCA9IDMsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCXN0cnVjdCBsaXN0X2hlYWQJbmV4dDsKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UJKnZkZXY7CkBAIC0xMTUsMTIgJiM0MzsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIH0KIAogI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUYKJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7CiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLAogCQkJCSAgc2l6ZV90IGFyZ3N6KTsKIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiAjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQkJIHUxNiAqdGFnLCB1OCAqcGgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQKIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmgKaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFjOTY5MmQ3NDBhNjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnQKQEAgLTI2LDEwICYjNDM7MjcsMTcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpOwogdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTsKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7CiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTsKJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQpAQCAtMzgsOSAmIzQzOzQ2LDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkJYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsCiYjNDM7CQkJCQkgICBib29sIGV4dGVuZGVkKQomIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCkKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMTkuLmE5OWVlZWE1M2M4MTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTQ3Miw3ICYjNDM7NDcyLDYgQEAgc3RydWN0IHBjaV9kZXYgewogCXVuc2lnbmVkIGludAlhdHNfZW5hYmxlZDoxOwkJLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi8KIAl1bnNpZ25lZCBpbnQJcGFzaWRfZW5hYmxlZDoxOwkvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi8KIAl1bnNpZ25lZCBpbnQJcHJpX2VuYWJsZWQ6MTsJCS8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi8KLQl1bnNpZ25lZCBpbnQJdHBoX2VuYWJsZWQ6MTsJCS8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovCiAJdW5zaWduZWQgaW50CWZtX2VuYWJsZWQ6MTsJCS8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi8KIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwkJLyogTWFuYWdlZCB2aWEgZGV2cmVzICovCiAJdW5zaWduZWQgaW50CWlzX21zaV9tYW5hZ2VkOjE7CS8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovCkBAIC01ODgsNyAmIzQzOzU4NywxMCBAQCBzdHJ1Y3QgcGNpX2RldiB7CiAJdTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqLwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICi0JdTE2CQl0cGhfY2FwOwkvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi8KJiM0MzsJdTE2CQl0cGhfY2FwOjE0OwkvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi8KJiM0MzsJdTE2CQl0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEgKJiM0MzsJCQkJCSAgICAqIHJlcXVlc3RlciBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTE2CQl0cGhfZW5hYmxlZDoxOwkvKiBXaGV0aGVyIFRQSCBpcyBlbmFibGVkICovCiAJdTgJCXRwaF9tb2RlOwkvKiBUUEggbW9kZSAqLwogCXU4CQl0cGhfcmVxX3R5cGU7CS8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCmluZGV4IDlhMTY3NGMxNTJhYTI5Li45YTZlODJjNWMwMGNkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKQEAgLTE0OSw2ICYjNDM7MTQ5LDggQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbmI7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQltZW1vcnlfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRtYWJ1ZnM7CiYjNDM7CXU4CQkJdHBoX3BvbGljeTsKJiM0MzsJYm9vbAkJCXRwaF9wZXJtaXQ7CiB9OwogCiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWVlLi5lZDA0YjYyODBjZDY5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC0xNTM0LDYgJiM0MzsxNTM0LDY4IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBICQkxMwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRQkxNAomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QJMTUKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIC0gQ29udHJvbCBhbmQgcXVlcnkgUENJIFRQSCBjYXBhYmlsaXRpZXMKJiM0MzsgKgomIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlOyBmbGFncyBtdXN0IGJlIHplcm8uCiYjNDM7ICogR0VUOiBSZXR1cm4gc3VwcG9ydGVkIFRQSCBjYXBhYmlsaXR5IGJpdHMgaW4gZmxhZ3MuCiYjNDM7ICovCiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHsKJiM0MzsJX191MzIgZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBDYXBhYmlsaXR5IGJpdHMgcmV0dXJuZWQgYnkgR0VUIG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRgkoMXUgJmx0OyZsdDsgMCkgLyogRE1BQlVGIHNvdXJjZXMgcmVzb2x2YWJsZSAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFUJCSgxdSAmbHQ7Jmx0OyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0xJVEVSQUwJKDF1ICZsdDsmbHQ7IDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlCiYjNDM7ICogTm90ZTogR0VUIG9ubHkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7CiYjNDM7CV9fdTMyIGZsYWdzOwkvKiBJTjogc291cmNlIHR5cGUgJiM0MzsgbmFtZXNwYWNlIG1vZGlmaWVycyAqLwomIzQzOwlfX3UzMiBzcmM7CS8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqLwomIzQzOwlfX3U4IHZhbGlkOwkvKiBPVVQ6IGJpdG1hcCBpbmRpY2F0aW5nIHZhbGlkIG91dHB1dCBmaWVsZHMgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSCAoMXUgJmx0OyZsdDsgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1ICZsdDsmbHQ7IDEpIC8qIHN0IGhvbGRzIHZhbGlkIHN0ZWVyaW5nIHRhZyAqLwomIzQzOwlfX3U4IHBoOwkvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi8KJiM0MzsJX191MTYgc3Q7CS8qIE9VVDogcmF3IHN0ZWVyaW5nIHRhZyB2YWx1ZSAqLwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgU1QgdGFibGUgZW50cmllcwomIzQzOyAqIFJldHVybiB2YWx1ZTogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMKJiM0MzsgKiBOb3RlOiBTRVQgb25seQomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7CiYjNDM7CV9fdTMyIGZsYWdzOwkJLyogSU46IHNvdXJjZSB0eXBlICYjNDM7IG5hbWVzcGFjZSBtb2RpZmllcnMgKi8KJiM0MzsJX191MTYgc3RhcnQ7CQkvKiBJTjogZmlyc3QgU1QgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3IgKi8KJiM0MzsJX191MTYgY291bnQ7CQkvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovCiYjNDM7CV9fYWxpZ25lZF91NjQgZGVzdHM7CS8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgJmx0OyZsdDsgMCkgLyogVFBIX1NUIG9ubHk6IHNldCBTVD0wICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRgkgICAoMXUgJmx0OyZsdDsgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgJmx0OyZsdDsgMikgLyogc3JjID0gdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCAoMXUgJmx0OyZsdDsgMykgLyogc3JjID0gcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwgICAgICAgICgxdSAmbHQ7Jmx0OyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1ICZsdDsmbHQ7IDMwKSAvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IFNUIG5hbWVzcGFjZSAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QgICAgICAgICAoMXUgJmx0OyZsdDsgMzEpIC8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIFNUPTAgKi8KJiM0MzsKJiM0MzsvKiBNYXNrIGZvciBtdXR1YWxseSBleGNsdXNpdmUgc291cmNlIHR5cGUgYml0cywgb25seSBvbmUgbWF5IGJlIHNldCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLCShWRklPX0RFVklDRV9UUEhfU1JDX05PTkUgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCB8IFwKJiM0MzsJCQkJCSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpCiYjNDM7CiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi8KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjY5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBWRklPL1BDSSBUUEggUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqYWJzb2x1dGVseSogaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgZHJpdmVycy9wY2kvdHBoLmNgLCBgZHJpdmVycy92ZmlvLypgIGFuZCBpbmNsdWRlcyBoZWFkZXIgZmlsZSBtb2RpZmljYXRpb25zIGlzIGEgaHVnZSBpbmRpY2F0b3IuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgYnVnIGZpeC4gSXQmIzM5O3MgYWRkaW5nIG5ldyBmZWF0dXJlcyB0byBWRklPIHNwZWNpZmljYWxseSBhcm91bmQgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKS4KClNwZWNpZmljYWxseSwgdGhlc2UgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSGAsIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFYCwgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVGAgaW9jdGxzIHNjcmVhbSAmIzM0O3VzZXJzcGFjZSBpbnRlcmFjdGlvbiwmIzM0OyBhbmQgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gTW9kaWZ5aW5nIHRoZSBWRklPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nIHRvIGFsbG93IHdyaXRpbmcgdG8gdGhlIFRQSCBjYXBhYmlsaXR5IGFsc28gb3BlbnMgdXAgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhlIGFkZGl0aW9uIG9mIGEgYHRwaGAgbW9kdWxlIHBhcmFtZXRlciB0byBgdmZpb19wY2lgIGZ1cnRoZXIgc29saWRpZmllcyB0aGUgaW1wYWN0LgoKU28sIHllYWgsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlIGNvZGUsIEkmIzM5O3ZlIGdvdCBhIGxpc3Q6CgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgCiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgCiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYAoqICAgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoKVGhvc2UgYXJlIHRoZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIGFsbCB1c2Vyc3BhY2UgYWNjZXNzaWJsZSBlbnRyeSBwb2ludHMuCgpGaW5hbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgZ2F0ZWQgYnkgYENPTkZJR19QQ0lFX1RQSGAgYW5kIGBDT05GSUdfVkZJT19QQ0lgLiBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3BjaS9LY29uZmlnYCB0byBjb25maXJtIHdoZXJlIGBQQ0lFX1RQSGAgaXMgZGVmaW5lZCBhbmQgbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb24gZm9yIFZGSU8gYW5kIERNQSBCdWZmZXJzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzIGhlcmUsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIFZGSU8uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBQQ0lFX1RQSGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBlbmFibGluZyBjZXJ0YWluIGZ1bmN0aW9uYWxpdGllcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYFZGSU9fUENJYCBzZXR0aW5nIGlzIGFsc28gYWJzb2x1dGVseSBuZWNlc3NhcnkuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkJ1dCBub3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoYXQgZnVuY3Rpb24gY2FsbCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAuIFRoYXQgc2NyZWFtcyBETUEgYnVmZmVyIHN1cHBvcnQuIFNvLCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBjYW5kaWRhdGUuIEl0IGxvb2tzIGxpa2UgdGhhdCBtaWdodCBiZSBhbm90aGVyIHJlcXVpcmVtZW50IGlmIEkmIzM5O20gYWltaW5nIHRvIGxldmVyYWdlIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0lfRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIFZGSU9fUENJX0RNQUJVRiBhbmQgUmVsYXRlZCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sZWFuLCByaWdodD8gSXQgaGluZ2VzIG9uIGBWRklPX1BDSV9DT1JFYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgYFZGSU9fUENJX0RNQUJVRmAgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFyZSBhbHNvIGVuYWJsZWQsIGFzc3VtaW5nIHRoZXkgYXJlbiYjMzk7dCBhbHJlYWR5LgoKSW5zdGVhZCBvZiBleHBsaWNpdGx5IG1lbnRpb25pbmcgZXZlcnkgZGVwZW5kZW5jeSwgSSYjMzk7bGwganVzdCBsaXN0IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgUENJX1AyUERNQWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGEgY29uY2lzZSBhbmQgZm9jdXNlZCBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCBhbmQgdGhlIG90aGVycyB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBpbiBvcmRlci4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjAxPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyODpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NTktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjYwOnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NjEtXHRcdFx0dTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3NTA9c3RhdGljIGludCB0cGhfZ2V0X3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLCB1MzIgc3JjX2huZGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NzctXHRcdFx0XHR1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTg0OT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg2Ny1cdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODY4Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODY5LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg3MDpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzEtXHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODcyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4NzM6XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzQtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRklPLVBDSSBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzKSBmZWF0dXJlIGZvciBWRklPLVBDSSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSB0cmFuc2xhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3RzIHdvcmsuCgpGaXJzdCBvcmRlciBvZiBidXNpbmVzczogY29uZmlybSB0aGF0IGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXRoLCBhbmQga25vd2luZyBpZiBpdCYjMzk7cyB0aGVyZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVzdC4gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHByZXNlbnQgc28gdGhlIGZlYXR1cmUgY2FuIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNDg9c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExNDk6c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTUwLVx0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTEyMjg9aW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0Ni1cdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjEyNDc6XHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0OC1cdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAqKgoKUmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgY2FzZS4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8uIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgcmUtZXhhbWluYXRpb24gbmV2ZXIgaHVydHMsIGdpdmVuIGl0cyByb2xlIHdpdGhpbiB0aGUgdmZpby1wY2kgRE1BIGJ1ZmZlciBoYW5kbGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBvbiB0aGUgc3VidGxldGllcyBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjYwPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzA1LVx0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTcwNjpcdFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MDctXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NTgtXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzU5Olx0XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc2MC1cdFx0XHRcdFx0XHQgICAgIHRhZywgXHUwMDI2cGgpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MTM2OmludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzcte1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOT1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNC0jaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTI1OmludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNi1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTMwPXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzMS0jZWxzZVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTMyOnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzMtXHRcdFx0XHRcdFx0IHUxNiAqdGFnLCB1OCAqcGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBIYW5kbGluZyBpbiBWRklPLVBDSSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIFZGSU8tUENJIGRyaXZlciwgYW5kIG15IGZvY3VzIGhhcyBzaGlmdGVkIHRvIERNQSBidWZmZXIgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGRyaWxsaW5nIGRvd24gaW50byBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiAoVFBIKSBmb3IgRE1BIHRyYW5zZmVycy4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGFyZSB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBoZXJlLgoKTXkgdHJhaW4gb2YgdGhvdWdodCBpcyB0aGF0IEkmIzM5O20gZW5jb3VudGVyaW5nIGEgbmV3IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIERNQSBidWZmZXJzLiBUaGUgbmFtZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBETUEgYnVmZmVycyBtYW5hZ2VkIHZpYSB0aGUgYGRtYV9idWZgIGZyYW1ld29yayBhbmQgdGhlIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgRE1BIGJ1ZmZlciBmcmFtZXdvcms/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgVFBIIGJlaW5nIGludm9sdmVkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gU1ZBPyBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSByZWdhcmRpbmcgc2VjdXJlIGFuZCBlZmZpY2llbnQgRE1BIGFjY2VzcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBWRklPIGVudmlyb25tZW50LiBJdCBwcm9iYWJseSBob2xkcyBjbHVlcyB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGRtYV9idWYgYW5kIHBjaSBsYXllcnMgaW4gdGhlc2Ugc3BlY2lmaWMgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2hlcmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03OT1zdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy05MC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6OTE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTkyLVx0XHRcdFx0XHR1MTYgKnRhZywgdTggKnBoKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTM2PWludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTQ5LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxNTA6XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xNTEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUxMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkZJTy1QQ0kgVFBIIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVkZJTy1QQ0kgVFBIIHN0dWZmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZvciBub3cuCgpOb3csIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucz8gSSYjMzk7dmUgZ290IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfRE1BQlVGYC4gSG9sZCBvbiwgbG9va3MgbGlrZSBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sLiBJdCYjMzk7cyBvbmx5IHNldCB0byAmIzM5O3kmIzM5OyBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgZW5hYmxlZC4gUmlnaHQuIEkgc2hvdWxkIGluY2x1ZGUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGluIHRoZSBsaXN0LCBqdXN0IGluIGNhc2UuIFRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGRlcGVuZGVuY2llcy4KCkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBlbm91Z2ggb2YgYSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJX0RNQUJVRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcdTAwMjZcdTAwMjYgUENJX1AyUERNQSBcdTAwMjZcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRW5hYmxpbmcgRE1BLUJVRiBTaGFyaW5nIHdpdGggVkZJTyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgdG8gZ2V0IGBWRklPX1BDSV9ETUFCVUZgIHdvcmtpbmcgcHJvcGVybHksIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYm90aCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhlIHVuZGVybHlpbmcgRE1BIGluZnJhc3RydWN0dXJlLiBJIGNhbuKAmXQgcmVtZW1iZXIgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYFBDSUVfVFBIYCBwb3RlbnRpYWxseSBwbGF5aW5nIGEgcm9sZSBpbiB0aGlzIERNQSBwYXRoLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBzdGF0dXMgYW5kIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdOKAmXMgY29uZmlndXJlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc2V0dXAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaW50ZXJyZWxhdGVzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY1OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBQQ0lFX1RQSGAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFBDSUVfVFBIYCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBib29sZWFuLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgaW1wbGljYXRpb25zLiBBIGJvb2xlYW4gaW5kaWNhdGVzIGEgc2ltcGxlICYjMzQ7ZW5hYmxlZC9kaXNhYmxlZCYjMzQ7IHN0YXRlLiBUaGlzIHRyaWdnZXJzIGEgcXVpY2sgbWVtb3J5IGNoZWNrOiB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheT8gV2hlcmUgaXMgdGhpcyBiZWluZyB1c2VkPyBXaGF0IGNvbnRyb2wgZG9lcyB0aGlzIHByb3ZpZGU/CgpNeSBuZXh0IGluc3RpbmN0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBWRklPX1BDSWAgaXMgc2V0LiBJdCBzZWVtcyB0aGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIG9mIGBWRklPX1BDSWAgaGFzIGFueSBiZWFyaW5nIG9uIGBQQ0lFX1RQSGAsIHNvIEkmIzM5O20gaGVhZGluZyB0byBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaGFzIHRvIHJldmVhbC4gSSBleHBlY3QgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZmVhdHVyZXMgZGVmaW5lZCB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgdGhpcyBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDY3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKlZGSU8gJmFtcDsgUENJIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgVkZJT19QQ0lgLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBXZSBrbm93IFZGSU8gaXMgdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBhbmQgUENJIGlzIHRoZSBtZWNoYW5pc20gZm9yIGRpcmVjdCBkZXZpY2UgYWNjZXNzLiBHaXZlbiB0aGF0LCBJIHdhbnQgdG8gY29uZmlybSBvdXIgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgc29saWQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGRpcmVjdG9yeSBiZWNhdXNlIG9mIHRoZSBQQ0kgZm9jdXMuIFRoZSBrZXkgcGFyYW1ldGVyIHRvIGNoZWNrIGluIHRoYXQgZmlsZSB3b3VsZCBiZSBgUENJX1AyUERNQWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBETUEgZnVuY3Rpb25hbGl0eSBpcyBjb3JyZWN0bHkgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBpbiBvdXIgc2V0dXAsIGFuZCBJJiMzOTttIHVzaW5nIGBQQ0lfUDJQRE1BYCBhcyB0aGUgZmxhZyB0byBlbnN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgbWF0Y2ggd2hhdCB3ZSYjMzk7cmUgZXhwZWN0aW5nIGZvciB0aGlzIGhhcmR3YXJlLiBJIHdpbGwgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX1AyUERNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBETUFfU0hBUkVEX0JVRkZFUmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgRE1BIGJ1ZmZlciBzaXR1YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYERNQV9TSEFSRURfQlVGRkVSYCwgaXMgZGVmaW5lZC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBiZSBsb29raW5nLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGBETUFfU0hBUkVEX0JVRkZFUmAgb3B0aW9uLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBmZWF0dXJlcyB3aGVuIGRlYWxpbmcgd2l0aCBETUEgYnVmZmVycywgd2hpY2ggYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byBvcHRpbWl6ZSB0aGUgZHJpdmVyJiMzOTtzIHBlcmZvcm1hbmNlLiBTbywgeWVhaCwgdGhhdCYjMzk7cyBteSBmb2N1cyBub3csIGZpZ3VyaW5nIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTMKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQXNzZXNzbWVudCBvZiB0aGUgUENJL1ZGSU8gVFBIIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzIEhlYWRlcikgc3VwcG9ydCB3aXRoaW4gdGhlIFBDSSBhbmQgVkZJTyBzdWJzeXN0ZW1zLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIGhvdyBpdCBtaWdodCBpbnRlcmFjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBlbnVtZXJhdGUgdGhlIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50LCB3aGljaCBJJiMzOTt2ZSBqdXN0IHdyaXR0ZW4gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSeKAmW0gdXNpbmcgdGhlc2UgdG8gc2V0IHRoZSBzdGFnZSBmb3IgZnVydGhlciBhbmFseXNpcy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gc3ltYm9scy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYCBhbmQgZm91bmQgYSBidW5jaCBvZiB0aGVtOiBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdGAsIGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAsIGBwY2llX3RwaF9zdXBwb3J0ZWRgLCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLiBJIGFkZGVkIHRoZXNlIHRvIG15IGdyb3dpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLgoKVGhlbiwgSSBsb29rZWQgaW4gb3RoZXIgcmVsZXZhbnQgbG9jYXRpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBJIGZvdW5kOiBgdHBoX2dldF9zdF90YWdgIGFuZCBgdHBoX2NhbGNfc3Rfc2l6ZWAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIFZGSU8gaW50ZXJhY3Rpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIEkgc2F3OiBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYW5kIGBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtYC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZS4KClRoaXMgbGVkIG1lIHRvIGlkZW50aWZ5IG1vcmUgcmVsZXZhbnQgc3ltYm9scywgcGFydGljdWxhcmx5IGZyb20gYHZmaW9fcGNpX2NvcmUuY2AgYW5kIGB2ZmlvX3BjaV9jb25maWcuY2AuIEkgaGF2ZSBhZGRlZCB0aGVzZSBzeW1ib2xzOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgLCBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdGAsIGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBgcGNpZV90cGhfc3VwcG9ydGVkYCwgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4KCkkgYmVsaWV2ZSB0aGlzIGlzIGEgY29tcHJlaGVuc2l2ZSBsaXN0LCBhdCBsZWFzdCBmb3IgdGhlIGluaXRpYWwgb3ZlcnZpZXcuIE5vdywgSSBmZWVsIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMsIHNvIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNS41NTk2NzM1ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg3MDM3MzUyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0XCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXhwbGljaXRcIixcbiAgICBcInBjaWVfdHBoX3N1cHBvcnRlZFwiLFxuICAgIFwicGNpZV90cGhfZHNtX3N1cHBvcnRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MDUuNTU5Njc3MjEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTMzMzI4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YmRlYmNhMjllNGYxNjdhZTNiZThlZDk1OWE2MTU5OTMwYjdmZDFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTY6MTI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjZhLi5mY2RiYTEzNWE0ZjMyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuQEAgLTE2NSwxMSArMTY1LDE0IEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuICAqL1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbi1cXHR1MzIgcmVnO1xcbitcXHR1MzIgcmVnID0gMDtcXG4rXFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XFxuIFxcbiBcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4gXFxuLVxcdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XFxuK1xcdHJldHVybiByZWcgXFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG5AQCAtMTg0LDkgKzE4Nyw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTIzMCwyMSArMjMwLDggQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcXG4gXFx0cmV0dXJuIHBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBvZmZzZXQsIHRhZyk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4tICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxcbi0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcXG4tICpcXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXFxuLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1Llxcbi0gKlxcbi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuLSAqL1xcbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbitzdGF0aWMgaW50IGdldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHQgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHtcXG4gI2lmZGVmIENPTkZJR19BQ1BJXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG5AQCAtMjY4LDE5ICsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBcXHUwMDI2aW5mbyk7XFxuK1xcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcXHUwMDI2aW5mbyk7XFxuIFxcbi1cXHRwY2lfZGJnKHBkZXYsIFxcXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuK1xcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXFxcInZvbGF0aWxlXFxcIiA6IFxcXCJwZXJzaXN0ZW50XFxcIixcXG4tXFx0XFx0Y3B1LCAqdGFnKTtcXG4rXFx0XFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gI2Vsc2VcXG4gXFx0cmV0dXJuIC1FTk9ERVY7XFxuICNlbmRpZlxcbiB9XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxcbisgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcXG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxcbisgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cXG4rICpcXG4rICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbisgKi9cXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbitcXHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4gXFxuKy8qKlxcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0IC0gR2V0IFNUIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbisgKiBAZXh0ZW5kZWQ6IHRydWU9RVhUX1RQSCwgZmFsc2U9c3RhbmRhcmQgVFBIIG9ubHlcXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcXG4rICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyXFxuKyAqXFxuKyAqIFVubGlrZSBhdXRvIHBjaWVfdHBoX2dldF9jcHVfc3QoKSwgY2FsbGVyIG1hbnVhbGx5IHBpY2tzIHJlcXVlc3RlciB0eXBlLlxcbisgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHRcXHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuK3tcXG4rXFx0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCk7XFxuK1xcbiAvKipcXG4gICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxcbiAgKiBAcGRldjogUENJIGRldmljZVxcbkBAIC0zMTUsOCArMzQ3LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbiBcXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xcbiBcXG4gXFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcXG4tXFx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcbiBcXHRzd2l0Y2ggKGxvYykge1xcbiBcXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XFxuQEAgLTM2NSwyNyArMzk1LDEwIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xcbiBcXG4tLyoqXFxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbi0gKiBAcGRldjogUENJIGRldmljZVxcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuLSAqXFxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuLSAqXFxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXFxuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXFxuLSAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3Rlclxcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4tICovXFxuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbitzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSlcXG4ge1xcbiBcXHR1MzIgcmVnO1xcbiBcXHR1OCBkZXZfbW9kZXM7XFxuLVxcdHU4IHJwX3JlcV90eXBlO1xcbiBcXG4gXFx0LyogSG9ub3IgXFxcIm5vdHBoXFxcIiBrZXJuZWwgcGFyYW1ldGVyICovXFxuIFxcdGlmIChwY2lfdHBoX2Rpc2FibGVkKVxcbkBAIC00MDMsMjYgKzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgbW9kZSkgXFx1MDAyNiBkZXZfbW9kZXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4tXFxuLVxcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbi1cXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuLVxcbi1cXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbi1cXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuLVxcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbi1cXG4tXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4rXFx0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXFx1MDAyNlxcdTAwMjYgIXBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRwZGV2LVxcdTAwM2V0cGhfbW9kZSA9IG1vZGU7XFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xcbitcXG4gXFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXFxuIFxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcXHUwMDI2cmVnKTtcXG4gXFxuQEAgLTQzNSw4ICs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuKyAqXFxuKyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4rICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuKyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuKyAqXFxuKyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXFxuKyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXFxuKyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlclxcbisgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4rICovXFxuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0ID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcXG4rICogQG1vZGU6IFNUIHRhYmxlIG9wZXJhdGluZyBtb2RlIChOUy9JVi9EUylcXG4rICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxcbisgKlxcbisgKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXFxuKyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XFxuKyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZClcXG4re1xcbitcXHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcXG4rXFxuKy8qKlxcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxcbisgKlxcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXFxuKyAqL1xcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHJldHVybiBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcXG4rXFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlO1xcbkBAIC01MDgsMTQgKzU2Miw4NCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcXG4gXFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XFxuIFxcdGludCBudW1fZW50cmllcztcXG4gXFx0dTMyIHNhdmVfc2l6ZTtcXG4rXFx0dTMyIHJlZyA9IDA7XFxuIFxcbiBcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcXG4gXFx0aWYgKCFwZGV2LVxcdTAwM2V0cGhfY2FwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cXG4rXFx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xcbitcXHRcXHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcXG4rXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwZGV2LVxcdTAwM2V0cGhfZXh0X3N1cHBvcnQgPSAhISh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XFxuK1xcbiBcXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbiBcXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSArIG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XFxuIFxcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBwY2llX3RwaF9zdXBwb3J0ZWQgLSBDaGVjayBUUEggY2FwYWJpbGl0eSBhdHRyaWJ1dGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0XFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBvbiBtYXRjaGVkIGNvbmRpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXFxuKyAqL1xcbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcXG4re1xcbitcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghd2FudF9leHQpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3N1cHBvcnRlZCk7XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNXFxuKyAqIEBwZGV2OiB0YXJnZXQgUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbixcXG4rICogZmFsc2Ugb3RoZXJ3aXNlIChBQ1BJIGRpc2FibGVkIG9yIERTTSBtaXNzaW5nKS5cXG4rICovXFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcXG4rXFx0YWNwaV9oYW5kbGUgaGFuZGxlO1xcbitcXG4rXFx0aWYgKCFycCB8fCAhcnAtXFx1MDAzZWJ1cyB8fCAhcnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRoYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpO1xcbitcXHRpZiAoIWhhbmRsZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgXFx1MDAyNnBjaV9hY3BpX2RzbV9ndWlkLCA3LFxcbitcXHRcXHRcXHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbmluZGV4IDgzMDM2OWZmODc4ZGJlLi43ZWY4MmI0NDU3MjI1YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG5AQCAtNjAsNiArNjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDtcXG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFxcXCJEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuXFxcIik7XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XFxuK3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbit7XFxuK1xcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcXG4rXFx0XFx0XFx0XFx0ICAgICBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpO1xcbit9XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gdHBoX3NldCxcXG4rXFx0LmdldCA9IHBhcmFtX2dldF91aW50LFxcbit9O1xcbittb2R1bGVfcGFyYW1fY2IodHBoLCBcXHUwMDI2dHBoX3BhcmFtX29wcywgXFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xcbitNT0RVTEVfUEFSTV9ERVNDKHRwaCxcXG4rXFx0XFxcIkdsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcXFxuXFxcIlxcbitcXHRcXFwiMCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxcXG5cXFwiXFxuK1xcdFxcXCIxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIzID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcXFxcblxcXCIpO1xcbitcXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN3aXRjaCAocGRldi1cXHUwMDNldmVuZG9yKSB7XFxuQEAgLTE0Miw2ICsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxcbiBcXHR2ZGV2LVxcdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID0gdHBoX3BvbGljeTtcXG4rI2VuZGlmXFxuIFxcbiBcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjM4OGRkNmZlZDE2YjVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTEwODUsNiArMTA4NiwxMjcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XFxuK1xcbitcXHRwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCxcXG4rXFx0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcXG4rXFxuK1xcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xcbitcXHQgKiB3aGVuIHRoZSBTVCB0YWJsZSBpcyBsb2NhdGVkIGluIHRoZSBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuK1xcdCAqIENhcGFiaWxpdHkgc3RydWN0dXJlLlxcbitcXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxcbitcXHQgKiBmb2xsb3dpbmcgb3BlcmF0aW9uIGlzIGZpbmUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNjQ7IGkrKylcXG4rXFx0XFx0cF9zZXR3KHBlcm0sIFBDSV9UUEhfQkFTRV9TSVpFT0YgKyBpICogc2l6ZW9mKHUxNiksXFxuK1xcdFxcdCAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IHBvcylcXG4re1xcbitcXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbcG9zICsgUENJX1RQSF9DQVBdO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiB2YWwgPSBsZTMyX3RvX2NwdSgqdnB0cik7XFxuK1xcdGJvb2wgbmVlZF9hZGp1c3QgPSBmYWxzZTtcXG4rXFxuK1xcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XFxuK1xcdFxcdC8qIFJlbW92ZSBleHRlbmQgVFBIIGlmIHJvb3QtcG9ydCBkb24ndCBzdXBwb3J0ICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfRVhUX1RQSDtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XFxuK1xcdFxcdC8qIFJlcG9ydCBvbmx5IE5vLVNUIG1vZGUgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+KFBDSV9UUEhfQ0FQX1NUX0lWIHwgUENJX1RQSF9DQVBfU1RfRFMgfFxcbitcXHRcXHRcXHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xcbitcXHRcXHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XFxuK1xcdFxcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9uJ3Qgc3VwcG9ydCBJViBtb2RlICovXFxuK1xcdFxcdGlmICghKHZhbCBcXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSlcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH4oUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobmVlZF9hZGp1c3QpXFxuK1xcdFxcdCp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4rXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXFxuK3tcXG4rXFx0dTE2IHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBvcmdfY3RybCwgbmV3X2N0cmwsIGNhcDtcXG4rXFx0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xcbitcXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFxuK1xcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xcbitcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxcbitcXHRcXHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXFxuK1xcbitcXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DQVBdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xcbitcXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XFxuK1xcdGlmIChtb2RlIFxcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XFxuK1xcdFxcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhKGNhcCBcXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cXG4rXFxuK1xcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XFxuK1xcdGlmIChyZXEgPT0gb3JnX3JlcSlcXG4rXFx0XFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi9cXG4rXFxuK1xcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcXG4rXFx0XFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XFxuK1xcdFxcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK3Jlc3RvcmU6XFxuK1xcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcXG4rb3V0OlxcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xcbiAgKi9cXG5AQCAtMTEwMCw2ICsxMjIyLDcgQEAgdm9pZCB2ZmlvX3BjaV91bmluaXRfcGVybV9iaXRzKHZvaWQpXFxuIFxcbiBcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcXG4gXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XFxuK1xcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xcbiB9XFxuIFxcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuQEAgLTExMjAsNiArMTI0Myw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXFxuIFxcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xcbiBcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcXG4rXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuK1xcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuIFxcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuIFxcbkBAIC0xNDUwLDYgKzE1NzUsOCBAQCBzdGF0aWMgaW50IHZmaW9fZXh0X2NhcF9sZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MTYgZWNhcCwgdTE2IGVwb1xcbiBcXHRcXHRieXRlIFxcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XFxuIFxcdFxcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XFxuIFxcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxcbitcXHRcXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCBmYWxzZSkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2ZHdvcmQpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcXG5AQCAtMTcwMSw2ICsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcXHUwMDI2XFx1MDAyNiAhaGlkZGVuKVxcbitcXHRcXHRcXHR2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDNmMTFhOTYyNGI5YzAzLi45YzBmM2M3YTFlZjczNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2VlaC5oXFx1MDAzZVxcbkBAIC0xMjcsMTAgKzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGhfcG9saWN5KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfcHJpdmF0ZShzZXEpO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIldVxcXFxuXFxcIiwgdmRldi1cXHUwMDNldHBoX3BvbGljeSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcXG4tICogcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSdzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlXFxuLSAqIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXFxuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcXG4rICogbGF0Y2hlZCBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbVxcbisgKiB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbkBAIC0xNDYsNiArMTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX25vaW50eG1hc2spO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcXFwiZGlzYWJsZV9pZGxlX2QzXFxcIiwgcGNpX2RpcixcXG4gXFx0XFx0XFx0XFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcXFwidHBoX3BvbGljeVxcXCIsIHBjaV9kaXIsXFxuK1xcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtNjEwLDYgKzYyMiw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xcbiBcXG4gXFx0dmRldi1cXHUwMDNlcmVzZXRfd29ya3MgPSAhcmV0O1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XFxuK1xcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbiBcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4gXFx0dmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xcbiBcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcXG5AQCAtNzU3LDYgKzc3Miw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFxuIFxcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xcbiBcXG4rXFx0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLFxcbiBcXHQgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW5cXG5AQCAtMTYwNyw2ICsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGggPSB7MH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2LCBmYWxzZSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuK1xcdFxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdHNpemVvZih0cGgpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHtcXG4rXFx0XFx0dmRldi1cXHUwMDNldHBoX3Blcm1pdCA9IDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHR0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjtcXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFU7XFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcXG4rXFx0XFx0dHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfTElURVJBTDtcXG4rXFxuK1xcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0Y29uc3QgdTMyIHBlcm1pdF9zcmNfbWFza1tdID0ge1xcbitcXHRcXHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcXG4rXFx0XFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsXFxuK1xcdFxcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUIC4uLiBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUxdID1cXG4rXFx0XFx0XFx0XFx0XFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxcbitcXHRcXHRcXHRcXHRcXHRWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XFxuK1xcdFxcdFxcdFxcdFxcdFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQsXFxuK1xcdH07XFxuK1xcdHUzMiBwZXJtaXRfZmxhZ3MgPSBwZXJtaXRfc3JjX21hc2tbdmRldi1cXHUwMDNldHBoX3BvbGljeV0gfFxcbitcXHRcXHRcXHQgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHJlc29sdmUgPSB7MH07XFxuK1xcdGVudW0gdHBoX21lbV90eXBlIG10eXBlO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHR1MzIgc3JjX2JpdHM7XFxuK1xcdHUxNiB0YWcgPSAwO1xcbitcXHR1OCBwaCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHJlc29sdmUpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0c3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xcbitcXHRpZiAoIShyZXNvbHZlLmZsYWdzIFxcdTAwMjYgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xcbitcXHRpZiAoZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2LCB0cnVlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXNvbHZlLnZhbGlkID0gMDtcXG4rXFx0cmVzb2x2ZS5waCA9IDA7XFxuK1xcdHJlc29sdmUuc3QgPSAwO1xcbitcXG4rXFx0aWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHtcXG4rXFx0XFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dGFnLCBcXHUwMDI2cGgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXNvbHZlLnBoID0gcGg7XFxuK1xcdFxcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XFxuK1xcdFxcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5IFxcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpIHtcXG4rXFx0XFx0XFx0cmVzb2x2ZS5zdCA9IHRhZztcXG4rXFx0XFx0XFx0cmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG10eXBlID0gKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpID9cXG4rXFx0XFx0XFx0VFBIX01FTV9UWVBFX1ZNIDogVFBIX01FTV9UWVBFX1BNO1xcbitcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHZkZXYtXFx1MDAzZXBkZXYsIG10eXBlLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcmVzb2x2ZS5zcmMsIFxcdTAwMjZ0YWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xcbitcXHRyZXNvbHZlLnN0ID0gdGFnO1xcbitcXG4rb3V0OlxcbitcXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiB0cGhfY2FsY19zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcXG4rXFx0XFx0XFx0ICBib29sIGV4dGVuZGVkLCB1MTYgKnRhZylcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0dTggcGg7XFxuK1xcbitcXHRpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXFxuK1xcdFxcdCp0YWcgPSAwO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKVxcbitcXHRcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhZywgXFx1MDAyNnBoKTtcXG4rXFx0ZWxzZSBpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSlcXG4rXFx0XFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXFxuK1xcdFxcdFxcdFxcdFxcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcXG4rXFx0ZWxzZSBpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKVxcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcXG4rXFx0XFx0XFx0XFx0XFx0ZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcXG4rXFx0XFx0KnRhZyA9IHNyY19obmRsO1xcbitcXG4rXFx0aWYgKHJldCAhPSAwKVxcbitcXHRcXHQqdGFnID0gMDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0dTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgc3JjX2JpdHMsIHN0X3NpemU7XFxuK1xcdGJvb2wgc3RvcF9vbl96ZXJvX3N0O1xcbitcXHR1MzIgKnNyY19obmRsID0gTlVMTDtcXG4rXFx0dm9pZCBfX3VzZXIgKnVwdHI7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcdHUxNiB0YWc7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgfHwgdmRldi1cXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZih0cGhfc3QpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHNyY19iaXRzID0gdHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSAhPSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXFxuK1xcdFxcdHBlcm1pdF9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMO1xcbitcXHRpZiAoISh0cGhfc3QuZmxhZ3MgXFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGV4dGVuZGVkID0gISEodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldiwgdHJ1ZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c3Rfc2l6ZSA9IHRwaF9jYWxjX3N0X3NpemUodmRldik7XFxuK1xcdGlmICh0cGhfc3Quc3RhcnQgXFx1MDAzZT0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgXFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XFxuK1xcdFxcdHRwaF9zdC5jb3VudCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKTtcXG4rXFx0aWYgKCEoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XFxuK1xcdFxcdHNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgdHBoX3N0LmNvdW50LCBzaXplb2YodTMyKSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3JjX2huZGwpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0c3RvcF9vbl96ZXJvX3N0ID0gISEodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpO1xcbitcXHRpZiAodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxcbitcXHRcXHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IHRwaF9nZXRfc3RfdGFnKHBkZXYsIHNyY19iaXRzLCBzcmNfaG5kbCA/IHNyY19obmRsW2ldIDogMCxcXG4rXFx0XFx0XFx0XFx0ICAgICBleHRlbmRlZCwgXFx1MDAyNnRhZyk7XFxuK1xcdFxcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcXHUwMDI2XFx1MDAyNiB0YWcgPT0gMCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICsgaSwgdGFnKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0cmV0ID0gaTtcXG4rXFxuK291dDpcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0a2ZyZWUoc3JjX2huZGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcXG4ge1xcbkBAIC0xNjI1LDYgKzE4NjQsMTMgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4rXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1Q6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uZDljNWU0MzRlNTg2ZjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5AQCAtMTksNyArMTksMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXFx1MDAzZXJlc3YuICovXFxuK1xcdHU4IHJldm9rZWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuK1xcdHU4IHRwaF9zdF92YWxpZDoxO1xcbitcXHR1OCB0cGhfeHN0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdDtcXG4rXFx0dTE2IHRwaF94c3Q7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTgxLDYgKzg4LDI2IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4gXFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnRhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF94c3RfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnRhZyA9IHByaXYtXFx1MDAzZXRwaF94c3Q7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCp0YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuQEAgLTEwNiw2ICsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xcbiBcXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcXG4gfTtcXG4gXFxuK2ludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgdGFnLCBwaCk7XFxuK291dDpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogVGhpcyBpcyBhIHRlbXBvcmFyeSBcXFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcXFwiIGJldHdlZW4gVkZJTyBETUFCVUYgYW5kIGlvbW11ZmQuXFxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uZDdiYzUyZjQ4OGM2MmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbkBAIC0xMSw2ICsxMSwxMyBAQFxcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXFxuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFxcdFxcdDEwMDBcXG4gXFxuK2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLFxcbitcXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcXG4rXFx0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCA9IDMsXFxuK307XFxuK1xcbiBzdHJ1Y3QgdmZpb19wY2lfaW9ldmVudGZkIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5leHQ7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVxcdCp2ZGV2O1xcbkBAIC0xMTUsMTIgKzEyMiwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHUxNiAqdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuIHN0YXRpYyBpbmxpbmUgaW50XFxuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFjOTY5MmQ3NDBhNjBkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gICovXFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnRcXG5AQCAtMjYsMTAgKzI3LDE3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XFxuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XFxuIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCk7XFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbkBAIC0zOCw5ICs0NiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0Ym9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sIGV4dGVuZGVkKVxcbit7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiAwOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcXG4reyByZXR1cm4gZmFsc2U7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIGZhbHNlOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li5hOTllZWVhNTNjODE0YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRhdHNfZW5hYmxlZDoxO1xcdFxcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHBhc2lkX2VuYWJsZWQ6MTtcXHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0cHJpX2VuYWJsZWQ6MTtcXHRcXHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXFxuLVxcdHVuc2lnbmVkIGludFxcdHRwaF9lbmFibGVkOjE7XFx0XFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0Zm1fZW5hYmxlZDoxO1xcdFxcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbWFuYWdlZDoxO1xcdFxcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRpc19tc2lfbWFuYWdlZDoxO1xcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXFxuQEAgLTU4OCw3ICs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuLVxcdHUxNlxcdFxcdHRwaF9jYXA7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9jYXA6MTQ7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxcbitcXHRcXHRcXHRcXHRcXHQgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovXFxuK1xcdHUxNlxcdFxcdHRwaF9lbmFibGVkOjE7XFx0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xcbiBcXHR1OFxcdFxcdHRwaF9tb2RlO1xcdC8qIFRQSCBtb2RlICovXFxuIFxcdHU4XFx0XFx0dHBoX3JlcV90eXBlO1xcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li45YTZlODJjNWMwMGNkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXFxuQEAgLTE0OSw2ICsxNDksOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRuYjtcXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdG1lbW9yeV9sb2NrO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZG1hYnVmcztcXG4rXFx0dThcXHRcXHRcXHR0cGhfcG9saWN5O1xcbitcXHRib29sXFx0XFx0XFx0dHBoX3Blcm1pdDtcXG4gfTtcXG4gXFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi5lZDA0YjYyODBjZDY5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNjggQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFxcdFxcdDEzXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVxcdDE0XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcXHQxNVxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxcbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyBpbiBmbGFncy5cXG4rICovXFxuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbit9O1xcbitcXG4rLyogQ2FwYWJpbGl0eSBiaXRzIHJldHVybmVkIGJ5IEdFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfRE1BQlVGXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDApIC8qIERNQUJVRiBzb3VyY2VzIHJlc29sdmFibGUgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0NQVVxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXFxuKyAqIE5vdGU6IEdFVCBvbmx5XFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XFxuK1xcdF9fdTMyIGZsYWdzO1xcdC8qIElOOiBzb3VyY2UgdHlwZSArIG5hbWVzcGFjZSBtb2RpZmllcnMgKi9cXG4rXFx0X191MzIgc3JjO1xcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xcbitcXHRfX3U4IHZhbGlkO1xcdC8qIE9VVDogYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSCAoMXUgXFx1MDAzY1xcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUICgxdSBcXHUwMDNjXFx1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cXG4rXFx0X191OCBwaDtcXHQvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi9cXG4rXFx0X191MTYgc3Q7XFx0LyogT1VUOiByYXcgc3RlZXJpbmcgdGFnIHZhbHVlICovXFxuK307XFxuK1xcbisvKlxcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgU1QgdGFibGUgZW50cmllc1xcbisgKiBSZXR1cm4gdmFsdWU6IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzXFxuKyAqIE5vdGU6IFNFVCBvbmx5XFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3Qge1xcbitcXHRfX3UzMiBmbGFncztcXHRcXHQvKiBJTjogc291cmNlIHR5cGUgKyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXFxuK1xcdF9fdTE2IHN0YXJ0O1xcdFxcdC8qIElOOiBmaXJzdCBTVCB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvciAqL1xcbitcXHRfX3UxNiBjb3VudDtcXHRcXHQvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovXFxuK1xcdF9fYWxpZ25lZF91NjQgZGVzdHM7XFx0LyogSU46IHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlcyAqL1xcbit9O1xcbitcXG4rLyogQ29tbW9uIGZsYWdzIHNoYXJlZCBieSBUUEhfUkVTT0xWRSBhbmQgVFBIX1NUIGZlYXR1cmVzICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgXFx1MDAzY1xcdTAwM2MgMCkgLyogVFBIX1NUIG9ubHk6IHNldCBTVD0wICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUZcXHQgICAoMXUgXFx1MDAzY1xcdTAwM2MgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFICAgKDF1IFxcdTAwM2NcXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UICgxdSBcXHUwMDNjXFx1MDAzYyAzKSAvKiBzcmMgPSBwZXJzaXN0ZW50IG1lbW9yeSBDUFUgSUQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQgICAgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCAgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyAzMSkgLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgU1Q9MCAqL1xcbitcXG4rLyogTWFzayBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIHNvdXJjZSB0eXBlIGJpdHMsIG9ubHkgb25lIG1heSBiZSBzZXQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0tcXHQoVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpXFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNi4yNTM1MzA3MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODAwOTg2NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0XCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdFwiLFxuICAgIFwicGNpZV90cGhfc3VwcG9ydGVkXCIsXG4gICAgXCJwY2llX3RwaF9kc21fc3VwcG9ydGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgVkZJTyBkZXZpY2UgZmVhdHVyZXMgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCksIGludHJvZHVjaW5nIG5ldyBpb2N0bHMgYW5kIGNvbmZpZ3VyYXRpb24gc3BhY2UgaGFuZGxpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiZGViY2EyOWU0ZjE2N2FlM2JlOGVkOTU5YTYxNTk5MzBiN2ZkMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE2OjEyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmZjZGJhMTM1YTRmMzJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTY1LDExICsxNjUsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuK1x0dTMyIHJlZyA9IDA7XG4rXG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XG4gXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuK1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg0LDkgKzE4Nyw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzAsMjEgKzIzMCw4IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG9mZnNldCwgdGFnKTtcbiB9XG4gXG4tLyoqXG4tICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcbi0gKiBAcGRldjogUENJIGRldmljZVxuLSAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuLSAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxuLSAqXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXG4tICpcbi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4tICovXG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7XG4gI2lmZGVmIENPTkZJR19BQ1BJXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XG5AQCAtMjY4LDE5ICsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBcdTAwMjZpbmZvKTtcbitcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiBcbi1cdHBjaV9kYmcocGRldiwgXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbitcdHBjaV9kYmcocGRldiwgXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCIsXG4gXHRcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXCJ2b2xhdGlsZVwiIDogXCJwZXJzaXN0ZW50XCIsXG4tXHRcdGNwdSwgKnRhZyk7XG4rXHRcdHJlcV90eXBlLCBjcHUsICp0YWcpO1xuIFxuIFx0cmV0dXJuIDA7XG4gI2Vsc2VcbiBcdHJldHVybiAtRU5PREVWO1xuICNlbmRpZlxuIH1cbitcbisvKipcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4rICogd2l0aCBhIHNwZWNpZmljIENQVVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4rICpcbisgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcbisgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbisgKlxuKyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4gXG4rLyoqXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCAtIEdldCBTVCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciB0eXBlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4rICogQGV4dGVuZGVkOiB0cnVlPUVYVF9UUEgsIGZhbHNlPXN0YW5kYXJkIFRQSCBvbmx5XG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbisgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbisgKlxuKyAqIFVubGlrZSBhdXRvIHBjaWVfdHBoX2dldF9jcHVfc3QoKSwgY2FsbGVyIG1hbnVhbGx5IHBpY2tzIHJlcXVlc3RlciB0eXBlLlxuKyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpO1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpO1xuK1xuIC8qKlxuICAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcbiAgKiBAcGRldjogUENJIGRldmljZVxuQEAgLTMxNSw4ICszNDcsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcbiBcdHN3aXRjaCAobG9jKSB7XG4gXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG5AQCAtMzY1LDI3ICszOTUsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuLS8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuLSAqXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4tICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuLSAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKVxuIHtcbiBcdHUzMiByZWc7XG4gXHR1OCBkZXZfbW9kZXM7XG4tXHR1OCBycF9yZXFfdHlwZTtcbiBcbiBcdC8qIEhvbm9yIFwibm90cGhcIiBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC00MDMsMjYgKzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiBcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBtb2RlKSBcdTAwMjYgZGV2X21vZGVzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbi1cbi1cdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4tXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4tXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbi1cdGVsc2Vcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbi1cbi1cdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4tXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4tXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuLVxuLVx0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gbWluKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4tXHR9XG4tXG4tXHRpZiAocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4rXHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xuK1xuIFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcdTAwMjZyZWcpO1xuIFxuQEAgLTQzNSw4ICs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rLyoqXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4rICpcbisgKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4rICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4rICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbisgKlxuKyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4rICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbisgKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbisgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4rICovXG4raW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxuK1x0XHRcdFx0XHQgICAgICBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbit9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuKy8qKlxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gb3BlcmF0ZVxuKyAqIEBtb2RlOiBTVCB0YWJsZSBvcGVyYXRpbmcgbW9kZSAoTlMvSVYvRFMpXG4rICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxuKyAqXG4rICogVW5saWtlIGF1dG8tZGV0ZWN0aW5nIHBjaWVfZW5hYmxlX3RwaCgpLCBjYWxsZXIgc2VsZWN0cyByZXF1ZXN0ZXIgdHlwZVxuKyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XG4rICogaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXhwbGljaXQpO1xuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbisgKlxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbisgKi9cbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZTtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbitcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcbkBAIC01MDgsMTQgKzU2Miw4NCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcbiBcbiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4rXHR1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlO1xuIFx0aW50IG51bV9lbnRyaWVzO1xuIFx0dTMyIHNhdmVfc2l6ZTtcbitcdHUzMiByZWcgPSAwO1xuIFxuIFx0cGRldi1cdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcbiBcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuK1x0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuK1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuK1x0ZWxzZVxuK1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4rXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4rXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuK1x0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4rXHRcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbitcdH1cbitcbitcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwZGV2LVx1MDAzZXRwaF9jYXAgPSAwO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbitcbiBcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4gXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSArIG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XG4gXHRwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpO1xuIH1cbitcbisvKipcbisgKiBwY2llX3RwaF9zdXBwb3J0ZWQgLSBDaGVjayBUUEggY2FwYWJpbGl0eSBhdHRyaWJ1dGVcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqIEB3YW50X2V4dDogZmFsc2UgLSBjaGVjayBUUEggY2FwIGV4aXN0czsgdHJ1ZSAtIGNoZWNrIEVYVF9UUEggc3VwcG9ydFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcbit7XG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCF3YW50X2V4dClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcbitcbisvKipcbisgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbisgKiBAcGRldjogdGFyZ2V0IFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuKyAqIGZhbHNlIG90aGVyd2lzZSAoQUNQSSBkaXNhYmxlZCBvciBEU00gbWlzc2luZykuXG4rICovXG4rYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbisjaWZkZWYgQ09ORklHX0FDUElcbitcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4rXHRhY3BpX2hhbmRsZSBoYW5kbGU7XG4rXG4rXHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0aWYgKCFoYW5kbGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsIFx1MDAyNnBjaV9hY3BpX2RzbV9ndWlkLCA3LFxuK1x0XHRcdCAgICAgIEJJVChUUEhfU1RfRFNNX0ZVTkNfSU5ERVgpKTtcbisjZWxzZVxuK1x0cmV0dXJuIGZhbHNlO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2llX3RwaF9kc21fc3VwcG9ydGVkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbmluZGV4IDgzMDM2OWZmODc4ZGJlLi43ZWY4MmI0NDU3MjI1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5AQCAtNjAsNiArNjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDtcbiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9kZW55bGlzdCwgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCBcIkRpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cIik7XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5O1xuK3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuK3tcbitcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcbitcdFx0XHRcdCAgICAgVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKTtcbit9XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHRwaF9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gdHBoX3NldCxcbitcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbit9O1xuK21vZHVsZV9wYXJhbV9jYih0cGgsIFx1MDAyNnRwaF9wYXJhbV9vcHMsIFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xuK01PRFVMRV9QQVJNX0RFU0ModHBoLFxuK1x0XCJHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cIlxuK1x0XCIwID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCJcbitcdFwiMSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIlxuK1x0XCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcblwiXG4rXHRcIiAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwiXG4rXHRcIjMgPSBBZGQgTElURVJBTDogUkVTT0xWRSByZXR1cm5zIFBIK1NUIGZvciBETUFCVUYvQ1BVIHNvdXJjZXM7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcXG5cIik7XG4rXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN3aXRjaCAocGRldi1cdTAwM2V2ZW5kb3IpIHtcbkBAIC0xNDIsNiArMTY0LDkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0dmRldi1cdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdHZkZXYtXHUwMDNldHBoX3BvbGljeSA9IHRwaF9wb2xpY3k7XG4rI2VuZGlmXG4gXG4gXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjM4OGRkNmZlZDE2YjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC0xMDg1LDYgKzEwODYsMTI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbitcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbitcbitcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULFxuK1x0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcbitcbitcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuK1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuK1x0ICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuXG4rXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuK1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSsrKVxuK1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiArIGkgKiBzaXplb2YodTE2KSxcbitcdFx0ICAgICAgICh1MTYpQUxMX1ZJUlQsICh1MTYpQUxMX1dSSVRFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICAgaW50IHBvcylcbit7XG4rXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbitcdGJvb2wgbmVlZF9hZGp1c3QgPSBmYWxzZTtcbitcbitcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XG4rXHRcdC8qIFJlbW92ZSBleHRlbmQgVFBIIGlmIHJvb3QtcG9ydCBkb24ndCBzdXBwb3J0ICovXG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuK1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cbitcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbitcdFx0XHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcbitcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuK1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuK1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9TVF9EUztcbitcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24ndCBzdXBwb3J0IElWIG1vZGUgKi9cbitcdFx0aWYgKCEodmFsIFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9JVikpXG4rXHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuK1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAobmVlZF9hZGp1c3QpXG4rXHRcdCp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbitcdFx0XHRcdCBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKVxuK3tcbitcdHUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuK1x0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xuK1x0X19sZTMyIG9yZ192YWwgPSAwO1xuK1x0Ym9vbCBleHRlbmRlZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbitcdFx0cmV0dXJuIGNvdW50O1xuK1xuK1x0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitcbitcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcbitcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIFx1MDAyNm9yZ192YWwpO1xuK1xuK1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4rXHRpZiAocmV0ICE9IGNvdW50KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcbitcdGlmIChuZXdfY3RybCA9PSBvcmdfY3RybClcbitcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqL1xuK1xuK1x0Y2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NBUF0pO1xuK1x0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xuK1x0cmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgbmV3X2N0cmwpO1xuK1x0aWYgKG1vZGUgXHUwMDNlIFBDSV9UUEhfU1RfRFNfTU9ERSB8fCAhKGNhcCBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fFxuK1x0XHQocmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXHUwMDI2XHUwMDI2ICEoY2FwIFx1MDAyNiBQQ0lfVFBIX0NBUF9FWFRfVFBIKSkpXG4rXHRcdGdvdG8gcmVzdG9yZTsgLyogRHJvcCBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHdyaXRlIHZhbHVlICovXG4rXG4rXHRvcmdfcmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgb3JnX2N0cmwpO1xuK1x0aWYgKHJlcSA9PSBvcmdfcmVxKVxuK1x0XHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IHJlcXVlc3RlciBlbmFibGUgKi9cbitcbitcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi9cbitcbitcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbitcdFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XG4rXHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlO1xuK1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR9XG4rXG4rXHRnb3RvIG91dDtcbitcbityZXN0b3JlOlxuK1x0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpO1xuK291dDpcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiArMTIyMiw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxuIFxuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XG4rXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuIH1cbiBcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG5AQCAtMTEyMCw2ICsxMjQzLDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4rXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTQ1MCw2ICsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XG4gXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcbitcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcdTAwMjZkd29yZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XG5AQCAtMTcwMSw2ICsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIIFx1MDAyNlx1MDAyNiAhaGlkZGVuKVxuK1x0XHRcdHZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0KHZkZXYsIGVwb3MpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB3ZSdyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMDMuLjljMGYzYzdhMWVmNzM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbkBAIC0xMjcsMTAgKzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbitcdFx0XHRcdFx0ICAgIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcbitcbitcdHNlcV9wcmludGYoc2VxLCBcIiV1XFxuXCIsIHZkZXYtXHUwMDNldHBoX3BvbGljeSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcbisgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiArMTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwiZGlzYWJsZV9pZGxlX2QzXCIsIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcInRwaF9wb2xpY3lcIiwgcGNpX2RpcixcbitcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC02MTAsNiArNjIyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4gXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbitcdHZkZXYtXHUwMDNldHBoX3Blcm1pdCA9IGZhbHNlO1xuK1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NTcsNiArNzcyLDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFxuIFx0dmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7XG4gXG4rXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXG4gXHQvKlxuIFx0ICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLFxuIFx0ICogZXZlbiBiZXR0ZXIuICBSZXNldHRpbmcgd2l0aCBjdXJyZW50IHN0YXRlIHNlZW1zIGJldHRlciB0aGFuXG5AQCAtMTYwNyw2ICsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldiwgZmFsc2UpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuK1x0XHRcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0c2l6ZW9mKHRwaCkpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4rXHRcdHZkZXYtXHUwMDNldHBoX3Blcm1pdCA9IDE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0dHBoLmZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9ETUFCVUY7XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgXHUwMDI2XHUwMDI2XG4rXHRcdHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0dHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVO1xuK1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXG4rXHRcdHRwaC5mbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX0xJVEVSQUw7XG4rXG4rXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0Y29uc3QgdTMyIHBlcm1pdF9zcmNfbWFza1tdID0ge1xuK1x0XHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcbitcdFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsXG4rXHRcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUIC4uLiBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUxdID1cbitcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxuK1x0XHRcdFx0XHRWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4rXHRcdFx0XHRcdFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQsXG4rXHR9O1xuK1x0dTMyIHBlcm1pdF9mbGFncyA9IHBlcm1pdF9zcmNfbWFza1t2ZGV2LVx1MDAzZXRwaF9wb2xpY3ldIHxcbitcdFx0XHQgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlID0gezB9O1xuK1x0ZW51bSB0cGhfbWVtX3R5cGUgbXR5cGU7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTMyIHNyY19iaXRzO1xuK1x0dTE2IHRhZyA9IDA7XG4rXHR1OCBwaCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuK1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0c3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX01BU0s7XG4rXHRpZiAoIShyZXNvbHZlLmZsYWdzIFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7XG4rXHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2LCB0cnVlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXNvbHZlLnZhbGlkID0gMDtcbitcdHJlc29sdmUucGggPSAwO1xuK1x0cmVzb2x2ZS5zdCA9IDA7XG4rXG4rXHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXNvbHZlLnBoID0gcGg7XG4rXHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4rXHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4rXHRcdFx0cmVzb2x2ZS5zdCA9IHRhZztcbitcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG10eXBlID0gKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkgP1xuK1x0XHRcdFRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTtcbitcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQodmRldi1cdTAwM2VwZGV2LCBtdHlwZSwgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdCAgIHJlc29sdmUuc3JjLCBcdTAwMjZ0YWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7XG4rXHRyZXNvbHZlLnN0ID0gdGFnO1xuK1xuK291dDpcbitcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyB1MzIgdHBoX2NhbGNfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuK1x0XHRyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4rXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XG4rXHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcbitcdFx0XHQgIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0dTggcGg7XG4rXG4rXHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSlcbitcdFx0KnRhZyA9IDA7XG4rXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXG4rXHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChzcmNfaG5kbCwgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdFx0ICAgICB0YWcsIFx1MDAyNnBoKTtcbitcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSlcbitcdFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4rXHRcdFx0XHRcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcbitcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKVxuK1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbitcdFx0XHRcdFx0ZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcbitcdFx0KnRhZyA9IHNyY19obmRsO1xuK1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHQqdGFnID0gMDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHR1MzIgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgX191c2VyICphcmcsXG4rXHRcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0dTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB0cGhfc3QgPSB7MH07XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiBzcmNfYml0cywgc3Rfc2l6ZTtcbitcdGJvb2wgc3RvcF9vbl96ZXJvX3N0O1xuK1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4rXHR2b2lkIF9fdXNlciAqdXB0cjtcbitcdGJvb2wgZXh0ZW5kZWQ7XG4rXHRpbnQgcmV0LCBpO1xuK1x0dTE2IHRhZztcbitcbitcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8IHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2YodHBoX3N0KSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHNyY19iaXRzID0gdHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX01BU0s7XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcbitcdFx0cGVybWl0X2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTDtcbitcdGlmICghKHRwaF9zdC5mbGFncyBcdTAwMjYgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0ZXh0ZW5kZWQgPSAhISh0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7XG4rXHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2LCB0cnVlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRzdF9zaXplID0gdHBoX2NhbGNfc3Rfc2l6ZSh2ZGV2KTtcbitcdGlmICh0cGhfc3Quc3RhcnQgXHUwMDNlPSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCBcdTAwM2Ugc3Rfc2l6ZSAtIHRwaF9zdC5zdGFydCB8fFxuK1x0XHR0cGhfc3QuY291bnQgPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR1cHRyID0gdTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyk7XG4rXHRpZiAoIShzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkge1xuK1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpO1xuK1x0XHRpZiAoSVNfRVJSKHNyY19obmRsKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XG4rXHR9XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHN0b3Bfb25femVyb19zdCA9ICEhKHRwaF9zdC5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpO1xuK1x0aWYgKHRwaF9zdC5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxuK1x0XHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XG4rXHRcdHJldCA9IHRwaF9nZXRfc3RfdGFnKHBkZXYsIHNyY19iaXRzLCBzcmNfaG5kbCA/IHNyY19obmRsW2ldIDogMCxcbitcdFx0XHRcdCAgICAgZXh0ZW5kZWQsIFx1MDAyNnRhZyk7XG4rXHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcdTAwMjZcdTAwMjYgdGFnID09IDApKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICsgaSwgdGFnKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdHJldCA9IGk7XG4rXG4rb3V0OlxuK1x0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRrZnJlZShzcmNfaG5kbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4ge1xuQEAgLTE2MjUsNiArMTg2NCwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsXG4rXHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLmQ5YzVlNDM0ZTU4NmY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTE5LDcgKzE5LDE0IEBAIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHtcbiBcdHUzMiBucl9yYW5nZXM7XG4gXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbi1cdHU4IHJldm9rZWQgOiAxO1xuK1xuK1x0LyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cdTAwM2VyZXN2LiAqL1xuK1x0dTggcmV2b2tlZDoxO1xuK1x0dTggdHBoX3BoOjI7XG4rXHR1OCB0cGhfc3RfdmFsaWQ6MTtcbitcdHU4IHRwaF94c3RfdmFsaWQ6MTtcbitcdHU4IHRwaF9zdDtcbitcdHUxNiB0cGhfeHN0O1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTgxLDYgKzg4LDI2IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdGtyZWZfcHV0KFx1MDAyNnByaXYtXHUwMDNla3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdHUxNiAqdGFnLCB1OCAqcGgpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKGV4dGVuZGVkKSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfeHN0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnRhZyA9IHByaXYtXHUwMDNldHBoX3hzdDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqdGFnID0gcHJpdi1cdTAwM2V0cGhfc3Q7XG4rXHR9XG4rXHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuQEAgLTEwNiw2ICsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG4gfTtcbiBcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XG4rXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XG4rXG4rXHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCB0YWcsIHBoKTtcbitvdXQ6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLypcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcIiBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiArMTEsMTMgQEBcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXG4gI2RlZmluZSBWRklPX1BDSV9JT0VWRU5URkRfTUFYXHRcdDEwMDBcbiBcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4rXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcbitcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMID0gMyxcbit9O1xuK1xuIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmV4dDtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVx0KnZkZXY7XG5AQCAtMTE1LDEyICsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHRcdFx0XHQgdTE2ICp0YWcsIHU4ICpwaClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWM5NjkyZDc0MGE2MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgKzgsNyBAQFxuICAqL1xuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICsyNywxNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC0zOCw5ICs0NiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbitcdFx0XHRcdFx0ICAgYm9vbCBleHRlbmRlZClcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gMDsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpXG4reyByZXR1cm4gZmFsc2U7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggNjRiMzA4YjZlNjFjMTkuLmE5OWVlZWE1M2M4MTRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTQ3Miw3ICs0NzIsNiBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1bnNpZ25lZCBpbnRcdGF0c19lbmFibGVkOjE7XHRcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXG4gXHR1bnNpZ25lZCBpbnRcdHBhc2lkX2VuYWJsZWQ6MTtcdC8qIFByb2Nlc3MgQWRkcmVzcyBTcGFjZSBJRCAqL1xuIFx0dW5zaWduZWQgaW50XHRwcmlfZW5hYmxlZDoxO1x0XHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXG4tXHR1bnNpZ25lZCBpbnRcdHRwaF9lbmFibGVkOjE7XHRcdC8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovXG4gXHR1bnNpZ25lZCBpbnRcdGZtX2VuYWJsZWQ6MTtcdFx0LyogRmxpdCBNb2RlIChzZWdtZW50IGNhcHR1cmVkKSAqL1xuIFx0dW5zaWduZWQgaW50XHRpc19tYW5hZ2VkOjE7XHRcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xuIFx0dW5zaWduZWQgaW50XHRpc19tc2lfbWFuYWdlZDoxO1x0LyogTVNJIHJlbGVhc2UgdmlhIGRldnJlcyBpbnN0YWxsZWQgKi9cbkBAIC01ODgsNyArNTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuK1x0dTE2XHRcdHRwaF9jYXA6MTQ7XHQvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi9cbitcdHUxNlx0XHR0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEhcbitcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuK1x0dTE2XHRcdHRwaF9lbmFibGVkOjE7XHQvKiBXaGV0aGVyIFRQSCBpcyBlbmFibGVkICovXG4gXHR1OFx0XHR0cGhfbW9kZTtcdC8qIFRQSCBtb2RlICovXG4gXHR1OFx0XHR0cGhfcmVxX3R5cGU7XHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyOS4uOWE2ZTgyYzVjMDBjZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xNDksNiArMTQ5LDggQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0bmI7XG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRtZW1vcnlfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRtYWJ1ZnM7XG4rXHR1OFx0XHRcdHRwaF9wb2xpY3k7XG4rXHRib29sXHRcdFx0dHBoX3Blcm1pdDtcbiB9O1xuIFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uZWQwNGI2MjgwY2Q2OWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDY4IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIXHRcdDEzXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFXHQxNFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE1XG4rXG4rLypcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4rICpcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxuKyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIGluIGZsYWdzLlxuKyAqL1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XG4rXHRfX3UzMiBmbGFncztcbit9O1xuK1xuKy8qIENhcGFiaWxpdHkgYml0cyByZXR1cm5lZCBieSBHRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfRE1BQlVGXHQoMXUgXHUwMDNjXHUwMDNjIDApIC8qIERNQUJVRiBzb3VyY2VzIHJlc29sdmFibGUgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVXHRcdCgxdSBcdTAwM2NcdTAwM2MgMSkgLyogQ1BVIHNvdXJjZXMgcmVzb2x2YWJsZSB2aWEgX0RTTSAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXHQoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXG4rICogTm90ZTogR0VUIG9ubHlcbisgKi9cbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4rXHRfX3UzMiBmbGFncztcdC8qIElOOiBzb3VyY2UgdHlwZSArIG5hbWVzcGFjZSBtb2RpZmllcnMgKi9cbitcdF9fdTMyIHNyYztcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xuK1x0X191OCB2YWxpZDtcdC8qIE9VVDogYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbitcdF9fdTggcGg7XHQvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi9cbitcdF9fdTE2IHN0O1x0LyogT1VUOiByYXcgc3RlZXJpbmcgdGFnIHZhbHVlICovXG4rfTtcbitcbisvKlxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBTVCB0YWJsZSBlbnRyaWVzXG4rICogUmV0dXJuIHZhbHVlOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gZW50cmllc1xuKyAqIE5vdGU6IFNFVCBvbmx5XG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcbitcdF9fdTMyIGZsYWdzO1x0XHQvKiBJTjogc291cmNlIHR5cGUgKyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXG4rXHRfX3UxNiBzdGFydDtcdFx0LyogSU46IGZpcnN0IFNUIHRhYmxlIGluZGV4IC8gTVNJLVggdmVjdG9yICovXG4rXHRfX3UxNiBjb3VudDtcdFx0LyogSU46IG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gcHJvZ3JhbSAqL1xuK1x0X19hbGlnbmVkX3U2NCBkZXN0cztcdC8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi9cbit9O1xuK1xuKy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgXHUwMDNjXHUwMDNjIDApIC8qIFRQSF9TVCBvbmx5OiBzZXQgU1Q9MCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUZcdCAgICgxdSBcdTAwM2NcdTAwM2MgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgKDF1IFx1MDAzY1x1MDAzYyAzKSAvKiBzcmMgPSBwZXJzaXN0ZW50IG1lbW9yeSBDUFUgSUQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTCAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMSkgLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgU1Q9MCAqL1xuK1xuKy8qIE1hc2sgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZSBzb3VyY2UgdHlwZSBiaXRzLCBvbmx5IG9uZSBtYXkgYmUgc2V0ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0tcdChWRklPX0RFVklDRV9UUEhfU1JDX05PTkUgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCB8IFxcXG4rXHRcdFx0XHRcdCBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpXG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNi4yNTM1MzMxNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE5ODc5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBWRklPL1BDSSBUUEggUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKmFic29sdXRlbHkqIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby8qYCBhbmQgaW5jbHVkZXMgaGVhZGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBpcyBhIGh1Z2UgaW5kaWNhdG9yLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgYnVnIGZpeC4gSXQncyBhZGRpbmcgbmV3IGZlYXR1cmVzIHRvIFZGSU8gc3BlY2lmaWNhbGx5IGFyb3VuZCBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpLlxuXG5TcGVjaWZpY2FsbHksIHRoZXNlIG5ldyBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRWAsIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RgIGlvY3RscyBzY3JlYW0gXCJ1c2Vyc3BhY2UgaW50ZXJhY3Rpb24sXCIgYW5kIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gTW9kaWZ5aW5nIHRoZSBWRklPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nIHRvIGFsbG93IHdyaXRpbmcgdG8gdGhlIFRQSCBjYXBhYmlsaXR5IGFsc28gb3BlbnMgdXAgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhlIGFkZGl0aW9uIG9mIGEgYHRwaGAgbW9kdWxlIHBhcmFtZXRlciB0byBgdmZpb19wY2lgIGZ1cnRoZXIgc29saWRpZmllcyB0aGUgaW1wYWN0LlxuXG5TbywgeWVhaCwgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlIGNvZGUsIEkndmUgZ290IGEgbGlzdDpcblxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgXG4qICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWBcbiogICBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYFxuKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYFxuXG5UaG9zZSBhcmUgdGhlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhleSBhcmUgYWxsIHVzZXJzcGFjZSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50cy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGdhdGVkIGJ5IGBDT05GSUdfUENJRV9UUEhgIGFuZCBgQ09ORklHX1ZGSU9fUENJYC4gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGFuZCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgUENJRV9UUEhgIGlzIGRlZmluZWQgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjE0Ljc3MzQxNTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwMjc0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MTcuNTgzNjk4Njc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5ODQ3MjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk5lY2Vzc2FyeSBDb25maWd1cmF0aW9uIGZvciBWRklPIGFuZCBETUEgQnVmZmVycyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MgaGVyZSwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gVkZJTy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBDSUVfVFBIYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGVuYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgVkZJT19QQ0lgIHNldHRpbmcgaXMgYWxzbyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5CdXQgbm93LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhhdCBmdW5jdGlvbiBjYWxsLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gVGhhdCBzY3JlYW1zIERNQSBidWZmZXIgc3VwcG9ydC4gU28sIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4gSXQgbG9va3MgbGlrZSB0aGF0IG1pZ2h0IGJlIGFub3RoZXIgcmVxdWlyZW1lbnQgaWYgSSdtIGFpbWluZyB0byBsZXZlcmFnZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzY2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MjAuNjgyMTczMzY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM2OTgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJX0RNQUJVRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MjMuMTc1ODk5NzQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzcyMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBWRklPX1BDSV9ETUFCVUYgYW5kIFJlbGF0ZWQgRmVhdHVyZXMqKlxuXG5Pa2F5LCBzbyBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sZWFuLCByaWdodD8gSXQgaGluZ2VzIG9uIGBWRklPX1BDSV9DT1JFYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgYFZGSU9fUENJX0RNQUJVRmAgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFyZSBhbHNvIGVuYWJsZWQsIGFzc3VtaW5nIHRoZXkgYXJlbid0IGFscmVhZHkuXG5cbkluc3RlYWQgb2YgZXhwbGljaXRseSBtZW50aW9uaW5nIGV2ZXJ5IGRlcGVuZGVuY3ksIEknbGwganVzdCBsaXN0IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgUENJX1AyUERNQWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGEgY29uY2lzZSBhbmQgZm9jdXNlZCBhcHByb2FjaC5cblxuTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAgYW5kIHRoZSBvdGhlcnMgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjoyNy40ODM2MjU2OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MDQyNjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MDE9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyNy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI4OnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NTktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTY2MDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTY2MS1cXHRcXHRcXHR1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzc2OnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xODQ5PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NjctXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODY4OlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODY5LVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODcwOlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg3MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg3Mi1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4NzM6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzQtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MzAuMTc0MDU3MTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDEyODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkZJTy1QQ0kgVFBIIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGUgVFBIIChUcmFuc2xhdGVkIFBoeXNpY2FsIEFkZHJlc3MpIGZlYXR1cmUgZm9yIFZGSU8tUENJLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIHRyYW5zbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGFzcGVjdHMgd29yay5cblxuRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aCwgYW5kIGtub3dpbmcgaWYgaXQncyB0aGVyZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVzdC4gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHByZXNlbnQgc28gdGhlIGZlYXR1cmUgY2FuIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjMzLjk2NDE4ODU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAwMzQ4OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNDg9c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMTQ5OnN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNTAtXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTIyOD1pbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNDYtXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMjQ3OlxcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0OC1cXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjM2LjI2NDU0MTY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyOTE3Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCoqXG5cblJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FzZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0by4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhbmQgYSBxdWljayByZS1leGFtaW5hdGlvbiBuZXZlciBodXJ0cywgZ2l2ZW4gaXRzIHJvbGUgd2l0aGluIHRoZSB2ZmlvLXBjaSBETUEgYnVmZmVyIGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHRoZSBzdWJ0bGV0aWVzIGluIHRoaXMgYXJlYS4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2ODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjozOS40NTc0NjE2NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDI4NzU2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2NjA9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNS1cXHRpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MDY6XFx0XFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRhZywgXFx1MDAyNnBoKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3NTA9c3RhdGljIGludCB0cGhfZ2V0X3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLCB1MzIgc3JjX2huZGwsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzU4LVxcdGVsc2UgaWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTc1OTpcXHRcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YWcsIFxcdTAwMjZwaCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjEzNjppbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNy17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMTk9c3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNC0jaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyNTppbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI2LWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTEzMD12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTMxLSNlbHNlXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTMyOnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTMzLVxcdFxcdFxcdFxcdFxcdFxcdCB1MTYgKnRhZywgdTggKnBoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjo0Mi4wNjAzNDE5NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NjgxNjQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBIYW5kbGluZyBpbiBWRklPLVBDSSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBWRklPLVBDSSBkcml2ZXIsIGFuZCBteSBmb2N1cyBoYXMgc2hpZnRlZCB0byBETUEgYnVmZmVyIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSdtIGRyaWxsaW5nIGRvd24gaW50byBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiAoVFBIKSBmb3IgRE1BIHRyYW5zZmVycy4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGFyZSB3aGF0IEknbSBpbnRlcmVzdGVkIGluIGhlcmUuXG5cbk15IHRyYWluIG9mIHRob3VnaHQgaXMgdGhhdCBJJ20gZW5jb3VudGVyaW5nIGEgbmV3IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIERNQSBidWZmZXJzLiBUaGUgbmFtZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBETUEgYnVmZmVycyBtYW5hZ2VkIHZpYSB0aGUgYGRtYV9idWZgIGZyYW1ld29yayBhbmQgdGhlIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgRE1BIGJ1ZmZlciBmcmFtZXdvcms/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgVFBIIGJlaW5nIGludm9sdmVkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gU1ZBPyBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSByZWdhcmRpbmcgc2VjdXJlIGFuZCBlZmZpY2llbnQgRE1BIGFjY2VzcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBWRklPIGVudmlyb25tZW50LiBJdCBwcm9iYWJseSBob2xkcyBjbHVlcyB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGRtYV9idWYgYW5kIHBjaSBsYXllcnMgaW4gdGhlc2Ugc3BlY2lmaWMgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2hlcmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6NDYuODM3MTYxMDQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE3ODkzNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03OT1zdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTkwLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6OTE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy05Mi1cXHRcXHRcXHRcXHRcXHR1MTYgKnRhZywgdTggKnBoKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xMzY9aW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnLCB1OCAqcGgpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTE0OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjE1MDpcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTUxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6NDkuMzU1MDYwMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNDU5MjY1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZGSU8tUENJIFRQSCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBWRklPLVBDSSBUUEggc3R1ZmYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIG5vdy5cblxuTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IEkndmUgZ290IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfRE1BQlVGYC4gSG9sZCBvbiwgbG9va3MgbGlrZSBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sLiBJdCdzIG9ubHkgc2V0IHRvICd5JyBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgZW5hYmxlZC4gUmlnaHQuIEkgc2hvdWxkIGluY2x1ZGUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGluIHRoZSBsaXN0LCBqdXN0IGluIGNhc2UuIFRoZXkncmUgcGFydCBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUgYWdhaW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBlbm91Z2ggb2YgYSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MDMuNDAwOTk3NjUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM5OTI3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSV9ETUFCVUZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ3PWNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEzOjA1Ljg0MDkzMTY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxNDIxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW5hYmxpbmcgRE1BLUJVRiBTaGFyaW5nIHdpdGggVkZJTyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRvIGdldCBgVkZJT19QQ0lfRE1BQlVGYCB3b3JraW5nIHByb3Blcmx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYm90aCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGVuYWJsZWQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciB0aGUgdW5kZXJseWluZyBETUEgaW5mcmFzdHJ1Y3R1cmUuIEkgY2Fu4oCZdCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZlYXR1cmVzLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvcGNpL0tjb25maWdgIGZpbGUuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IGBQQ0lFX1RQSGAgcG90ZW50aWFsbHkgcGxheWluZyBhIHJvbGUgaW4gdGhpcyBETUEgcGF0aCwgc28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RhdHVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJ2xsIG1ha2Ugc3VyZSBpdOKAmXMgY29uZmlndXJlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc2V0dXAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBpbnRlcnJlbGF0ZXMgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzowOS4xNDIzNjg4MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjcyMTUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzoxMS40Njk1OTIwNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTk5NzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYFBDSUVfVFBIYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYFBDSUVfVFBIYCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIGJvb2xlYW4uIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIHRoZSBpbXBsaWNhdGlvbnMuIEEgYm9vbGVhbiBpbmRpY2F0ZXMgYSBzaW1wbGUgXCJlbmFibGVkL2Rpc2FibGVkXCIgc3RhdGUuIFRoaXMgdHJpZ2dlcnMgYSBxdWljayBtZW1vcnkgY2hlY2s6IHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5PyBXaGVyZSBpcyB0aGlzIGJlaW5nIHVzZWQ/IFdoYXQgY29udHJvbCBkb2VzIHRoaXMgcHJvdmlkZT9cblxuTXkgbmV4dCBpbnN0aW5jdCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVkZJT19QQ0lgIGlzIHNldC4gSXQgc2VlbXMgdGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBvZiBgVkZJT19QQ0lgIGhhcyBhbnkgYmVhcmluZyBvbiBgUENJRV9UUEhgLCBzbyBJJ20gaGVhZGluZyB0byBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gcmV2ZWFsLiBJIGV4cGVjdCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBmZWF0dXJlcyBkZWZpbmVkIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgdGhlIGtleSB0byBtYW5hZ2luZyB0aGlzIGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MTUuNTM1NTkxMjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NjEzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzoxNy44NTQyMTAxODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MDE1ODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlZGSU8gXHUwMDI2IFBDSSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgVkZJT19QQ0lgLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgVkZJTyBpcyB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIGFuZCBQQ0kgaXMgdGhlIG1lY2hhbmlzbSBmb3IgZGlyZWN0IGRldmljZSBhY2Nlc3MuIEdpdmVuIHRoYXQsIEkgd2FudCB0byBjb25maXJtIG91ciBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBzb2xpZC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZGlyZWN0b3J5IGJlY2F1c2Ugb2YgdGhlIFBDSSBmb2N1cy4gVGhlIGtleSBwYXJhbWV0ZXIgdG8gY2hlY2sgaW4gdGhhdCBmaWxlIHdvdWxkIGJlIGBQQ0lfUDJQRE1BYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IERNQSBmdW5jdGlvbmFsaXR5IGlzIGNvcnJlY3RseSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIG91ciBzZXR1cCwgYW5kIEknbSB1c2luZyBgUENJX1AyUERNQWAgYXMgdGhlIGZsYWcgdG8gZW5zdXJlIHRoYXQgdGhlIHNldHRpbmdzIG1hdGNoIHdoYXQgd2UncmUgZXhwZWN0aW5nIGZvciB0aGlzIGhhcmR3YXJlLiBJIHdpbGwgbmVlZCB0byBjaGVjayBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MjIuOTI0MzcyNDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcxNjM4NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDUtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEzOjI1LjM5NjAyMDE1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk2Mzk1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgRE1BIGJ1ZmZlciBzaXR1YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYERNQV9TSEFSRURfQlVGRkVSYCwgaXMgZGVmaW5lZC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUgbG9va2luZy4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgd2hlbiBkZWFsaW5nIHdpdGggRE1BIGJ1ZmZlcnMsIHdoaWNoIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgdG8gb3B0aW1pemUgdGhlIGRyaXZlcidzIHBlcmZvcm1hbmNlLiBTbywgeWVhaCwgdGhhdCdzIG15IGZvY3VzIG5vdywgZmlndXJpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MjguMTkyNDE3OTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTAxNjEyMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzozMi4yOTQwMzg3NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MTk5NjkyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kvVkZJTyBUUEggTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzIEhlYWRlcikgc3VwcG9ydCB3aXRoaW4gdGhlIFBDSSBhbmQgVkZJTyBzdWJzeXN0ZW1zLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBib29sZWFuLCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0IG1pZ2h0IGludGVyYWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW51bWVyYXRlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IGFyZSByZWxldmFudCwgd2hpY2ggSSd2ZSBqdXN0IHdyaXR0ZW4gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSeKAmW0gdXNpbmcgdGhlc2UgdG8gc2V0IHRoZSBzdGFnZSBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuTm93LCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIHN5bWJvbHMuIEkgc3RhcnRlZCBieSBsb29raW5nIGluIGBkcml2ZXJzL3BjaS90cGguY2AgYW5kIGZvdW5kIGEgYnVuY2ggb2YgdGhlbTogYHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRgLCBgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0YCwgYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgLCBgcGNpZV90cGhfc3VwcG9ydGVkYCwgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4gSSBhZGRlZCB0aGVzZSB0byBteSBncm93aW5nIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuVGhlbiwgSSBsb29rZWQgaW4gb3RoZXIgcmVsZXZhbnQgbG9jYXRpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBJIGZvdW5kOiBgdHBoX2dldF9zdF90YWdgIGFuZCBgdHBoX2NhbGNfc3Rfc2l6ZWAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIFZGSU8gaW50ZXJhY3Rpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIEkgc2F3OiBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYW5kIGBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtYC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZS5cblxuVGhpcyBsZWQgbWUgdG8gaWRlbnRpZnkgbW9yZSByZWxldmFudCBzeW1ib2xzLCBwYXJ0aWN1bGFybHkgZnJvbSBgdmZpb19wY2lfY29yZS5jYCBhbmQgYHZmaW9fcGNpX2NvbmZpZy5jYC4gSSBoYXZlIGFkZGVkIHRoZXNlIHN5bWJvbHM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0YCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAsIGBwY2llX3RwaF9zdXBwb3J0ZWRgLCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCwgYXQgbGVhc3QgZm9yIHRoZSBpbml0aWFsIG92ZXJ2aWV3LiBOb3csIEkgZmVlbCByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLCBzbyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMTMsIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjE0OjA0LjExNDAxMDc2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM4MDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0XCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXhwbGljaXRcIixcbiAgICBcInBjaWVfdHBoX3N1cHBvcnRlZFwiLFxuICAgIFwicGNpZV90cGhfZHNtX3N1cHBvcnRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0XCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdFwiLFxuICAgIFwicGNpZV90cGhfc3VwcG9ydGVkXCIsXG4gICAgXCJwY2llX3RwaF9kc21fc3VwcG9ydGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgVkZJTyBkZXZpY2UgZmVhdHVyZXMgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCksIGludHJvZHVjaW5nIG5ldyBpb2N0bHMgYW5kIGNvbmZpZ3VyYXRpb24gc3BhY2UgaGFuZGxpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4n5jw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 15:59:47 +0000 UTC FinishedAt: 2026-07-02 16:14:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "0bebeab7-12e5-4969-83f3-2d1e71f3277c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph", "vfio_pci_core_feature_tph_resolve", "vfio_pci_core_feature_tph_st", "vfio_tph_config_write", "vfio_tph_capability_adjust", "vfio_pci_dma_buf_get_tph_by_fd", "vfio_pci_dma_buf_get_pci_tph", "pcie_tph_get_cpu_st_explicit", "pcie_enable_tph_explicit", "pcie_tph_supported", "pcie_tph_dsm_supported" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YmRlYmNhMjllNGYxNjdhZTNiZThlZDk1OWE2MTU5OTMwYjdmZDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNjoxMjowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2YS4uZmNkYmExMzVhNGYzMmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNjUsMTEgJiM0MzsxNjUsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiYjNDM7XHRcdHJldHVybiBQQ0lfVFBIX0xPQ19OT05FO1xuIFxuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4mIzQzO1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg0LDkgJiM0MzsxODcsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMwLDIxICYjNDM7MjMwLDggQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpO1xuIH1cbiBcbi0vKipcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4tICogd2l0aCBhIHNwZWNpZmljIENQVVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuLSAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4tICpcbi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcbi0gKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbi0gKlxuLSAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbi0gKi9cbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHQgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4ge1xuICNpZmRlZiBDT05GSUdfQUNQSVxuIFx0c3RydWN0IHBjaV9kZXYgKnJwO1xuQEAgLTI2OCwxOSAmIzQzOzI1NSw2NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuJiM0MztcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiBcbi1cdHBjaV9kYmcocGRldiwgXCYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuJiM0MztcdHBjaV9kYmcocGRldiwgXCYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0OyxcbiBcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcJiMzNDt2b2xhdGlsZVwmIzM0OyA6IFwmIzM0O3BlcnNpc3RlbnRcJiMzNDssXG4tXHRcdGNwdSwgKnRhZyk7XG4mIzQzO1x0XHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcbiBcbiBcdHJldHVybiAwO1xuICNlbHNlXG4gXHRyZXR1cm4gLUVOT0RFVjtcbiAjZW5kaWZcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuJiM0MzsgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbiYjNDM7ICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbiYjNDM7ICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxuJiM0MzsgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgY3B1LCB0YWcpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQgLSBHZXQgU1Qgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEBleHRlbmRlZDogdHJ1ZT1FWFRfVFBILCBmYWxzZT1zdGFuZGFyZCBUUEggb25seVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuXG4mIzQzOyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4mIzQzO3tcbiYjNDM7XHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcmVxX3R5cGUsIGNwdSwgdGFnKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpO1xuJiM0MztcbiAvKipcbiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG4gICogQHBkZXY6IFBDSSBkZXZpY2VcbkBAIC0zMTUsOCAmIzQzOzM0Nyw2IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7XG4gXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXG4tXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xuIFxuIFx0c3dpdGNoIChsb2MpIHtcbiBcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbkBAIC0zNjUsMjcgJiM0MzszOTUsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuLS8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuLSAqXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4tICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbi0gKi9cbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGludCBlbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCYjMzQ7bm90cGhcJiMzNDsga2VybmVsIHBhcmFtZXRlciAqL1xuIFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXG5AQCAtNDAzLDI2ICYjNDM7NDE2LDEyIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIG1vZGUpIFx1MDAyNiBkZXZfbW9kZXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHBkZXYtXHUwMDNldHBoX21vZGUgPSBtb2RlO1xuLVxuLVx0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbi1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4tXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbi1cdGVsc2Vcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbi1cbi1cdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4tXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4tXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuLVxuLVx0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gbWluKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4tXHR9XG4tXG4tXHRpZiAocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbiYjNDM7XHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIXBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xuJiM0MztcbiBcdC8qIFdyaXRlIHRoZW0gaW50byBUUEggY29udHJvbCByZWdpc3RlciAqL1xuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsIFx1MDAyNnJlZyk7XG4gXG5AQCAtNDM1LDggJiM0Mzs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbiYjNDM7ICpcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcbiYjNDM7ICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcbiYjNDM7ICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbiYjNDM7ICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4mIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1x0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0IC0gRW5hYmxlIFRQSCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciBzZWxlY3Rpb25cbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gb3BlcmF0ZVxuJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKVxuJiM0MzsgKiBAZXh0ZW5kZWQ6IHRydWUgPSBFWFRfVFBILCBmYWxzZSA9IHN0YW5kYXJkIFRQSCBvbmx5XG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGVcbiYjNDM7ICogbWFudWFsbHkgaW5zdGVhZCBvZiBoYXJkd2FyZSBhdXRvLXNlbGVjdGlvbi4gUmVqZWN0cyBFWFRfVFBIIHJlcXVlc3RcbiYjNDM7ICogaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UmIzM5O3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxuJiM0MzsgKi9cbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xuJiM0MztcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcbkBAIC01MDgsMTQgJiM0Mzs1NjIsODQgQEAgdm9pZCBwY2lfbm9fdHBoKHZvaWQpXG4gXG4gdm9pZCBwY2lfdHBoX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuJiM0MztcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuJiM0MztcdHUzMiByZWcgPSAwO1xuIFxuIFx0cGRldi1cdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcbiBcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogR2V0IHJlcV90eXBlIHN1cHBvcnRlZCBieSBkZXZpY2UgYW5kIGl0cyBSb290IFBvcnQgKi9cbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuJiM0MztcdGlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSlcbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4mIzQzO1x0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuJiM0MztcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4mIzQzO1x0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbiYjNDM7XHRcdHBkZXYtXHUwMDNldHBoX2NhcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbiYjNDM7XG4gXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuIFx0c2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgJiM0MzsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcbiBcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfdHBoX3N1cHBvcnRlZCAtIENoZWNrIFRQSCBjYXBhYmlsaXR5IGF0dHJpYnV0ZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd2FudF9leHQpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSVxuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuJiM0MztcdGlmICghaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uN2VmODJiNDQ1NzIyNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgJiM0Mzs2MCwyOCBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XG4mIzQzO3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxuJiM0MztcdFx0XHRcdCAgICAgVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdHBoX3BhcmFtX29wcyA9IHtcbiYjNDM7XHQuc2V0ID0gdHBoX3NldCxcbiYjNDM7XHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4mIzQzO307XG4mIzQzO21vZHVsZV9wYXJhbV9jYih0cGgsIFx1MDAyNnRwaF9wYXJhbV9vcHMsIFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKHRwaCxcbiYjNDM7XHRcJiMzNDtHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDswID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDszID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVL0xJVEVSQUwgc291cmNlc1xcblwmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzd2l0Y2ggKHBkZXYtXHUwMDNldmVuZG9yKSB7XG5AQCAtMTQyLDYgJiM0MzsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXG4gXHR2ZGV2LVx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uMzg4ZGQ2ZmVkMTZiNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxMjcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXG4mIzQzO1x0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogUGVyIFBDSSBzcGVjaWZpY2F0aW9uOiBUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiA2NCBlbnRyaWVzXG4mIzQzO1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuJiM0MztcdCAqIENhcGFiaWxpdHkgc3RydWN0dXJlLlxuJiM0MztcdCAqIEFuZCB0aGUgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0gaXMgMHhGRiwgc28gdGhlXG4mIzQzO1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHBfc2V0dyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GICYjNDM7IGkgKiBzaXplb2YodTE2KSxcbiYjNDM7XHRcdCAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBwb3MpXG4mIzQzO3tcbiYjNDM7XHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyAmIzQzOyBQQ0lfVFBIX0NBUF07XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbiYjNDM7XHRib29sIG5lZWRfYWRqdXN0ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XG4mIzQzO1x0XHQvKiBSZW1vdmUgZXh0ZW5kIFRQSCBpZiByb290LXBvcnQgZG9uJiMzOTt0IHN1cHBvcnQgKi9cbiYjNDM7XHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuJiM0MztcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XG4mIzQzO1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBtb2RlIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbiYjNDM7XHRcdFx0IFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuJiM0MztcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX1NUX0RTO1xuJiM0MztcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24mIzM5O3Qgc3VwcG9ydCBJViBtb2RlICovXG4mIzQzO1x0XHRpZiAoISh2YWwgXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSlcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuJiM0MztcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5lZWRfYWRqdXN0KVxuJiM0MztcdFx0KnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKTtcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuJiM0MztcdHU4IG1vZGUsIHJlcSwgb3JnX3JlcTtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XG4mIzQzO1x0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0b3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTtcbiYjNDM7XHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcdTAwMjZvcmdfdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSBjb3VudClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICYjNDM7IFBDSV9UUEhfQ1RSTF0pO1xuJiM0MztcdGlmIChuZXdfY3RybCA9PSBvcmdfY3RybClcbiYjNDM7XHRcdGdvdG8gb3V0OyAvKiBPbmx5IGNhcmUgYWJvdXQgY2hhbmdlcyBpbiBUUEhfQ1RSTC4gKi9cbiYjNDM7XG4mIzQzO1x0Y2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DQVBdKTtcbiYjNDM7XHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7XG4mIzQzO1x0cmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgbmV3X2N0cmwpO1xuJiM0MztcdGlmIChtb2RlIFx1MDAzZSBQQ0lfVFBIX1NUX0RTX01PREUgfHwgIShjYXAgXHUwMDI2ICgxdSBcdTAwM2NcdTAwM2MgbW9kZSkpIHx8IHJlcSA9PSAweDIgfHxcbiYjNDM7XHRcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIShjYXAgXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTsgLyogRHJvcCBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHdyaXRlIHZhbHVlICovXG4mIzQzO1xuJiM0MztcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XG4mIzQzO1x0aWYgKHJlcSA9PSBvcmdfcmVxKVxuJiM0MztcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7IC8qIERyb3AgdGhpcyB3cml0ZSAqL1xuJiM0MztcbiYjNDM7XHRpZiAocmVxID09IFBDSV9UUEhfUkVRX1RQSF9PTkxZIHx8IHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKSB7XG4mIzQzO1x0XHRleHRlbmRlZCA9ICEhKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbiYjNDM7XHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmU7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuJiM0MztcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztyZXN0b3JlOlxuJiM0MztcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcbiYjNDM7b3V0OlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyMjIsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjQzLDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xNDUwLDYgJiM0MzsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICYjNDM7IGJ5dGUgJiM0MzsgMTtcbiBcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxuJiM0MztcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGVwb3MgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNmR3b3JkKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcbkBAIC0xNzAxLDYgJiM0MzsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcdTAwMjZcdTAwMjYgIWhpZGRlbilcbiYjNDM7XHRcdFx0dmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3QodmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJiMzOTtyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMDMuLjljMGYzYzdhMWVmNzM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuICNpbmNsdWRlIFx1MDAzY2FzbS9lZWguaFx1MDAzZVxuQEAgLTEyNywxMCAmIzQzOzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaF9wb2xpY3koc3RydWN0IHNlcV9maWxlICpzZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsldVxcblwmIzM0OywgdmRldi1cdTAwM2V0cGhfcG9saWN5KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuLSAqIGRpc2FibGVfaWRsZV9kMyBhbmQgbm9pbnR4bWFzayBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnMgbGF0Y2hlZFxuLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuJiM0MzsgKiBkaXNhYmxlX2lkbGVfZDMsIG5vaW50eG1hc2sgYW5kIHRwaF9wb2xpY3kgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzXG4mIzQzOyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4mIzQzOyAqIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuICAqIGhlcmUgZm9yIHZpc2liaWxpdHk7IHJlYWQtb25seSBwYXJhbWV0ZXJzIGNhbiYjMzk7dCBkcmlmdCBhbmQgYXJlIG9taXR0ZWQuXG4gICovXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuQEAgLTE0Niw2ICYjNDM7MTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwmIzM0O2Rpc2FibGVfaWRsZV9kM1wmIzM0OywgcGNpX2RpcixcbiBcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcJiMzNDt0cGhfcG9saWN5XCYjMzQ7LCBwY2lfZGlyLFxuJiM0MztcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC02MTAsNiAmIzQzOzYyMiw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4mIzQzO1x0dmRldi1cdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XG4mIzQzO1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXG4mIzQzO1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXHR2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcbiBcdGlmICghdmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXG5AQCAtNzU3LDYgJiM0Mzs3NzIsOSBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXG4gXHR2ZmlvX3BjaV96ZGV2X2Nsb3NlX2RldmljZSh2ZGV2KTtcbiBcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXG4mIzQzO1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB3ZSBoYXZlIHNhdmVkIHN0YXRlLCByZXN0b3JlIGl0LiAgSWYgd2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UsXG4gXHQgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW5cbkBAIC0xNjA3LDYgJiM0MzsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldiwgZmFsc2UpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuJiM0MztcdFx0XHRWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRzaXplb2YodHBoKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9wZXJtaXQgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjtcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFU7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXG4mIzQzO1x0XHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1MzIgcGVybWl0X3NyY19tYXNrW10gPSB7XG4mIzQzO1x0XHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcbiYjNDM7XHRcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUXSA9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGLFxuJiM0MztcdFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgLi4uIFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTF0gPVxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfFxuJiM0MztcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCxcbiYjNDM7XHR9O1xuJiM0MztcdHUzMiBwZXJtaXRfZmxhZ3MgPSBwZXJtaXRfc3JjX21hc2tbdmRldi1cdTAwM2V0cGhfcG9saWN5XSB8XG4mIzQzO1x0XHRcdCAgIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlID0gezB9O1xuJiM0MztcdGVudW0gdHBoX21lbV90eXBlIG10eXBlO1xuJiM0MztcdGJvb2wgZXh0ZW5kZWQ7XG4mIzQzO1x0dTMyIHNyY19iaXRzO1xuJiM0MztcdHUxNiB0YWcgPSAwO1xuJiM0MztcdHU4IHBoID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHNyY19iaXRzID0gcmVzb2x2ZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xuJiM0MztcdGlmICghKHJlc29sdmUuZmxhZ3MgXHUwMDI2IHBlcm1pdF9mbGFncykgfHwgIWlzX3Bvd2VyX29mXzIoc3JjX2JpdHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0ZXh0ZW5kZWQgPSAhIShyZXNvbHZlLmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuJiM0MztcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJlc29sdmUudmFsaWQgPSAwO1xuJiM0MztcdHJlc29sdmUucGggPSAwO1xuJiM0MztcdHJlc29sdmUuc3QgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XG4mIzQzO1x0XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnRhZywgXHUwMDI2cGgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJlc29sdmUucGggPSBwaDtcbiYjNDM7XHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4mIzQzO1x0XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkge1xuJiM0MztcdFx0XHRyZXNvbHZlLnN0ID0gdGFnO1xuJiM0MztcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXR5cGUgPSAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKSA/XG4mIzQzO1x0XHRcdFRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTtcbiYjNDM7XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHZkZXYtXHUwMDNlcGRldiwgbXR5cGUsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0ICAgcmVzb2x2ZS5zcmMsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbiYjNDM7XHRyZXNvbHZlLnN0ID0gdGFnO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgdHBoX2NhbGNfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcbiYjNDM7XHRcdFx0ICBib29sIGV4dGVuZGVkLCB1MTYgKnRhZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdHU4IHBoO1xuJiM0MztcbiYjNDM7XHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSlcbiYjNDM7XHRcdCp0YWcgPSAwO1xuJiM0MztcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbiYjNDM7XHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChzcmNfaG5kbCwgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxuJiM0MztcdFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4mIzQzO1x0XHRcdFx0XHRleHRlbmRlZCwgc3JjX2huZGwsIHRhZyk7XG4mIzQzO1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbiYjNDM7XHRcdFx0XHRcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMKVxuJiM0MztcdFx0KnRhZyA9IHNyY19obmRsO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ICE9IDApXG4mIzQzO1x0XHQqdGFnID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHR1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHUzMiBwZXJtaXRfZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0sgfCBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgc3JjX2JpdHMsIHN0X3NpemU7XG4mIzQzO1x0Ym9vbCBzdG9wX29uX3plcm9fc3Q7XG4mIzQzO1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4mIzQzO1x0dm9pZCBfX3VzZXIgKnVwdHI7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8IHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHRwaF9zdCkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0c3JjX2JpdHMgPSB0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSztcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcbiYjNDM7XHRcdHBlcm1pdF9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUw7XG4mIzQzO1x0aWYgKCEodHBoX3N0LmZsYWdzIFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGV4dGVuZGVkID0gISEodHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuJiM0MztcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHN0X3NpemUgPSB0cGhfY2FsY19zdF9zaXplKHZkZXYpO1xuJiM0MztcdGlmICh0cGhfc3Quc3RhcnQgXHUwMDNlPSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCBcdTAwM2Ugc3Rfc2l6ZSAtIHRwaF9zdC5zdGFydCB8fFxuJiM0MztcdFx0dHBoX3N0LmNvdW50ID09IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0dXB0ciA9IHU2NF90b191c2VyX3B0cih0cGhfc3QuZGVzdHMpO1xuJiM0MztcdGlmICghKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XG4mIzQzO1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpO1xuJiM0MztcdFx0aWYgKElTX0VSUihzcmNfaG5kbCkpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHNyY19obmRsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRzdG9wX29uX3plcm9fc3QgPSAhISh0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKTtcbiYjNDM7XHRpZiAodHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXG4mIzQzO1x0XHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSB0cGhfZ2V0X3N0X3RhZyhwZGV2LCBzcmNfYml0cywgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXG4mIzQzO1x0XHRcdFx0ICAgICBleHRlbmRlZCwgXHUwMDI2dGFnKTtcbiYjNDM7XHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcdTAwMjZcdTAwMjYgdGFnID09IDApKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyeShwZGV2LCB0cGhfc3Quc3RhcnQgJiM0MzsgaSwgdGFnKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdGtmcmVlKHNyY19obmRsKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTYyNSw2ICYjNDM7MTg2NCwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjgxLi5kOWM1ZTQzNGU1ODZmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0xOSw3ICYjNDM7MTksMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4mIzQzO1xuJiM0MztcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdi4gKi9cbiYjNDM7XHR1OCByZXZva2VkOjE7XG4mIzQzO1x0dTggdHBoX3BoOjI7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3hzdF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHR1MTYgdHBoX3hzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC04MSw2ICYjNDM7ODgsMjYgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdFx0XHR1MTYgKnRhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF94c3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCp0YWcgPSBwcml2LVx1MDAzZXRwaF94c3Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdCp0YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbiYjNDM7XHR9XG4mIzQzO1x0KnBoID0gcHJpdi1cdTAwM2V0cGhfcGg7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbkBAIC0xMDYsNiAmIzQzOzEzMywyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbiB9O1xuIFxuJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhpcyBpcyBhIHRlbXBvcmFyeSBcJiMzNDtwcml2YXRlIGludGVyY29ubmVjdFwmIzM0OyBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiAmIzQzOzExLDEzIEBAXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFx0XHQxMDAwXG4gXG4mIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMID0gMyxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXh0O1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlXHQqdmRldjtcbkBAIC0xMTUsMTIgJiM0MzsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiYjNDM7aW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnLCB1OCAqcGgpO1xuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbiBcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbiAjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0XHQgdTE2ICp0YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWM5NjkyZDc0MGE2MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAgKi9cbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG5AQCAtMjYsMTAgJiM0MzsyNywxNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG5AQCAtMzgsOSAmIzQzOzQ2LDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgIGJvb2wgZXh0ZW5kZWQpXG4mIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KVxuJiM0Mzt7IHJldHVybiBmYWxzZTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li5hOTllZWVhNTNjODE0YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OCw3ICYjNDM7NTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjE0O1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxuJiM0MztcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfZW5hYmxlZDoxO1x0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xuIFx0dThcdFx0dHBoX21vZGU7XHQvKiBUUEggbW9kZSAqL1xuIFx0dThcdFx0dHBoX3JlcV90eXBlO1x0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggOWExNjc0YzE1MmFhMjkuLjlhNmU4MmM1YzAwY2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTQ5LDYgJiM0MzsxNDksOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbiYjNDM7XHR1OFx0XHRcdHRwaF9wb2xpY3k7XG4mIzQzO1x0Ym9vbFx0XHRcdHRwaF9wZXJtaXQ7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLmVkMDRiNjI4MGNkNjllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsNjggQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxM1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVcdDE0XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE1XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4mIzQzOyAqXG4mIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlOyBmbGFncyBtdXN0IGJlIHplcm8uXG4mIzQzOyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIGluIGZsYWdzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHtcbiYjNDM7XHRfX3UzMiBmbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIENhcGFiaWxpdHkgYml0cyByZXR1cm5lZCBieSBHRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRlx0KDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBETUFCVUYgc291cmNlcyByZXNvbHZhYmxlICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFVcdFx0KDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXHQoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXG4mIzQzOyAqIE5vdGU6IEdFVCBvbmx5XG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XHQvKiBJTjogc291cmNlIHR5cGUgJiM0MzsgbmFtZXNwYWNlIG1vZGlmaWVycyAqL1xuJiM0MztcdF9fdTMyIHNyYztcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xuJiM0MztcdF9fdTggdmFsaWQ7XHQvKiBPVVQ6IGJpdG1hcCBpbmRpY2F0aW5nIHZhbGlkIG91dHB1dCBmaWVsZHMgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEggKDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBwaCBob2xkcyB2YWxpZCBwcm9jZXNzaW5nIGhpbnQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbiYjNDM7XHRfX3U4IHBoO1x0LyogT1VUOiBUUEggcHJvY2Vzc2luZyBoaW50ICovXG4mIzQzO1x0X191MTYgc3Q7XHQvKiBPVVQ6IHJhdyBzdGVlcmluZyB0YWcgdmFsdWUgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBTVCB0YWJsZSBlbnRyaWVzXG4mIzQzOyAqIFJldHVybiB2YWx1ZTogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXNcbiYjNDM7ICogTm90ZTogU0VUIG9ubHlcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XHRcdC8qIElOOiBzb3VyY2UgdHlwZSAmIzQzOyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXG4mIzQzO1x0X191MTYgc3RhcnQ7XHRcdC8qIElOOiBmaXJzdCBTVCB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvciAqL1xuJiM0MztcdF9fdTE2IGNvdW50O1x0XHQvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovXG4mIzQzO1x0X19hbGlnbmVkX3U2NCBkZXN0cztcdC8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAwKSAvKiBUUEhfU1Qgb25seTogc2V0IFNUPTAgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRlx0ICAgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzcmMgPSBkbWEtYnVmIGZkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UICgxdSBcdTAwM2NcdTAwM2MgMykgLyogc3JjID0gcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMICAgICAgICAoMXUgXHUwMDNjXHUwMDNjIDQpIC8qIFRQSF9TVCBvbmx5OiBzcmMgPSByYXcgbGl0ZXJhbCBTVCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCAgICAgICAgICgxdSBcdTAwM2NcdTAwM2MgMzEpIC8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIFNUPTAgKi9cbiYjNDM7XG4mIzQzOy8qIE1hc2sgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZSBzb3VyY2UgdHlwZSBiaXRzLCBvbmx5IG9uZSBtYXkgYmUgc2V0ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLXHQoVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QmIzM0OywKICAgICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfdHBoX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9kc21fc3VwcG9ydGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmJkZWJjYTI5ZTRmMTY3YWUzYmU4ZWQ5NTlhNjE1OTkzMGI3ZmQxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTY6MTI6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jCmluZGV4IDY1NWZmZDYwZTYyZjZhLi5mY2RiYTEzNWE0ZjMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTE2NSwxMSAmIzQzOzE2NSwxNCBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogICovCiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1MzIgcmVnOwomIzQzOwl1MzIgcmVnID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZGV2LSZndDt0cGhfY2FwKQomIzQzOwkJcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgcmVnKTsKJiM0MzsJcmV0dXJuIHJlZyAmYW1wOyBQQ0lfVFBIX0NBUF9MT0NfTUFTSzsKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7CiAKQEAgLTE4NCw5ICYjNDM7MTg3LDYgQEAgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJLyogQ2hlY2sgU1QgdGFibGUgbG9jYXRpb24gZmlyc3QgKi8KIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCi0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7CiAJaWYgKGxvYyAhPSBQQ0lfVFBIX0xPQ19DQVApCiAJCXJldHVybiAwOwogCkBAIC0yMzAsMjEgJiM0MzsyMzAsOCBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgb2Zmc2V0LCB0YWcpOwogfQogCi0vKioKLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKLSAqIHdpdGggYSBzcGVjaWZpYyBDUFUKLSAqIEBwZGV2OiBQQ0kgZGV2aWNlCi0gKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pCi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAotICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkCi0gKgotICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCi0gKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS4KLSAqCi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCi0gKi8KLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiB7CiAjaWZkZWYgQ09ORklHX0FDUEkKIAlzdHJ1Y3QgcGNpX2RldiAqcnA7CkBAIC0yNjgsMTkgJiM0MzsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LSZndDt0cGhfcmVxX3R5cGUsICZhbXA7aW5mbyk7CiYjNDM7CSp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCAmYW1wO2luZm8pOwogCi0JcGNpX2RiZyhwZGV2LCAmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxuJiMzNDssCiYjNDM7CXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XG4mIzM0OywKIAkJKG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyAmIzM0O3ZvbGF0aWxlJiMzNDsgOiAmIzM0O3BlcnNpc3RlbnQmIzM0OywKLQkJY3B1LCAqdGFnKTsKJiM0MzsJCXJlcV90eXBlLCBjcHUsICp0YWcpOwogCiAJcmV0dXJuIDA7CiAjZWxzZQogCXJldHVybiAtRU5PREVWOwogI2VuZGlmCiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZAomIzQzOyAqIHdpdGggYSBzcGVjaWZpYyBDUFUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCiYjNDM7ICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0IC0gR2V0IFNUIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAZXh0ZW5kZWQ6IHRydWU9RVhUX1RQSCwgZmFsc2U9c3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IG91dHB1dCBzdGVlcmluZyB0YWcgcG9pbnRlcgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGF1dG8gcGNpZV90cGhfZ2V0X2NwdV9zdCgpLCBjYWxsZXIgbWFudWFsbHkgcGlja3MgcmVxdWVzdGVyIHR5cGUuCiYjNDM7ICogUmVqZWN0cyBFWFQgcmVxdWVzdCBpZiBkZXZpY2UgbGFja3MgZXh0ZW5kZWQgcmVxdWVzdGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQgJmFtcDsmYW1wOyAhcGRldi0mZ3Q7dHBoX2V4dF9zdXBwb3J0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpOwomIzQzOwogLyoqCiAgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5CiAgKiBAcGRldjogUENJIGRldmljZQpAQCAtMzE1LDggJiM0MzszNDcsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpCiAJc2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTsKIAogCWxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7Ci0JLyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovCi0JbG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTsKIAogCXN3aXRjaCAobG9jKSB7CiAJY2FzZSBQQ0lfVFBIX0xPQ19NU0lYOgpAQCAtMzY1LDI3ICYjNDM7Mzk1LDEwIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIH0KIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7CiAKLS8qKgotICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlCi0gKiBAcGRldjogUENJIGRldmljZQotICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOgotICoKLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZQotICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGUKLSAqCi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZwotICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cywKLSAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgotICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCi0gKi8KLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKQogewogCXUzMiByZWc7CiAJdTggZGV2X21vZGVzOwotCXU4IHJwX3JlcV90eXBlOwogCiAJLyogSG9ub3IgJiMzNDtub3RwaCYjMzQ7IGtlcm5lbCBwYXJhbWV0ZXIgKi8KIAlpZiAocGNpX3RwaF9kaXNhYmxlZCkKQEAgLTQwMywyNiAmIzQzOzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKIAlpZiAoISgoMSAmbHQ7Jmx0OyBtb2RlKSAmYW1wOyBkZXZfbW9kZXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBkZXYtJmd0O3RwaF9tb2RlID0gbW9kZTsKLQotCS8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtJmd0O3RwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsICZhbXA7cmVnKTsKLQlpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpCi0JCXBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7Ci0JZWxzZQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKLQotCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovCi0JaWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkgewotCQlycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTsKLQotCQkvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovCi0JCXBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9IG1pbihwZGV2LSZndDt0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTsKLQl9Ci0KLQlpZiAocGRldi0mZ3Q7dHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpCiYjNDM7CWlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIICZhbXA7JmFtcDsgIXBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcGRldi0mZ3Q7dHBoX21vZGUgPSBtb2RlOwomIzQzOwlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSByZXFfdHlwZTsKJiM0MzsKIAkvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsICZhbXA7cmVnKTsKIApAQCAtNDM1LDggJiM0Mzs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKJiM0MzsgKgomIzQzOyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKJiM0MzsgKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZQomIzQzOyAqCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKJiM0MzsgKiBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIG5vdC4gQWRkaXRpb25hbGx5IGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHJlcXVlc3RzLAomIzQzOyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlcgomIzQzOyAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiYjNDM7ICovCiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOgomIzQzOwkJCQkJICAgICAgUENJX1RQSF9SRVFfVFBIX09OTFk7CiYjNDM7CXJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQgLSBFbmFibGUgVFBIIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHNlbGVjdGlvbgomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGUKJiM0MzsgKiBAbW9kZTogU1QgdGFibGUgb3BlcmF0aW5nIG1vZGUgKE5TL0lWL0RTKQomIzQzOyAqIEBleHRlbmRlZDogdHJ1ZSA9IEVYVF9UUEgsIGZhbHNlID0gc3RhbmRhcmQgVFBIIG9ubHkKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBhdXRvLWRldGVjdGluZyBwY2llX2VuYWJsZV90cGgoKSwgY2FsbGVyIHNlbGVjdHMgcmVxdWVzdGVyIHR5cGUKJiM0MzsgKiBtYW51YWxseSBpbnN0ZWFkIG9mIGhhcmR3YXJlIGF1dG8tc2VsZWN0aW9uLiBSZWplY3RzIEVYVF9UUEggcmVxdWVzdAomIzQzOyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCBib29sIGV4dGVuZGVkKQomIzQzO3sKJiM0MzsJdTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC4KJiM0MzsgKi8KJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9yZXFfdHlwZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTsKJiM0MzsKIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOwpAQCAtNTA4LDE0ICYjNDM7NTYyLDg0IEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKQogCiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKJiM0MzsJdTggdHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZTsKIAlpbnQgbnVtX2VudHJpZXM7CiAJdTMyIHNhdmVfc2l6ZTsKJiM0MzsJdTMyIHJlZyA9IDA7CiAKIAlwZGV2LSZndDt0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTsKIAlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiAJCXJldHVybjsKIAomIzQzOwkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtyZWcpOwomIzQzOwlpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwomIzQzOwllbHNlCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi8KJiM0MzsJaWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkgewomIzQzOwkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7CiYjNDM7CQkvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovCiYjNDM7CQl0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7CiYjNDM7CQlwZGV2LSZndDt0cGhfY2FwID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2LSZndDt0cGhfZXh0X3N1cHBvcnQgPSAhISh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CiAJbnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKIAlzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpOwogCXBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfc3VwcG9ydGVkIC0gQ2hlY2sgVFBIIGNhcGFiaWxpdHkgYXR0cmlidXRlCiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKJiM0MzsgKiBAd2FudF9leHQ6IGZhbHNlIC0gY2hlY2sgVFBIIGNhcCBleGlzdHM7IHRydWUgLSBjaGVjayBFWFRfVFBIIHN1cHBvcnQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBtYXRjaGVkIGNvbmRpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7Ym9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpCiYjNDM7ewomIzQzOwlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd2FudF9leHQpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBkZXYtJmd0O3RwaF9leHRfc3VwcG9ydDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zdXBwb3J0ZWQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQgLSBDaGVjayBpZiByb290IHBvcnQgZXhwb3NlcyBUUEggU1QgX0RTTQomIzQzOyAqIEBwZGV2OiB0YXJnZXQgUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRydWUgaWYgcm9vdCBwb3J0IG9mIEBwZGV2IHByb3ZpZGVzIFRQSCBTVCBEU00gZnVuY3Rpb24sCiYjNDM7ICogZmFsc2Ugb3RoZXJ3aXNlIChBQ1BJIGRpc2FibGVkIG9yIERTTSBtaXNzaW5nKS4KJiM0MzsgKi8KJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQUNQSQomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpOwomIzQzOwlhY3BpX2hhbmRsZSBoYW5kbGU7CiYjNDM7CiYjNDM7CWlmICghcnAgfHwgIXJwLSZndDtidXMgfHwgIXJwLSZndDtidXMtJmd0O2JyaWRnZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaGFuZGxlID0gQUNQSV9IQU5ETEUocnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKTsKJiM0MzsJaWYgKCFoYW5kbGUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsICZhbXA7cGNpX2FjcGlfZHNtX2d1aWQsIDcsCiYjNDM7CQkJICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKaW5kZXggODMwMzY5ZmY4NzhkYmUuLjdlZjgyYjQ0NTcyMjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCkBAIC02MCw2ICYjNDM7NjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgJiMzNDtEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuJiMzNDspOwogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5OwomIzQzO3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULAomIzQzOwkJCQkgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCk7CiYjNDM7fQomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0gewomIzQzOwkuc2V0ID0gdHBoX3NldCwKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7bW9kdWxlX3BhcmFtX2NiKHRwaCwgJmFtcDt0cGhfcGFyYW1fb3BzLCAmYW1wO3RwaF9wb2xpY3ksIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0ModHBoLAomIzQzOwkmIzM0O0dsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxuJiMzNDsKJiM0MzsJJiMzNDswID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XG4mIzM0OwomIzQzOwkmIzM0OyAgICAgICAgICAgICAgICBTVCBwcm9ncmFtbWluZyB1bmF2YWlsYWJsZVxuJiMzNDsKJiM0MzsJJiMzNDsxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcbiYjMzQ7CiYjNDM7CSYjMzQ7MiA9IEFkZCBEUyBtb2RlOiBSRVNPTFZFIHJldHVybnMgUEgmIzQzO1NUIGZvciBETUFCVUYvQ1BVIHNvdXJjZXM7XG4mIzM0OwomIzQzOwkmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xuJiMzNDsKJiM0MzsJJiMzNDszID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCYjNDM7U1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcbiYjMzQ7CiYjNDM7CSYjMzQ7ICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcbiYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzd2l0Y2ggKHBkZXYtJmd0O3ZlbmRvcikgewpAQCAtMTQyLDYgJiM0MzsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KQogI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0EKIAl2ZGV2LSZndDtkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhOwogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzOwl2ZGV2LSZndDt0cGhfcG9saWN5ID0gdHBoX3BvbGljeTsKJiM0MzsjZW5kaWYKIAogCXJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwppbmRleCBhMTBlZDczM2YwZTNhZi4uMzg4ZGQ2ZmVkMTZiNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTEwODUsNiAmIzQzOzEwODYsMTI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqLwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTsKJiM0MzsJcF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpOwomIzQzOwomIzQzOwlwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCwKJiM0MzsJICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogUGVyIFBDSSBzcGVjaWZpY2F0aW9uOiBUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiA2NCBlbnRyaWVzCiYjNDM7CSAqIHdoZW4gdGhlIFNUIHRhYmxlIGlzIGxvY2F0ZWQgaW4gdGhlIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWQKJiM0MzsJICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuCiYjNDM7CSAqIEFuZCB0aGUgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0gaXMgMHhGRiwgc28gdGhlCiYjNDM7CSAqIGZvbGxvd2luZyBvcGVyYXRpb24gaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiAmIzQzOyBpICogc2l6ZW9mKHUxNiksCiYjNDM7CQkgICAgICAgKHUxNilBTExfVklSVCwgKHUxNilBTExfV1JJVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQkgICAgICAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwlib29sIG5lZWRfYWRqdXN0ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7CiYjNDM7CQkvKiBSZW1vdmUgZXh0ZW5kIFRQSCBpZiByb290LXBvcnQgZG9uJiMzOTt0IHN1cHBvcnQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7CiYjNDM7CQluZWVkX2FkanVzdCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCkgewomIzQzOwkJLyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHwKJiM0MzsJCQkgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTsKJiM0MzsJCW5lZWRfYWRqdXN0ID0gdHJ1ZTsKJiM0MzsJfSBlbHNlIGlmICh2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHsKJiM0MzsJCS8qIFJlcG9ydCBvbmx5IE5vLVNUIGFuZCBJViBtb2RlcyBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX1NUX0RTOwomIzQzOwkJLyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24mIzM5O3Qgc3VwcG9ydCBJViBtb2RlICovCiYjNDM7CQlpZiAoISh2YWwgJmFtcDsgUENJX1RQSF9DQVBfU1RfSVYpKQomIzQzOwkJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spOwomIzQzOwkJbmVlZF9hZGp1c3QgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChuZWVkX2FkanVzdCkKJiM0MzsJCSp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7CiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLAomIzQzOwkJCQkgaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLAomIzQzOwkJCQkgaW50IG9mZnNldCwgX19sZTMyIHZhbCkKJiM0Mzt7CiYjNDM7CXUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgb3JnX2N0cmwsIG5ld19jdHJsLCBjYXA7CiYjNDM7CXU4IG1vZGUsIHJlcSwgb3JnX3JlcTsKJiM0MzsJX19sZTMyIG9yZ192YWwgPSAwOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXZkZXYtJmd0O3RwaF9wZXJtaXQpCiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CiYjNDM7CWRvd25fd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CW9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CXZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsICZhbXA7b3JnX3ZhbCk7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzOwlpZiAocmV0ICE9IGNvdW50KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7CiYjNDM7CWlmIChuZXdfY3RybCA9PSBvcmdfY3RybCkKJiM0MzsJCWdvdG8gb3V0OyAvKiBPbmx5IGNhcmUgYWJvdXQgY2hhbmdlcyBpbiBUUEhfQ1RSTC4gKi8KJiM0MzsKJiM0MzsJY2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DQVBdKTsKJiM0MzsJbW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpOwomIzQzOwlyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7CiYjNDM7CWlmIChtb2RlICZndDsgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwICZhbXA7ICgxdSAmbHQ7Jmx0OyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fAomIzQzOwkJKHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIICZhbXA7JmFtcDsgIShjYXAgJmFtcDsgUENJX1RQSF9DQVBfRVhUX1RQSCkpKQomIzQzOwkJZ290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi8KJiM0MzsKJiM0MzsJb3JnX3JlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG9yZ19jdHJsKTsKJiM0MzsJaWYgKHJlcSA9PSBvcmdfcmVxKQomIzQzOwkJZ290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovCiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi8KJiM0MzsKJiM0MzsJaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkgewomIzQzOwkJZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7CiYjNDM7CQlyZXQgPSBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQocGRldiwgbW9kZSwgZXh0ZW5kZWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmU7CiYjNDM7CX0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHsKJiM0MzsJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7cmVzdG9yZToKJiM0MzsJdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpOwomIzQzO291dDoKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzCiAgKi8KQEAgLTExMDAsNiAmIzQzOzEyMjIsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZCkKIAogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlmcmVlX3Blcm1fYml0cygmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKIH0KIAogaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQpAQCAtMTEyMCw2ICYjNDM7MTI0Myw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZCkKIAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7CiAJcmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pOwomIzQzOwlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7CiYjNDM7CWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlOwogCWVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlOwogCkBAIC0xNDUwLDYgJiM0MzsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG8KIAkJYnl0ZSAmYW1wOz0gUENJX0RQQV9DQVBfU1VCU1RBVEVfTUFTSzsKIAkJcmV0dXJuIFBDSV9EUEFfQkFTRV9TSVpFT0YgJiM0MzsgYnl0ZSAmIzQzOyAxOwogCWNhc2UgUENJX0VYVF9DQVBfSURfVFBIOgomIzQzOwkJaWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKQomIzQzOwkJCXJldHVybiAwOwogCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyAmIzQzOyBQQ0lfVFBIX0NBUCwgJmFtcDtkd29yZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKQEAgLTE3MDEsNiAmIzQzOzE4MjgsOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEggJmFtcDsmYW1wOyAhaGlkZGVuKQomIzQzOwkJCXZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0KHZkZXYsIGVwb3MpOwogCiAJCS8qCiAJCSAqIElmIHdlJiMzOTtyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCmluZGV4IDNmMTFhOTYyNGI5YzAzLi45YzBmM2M3YTFlZjczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTMwLDYgJiM0MzszMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdWZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXAycGRtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktdHBoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpCiAjaW5jbHVkZSAmbHQ7YXNtL2VlaC5oJmd0OwpAQCAtMTI3LDEwICYjNDM7MTI4LDE5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaF9wb2xpY3koc3RydWN0IHNlcV9maWxlICpzZXEsCiYjNDM7CQkJCQkgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyV1XG4mIzM0OywgdmRldi0mZ3Q7dHBoX3BvbGljeSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWQKLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGUKLSAqIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzCiYjNDM7ICogZGlzYWJsZV9pZGxlX2QzLCBub2ludHhtYXNrIGFuZCB0cGhfcG9saWN5IGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycwomIzQzOyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tCiYjNDM7ICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzCiAgKiBoZXJlIGZvciB2aXNpYmlsaXR5OyByZWFkLW9ubHkgcGFyYW1ldGVycyBjYW4mIzM5O3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLgogICovCiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC0xNDYsNiAmIzQzOzE1Niw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJCQkgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX25vaW50eG1hc2spOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsICYjMzQ7ZGlzYWJsZV9pZGxlX2QzJiMzNDssIHBjaV9kaXIsCiAJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCAmIzM0O3RwaF9wb2xpY3kmIzM0OywgcGNpX2RpciwKJiM0MzsJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGhfcG9saWN5KTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQpAQCAtNjEwLDYgJiM0Mzs2MjIsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKIAogCXZkZXYtJmd0O3Jlc2V0X3dvcmtzID0gIXJldDsKJiM0MzsJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IGZhbHNlOwomIzQzOwkvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi8KJiM0MzsJcGNpZV9kaXNhYmxlX3RwaCh2ZGV2LSZndDtwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAl2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7CiAJaWYgKCF2ZGV2LSZndDtwY2lfc2F2ZWRfc3RhdGUpCkBAIC03NTcsNiAmIzQzOzc3Miw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAogCXZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpOwogCiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gZXhpdCB1c2VyIHNlc3Npb24gKi8KJiM0MzsJcGNpZV9kaXNhYmxlX3RwaCh2ZGV2LSZndDtwZGV2KTsKJiM0MzsKIAkvKgogCSAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSwKIAkgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW4KQEAgLTE2MDcsNiAmIzQzOzE2MjUsMjI3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICBzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCBmYWxzZSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osCiYjNDM7CQkJVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQlzaXplb2YodHBoKSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCkgewomIzQzOwkJdmRldi0mZ3Q7dHBoX3Blcm1pdCA9IDE7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCAmYW1wOyZhbXA7CiYjNDM7CQlwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQomIzQzOwkJdHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVOwomIzQzOwlpZiAodmRldi0mZ3Q7dHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpCiYjNDM7CQl0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMOwomIzQzOwomIzQzOwlyZXR1cm4gY29weV90b191c2VyKGFyZywgJmFtcDt0cGgsIHNpemVvZih0cGgpKSA/IC1FRkFVTFQgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJdTMyIGZsYWdzLAomIzQzOwkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLAomIzQzOwkJCXNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CWNvbnN0IHUzMiBwZXJtaXRfc3JjX21hc2tbXSA9IHsKJiM0MzsJCVtWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUXSA9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGLAomIzQzOwkJW1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsCiYjNDM7CQlbVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCAuLi4gVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMXSA9CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRiB8CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8CiYjNDM7CQkJCQlWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5ULAomIzQzOwl9OwomIzQzOwl1MzIgcGVybWl0X2ZsYWdzID0gcGVybWl0X3NyY19tYXNrW3ZkZXYtJmd0O3RwaF9wb2xpY3ldIHwKJiM0MzsJCQkgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHJlc29sdmUgPSB7MH07CiYjNDM7CWVudW0gdHBoX21lbV90eXBlIG10eXBlOwomIzQzOwlib29sIGV4dGVuZGVkOwomIzQzOwl1MzIgc3JjX2JpdHM7CiYjNDM7CXUxNiB0YWcgPSAwOwomIzQzOwl1OCBwaCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsCiYjNDM7CQkJCSBzaXplb2YocmVzb2x2ZSkpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJc3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSzsKJiM0MzsJaWYgKCEocmVzb2x2ZS5mbGFncyAmYW1wOyBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCB0cnVlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXNvbHZlLnZhbGlkID0gMDsKJiM0MzsJcmVzb2x2ZS5waCA9IDA7CiYjNDM7CXJlc29sdmUuc3QgPSAwOwomIzQzOwomIzQzOwlpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHsKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsCiYjNDM7CQkJCQkJICAgICAmYW1wO3RhZywgJmFtcDtwaCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXNvbHZlLnBoID0gcGg7CiYjNDM7CQlyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIOwomIzQzOwkJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkgewomIzQzOwkJCXJlc29sdmUuc3QgPSB0YWc7CiYjNDM7CQkJcmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwltdHlwZSA9IChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkgPwomIzQzOwkJCVRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTsKJiM0MzsJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCh2ZGV2LSZndDtwZGV2LCBtdHlwZSwgZXh0ZW5kZWQsCiYjNDM7CQkJCQkgICByZXNvbHZlLnNyYywgJmFtcDt0YWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDsKJiM0MzsJcmVzb2x2ZS5zdCA9IHRhZzsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3Jlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB0cGhfY2FsY19zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi0mZ3Q7cGRldjsKJiM0MzsJdTMyIGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChsb2MgPT0gUENJX1RQSF9MT0NfQ0FQKSB7CiYjNDM7CQlyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7CiYjNDM7CX0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHsKJiM0MzsJCXJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLAomIzQzOwkJCSAgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTggcGg7CiYjNDM7CiYjNDM7CWlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpCiYjNDM7CQkqdGFnID0gMDsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpCiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLAomIzQzOwkJCQkJCSAgICAgdGFnLCAmYW1wO3BoKTsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpCiYjNDM7CQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9WTSwKJiM0MzsJCQkJCWV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTsKJiM0MzsJZWxzZSBpZiAoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCkKJiM0MzsJCXJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQocGRldiwgVFBIX01FTV9UWVBFX1BNLAomIzQzOwkJCQkJZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpCiYjNDM7CQkqdGFnID0gc3JjX2huZGw7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gMCkKJiM0MzsJCSp0YWcgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJdTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDsKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgc3JjX2JpdHMsIHN0X3NpemU7CiYjNDM7CWJvb2wgc3RvcF9vbl96ZXJvX3N0OwomIzQzOwl1MzIgKnNyY19obmRsID0gTlVMTDsKJiM0MzsJdm9pZCBfX3VzZXIgKnVwdHI7CiYjNDM7CWJvb2wgZXh0ZW5kZWQ7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CXUxNiB0YWc7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX3Blcm1pdCB8fCB2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHRwaF9zdCkpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXNyY19iaXRzID0gdHBoX3N0LmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKQomIzQzOwkJcGVybWl0X2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMOwomIzQzOwlpZiAoISh0cGhfc3QuZmxhZ3MgJmFtcDsgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZXh0ZW5kZWQgPSAhISh0cGhfc3QuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2LCB0cnVlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzdF9zaXplID0gdHBoX2NhbGNfc3Rfc2l6ZSh2ZGV2KTsKJiM0MzsJaWYgKHRwaF9zdC5zdGFydCAmZ3Q7PSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCAmZ3Q7IHN0X3NpemUgLSB0cGhfc3Quc3RhcnQgfHwKJiM0MzsJCXRwaF9zdC5jb3VudCA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXVwdHIgPSB1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKTsKJiM0MzsJaWYgKCEoc3JjX2JpdHMgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkgewomIzQzOwkJc3JjX2huZGwgPSBtZW1kdXBfYXJyYXlfdXNlcih1cHRyLCB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTsKJiM0MzsJCWlmIChJU19FUlIoc3JjX2huZGwpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKHNyY19obmRsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlzdG9wX29uX3plcm9fc3QgPSAhISh0cGhfc3QuZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpOwomIzQzOwlpZiAodHBoX3N0LmZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkKJiM0MzsJCXN0b3Bfb25femVyb19zdCA9IGZhbHNlOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdHBoX3N0LmNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gdHBoX2dldF9zdF90YWcocGRldiwgc3JjX2JpdHMsIHNyY19obmRsID8gc3JjX2huZGxbaV0gOiAwLAomIzQzOwkJCQkgICAgIGV4dGVuZGVkLCAmYW1wO3RhZyk7CiYjNDM7CQlpZiAocmV0IHx8IChzdG9wX29uX3plcm9fc3QgJmFtcDsmYW1wOyB0YWcgPT0gMCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICYjNDM7IGksIHRhZyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldCA9IGk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJa2ZyZWUoc3JjX2huZGwpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJCQl2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opCiB7CkBAIC0xNjI1LDYgJiM0MzsxODY0LDEzIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncywKIAkJcmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiAJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6CiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRToKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsCiYjNDM7CQkJCQkJCSBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwppbmRleCBjMTZmNDYwYzAxZDY4MS4uZDljNWU0MzRlNTg2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwpAQCAtMTksNyAmIzQzOzE5LDE0IEBAIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHsKIAl1MzIgbnJfcmFuZ2VzOwogCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKLQl1OCByZXZva2VkIDogMTsKJiM0MzsKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi0mZ3Q7cmVzdi4gKi8KJiM0MzsJdTggcmV2b2tlZDoxOwomIzQzOwl1OCB0cGhfcGg6MjsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF94c3RfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3N0OwomIzQzOwl1MTYgdHBoX3hzdDsKIH07CiAKIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKQEAgLTgxLDYgJiM0Mzs4OCwyNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJa3JlZl9wdXQoJmFtcDtwcml2LSZndDtrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpOwogfQogCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQl1MTYgKnRhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmIChleHRlbmRlZCkgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfeHN0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSp0YWcgPSBwcml2LSZndDt0cGhfeHN0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFwcml2LSZndDt0cGhfc3RfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnRhZyA9IHByaXYtJmd0O3RwaF9zdDsKJiM0MzsJfQomIzQzOwkqcGggPSBwcml2LSZndDt0cGhfcGg7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQogewogCXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwpAQCAtMTA2LDYgJiM0MzsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0gewogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLAogfTsKIAomIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJaWYgKGRtYWJ1Zi0mZ3Q7b3BzICE9ICZhbXA7dmZpb19wY2lfZG1hYnVmX29wcykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgdGFnLCBwaCk7CiYjNDM7b3V0OgomIzQzOwlkbWFfYnVmX3B1dChkbWFidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5ICYjMzQ7cHJpdmF0ZSBpbnRlcmNvbm5lY3QmIzM0OyBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLgogICogSXQgYWxsb3dzIHRoZSB0d28gY28tb3BlcmF0aW5nIGRyaXZlcnMgdG8gZXhjaGFuZ2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMTEsNiAmIzQzOzExLDEzIEBACiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovCiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVgJCTEwMDAKIAomIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7CiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLAomIzQzOwlWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSwKJiM0MzsJVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsCiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCA9IDMsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCXN0cnVjdCBsaXN0X2hlYWQJbmV4dDsKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UJKnZkZXY7CkBAIC0xMTUsMTIgJiM0MzsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIH0KIAogI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUYKJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7CiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLAogCQkJCSAgc2l6ZV90IGFyZ3N6KTsKIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiAjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJCQkJIHUxNiAqdGFnLCB1OCAqcGgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQKIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmgKaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFjOTY5MmQ3NDBhNjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnQKQEAgLTI2LDEwICYjNDM7MjcsMTcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpOwogdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTsKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7CiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO2Jvb2wgcGNpZV90cGhfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHdhbnRfZXh0KTsKJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQpAQCAtMzgsOSAmIzQzOzQ2LDI2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkJYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsCiYjNDM7CQkJCQkgICBib29sIGV4dGVuZGVkKQomIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiAwOyB9CiYjNDM7c3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCkKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMTkuLmE5OWVlZWE1M2M4MTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTQ3Miw3ICYjNDM7NDcyLDYgQEAgc3RydWN0IHBjaV9kZXYgewogCXVuc2lnbmVkIGludAlhdHNfZW5hYmxlZDoxOwkJLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi8KIAl1bnNpZ25lZCBpbnQJcGFzaWRfZW5hYmxlZDoxOwkvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi8KIAl1bnNpZ25lZCBpbnQJcHJpX2VuYWJsZWQ6MTsJCS8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi8KLQl1bnNpZ25lZCBpbnQJdHBoX2VuYWJsZWQ6MTsJCS8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovCiAJdW5zaWduZWQgaW50CWZtX2VuYWJsZWQ6MTsJCS8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi8KIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwkJLyogTWFuYWdlZCB2aWEgZGV2cmVzICovCiAJdW5zaWduZWQgaW50CWlzX21zaV9tYW5hZ2VkOjE7CS8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovCkBAIC01ODgsNyAmIzQzOzU4NywxMCBAQCBzdHJ1Y3QgcGNpX2RldiB7CiAJdTggcmVzZXRfbWV0aG9kc1tQQ0lfTlVNX1JFU0VUX01FVEhPRFNdOyAvKiBJbiBwcmlvcml0eSBvcmRlciAqLwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICi0JdTE2CQl0cGhfY2FwOwkvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi8KJiM0MzsJdTE2CQl0cGhfY2FwOjE0OwkvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi8KJiM0MzsJdTE2CQl0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEgKJiM0MzsJCQkJCSAgICAqIHJlcXVlc3RlciBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTE2CQl0cGhfZW5hYmxlZDoxOwkvKiBXaGV0aGVyIFRQSCBpcyBlbmFibGVkICovCiAJdTgJCXRwaF9tb2RlOwkvKiBUUEggbW9kZSAqLwogCXU4CQl0cGhfcmVxX3R5cGU7CS8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCmluZGV4IDlhMTY3NGMxNTJhYTI5Li45YTZlODJjNWMwMGNkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKQEAgLTE0OSw2ICYjNDM7MTQ5LDggQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbmI7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQltZW1vcnlfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRtYWJ1ZnM7CiYjNDM7CXU4CQkJdHBoX3BvbGljeTsKJiM0MzsJYm9vbAkJCXRwaF9wZXJtaXQ7CiB9OwogCiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWVlLi5lZDA0YjYyODBjZDY5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC0xNTM0LDYgJiM0MzsxNTM0LDY4IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBICQkxMwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRQkxNAomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QJMTUKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIC0gQ29udHJvbCBhbmQgcXVlcnkgUENJIFRQSCBjYXBhYmlsaXRpZXMKJiM0MzsgKgomIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlOyBmbGFncyBtdXN0IGJlIHplcm8uCiYjNDM7ICogR0VUOiBSZXR1cm4gc3VwcG9ydGVkIFRQSCBjYXBhYmlsaXR5IGJpdHMgaW4gZmxhZ3MuCiYjNDM7ICovCiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHsKJiM0MzsJX191MzIgZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBDYXBhYmlsaXR5IGJpdHMgcmV0dXJuZWQgYnkgR0VUIG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRgkoMXUgJmx0OyZsdDsgMCkgLyogRE1BQlVGIHNvdXJjZXMgcmVzb2x2YWJsZSAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFUJCSgxdSAmbHQ7Jmx0OyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0xJVEVSQUwJKDF1ICZsdDsmbHQ7IDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlCiYjNDM7ICogTm90ZTogR0VUIG9ubHkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7CiYjNDM7CV9fdTMyIGZsYWdzOwkvKiBJTjogc291cmNlIHR5cGUgJiM0MzsgbmFtZXNwYWNlIG1vZGlmaWVycyAqLwomIzQzOwlfX3UzMiBzcmM7CS8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqLwomIzQzOwlfX3U4IHZhbGlkOwkvKiBPVVQ6IGJpdG1hcCBpbmRpY2F0aW5nIHZhbGlkIG91dHB1dCBmaWVsZHMgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSCAoMXUgJmx0OyZsdDsgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1ICZsdDsmbHQ7IDEpIC8qIHN0IGhvbGRzIHZhbGlkIHN0ZWVyaW5nIHRhZyAqLwomIzQzOwlfX3U4IHBoOwkvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi8KJiM0MzsJX191MTYgc3Q7CS8qIE9VVDogcmF3IHN0ZWVyaW5nIHRhZyB2YWx1ZSAqLwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgU1QgdGFibGUgZW50cmllcwomIzQzOyAqIFJldHVybiB2YWx1ZTogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMKJiM0MzsgKiBOb3RlOiBTRVQgb25seQomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7CiYjNDM7CV9fdTMyIGZsYWdzOwkJLyogSU46IHNvdXJjZSB0eXBlICYjNDM7IG5hbWVzcGFjZSBtb2RpZmllcnMgKi8KJiM0MzsJX191MTYgc3RhcnQ7CQkvKiBJTjogZmlyc3QgU1QgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3IgKi8KJiM0MzsJX191MTYgY291bnQ7CQkvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovCiYjNDM7CV9fYWxpZ25lZF91NjQgZGVzdHM7CS8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgJmx0OyZsdDsgMCkgLyogVFBIX1NUIG9ubHk6IHNldCBTVD0wICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRgkgICAoMXUgJmx0OyZsdDsgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgJmx0OyZsdDsgMikgLyogc3JjID0gdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCAoMXUgJmx0OyZsdDsgMykgLyogc3JjID0gcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwgICAgICAgICgxdSAmbHQ7Jmx0OyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1ICZsdDsmbHQ7IDMwKSAvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IFNUIG5hbWVzcGFjZSAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QgICAgICAgICAoMXUgJmx0OyZsdDsgMzEpIC8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIFNUPTAgKi8KJiM0MzsKJiM0MzsvKiBNYXNrIGZvciBtdXR1YWxseSBleGNsdXNpdmUgc291cmNlIHR5cGUgYml0cywgb25seSBvbmUgbWF5IGJlIHNldCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLCShWRklPX0RFVklDRV9UUEhfU1JDX05PTkUgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcCiYjNDM7CQkJCQkgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCB8IFwKJiM0MzsJCQkJCSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpCiYjNDM7CiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi8KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjY5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBWRklPL1BDSSBUUEggUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqYWJzb2x1dGVseSogaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgZHJpdmVycy9wY2kvdHBoLmNgLCBgZHJpdmVycy92ZmlvLypgIGFuZCBpbmNsdWRlcyBoZWFkZXIgZmlsZSBtb2RpZmljYXRpb25zIGlzIGEgaHVnZSBpbmRpY2F0b3IuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgYnVnIGZpeC4gSXQmIzM5O3MgYWRkaW5nIG5ldyBmZWF0dXJlcyB0byBWRklPIHNwZWNpZmljYWxseSBhcm91bmQgUENJZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKS4KClNwZWNpZmljYWxseSwgdGhlc2UgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSGAsIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFYCwgYW5kIGBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVGAgaW9jdGxzIHNjcmVhbSAmIzM0O3VzZXJzcGFjZSBpbnRlcmFjdGlvbiwmIzM0OyBhbmQgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gTW9kaWZ5aW5nIHRoZSBWRklPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nIHRvIGFsbG93IHdyaXRpbmcgdG8gdGhlIFRQSCBjYXBhYmlsaXR5IGFsc28gb3BlbnMgdXAgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhlIGFkZGl0aW9uIG9mIGEgYHRwaGAgbW9kdWxlIHBhcmFtZXRlciB0byBgdmZpb19wY2lgIGZ1cnRoZXIgc29saWRpZmllcyB0aGUgaW1wYWN0LgoKU28sIHllYWgsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlIGNvZGUsIEkmIzM5O3ZlIGdvdCBhIGxpc3Q6CgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgCiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgCiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYAoqICAgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoKVGhvc2UgYXJlIHRoZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIGFsbCB1c2Vyc3BhY2UgYWNjZXNzaWJsZSBlbnRyeSBwb2ludHMuCgpGaW5hbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgZ2F0ZWQgYnkgYENPTkZJR19QQ0lFX1RQSGAgYW5kIGBDT05GSUdfVkZJT19QQ0lgLiBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3BjaS9LY29uZmlnYCB0byBjb25maXJtIHdoZXJlIGBQQ0lFX1RQSGAgaXMgZGVmaW5lZCBhbmQgbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDSUVfVFBIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1RMUCBQcm9jZXNzaW5nIEhpbnRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb24gZm9yIFZGSU8gYW5kIERNQSBCdWZmZXJzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzIGhlcmUsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIFZGSU8uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBQQ0lFX1RQSGAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBlbmFibGluZyBjZXJ0YWluIGZ1bmN0aW9uYWxpdGllcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYFZGSU9fUENJYCBzZXR0aW5nIGlzIGFsc28gYWJzb2x1dGVseSBuZWNlc3NhcnkuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkJ1dCBub3csIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoYXQgZnVuY3Rpb24gY2FsbCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAuIFRoYXQgc2NyZWFtcyBETUEgYnVmZmVyIHN1cHBvcnQuIFNvLCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBjYW5kaWRhdGUuIEl0IGxvb2tzIGxpa2UgdGhhdCBtaWdodCBiZSBhbm90aGVyIHJlcXVpcmVtZW50IGlmIEkmIzM5O20gYWltaW5nIHRvIGxldmVyYWdlIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0lfRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIFZGSU9fUENJX0RNQUJVRiBhbmQgUmVsYXRlZCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sZWFuLCByaWdodD8gSXQgaGluZ2VzIG9uIGBWRklPX1BDSV9DT1JFYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgYFZGSU9fUENJX0RNQUJVRmAgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFyZSBhbHNvIGVuYWJsZWQsIGFzc3VtaW5nIHRoZXkgYXJlbiYjMzk7dCBhbHJlYWR5LgoKSW5zdGVhZCBvZiBleHBsaWNpdGx5IG1lbnRpb25pbmcgZXZlcnkgZGVwZW5kZW5jeSwgSSYjMzk7bGwganVzdCBsaXN0IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgUENJX1AyUERNQWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGEgY29uY2lzZSBhbmQgZm9jdXNlZCBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCBhbmQgdGhlIG90aGVycyB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBpbiBvcmRlci4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjAxPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyODpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NTktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjYwOnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NjEtXHRcdFx0dTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3NTA9c3RhdGljIGludCB0cGhfZ2V0X3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLCB1MzIgc3JjX2huZGwsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NzctXHRcdFx0XHR1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTg0OT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg2Ny1cdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODY4Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODY5LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg3MDpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzEtXHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODcyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4NzM6XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzQtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRklPLVBDSSBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzKSBmZWF0dXJlIGZvciBWRklPLVBDSSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSB0cmFuc2xhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3RzIHdvcmsuCgpGaXJzdCBvcmRlciBvZiBidXNpbmVzczogY29uZmlybSB0aGF0IGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lvbi4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXRoLCBhbmQga25vd2luZyBpZiBpdCYjMzk7cyB0aGVyZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVzdC4gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHByZXNlbnQgc28gdGhlIGZlYXR1cmUgY2FuIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNDg9c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExNDk6c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTUwLVx0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTEyMjg9aW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0Ni1cdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjEyNDc6XHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0OC1cdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAqKgoKUmlnaHQsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgY2FzZS4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8uIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgcmUtZXhhbWluYXRpb24gbmV2ZXIgaHVydHMsIGdpdmVuIGl0cyByb2xlIHdpdGhpbiB0aGUgdmZpby1wY2kgRE1BIGJ1ZmZlciBoYW5kbGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBvbiB0aGUgc3VidGxldGllcyBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNjYwPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzA1LVx0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTcwNjpcdFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3MDctXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NTgtXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzU5Olx0XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc2MC1cdFx0XHRcdFx0XHQgICAgIHRhZywgXHUwMDI2cGgpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MTM2OmludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzcte1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOT1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNC0jaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTI1OmludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNi1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTMwPXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzMS0jZWxzZVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTMyOnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzMtXHRcdFx0XHRcdFx0IHUxNiAqdGFnLCB1OCAqcGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBIYW5kbGluZyBpbiBWRklPLVBDSSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIFZGSU8tUENJIGRyaXZlciwgYW5kIG15IGZvY3VzIGhhcyBzaGlmdGVkIHRvIERNQSBidWZmZXIgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGRyaWxsaW5nIGRvd24gaW50byBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiAoVFBIKSBmb3IgRE1BIHRyYW5zZmVycy4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGFyZSB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBoZXJlLgoKTXkgdHJhaW4gb2YgdGhvdWdodCBpcyB0aGF0IEkmIzM5O20gZW5jb3VudGVyaW5nIGEgbmV3IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIERNQSBidWZmZXJzLiBUaGUgbmFtZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBETUEgYnVmZmVycyBtYW5hZ2VkIHZpYSB0aGUgYGRtYV9idWZgIGZyYW1ld29yayBhbmQgdGhlIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgRE1BIGJ1ZmZlciBmcmFtZXdvcms/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgVFBIIGJlaW5nIGludm9sdmVkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gU1ZBPyBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSByZWdhcmRpbmcgc2VjdXJlIGFuZCBlZmZpY2llbnQgRE1BIGFjY2VzcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBWRklPIGVudmlyb25tZW50LiBJdCBwcm9iYWJseSBob2xkcyBjbHVlcyB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGRtYV9idWYgYW5kIHBjaSBsYXllcnMgaW4gdGhlc2Ugc3BlY2lmaWMgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2hlcmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03OT1zdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy05MC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6OTE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTkyLVx0XHRcdFx0XHR1MTYgKnRhZywgdTggKnBoKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTM2PWludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTQ5LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxNTA6XHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xNTEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUxMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkZJTy1QQ0kgVFBIIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVkZJTy1QQ0kgVFBIIHN0dWZmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZvciBub3cuCgpOb3csIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucz8gSSYjMzk7dmUgZ290IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfRE1BQlVGYC4gSG9sZCBvbiwgbG9va3MgbGlrZSBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sLiBJdCYjMzk7cyBvbmx5IHNldCB0byAmIzM5O3kmIzM5OyBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgZW5hYmxlZC4gUmlnaHQuIEkgc2hvdWxkIGluY2x1ZGUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGluIHRoZSBsaXN0LCBqdXN0IGluIGNhc2UuIFRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGRlcGVuZGVuY2llcy4KCkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBlbm91Z2ggb2YgYSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJX0RNQUJVRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcdTAwMjZcdTAwMjYgUENJX1AyUERNQSBcdTAwMjZcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRW5hYmxpbmcgRE1BLUJVRiBTaGFyaW5nIHdpdGggVkZJTyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgdG8gZ2V0IGBWRklPX1BDSV9ETUFCVUZgIHdvcmtpbmcgcHJvcGVybHksIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYm90aCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgdGhlIHVuZGVybHlpbmcgRE1BIGluZnJhc3RydWN0dXJlLiBJIGNhbuKAmXQgcmVtZW1iZXIgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYFBDSUVfVFBIYCBwb3RlbnRpYWxseSBwbGF5aW5nIGEgcm9sZSBpbiB0aGlzIERNQSBwYXRoLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBzdGF0dXMgYW5kIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdOKAmXMgY29uZmlndXJlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc2V0dXAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgaW50ZXJyZWxhdGVzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY1OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBQQ0lFX1RQSGAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFBDSUVfVFBIYCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBib29sZWFuLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgaW1wbGljYXRpb25zLiBBIGJvb2xlYW4gaW5kaWNhdGVzIGEgc2ltcGxlICYjMzQ7ZW5hYmxlZC9kaXNhYmxlZCYjMzQ7IHN0YXRlLiBUaGlzIHRyaWdnZXJzIGEgcXVpY2sgbWVtb3J5IGNoZWNrOiB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheT8gV2hlcmUgaXMgdGhpcyBiZWluZyB1c2VkPyBXaGF0IGNvbnRyb2wgZG9lcyB0aGlzIHByb3ZpZGU/CgpNeSBuZXh0IGluc3RpbmN0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBWRklPX1BDSWAgaXMgc2V0LiBJdCBzZWVtcyB0aGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIG9mIGBWRklPX1BDSWAgaGFzIGFueSBiZWFyaW5nIG9uIGBQQ0lFX1RQSGAsIHNvIEkmIzM5O20gaGVhZGluZyB0byBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaGFzIHRvIHJldmVhbC4gSSBleHBlY3QgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZmVhdHVyZXMgZGVmaW5lZCB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBrZXkgdG8gbWFuYWdpbmcgdGhpcyBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDY3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKlZGSU8gJmFtcDsgUENJIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgVkZJT19QQ0lgLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBXZSBrbm93IFZGSU8gaXMgdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gZnJhbWV3b3JrLCBhbmQgUENJIGlzIHRoZSBtZWNoYW5pc20gZm9yIGRpcmVjdCBkZXZpY2UgYWNjZXNzLiBHaXZlbiB0aGF0LCBJIHdhbnQgdG8gY29uZmlybSBvdXIgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgc29saWQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGRpcmVjdG9yeSBiZWNhdXNlIG9mIHRoZSBQQ0kgZm9jdXMuIFRoZSBrZXkgcGFyYW1ldGVyIHRvIGNoZWNrIGluIHRoYXQgZmlsZSB3b3VsZCBiZSBgUENJX1AyUERNQWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBETUEgZnVuY3Rpb25hbGl0eSBpcyBjb3JyZWN0bHkgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBpbiBvdXIgc2V0dXAsIGFuZCBJJiMzOTttIHVzaW5nIGBQQ0lfUDJQRE1BYCBhcyB0aGUgZmxhZyB0byBlbnN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgbWF0Y2ggd2hhdCB3ZSYjMzk7cmUgZXhwZWN0aW5nIGZvciB0aGlzIGhhcmR3YXJlLiBJIHdpbGwgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX1AyUERNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBETUFfU0hBUkVEX0JVRkZFUmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgRE1BIGJ1ZmZlciBzaXR1YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYERNQV9TSEFSRURfQlVGRkVSYCwgaXMgZGVmaW5lZC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBiZSBsb29raW5nLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGBETUFfU0hBUkVEX0JVRkZFUmAgb3B0aW9uLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBmZWF0dXJlcyB3aGVuIGRlYWxpbmcgd2l0aCBETUEgYnVmZmVycywgd2hpY2ggYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byBvcHRpbWl6ZSB0aGUgZHJpdmVyJiMzOTtzIHBlcmZvcm1hbmNlLiBTbywgeWVhaCwgdGhhdCYjMzk7cyBteSBmb2N1cyBub3csIGZpZ3VyaW5nIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTMKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQXNzZXNzbWVudCBvZiB0aGUgUENJL1ZGSU8gVFBIIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzIEhlYWRlcikgc3VwcG9ydCB3aXRoaW4gdGhlIFBDSSBhbmQgVkZJTyBzdWJzeXN0ZW1zLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIGhvdyBpdCBtaWdodCBpbnRlcmFjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBlbnVtZXJhdGUgdGhlIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50LCB3aGljaCBJJiMzOTt2ZSBqdXN0IHdyaXR0ZW4gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSeKAmW0gdXNpbmcgdGhlc2UgdG8gc2V0IHRoZSBzdGFnZSBmb3IgZnVydGhlciBhbmFseXNpcy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gc3ltYm9scy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgaW4gYGRyaXZlcnMvcGNpL3RwaC5jYCBhbmQgZm91bmQgYSBidW5jaCBvZiB0aGVtOiBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdGAsIGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBgcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZWAsIGBwY2llX3RwaF9zdXBwb3J0ZWRgLCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLiBJIGFkZGVkIHRoZXNlIHRvIG15IGdyb3dpbmcgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLgoKVGhlbiwgSSBsb29rZWQgaW4gb3RoZXIgcmVsZXZhbnQgbG9jYXRpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBJIGZvdW5kOiBgdHBoX2dldF9zdF90YWdgIGFuZCBgdHBoX2NhbGNfc3Rfc2l6ZWAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIFZGSU8gaW50ZXJhY3Rpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIEkgc2F3OiBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYW5kIGBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtYC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZS4KClRoaXMgbGVkIG1lIHRvIGlkZW50aWZ5IG1vcmUgcmVsZXZhbnQgc3ltYm9scywgcGFydGljdWxhcmx5IGZyb20gYHZmaW9fcGNpX2NvcmUuY2AgYW5kIGB2ZmlvX3BjaV9jb25maWcuY2AuIEkgaGF2ZSBhZGRlZCB0aGVzZSBzeW1ib2xzOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgLCBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdGAsIGBwY2llX2VuYWJsZV90cGhfZXhwbGljaXRgLCBgcGNpZV90cGhfc3VwcG9ydGVkYCwgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4KCkkgYmVsaWV2ZSB0aGlzIGlzIGEgY29tcHJlaGVuc2l2ZSBsaXN0LCBhdCBsZWFzdCBmb3IgdGhlIGluaXRpYWwgb3ZlcnZpZXcuIE5vdywgSSBmZWVsIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMsIHNvIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0JiMzNDssCiAgICAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZHNtX3N1cHBvcnRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBWRklPIGRldmljZSBmZWF0dXJlcyBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSwgaW50cm9kdWNpbmcgbmV3IGlvY3RscyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZSBoYW5kbGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgQVBJcyB0byB1c2Vyc3BhY2UsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNS41NTk2NzM1ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg3MDM3MzUyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0XCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXhwbGljaXRcIixcbiAgICBcInBjaWVfdHBoX3N1cHBvcnRlZFwiLFxuICAgIFwicGNpZV90cGhfZHNtX3N1cHBvcnRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MDUuNTU5Njc3MjEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTMzMzI4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YmRlYmNhMjllNGYxNjdhZTNiZThlZDk1OWE2MTU5OTMwYjdmZDFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTY6MTI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjZhLi5mY2RiYTEzNWE0ZjMyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuQEAgLTE2NSwxMSArMTY1LDE0IEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuICAqL1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbi1cXHR1MzIgcmVnO1xcbitcXHR1MzIgcmVnID0gMDtcXG4rXFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XFxuIFxcbiBcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4gXFxuLVxcdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XFxuK1xcdHJldHVybiByZWcgXFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG5AQCAtMTg0LDkgKzE4Nyw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTIzMCwyMSArMjMwLDggQEAgc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZylcXG4gXFx0cmV0dXJuIHBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBvZmZzZXQsIHRhZyk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4tICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxcbi0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcXG4tICpcXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXFxuLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1Llxcbi0gKlxcbi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuLSAqL1xcbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbitzdGF0aWMgaW50IGdldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHQgICAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHtcXG4gI2lmZGVmIENPTkZJR19BQ1BJXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpycDtcXG5AQCAtMjY4LDE5ICsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBcXHUwMDI2aW5mbyk7XFxuK1xcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcXHUwMDI2aW5mbyk7XFxuIFxcbi1cXHRwY2lfZGJnKHBkZXYsIFxcXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuK1xcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXFxcInZvbGF0aWxlXFxcIiA6IFxcXCJwZXJzaXN0ZW50XFxcIixcXG4tXFx0XFx0Y3B1LCAqdGFnKTtcXG4rXFx0XFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gI2Vsc2VcXG4gXFx0cmV0dXJuIC1FTk9ERVY7XFxuICNlbmRpZlxcbiB9XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxcbisgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcXG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxcbisgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cXG4rICpcXG4rICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbisgKi9cXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbitcXHRyZXR1cm4gZ2V0X2NwdV9zdChwZGV2LCBtZW1fdHlwZSwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4gXFxuKy8qKlxcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0IC0gR2V0IFNUIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbisgKiBAZXh0ZW5kZWQ6IHRydWU9RVhUX1RQSCwgZmFsc2U9c3RhbmRhcmQgVFBIIG9ubHlcXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcXG4rICogQHRhZzogb3V0cHV0IHN0ZWVyaW5nIHRhZyBwb2ludGVyXFxuKyAqXFxuKyAqIFVubGlrZSBhdXRvIHBjaWVfdHBoX2dldF9jcHVfc3QoKSwgY2FsbGVyIG1hbnVhbGx5IHBpY2tzIHJlcXVlc3RlciB0eXBlLlxcbisgKiBSZWplY3RzIEVYVCByZXF1ZXN0IGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHRcXHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuK3tcXG4rXFx0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCk7XFxuK1xcbiAvKipcXG4gICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxcbiAgKiBAcGRldjogUENJIGRldmljZVxcbkBAIC0zMTUsOCArMzQ3LDYgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbiBcXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xcbiBcXG4gXFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcXG4tXFx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcbiBcXHRzd2l0Y2ggKGxvYykge1xcbiBcXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XFxuQEAgLTM2NSwyNyArMzk1LDEwIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xcbiBcXG4tLyoqXFxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbi0gKiBAcGRldjogUENJIGRldmljZVxcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuLSAqXFxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuLSAqXFxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXFxuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXFxuLSAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3Rlclxcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4tICovXFxuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbitzdGF0aWMgaW50IGVuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLCB1OCByZXFfdHlwZSlcXG4ge1xcbiBcXHR1MzIgcmVnO1xcbiBcXHR1OCBkZXZfbW9kZXM7XFxuLVxcdHU4IHJwX3JlcV90eXBlO1xcbiBcXG4gXFx0LyogSG9ub3IgXFxcIm5vdHBoXFxcIiBrZXJuZWwgcGFyYW1ldGVyICovXFxuIFxcdGlmIChwY2lfdHBoX2Rpc2FibGVkKVxcbkBAIC00MDMsMjYgKzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgbW9kZSkgXFx1MDAyNiBkZXZfbW9kZXMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4tXFxuLVxcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbi1cXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuLVxcbi1cXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbi1cXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuLVxcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbi1cXG4tXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4rXFx0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXFx1MDAyNlxcdTAwMjYgIXBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRwZGV2LVxcdTAwM2V0cGhfbW9kZSA9IG1vZGU7XFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xcbitcXG4gXFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXFxuIFxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcXHUwMDI2cmVnKTtcXG4gXFxuQEAgLTQzNSw4ICs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuKyAqXFxuKyAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4rICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuKyAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuKyAqXFxuKyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXFxuKyAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXFxuKyAqIFRQSCBvciBleHRlbmRlZCBUUEgsIGNhbiBiZSBpc3N1ZWQgYnkgdGhlIGRldmljZSBiYXNlZCBvbiBpdHMgVFBIIHJlcXVlc3RlclxcbisgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4rICovXFxuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gcGRldi1cXHUwMDNldHBoX2V4dF9zdXBwb3J0ID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXHRyZXR1cm4gZW5hYmxlX3RwaChwZGV2LCBtb2RlLCByZXFfdHlwZSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG9wZXJhdGVcXG4rICogQG1vZGU6IFNUIHRhYmxlIG9wZXJhdGluZyBtb2RlIChOUy9JVi9EUylcXG4rICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxcbisgKlxcbisgKiBVbmxpa2UgYXV0by1kZXRlY3RpbmcgcGNpZV9lbmFibGVfdHBoKCksIGNhbGxlciBzZWxlY3RzIHJlcXVlc3RlciB0eXBlXFxuKyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XFxuKyAqIGlmIGRldmljZSBsYWNrcyBleHRlbmRlZCByZXF1ZXN0ZXIgY2FwYWJpbGl0eS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZClcXG4re1xcbitcXHR1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0cmV0dXJuIGVuYWJsZV90cGgocGRldiwgbW9kZSwgcmVxX3R5cGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KTtcXG4rXFxuKy8qKlxcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxcbisgKlxcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXFxuKyAqL1xcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHJldHVybiBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcXG4rXFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlO1xcbkBAIC01MDgsMTQgKzU2Miw4NCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcXG4gXFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XFxuIFxcdGludCBudW1fZW50cmllcztcXG4gXFx0dTMyIHNhdmVfc2l6ZTtcXG4rXFx0dTMyIHJlZyA9IDA7XFxuIFxcbiBcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcXG4gXFx0aWYgKCFwZGV2LVxcdTAwM2V0cGhfY2FwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cXG4rXFx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xcbitcXHRcXHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcXG4rXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwZGV2LVxcdTAwM2V0cGhfZXh0X3N1cHBvcnQgPSAhISh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XFxuK1xcbiBcXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbiBcXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSArIG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XFxuIFxcdHBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBwY2llX3RwaF9zdXBwb3J0ZWQgLSBDaGVjayBUUEggY2FwYWJpbGl0eSBhdHRyaWJ1dGVcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICogQHdhbnRfZXh0OiBmYWxzZSAtIGNoZWNrIFRQSCBjYXAgZXhpc3RzOyB0cnVlIC0gY2hlY2sgRVhUX1RQSCBzdXBwb3J0XFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBvbiBtYXRjaGVkIGNvbmRpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXFxuKyAqL1xcbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcXG4re1xcbitcXHRpZiAoIXBkZXYtXFx1MDAzZXRwaF9jYXApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghd2FudF9leHQpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9leHRfc3VwcG9ydDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3N1cHBvcnRlZCk7XFxuK1xcbisvKipcXG4rICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNXFxuKyAqIEBwZGV2OiB0YXJnZXQgUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbixcXG4rICogZmFsc2Ugb3RoZXJ3aXNlIChBQ1BJIGRpc2FibGVkIG9yIERTTSBtaXNzaW5nKS5cXG4rICovXFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbisjaWZkZWYgQ09ORklHX0FDUElcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnJwID0gcGNpZV9maW5kX3Jvb3RfcG9ydChwZGV2KTtcXG4rXFx0YWNwaV9oYW5kbGUgaGFuZGxlO1xcbitcXG4rXFx0aWYgKCFycCB8fCAhcnAtXFx1MDAzZWJ1cyB8fCAhcnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRoYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cXHUwMDNlYnVzLVxcdTAwM2VicmlkZ2UpO1xcbitcXHRpZiAoIWhhbmRsZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgXFx1MDAyNnBjaV9hY3BpX2RzbV9ndWlkLCA3LFxcbitcXHRcXHRcXHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xcbmluZGV4IDgzMDM2OWZmODc4ZGJlLi43ZWY4MmI0NDU3MjI1YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG5AQCAtNjAsNiArNjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDtcXG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFxcXCJEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuXFxcIik7XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XFxuK3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbit7XFxuK1xcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcXG4rXFx0XFx0XFx0XFx0ICAgICBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpO1xcbit9XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gdHBoX3NldCxcXG4rXFx0LmdldCA9IHBhcmFtX2dldF91aW50LFxcbit9O1xcbittb2R1bGVfcGFyYW1fY2IodHBoLCBcXHUwMDI2dHBoX3BhcmFtX29wcywgXFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xcbitNT0RVTEVfUEFSTV9ERVNDKHRwaCxcXG4rXFx0XFxcIkdsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcXFxuXFxcIlxcbitcXHRcXFwiMCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxcXG5cXFwiXFxuK1xcdFxcXCIxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIzID0gQWRkIExJVEVSQUw6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcXFxcblxcXCIpO1xcbitcXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN3aXRjaCAocGRldi1cXHUwMDNldmVuZG9yKSB7XFxuQEAgLTE0Miw2ICsxNjQsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxcbiBcXHR2ZGV2LVxcdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID0gdHBoX3BvbGljeTtcXG4rI2VuZGlmXFxuIFxcbiBcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjM4OGRkNmZlZDE2YjVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuQEAgLTEwODUsNiArMTA4NiwxMjcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgcGNpX2V4dF9jYXBfbGVuZ3RoW1BDSV9FWFRfQ0FQX0lEX1RQSF0pKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XFxuK1xcbitcXHRwX3NldGQocGVybSwgUENJX1RQSF9DVFJMLCBBTExfVklSVCxcXG4rXFx0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcXG4rXFxuK1xcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xcbitcXHQgKiB3aGVuIHRoZSBTVCB0YWJsZSBpcyBsb2NhdGVkIGluIHRoZSBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuK1xcdCAqIENhcGFiaWxpdHkgc3RydWN0dXJlLlxcbitcXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxcbitcXHQgKiBmb2xsb3dpbmcgb3BlcmF0aW9uIGlzIGZpbmUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNjQ7IGkrKylcXG4rXFx0XFx0cF9zZXR3KHBlcm0sIFBDSV9UUEhfQkFTRV9TSVpFT0YgKyBpICogc2l6ZW9mKHUxNiksXFxuK1xcdFxcdCAgICAgICAodTE2KUFMTF9WSVJULCAodTE2KUFMTF9XUklURSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IHBvcylcXG4re1xcbitcXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbcG9zICsgUENJX1RQSF9DQVBdO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiB2YWwgPSBsZTMyX3RvX2NwdSgqdnB0cik7XFxuK1xcdGJvb2wgbmVlZF9hZGp1c3QgPSBmYWxzZTtcXG4rXFxuK1xcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XFxuK1xcdFxcdC8qIFJlbW92ZSBleHRlbmQgVFBIIGlmIHJvb3QtcG9ydCBkb24ndCBzdXBwb3J0ICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfRVhUX1RQSDtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XFxuK1xcdFxcdC8qIFJlcG9ydCBvbmx5IE5vLVNUIG1vZGUgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+KFBDSV9UUEhfQ0FQX1NUX0lWIHwgUENJX1RQSF9DQVBfU1RfRFMgfFxcbitcXHRcXHRcXHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xcbitcXHRcXHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XFxuK1xcdFxcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9uJ3Qgc3VwcG9ydCBJViBtb2RlICovXFxuK1xcdFxcdGlmICghKHZhbCBcXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSlcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH4oUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcXG4rXFx0XFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobmVlZF9hZGp1c3QpXFxuK1xcdFxcdCp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4rXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXFxuK3tcXG4rXFx0dTE2IHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpO1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBvcmdfY3RybCwgbmV3X2N0cmwsIGNhcDtcXG4rXFx0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xcbitcXHRfX2xlMzIgb3JnX3ZhbCA9IDA7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFxuK1xcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xcbitcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxcbitcXHRcXHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXFxuK1xcbitcXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DQVBdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xcbitcXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XFxuK1xcdGlmIChtb2RlIFxcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XFxuK1xcdFxcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhKGNhcCBcXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cXG4rXFxuK1xcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XFxuK1xcdGlmIChyZXEgPT0gb3JnX3JlcSlcXG4rXFx0XFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi9cXG4rXFxuK1xcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcXG4rXFx0XFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XFxuK1xcdFxcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK3Jlc3RvcmU6XFxuK1xcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcXG4rb3V0OlxcbitcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xcbiAgKi9cXG5AQCAtMTEwMCw2ICsxMjIyLDcgQEAgdm9pZCB2ZmlvX3BjaV91bmluaXRfcGVybV9iaXRzKHZvaWQpXFxuIFxcbiBcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcXG4gXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XFxuK1xcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xcbiB9XFxuIFxcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuQEAgLTExMjAsNiArMTI0Myw4IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXFxuIFxcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xcbiBcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcXG4rXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuK1xcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuIFxcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuIFxcbkBAIC0xNDUwLDYgKzE1NzUsOCBAQCBzdGF0aWMgaW50IHZmaW9fZXh0X2NhcF9sZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MTYgZWNhcCwgdTE2IGVwb1xcbiBcXHRcXHRieXRlIFxcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XFxuIFxcdFxcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XFxuIFxcdGNhc2UgUENJX0VYVF9DQVBfSURfVFBIOlxcbitcXHRcXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZChwZGV2LCBmYWxzZSkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2ZHdvcmQpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTtcXG5AQCAtMTcwMSw2ICsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChlY2FwID09IFBDSV9FWFRfQ0FQX0lEX1RQSCBcXHUwMDI2XFx1MDAyNiAhaGlkZGVuKVxcbitcXHRcXHRcXHR2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdCh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDNmMTFhOTYyNGI5YzAzLi45YzBmM2M3YTFlZjczNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2VlaC5oXFx1MDAzZVxcbkBAIC0xMjcsMTAgKzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGhfcG9saWN5KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfcHJpdmF0ZShzZXEpO1xcbitcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIldVxcXFxuXFxcIiwgdmRldi1cXHUwMDNldHBoX3BvbGljeSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcXG4tICogcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSdzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlXFxuLSAqIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXFxuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcXG4rICogbGF0Y2hlZCBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbVxcbisgKiB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbkBAIC0xNDYsNiArMTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX25vaW50eG1hc2spO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcXFwiZGlzYWJsZV9pZGxlX2QzXFxcIiwgcGNpX2RpcixcXG4gXFx0XFx0XFx0XFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMpO1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcXFwidHBoX3BvbGljeVxcXCIsIHBjaV9kaXIsXFxuK1xcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtNjEwLDYgKzYyMiw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xcbiBcXG4gXFx0dmRldi1cXHUwMDNlcmVzZXRfd29ya3MgPSAhcmV0O1xcbitcXHR2ZGV2LVxcdTAwM2V0cGhfcGVybWl0ID0gZmFsc2U7XFxuK1xcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbiBcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4gXFx0dmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xcbiBcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcXG5AQCAtNzU3LDYgKzc3Miw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFxuIFxcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xcbiBcXG4rXFx0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqL1xcbitcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLFxcbiBcXHQgKiBldmVuIGJldHRlci4gIFJlc2V0dGluZyB3aXRoIGN1cnJlbnQgc3RhdGUgc2VlbXMgYmV0dGVyIHRoYW5cXG5AQCAtMTYwNyw2ICsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGggPSB7MH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2LCBmYWxzZSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuK1xcdFxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdHNpemVvZih0cGgpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHtcXG4rXFx0XFx0dmRldi1cXHUwMDNldHBoX3Blcm1pdCA9IDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHR0cGguZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX0RNQUJVRjtcXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgIT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHR0cGguZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9DUFU7XFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcXG4rXFx0XFx0dHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfTElURVJBTDtcXG4rXFxuK1xcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0Y29uc3QgdTMyIHBlcm1pdF9zcmNfbWFza1tdID0ge1xcbitcXHRcXHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcXG4rXFx0XFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsXFxuK1xcdFxcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUIC4uLiBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUxdID1cXG4rXFx0XFx0XFx0XFx0XFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxcbitcXHRcXHRcXHRcXHRcXHRWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XFxuK1xcdFxcdFxcdFxcdFxcdFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQsXFxuK1xcdH07XFxuK1xcdHUzMiBwZXJtaXRfZmxhZ3MgPSBwZXJtaXRfc3JjX21hc2tbdmRldi1cXHUwMDNldHBoX3BvbGljeV0gfFxcbitcXHRcXHRcXHQgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHJlc29sdmUgPSB7MH07XFxuK1xcdGVudW0gdHBoX21lbV90eXBlIG10eXBlO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHR1MzIgc3JjX2JpdHM7XFxuK1xcdHUxNiB0YWcgPSAwO1xcbitcXHR1OCBwaCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHJlc29sdmUpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0c3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xcbitcXHRpZiAoIShyZXNvbHZlLmZsYWdzIFxcdTAwMjYgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xcbitcXHRpZiAoZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgIXBjaWVfdHBoX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2LCB0cnVlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXNvbHZlLnZhbGlkID0gMDtcXG4rXFx0cmVzb2x2ZS5waCA9IDA7XFxuK1xcdHJlc29sdmUuc3QgPSAwO1xcbitcXG4rXFx0aWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHtcXG4rXFx0XFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dGFnLCBcXHUwMDI2cGgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXNvbHZlLnBoID0gcGg7XFxuK1xcdFxcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XFxuK1xcdFxcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5IFxcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpIHtcXG4rXFx0XFx0XFx0cmVzb2x2ZS5zdCA9IHRhZztcXG4rXFx0XFx0XFx0cmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG10eXBlID0gKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpID9cXG4rXFx0XFx0XFx0VFBIX01FTV9UWVBFX1ZNIDogVFBIX01FTV9UWVBFX1BNO1xcbitcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHZkZXYtXFx1MDAzZXBkZXYsIG10eXBlLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcmVzb2x2ZS5zcmMsIFxcdTAwMjZ0YWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xcbitcXHRyZXNvbHZlLnN0ID0gdGFnO1xcbitcXG4rb3V0OlxcbitcXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiB0cGhfY2FsY19zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcXG4rXFx0XFx0XFx0ICBib29sIGV4dGVuZGVkLCB1MTYgKnRhZylcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0dTggcGg7XFxuK1xcbitcXHRpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXFxuK1xcdFxcdCp0YWcgPSAwO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKVxcbitcXHRcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhZywgXFx1MDAyNnBoKTtcXG4rXFx0ZWxzZSBpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSlcXG4rXFx0XFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXFxuK1xcdFxcdFxcdFxcdFxcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcXG4rXFx0ZWxzZSBpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKVxcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcXG4rXFx0XFx0XFx0XFx0XFx0ZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcXG4rXFx0XFx0KnRhZyA9IHNyY19obmRsO1xcbitcXG4rXFx0aWYgKHJldCAhPSAwKVxcbitcXHRcXHQqdGFnID0gMDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IF9fdXNlciAqYXJnLFxcbitcXHRcXHRcXHRcXHRzaXplX3QgYXJnc3opXFxuK3tcXG4rXFx0dTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdCA9IHswfTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgc3JjX2JpdHMsIHN0X3NpemU7XFxuK1xcdGJvb2wgc3RvcF9vbl96ZXJvX3N0O1xcbitcXHR1MzIgKnNyY19obmRsID0gTlVMTDtcXG4rXFx0dm9pZCBfX3VzZXIgKnVwdHI7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcdHUxNiB0YWc7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXRwaF9wZXJtaXQgfHwgdmRldi1cXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZih0cGhfc3QpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHNyY19iaXRzID0gdHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19NQVNLO1xcbitcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSAhPSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXFxuK1xcdFxcdHBlcm1pdF9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1NSQ19MSVRFUkFMO1xcbitcXHRpZiAoISh0cGhfc3QuZmxhZ3MgXFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGV4dGVuZGVkID0gISEodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldiwgdHJ1ZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0c3Rfc2l6ZSA9IHRwaF9jYWxjX3N0X3NpemUodmRldik7XFxuK1xcdGlmICh0cGhfc3Quc3RhcnQgXFx1MDAzZT0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgXFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XFxuK1xcdFxcdHRwaF9zdC5jb3VudCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHVwdHIgPSB1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKTtcXG4rXFx0aWYgKCEoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XFxuK1xcdFxcdHNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodXB0ciwgdHBoX3N0LmNvdW50LCBzaXplb2YodTMyKSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3JjX2huZGwpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0c3RvcF9vbl96ZXJvX3N0ID0gISEodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpO1xcbitcXHRpZiAodHBoX3N0LmZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxcbitcXHRcXHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IHRwaF9nZXRfc3RfdGFnKHBkZXYsIHNyY19iaXRzLCBzcmNfaG5kbCA/IHNyY19obmRsW2ldIDogMCxcXG4rXFx0XFx0XFx0XFx0ICAgICBleHRlbmRlZCwgXFx1MDAyNnRhZyk7XFxuK1xcdFxcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcXHUwMDI2XFx1MDAyNiB0YWcgPT0gMCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICsgaSwgdGFnKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0cmV0ID0gaTtcXG4rXFxuK291dDpcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0a2ZyZWUoc3JjX2huZGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcXG4ge1xcbkBAIC0xNjI1LDYgKzE4NjQsMTMgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4rXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1Q6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uZDljNWU0MzRlNTg2ZjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5AQCAtMTksNyArMTksMTQgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qIFByb3RlY3RlZCBieSBkbWFidWYtXFx1MDAzZXJlc3YuICovXFxuK1xcdHU4IHJldm9rZWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuK1xcdHU4IHRwaF9zdF92YWxpZDoxO1xcbitcXHR1OCB0cGhfeHN0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdDtcXG4rXFx0dTE2IHRwaF94c3Q7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTgxLDYgKzg4LDI2IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4gXFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnRhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF94c3RfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnRhZyA9IHByaXYtXFx1MDAzZXRwaF94c3Q7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCp0YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuQEAgLTEwNiw2ICsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xcbiBcXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcXG4gfTtcXG4gXFxuK2ludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnRhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgdGFnLCBwaCk7XFxuK291dDpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogVGhpcyBpcyBhIHRlbXBvcmFyeSBcXFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcXFwiIGJldHdlZW4gVkZJTyBETUFCVUYgYW5kIGlvbW11ZmQuXFxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uZDdiYzUyZjQ4OGM2MmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbkBAIC0xMSw2ICsxMSwxMyBAQFxcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXFxuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFxcdFxcdDEwMDBcXG4gXFxuK2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLFxcbitcXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcXG4rXFx0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTCA9IDMsXFxuK307XFxuK1xcbiBzdHJ1Y3QgdmZpb19wY2lfaW9ldmVudGZkIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdG5leHQ7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVxcdCp2ZGV2O1xcbkBAIC0xMTUsMTIgKzEyMiwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHUxNiAqdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuIHN0YXRpYyBpbmxpbmUgaW50XFxuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFjOTY5MmQ3NDBhNjBkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5AQCAtOCw2ICs4LDcgQEBcXG4gICovXFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIEFjY29yZGluZyB0byB0aGUgRUNOIGZvciBQQ0kgRmlybXdhcmUgU3BlYywgU3RlZXJpbmcgVGFnIGNhbiBiZSBkaWZmZXJlbnRcXG5AQCAtMjYsMTAgKzI3LDE3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XFxuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCBib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XFxuIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpO1xcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dCk7XFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbkBAIC0zOCw5ICs0NiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4rXFx0XFx0XFx0XFx0Ym9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sIGV4dGVuZGVkKVxcbit7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7IHJldHVybiAwOyB9XFxuK3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcXG4reyByZXR1cm4gZmFsc2U7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIGZhbHNlOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li5hOTllZWVhNTNjODE0YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRhdHNfZW5hYmxlZDoxO1xcdFxcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHBhc2lkX2VuYWJsZWQ6MTtcXHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0cHJpX2VuYWJsZWQ6MTtcXHRcXHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXFxuLVxcdHVuc2lnbmVkIGludFxcdHRwaF9lbmFibGVkOjE7XFx0XFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0Zm1fZW5hYmxlZDoxO1xcdFxcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbWFuYWdlZDoxO1xcdFxcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRpc19tc2lfbWFuYWdlZDoxO1xcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXFxuQEAgLTU4OCw3ICs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuLVxcdHUxNlxcdFxcdHRwaF9jYXA7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9jYXA6MTQ7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9leHRfc3VwcG9ydDoxOyAvKiBJbmRpY2F0ZSB3aGV0aGVyIEV4dGVuZGVkIFRQSFxcbitcXHRcXHRcXHRcXHRcXHQgICAgKiByZXF1ZXN0ZXIgaXMgc3VwcG9ydGVkICovXFxuK1xcdHUxNlxcdFxcdHRwaF9lbmFibGVkOjE7XFx0LyogV2hldGhlciBUUEggaXMgZW5hYmxlZCAqL1xcbiBcXHR1OFxcdFxcdHRwaF9tb2RlO1xcdC8qIFRQSCBtb2RlICovXFxuIFxcdHU4XFx0XFx0dHBoX3JlcV90eXBlO1xcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li45YTZlODJjNWMwMGNkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXFxuQEAgLTE0OSw2ICsxNDksOCBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xcbiBcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRuYjtcXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdG1lbW9yeV9sb2NrO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZG1hYnVmcztcXG4rXFx0dThcXHRcXHRcXHR0cGhfcG9saWN5O1xcbitcXHRib29sXFx0XFx0XFx0dHBoX3Blcm1pdDtcXG4gfTtcXG4gXFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi5lZDA0YjYyODBjZDY5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNjggQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFxcdFxcdDEzXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVxcdDE0XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcXHQxNVxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxcbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyBpbiBmbGFncy5cXG4rICovXFxuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XFxuK1xcdF9fdTMyIGZsYWdzO1xcbit9O1xcbitcXG4rLyogQ2FwYWJpbGl0eSBiaXRzIHJldHVybmVkIGJ5IEdFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfRE1BQlVGXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDApIC8qIERNQUJVRiBzb3VyY2VzIHJlc29sdmFibGUgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX0NQVVxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAxKSAvKiBDUFUgc291cmNlcyByZXNvbHZhYmxlIHZpYSBfRFNNICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXFxuKyAqIE5vdGU6IEdFVCBvbmx5XFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XFxuK1xcdF9fdTMyIGZsYWdzO1xcdC8qIElOOiBzb3VyY2UgdHlwZSArIG5hbWVzcGFjZSBtb2RpZmllcnMgKi9cXG4rXFx0X191MzIgc3JjO1xcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xcbitcXHRfX3U4IHZhbGlkO1xcdC8qIE9VVDogYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSCAoMXUgXFx1MDAzY1xcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUICgxdSBcXHUwMDNjXFx1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cXG4rXFx0X191OCBwaDtcXHQvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi9cXG4rXFx0X191MTYgc3Q7XFx0LyogT1VUOiByYXcgc3RlZXJpbmcgdGFnIHZhbHVlICovXFxuK307XFxuK1xcbisvKlxcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgU1QgdGFibGUgZW50cmllc1xcbisgKiBSZXR1cm4gdmFsdWU6IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzXFxuKyAqIE5vdGU6IFNFVCBvbmx5XFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3Qge1xcbitcXHRfX3UzMiBmbGFncztcXHRcXHQvKiBJTjogc291cmNlIHR5cGUgKyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXFxuK1xcdF9fdTE2IHN0YXJ0O1xcdFxcdC8qIElOOiBmaXJzdCBTVCB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvciAqL1xcbitcXHRfX3UxNiBjb3VudDtcXHRcXHQvKiBJTjogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtICovXFxuK1xcdF9fYWxpZ25lZF91NjQgZGVzdHM7XFx0LyogSU46IHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlcyAqL1xcbit9O1xcbitcXG4rLyogQ29tbW9uIGZsYWdzIHNoYXJlZCBieSBUUEhfUkVTT0xWRSBhbmQgVFBIX1NUIGZlYXR1cmVzICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgXFx1MDAzY1xcdTAwM2MgMCkgLyogVFBIX1NUIG9ubHk6IHNldCBTVD0wICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUZcXHQgICAoMXUgXFx1MDAzY1xcdTAwM2MgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFICAgKDF1IFxcdTAwM2NcXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UICgxdSBcXHUwMDNjXFx1MDAzYyAzKSAvKiBzcmMgPSBwZXJzaXN0ZW50IG1lbW9yeSBDUFUgSUQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQgICAgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCAgICAgICAgICgxdSBcXHUwMDNjXFx1MDAzYyAzMSkgLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgU1Q9MCAqL1xcbitcXG4rLyogTWFzayBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIHNvdXJjZSB0eXBlIGJpdHMsIG9ubHkgb25lIG1heSBiZSBzZXQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0tcXHQoVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpXFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNi4yNTM1MzA3MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODAwOTg2NjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0XCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdFwiLFxuICAgIFwicGNpZV90cGhfc3VwcG9ydGVkXCIsXG4gICAgXCJwY2llX3RwaF9kc21fc3VwcG9ydGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgVkZJTyBkZXZpY2UgZmVhdHVyZXMgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCksIGludHJvZHVjaW5nIG5ldyBpb2N0bHMgYW5kIGNvbmZpZ3VyYXRpb24gc3BhY2UgaGFuZGxpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiZGViY2EyOWU0ZjE2N2FlM2JlOGVkOTU5YTYxNTk5MzBiN2ZkMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE2OjEyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmZjZGJhMTM1YTRmMzJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTY1LDExICsxNjUsMTQgQEAgc3RhdGljIHU4IGdldF9zdF9tb2RlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiAgKi9cbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHR1MzIgcmVnO1xuK1x0dTMyIHJlZyA9IDA7XG4rXG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XG4gXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuK1x0cmV0dXJuIHJlZyBcdTAwMjYgUENJX1RQSF9DQVBfTE9DX01BU0s7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyk7XG4gXG5AQCAtMTg0LDkgKzE4Nyw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzAsMjEgKzIzMCw4IEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG9mZnNldCwgdGFnKTtcbiB9XG4gXG4tLyoqXG4tICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcbi0gKiBAcGRldjogUENJIGRldmljZVxuLSAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbi0gKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuLSAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxuLSAqXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXG4tICpcbi0gKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4tICovXG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuK3N0YXRpYyBpbnQgZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdCAgICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7XG4gI2lmZGVmIENPTkZJR19BQ1BJXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XG5AQCAtMjY4LDE5ICsyNTUsNjQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBcdTAwMjZpbmZvKTtcbitcdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHJlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiBcbi1cdHBjaV9kYmcocGRldiwgXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbitcdHBjaV9kYmcocGRldiwgXCJnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgcmVxX3R5cGU9JXUsIGNwdT0lZCwgdGFnPSUjMDR4XFxuXCIsXG4gXHRcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXCJ2b2xhdGlsZVwiIDogXCJwZXJzaXN0ZW50XCIsXG4tXHRcdGNwdSwgKnRhZyk7XG4rXHRcdHJlcV90eXBlLCBjcHUsICp0YWcpO1xuIFxuIFx0cmV0dXJuIDA7XG4gI2Vsc2VcbiBcdHJldHVybiAtRU5PREVWO1xuICNlbmRpZlxuIH1cbitcbisvKipcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4rICogd2l0aCBhIHNwZWNpZmljIENQVVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4rICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHJldHVybmVkXG4rICpcbisgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcbisgKiBzcGVjaWZpYyBDUFUgYXMgaW5kaWNhdGVkIGJ5IGNwdS5cbisgKlxuKyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0cmV0dXJuIGdldF9jcHVfc3QocGRldiwgbWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBjcHUsIHRhZyk7XG4rfVxuIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4gXG4rLyoqXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdCAtIEdldCBTVCB3aXRoIGV4cGxpY2l0IHJlcXVlc3RlciB0eXBlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4rICogQGV4dGVuZGVkOiB0cnVlPUVYVF9UUEgsIGZhbHNlPXN0YW5kYXJkIFRQSCBvbmx5XG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbisgKiBAdGFnOiBvdXRwdXQgc3RlZXJpbmcgdGFnIHBvaW50ZXJcbisgKlxuKyAqIFVubGlrZSBhdXRvIHBjaWVfdHBoX2dldF9jcHVfc3QoKSwgY2FsbGVyIG1hbnVhbGx5IHBpY2tzIHJlcXVlc3RlciB0eXBlLlxuKyAqIFJlamVjdHMgRVhUIHJlcXVlc3QgaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHQgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHQgYm9vbCBleHRlbmRlZCwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBkZXYtXHUwMDNldHBoX2V4dF9zdXBwb3J0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBnZXRfY3B1X3N0KHBkZXYsIG1lbV90eXBlLCByZXFfdHlwZSwgY3B1LCB0YWcpO1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQpO1xuK1xuIC8qKlxuICAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcbiAgKiBAcGRldjogUENJIGRldmljZVxuQEAgLTMxNSw4ICszNDcsNiBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcbiBcdHN3aXRjaCAobG9jKSB7XG4gXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG5AQCAtMzY1LDI3ICszOTUsMTAgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuLS8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuLSAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4tICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlLiBDdXJyZW50IHN1cHBvcnRlZCBtb2RlcyBpbmNsdWRlOlxuLSAqXG4tICogICAtIFBDSV9UUEhfU1RfTlNfTU9ERTogTk8gU1QgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0lWX01PREU6IEludGVycnVwdCBWZWN0b3IgTW9kZVxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXG4tICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCdzIGNvbXBsZXRlciBjYXBhYmlsaXR5LlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuLSAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3N0YXRpYyBpbnQgZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIHU4IHJlcV90eXBlKVxuIHtcbiBcdHUzMiByZWc7XG4gXHR1OCBkZXZfbW9kZXM7XG4tXHR1OCBycF9yZXFfdHlwZTtcbiBcbiBcdC8qIEhvbm9yIFwibm90cGhcIiBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC00MDMsMjYgKzQxNiwxMiBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiBcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBtb2RlKSBcdTAwMjYgZGV2X21vZGVzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbi1cbi1cdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4tXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4tXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfRVhUX1RQSDtcbi1cdGVsc2Vcbi1cdFx0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbi1cbi1cdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4tXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4tXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuLVxuLVx0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gbWluKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XG4tXHR9XG4tXG4tXHRpZiAocGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4rXHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xuK1xuIFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXG4gXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcdTAwMjZyZWcpO1xuIFxuQEAgLTQzNSw4ICs0MzQsNjMgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4rXG4rLyoqXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4rICpcbisgKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4rICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4rICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbisgKlxuKyAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4rICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbisgKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbisgKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4rICovXG4raW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOlxuK1x0XHRcdFx0XHQgICAgICBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbit9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuKy8qKlxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdCAtIEVuYWJsZSBUUEggd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgc2VsZWN0aW9uXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gb3BlcmF0ZVxuKyAqIEBtb2RlOiBTVCB0YWJsZSBvcGVyYXRpbmcgbW9kZSAoTlMvSVYvRFMpXG4rICogQGV4dGVuZGVkOiB0cnVlID0gRVhUX1RQSCwgZmFsc2UgPSBzdGFuZGFyZCBUUEggb25seVxuKyAqXG4rICogVW5saWtlIGF1dG8tZGV0ZWN0aW5nIHBjaWVfZW5hYmxlX3RwaCgpLCBjYWxsZXIgc2VsZWN0cyByZXF1ZXN0ZXIgdHlwZVxuKyAqIG1hbnVhbGx5IGluc3RlYWQgb2YgaGFyZHdhcmUgYXV0by1zZWxlY3Rpb24uIFJlamVjdHMgRVhUX1RQSCByZXF1ZXN0XG4rICogaWYgZGV2aWNlIGxhY2tzIGV4dGVuZGVkIHJlcXVlc3RlciBjYXBhYmlsaXR5LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUsIGJvb2wgZXh0ZW5kZWQpXG4re1xuK1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdHJldHVybiBlbmFibGVfdHBoKHBkZXYsIG1vZGUsIHJlcV90eXBlKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXhwbGljaXQpO1xuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcbisgKlxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbisgKi9cbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHJldHVybiBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZTtcbit9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbitcbiB2b2lkIHBjaV9yZXN0b3JlX3RwaF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTtcbkBAIC01MDgsMTQgKzU2Miw4NCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcbiBcbiB2b2lkIHBjaV90cGhfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4rXHR1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlO1xuIFx0aW50IG51bV9lbnRyaWVzO1xuIFx0dTMyIHNhdmVfc2l6ZTtcbitcdHUzMiByZWcgPSAwO1xuIFxuIFx0cGRldi1cdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcbiBcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuK1x0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuK1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuK1x0ZWxzZVxuK1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbitcbitcdC8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgUm9vdCBQb3J0ICovXG4rXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XG4rXHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuK1x0XHQvKiBGaW5hbCByZXFfdHlwZSBpcyB0aGUgc21hbGxlc3QgdmFsdWUgb2YgdHdvICovXG4rXHRcdHRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTtcbitcdH1cbitcbitcdGlmICh0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwZGV2LVx1MDAzZXRwaF9jYXAgPSAwO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwZGV2LVx1MDAzZXRwaF9leHRfc3VwcG9ydCA9ICEhKHRwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKTtcbitcbiBcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4gXHRzYXZlX3NpemUgPSBzaXplb2YodTMyKSArIG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XG4gXHRwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpO1xuIH1cbitcbisvKipcbisgKiBwY2llX3RwaF9zdXBwb3J0ZWQgLSBDaGVjayBUUEggY2FwYWJpbGl0eSBhdHRyaWJ1dGVcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqIEB3YW50X2V4dDogZmFsc2UgLSBjaGVjayBUUEggY2FwIGV4aXN0czsgdHJ1ZSAtIGNoZWNrIEVYVF9UUEggc3VwcG9ydFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIG9uIG1hdGNoZWQgY29uZGl0aW9uLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitib29sIHBjaWVfdHBoX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCB3YW50X2V4dClcbit7XG4rXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCF3YW50X2V4dClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfZXh0X3N1cHBvcnQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc3VwcG9ydGVkKTtcbitcbisvKipcbisgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbisgKiBAcGRldjogdGFyZ2V0IFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuKyAqIGZhbHNlIG90aGVyd2lzZSAoQUNQSSBkaXNhYmxlZCBvciBEU00gbWlzc2luZykuXG4rICovXG4rYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbisjaWZkZWYgQ09ORklHX0FDUElcbitcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4rXHRhY3BpX2hhbmRsZSBoYW5kbGU7XG4rXG4rXHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuK1x0aWYgKCFoYW5kbGUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsIFx1MDAyNnBjaV9hY3BpX2RzbV9ndWlkLCA3LFxuK1x0XHRcdCAgICAgIEJJVChUUEhfU1RfRFNNX0ZVTkNfSU5ERVgpKTtcbisjZWxzZVxuK1x0cmV0dXJuIGZhbHNlO1xuKyNlbmRpZlxuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2llX3RwaF9kc21fc3VwcG9ydGVkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbmluZGV4IDgzMDM2OWZmODc4ZGJlLi43ZWY4MmI0NDU3MjI1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5AQCAtNjAsNiArNjAsMjggQEAgc3RhdGljIGJvb2wgZGlzYWJsZV9kZW55bGlzdDtcbiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9kZW55bGlzdCwgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCBcIkRpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cIik7XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5O1xuK3N0YXRpYyBpbnQgdHBoX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuK3tcbitcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcbitcdFx0XHRcdCAgICAgVkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMKTtcbit9XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHRwaF9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gdHBoX3NldCxcbitcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbit9O1xuK21vZHVsZV9wYXJhbV9jYih0cGgsIFx1MDAyNnRwaF9wYXJhbV9vcHMsIFx1MDAyNnRwaF9wb2xpY3ksIDA2NDQpO1xuK01PRFVMRV9QQVJNX0RFU0ModHBoLFxuK1x0XCJHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cIlxuK1x0XCIwID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCJcbitcdFwiMSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIlxuK1x0XCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCtTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcblwiXG4rXHRcIiAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwiXG4rXHRcIjMgPSBBZGQgTElURVJBTDogUkVTT0xWRSByZXR1cm5zIFBIK1NUIGZvciBETUFCVUYvQ1BVIHNvdXJjZXM7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVS9MSVRFUkFMIHNvdXJjZXNcXG5cIik7XG4rXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN3aXRjaCAocGRldi1cdTAwM2V2ZW5kb3IpIHtcbkBAIC0xNDIsNiArMTY0LDkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0dmRldi1cdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdHZkZXYtXHUwMDNldHBoX3BvbGljeSA9IHRwaF9wb2xpY3k7XG4rI2VuZGlmXG4gXG4gXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjM4OGRkNmZlZDE2YjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC0xMDg1LDYgKzEwODYsMTI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBQZXJtaXNzaW9ucyBmb3IgVFBIIGV4dGVuZGVkIGNhcGFiaWxpdHkgKi9cbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbitcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbitcbitcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULFxuK1x0ICAgICAgIFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLIHwgUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLKTtcbitcbitcdC8qIFBlciBQQ0kgc3BlY2lmaWNhdGlvbjogVGhlcmUgaXMgYW4gdXBwZXIgbGltaXQgb2YgNjQgZW50cmllc1xuK1x0ICogd2hlbiB0aGUgU1QgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuK1x0ICogQ2FwYWJpbGl0eSBzdHJ1Y3R1cmUuXG4rXHQgKiBBbmQgdGhlIHBjaV9leHRfY2FwX2xlbmd0aFtQQ0lfRVhUX0NBUF9JRF9UUEhdIGlzIDB4RkYsIHNvIHRoZVxuK1x0ICogZm9sbG93aW5nIG9wZXJhdGlvbiBpcyBmaW5lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2NDsgaSsrKVxuK1x0XHRwX3NldHcocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRiArIGkgKiBzaXplb2YodTE2KSxcbitcdFx0ICAgICAgICh1MTYpQUxMX1ZJUlQsICh1MTYpQUxMX1dSSVRFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICAgaW50IHBvcylcbit7XG4rXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbitcdGJvb2wgbmVlZF9hZGp1c3QgPSBmYWxzZTtcbitcbitcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHBkZXYsIHRydWUpKSB7XG4rXHRcdC8qIFJlbW92ZSBleHRlbmQgVFBIIGlmIHJvb3QtcG9ydCBkb24ndCBzdXBwb3J0ICovXG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuK1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cbitcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbitcdFx0XHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcbitcdFx0bmVlZF9hZGp1c3QgPSB0cnVlO1xuK1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuK1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXG4rXHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9TVF9EUztcbitcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb24ndCBzdXBwb3J0IElWIG1vZGUgKi9cbitcdFx0aWYgKCEodmFsIFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9JVikpXG4rXHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuK1x0XHRuZWVkX2FkanVzdCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAobmVlZF9hZGp1c3QpXG4rXHRcdCp2cHRyID0gY3B1X3RvX2xlMzIodmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbitcdFx0XHRcdCBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKVxuK3tcbitcdHUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuK1x0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xuK1x0X19sZTMyIG9yZ192YWwgPSAwO1xuK1x0Ym9vbCBleHRlbmRlZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX3Blcm1pdClcbitcdFx0cmV0dXJuIGNvdW50O1xuK1xuK1x0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitcbitcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcbitcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIFx1MDAyNm9yZ192YWwpO1xuK1xuK1x0cmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7XG4rXHRpZiAocmV0ICE9IGNvdW50KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcbitcdGlmIChuZXdfY3RybCA9PSBvcmdfY3RybClcbitcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqL1xuK1xuK1x0Y2FwID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NBUF0pO1xuK1x0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xuK1x0cmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgbmV3X2N0cmwpO1xuK1x0aWYgKG1vZGUgXHUwMDNlIFBDSV9UUEhfU1RfRFNfTU9ERSB8fCAhKGNhcCBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fFxuK1x0XHQocmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEggXHUwMDI2XHUwMDI2ICEoY2FwIFx1MDAyNiBQQ0lfVFBIX0NBUF9FWFRfVFBIKSkpXG4rXHRcdGdvdG8gcmVzdG9yZTsgLyogRHJvcCBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHdyaXRlIHZhbHVlICovXG4rXG4rXHRvcmdfcmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgb3JnX2N0cmwpO1xuK1x0aWYgKHJlcSA9PSBvcmdfcmVxKVxuK1x0XHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IHJlcXVlc3RlciBlbmFibGUgKi9cbitcbitcdHJldCA9IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIHRoaXMgd3JpdGUgKi9cbitcbitcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbitcdFx0ZXh0ZW5kZWQgPSAhIShyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCk7XG4rXHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdChwZGV2LCBtb2RlLCBleHRlbmRlZCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlO1xuK1x0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xuK1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHR9XG4rXG4rXHRnb3RvIG91dDtcbitcbityZXN0b3JlOlxuK1x0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpO1xuK291dDpcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiArMTIyMiw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKVxuIFxuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTtcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7XG4rXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuIH1cbiBcbiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG5AQCAtMTEyMCw2ICsxMjQzLDggQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4rXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTQ1MCw2ICsxNTc1LDggQEAgc3RhdGljIGludCB2ZmlvX2V4dF9jYXBfbGVuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGVjYXAsIHUxNiBlcG9cbiBcdFx0Ynl0ZSBcdTAwMjY9IFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0s7XG4gXHRcdHJldHVybiBQQ0lfRFBBX0JBU0VfU0laRU9GICsgYnl0ZSArIDE7XG4gXHRjYXNlIFBDSV9FWFRfQ0FQX0lEX1RQSDpcbitcdFx0aWYgKCFwY2llX3RwaF9zdXBwb3J0ZWQocGRldiwgZmFsc2UpKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0XHRyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgZXBvcyArIFBDSV9UUEhfQ0FQLCBcdTAwMjZkd29yZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHBjaWJpb3NfZXJyX3RvX2Vycm5vKHJldCk7XG5AQCAtMTcwMSw2ICsxODI4LDggQEAgc3RhdGljIGludCB2ZmlvX2VjYXBfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldCA9IHZmaW9fZmlsbF92Y29uZmlnX2J5dGVzKHZkZXYsIGVwb3MsIGxlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIIFx1MDAyNlx1MDAyNiAhaGlkZGVuKVxuK1x0XHRcdHZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0KHZkZXYsIGVwb3MpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB3ZSdyZSBqdXN0IHVzaW5nIHRoaXMgY2FwYWJpbGl0eSB0byBhbmNob3IgdGhlIGxpc3QsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMDMuLjljMGYzYzdhMWVmNzM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbkBAIC0xMjcsMTAgKzEyOCwxOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbitcdFx0XHRcdFx0ICAgIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcbitcbitcdHNlcV9wcmludGYoc2VxLCBcIiV1XFxuXCIsIHZkZXYtXHUwMDNldHBoX3BvbGljeSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcbisgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiArMTU2LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwiZGlzYWJsZV9pZGxlX2QzXCIsIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcInRwaF9wb2xpY3lcIiwgcGNpX2RpcixcbitcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoX3BvbGljeSk7XG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC02MTAsNiArNjIyLDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4gXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbitcdHZkZXYtXHUwMDNldHBoX3Blcm1pdCA9IGZhbHNlO1xuK1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NTcsNiArNzcyLDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFxuIFx0dmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7XG4gXG4rXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXG4rXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXG4gXHQvKlxuIFx0ICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLFxuIFx0ICogZXZlbiBiZXR0ZXIuICBSZXNldHRpbmcgd2l0aCBjdXJyZW50IHN0YXRlIHNlZW1zIGJldHRlciB0aGFuXG5AQCAtMTYwNyw2ICsxNjI1LDIyNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggdHBoID0gezB9O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcGNpZV90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldiwgZmFsc2UpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuK1x0XHRcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0c2l6ZW9mKHRwaCkpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4rXHRcdHZkZXYtXHUwMDNldHBoX3Blcm1pdCA9IDE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0dHBoLmZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9ETUFCVUY7XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgXHUwMDI2XHUwMDI2XG4rXHRcdHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0dHBoLmZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVO1xuK1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUwpXG4rXHRcdHRwaC5mbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX0xJVEVSQUw7XG4rXG4rXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0Y29uc3QgdTMyIHBlcm1pdF9zcmNfbWFza1tdID0ge1xuK1x0XHRbVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVF0gPSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRixcbitcdFx0W1ZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1RdID0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYsXG4rXHRcdFtWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUIC4uLiBWRklPX1BDSV9UUEhfUE9MSUNZX0xJVEVSQUxdID1cbitcdFx0XHRcdFx0VkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfFxuK1x0XHRcdFx0XHRWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4rXHRcdFx0XHRcdFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQsXG4rXHR9O1xuK1x0dTMyIHBlcm1pdF9mbGFncyA9IHBlcm1pdF9zcmNfbWFza1t2ZGV2LVx1MDAzZXRwaF9wb2xpY3ldIHxcbitcdFx0XHQgICBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlID0gezB9O1xuK1x0ZW51bSB0cGhfbWVtX3R5cGUgbXR5cGU7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTMyIHNyY19iaXRzO1xuK1x0dTE2IHRhZyA9IDA7XG4rXHR1OCBwaCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9wZXJtaXQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuK1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZyZXNvbHZlLCBhcmcsIHNpemVvZihyZXNvbHZlKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0c3JjX2JpdHMgPSByZXNvbHZlLmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX01BU0s7XG4rXHRpZiAoIShyZXNvbHZlLmZsYWdzIFx1MDAyNiBwZXJtaXRfZmxhZ3MpIHx8ICFpc19wb3dlcl9vZl8yKHNyY19iaXRzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRleHRlbmRlZCA9ICEhKHJlc29sdmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7XG4rXHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2LCB0cnVlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXNvbHZlLnZhbGlkID0gMDtcbitcdHJlc29sdmUucGggPSAwO1xuK1x0cmVzb2x2ZS5zdCA9IDA7XG4rXG4rXHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXNvbHZlLnBoID0gcGg7XG4rXHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4rXHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4rXHRcdFx0cmVzb2x2ZS5zdCA9IHRhZztcbitcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG10eXBlID0gKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkgP1xuK1x0XHRcdFRQSF9NRU1fVFlQRV9WTSA6IFRQSF9NRU1fVFlQRV9QTTtcbitcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXQodmRldi1cdTAwM2VwZGV2LCBtdHlwZSwgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdCAgIHJlc29sdmUuc3JjLCBcdTAwMjZ0YWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7XG4rXHRyZXNvbHZlLnN0ID0gdGFnO1xuK1xuK291dDpcbitcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyB1MzIgdHBoX2NhbGNfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuK1x0XHRyZXR1cm4gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XG4rXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XG4rXHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHRwaF9nZXRfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsIHUzMiBzcmNfaG5kbCxcbitcdFx0XHQgIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0dTggcGg7XG4rXG4rXHRpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSlcbitcdFx0KnRhZyA9IDA7XG4rXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXG4rXHRcdHJldCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChzcmNfaG5kbCwgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdFx0ICAgICB0YWcsIFx1MDAyNnBoKTtcbitcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSlcbitcdFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHBsaWNpdChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4rXHRcdFx0XHRcdGV4dGVuZGVkLCBzcmNfaG5kbCwgdGFnKTtcbitcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKVxuK1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbitcdFx0XHRcdFx0ZXh0ZW5kZWQsIHNyY19obmRsLCB0YWcpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTClcbitcdFx0KnRhZyA9IHNyY19obmRsO1xuK1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHQqdGFnID0gMDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHR1MzIgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgX191c2VyICphcmcsXG4rXHRcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0dTMyIHBlcm1pdF9mbGFncyA9IFZGSU9fREVWSUNFX1RQSF9TUkNfTUFTSyB8IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB0cGhfc3QgPSB7MH07XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiBzcmNfYml0cywgc3Rfc2l6ZTtcbitcdGJvb2wgc3RvcF9vbl96ZXJvX3N0O1xuK1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4rXHR2b2lkIF9fdXNlciAqdXB0cjtcbitcdGJvb2wgZXh0ZW5kZWQ7XG4rXHRpbnQgcmV0LCBpO1xuK1x0dTE2IHRhZztcbitcbitcdGlmICghdmRldi1cdTAwM2V0cGhfcGVybWl0IHx8IHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRcdCBzaXplb2YodHBoX3N0KSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cGhfc3QsIGFyZywgc2l6ZW9mKHRwaF9zdCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHNyY19iaXRzID0gdHBoX3N0LmZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX01BU0s7XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ICE9IFZGSU9fUENJX1RQSF9QT0xJQ1lfTElURVJBTClcbitcdFx0cGVybWl0X2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTDtcbitcdGlmICghKHRwaF9zdC5mbGFncyBcdTAwMjYgcGVybWl0X2ZsYWdzKSB8fCAhaXNfcG93ZXJfb2ZfMihzcmNfYml0cykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0ZXh0ZW5kZWQgPSAhISh0cGhfc3QuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7XG4rXHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2LCB0cnVlKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRzdF9zaXplID0gdHBoX2NhbGNfc3Rfc2l6ZSh2ZGV2KTtcbitcdGlmICh0cGhfc3Quc3RhcnQgXHUwMDNlPSBzdF9zaXplIHx8IHRwaF9zdC5jb3VudCBcdTAwM2Ugc3Rfc2l6ZSAtIHRwaF9zdC5zdGFydCB8fFxuK1x0XHR0cGhfc3QuY291bnQgPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR1cHRyID0gdTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyk7XG4rXHRpZiAoIShzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkge1xuK1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHVwdHIsIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpO1xuK1x0XHRpZiAoSVNfRVJSKHNyY19obmRsKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XG4rXHR9XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0cmV0ID0gdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHN0b3Bfb25femVyb19zdCA9ICEhKHRwaF9zdC5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpO1xuK1x0aWYgKHRwaF9zdC5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxuK1x0XHRzdG9wX29uX3plcm9fc3QgPSBmYWxzZTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XG4rXHRcdHJldCA9IHRwaF9nZXRfc3RfdGFnKHBkZXYsIHNyY19iaXRzLCBzcmNfaG5kbCA/IHNyY19obmRsW2ldIDogMCxcbitcdFx0XHRcdCAgICAgZXh0ZW5kZWQsIFx1MDAyNnRhZyk7XG4rXHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVyb19zdCBcdTAwMjZcdTAwMjYgdGFnID09IDApKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cnkocGRldiwgdHBoX3N0LnN0YXJ0ICsgaSwgdGFnKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdHJldCA9IGk7XG4rXG4rb3V0OlxuK1x0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRrZnJlZShzcmNfaG5kbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4ge1xuQEAgLTE2MjUsNiArMTg2NCwxMyBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsXG4rXHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuK1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLmQ5YzVlNDM0ZTU4NmY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTE5LDcgKzE5LDE0IEBAIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHtcbiBcdHUzMiBucl9yYW5nZXM7XG4gXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbi1cdHU4IHJldm9rZWQgOiAxO1xuK1xuK1x0LyogUHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cdTAwM2VyZXN2LiAqL1xuK1x0dTggcmV2b2tlZDoxO1xuK1x0dTggdHBoX3BoOjI7XG4rXHR1OCB0cGhfc3RfdmFsaWQ6MTtcbitcdHU4IHRwaF94c3RfdmFsaWQ6MTtcbitcdHU4IHRwaF9zdDtcbitcdHUxNiB0cGhfeHN0O1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTgxLDYgKzg4LDI2IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdGtyZWZfcHV0KFx1MDAyNnByaXYtXHUwMDNla3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0XHRcdHUxNiAqdGFnLCB1OCAqcGgpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKGV4dGVuZGVkKSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfeHN0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnRhZyA9IHByaXYtXHUwMDNldHBoX3hzdDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqdGFnID0gcHJpdi1cdTAwM2V0cGhfc3Q7XG4rXHR9XG4rXHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuQEAgLTEwNiw2ICsxMzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG4gfTtcbiBcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XG4rXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XG4rXG4rXHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCB0YWcsIHBoKTtcbitvdXQ6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLypcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcIiBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmQ3YmM1MmY0ODhjNjJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiArMTEsMTMgQEBcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXG4gI2RlZmluZSBWRklPX1BDSV9JT0VWRU5URkRfTUFYXHRcdDEwMDBcbiBcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4rXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcbitcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9MSVRFUkFMID0gMyxcbit9O1xuK1xuIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmV4dDtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVx0KnZkZXY7XG5AQCAtMTE1LDEyICsxMjIsMTggQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHRcdFx0XHQgdTE2ICp0YWcsIHU4ICpwaClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWM5NjkyZDc0MGE2MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC04LDYgKzgsNyBAQFxuICAqL1xuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuIFxuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuQEAgLTI2LDEwICsyNywxNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0IGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuK1x0XHRcdFx0IGJvb2wgZXh0ZW5kZWQsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSwgYm9vbCBleHRlbmRlZCk7XG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpO1xuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC0zOCw5ICs0NiwyNiBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHRib29sIGV4dGVuZGVkLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSxcbitcdFx0XHRcdFx0ICAgYm9vbCBleHRlbmRlZClcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gMDsgfVxuK3N0YXRpYyBpbmxpbmUgdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3RwaF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgd2FudF9leHQpXG4reyByZXR1cm4gZmFsc2U7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggNjRiMzA4YjZlNjFjMTkuLmE5OWVlZWE1M2M4MTRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTQ3Miw3ICs0NzIsNiBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1bnNpZ25lZCBpbnRcdGF0c19lbmFibGVkOjE7XHRcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXG4gXHR1bnNpZ25lZCBpbnRcdHBhc2lkX2VuYWJsZWQ6MTtcdC8qIFByb2Nlc3MgQWRkcmVzcyBTcGFjZSBJRCAqL1xuIFx0dW5zaWduZWQgaW50XHRwcmlfZW5hYmxlZDoxO1x0XHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXG4tXHR1bnNpZ25lZCBpbnRcdHRwaF9lbmFibGVkOjE7XHRcdC8qIFRMUCBQcm9jZXNzaW5nIEhpbnRzICovXG4gXHR1bnNpZ25lZCBpbnRcdGZtX2VuYWJsZWQ6MTtcdFx0LyogRmxpdCBNb2RlIChzZWdtZW50IGNhcHR1cmVkKSAqL1xuIFx0dW5zaWduZWQgaW50XHRpc19tYW5hZ2VkOjE7XHRcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xuIFx0dW5zaWduZWQgaW50XHRpc19tc2lfbWFuYWdlZDoxO1x0LyogTVNJIHJlbGVhc2UgdmlhIGRldnJlcyBpbnN0YWxsZWQgKi9cbkBAIC01ODgsNyArNTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuK1x0dTE2XHRcdHRwaF9jYXA6MTQ7XHQvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi9cbitcdHUxNlx0XHR0cGhfZXh0X3N1cHBvcnQ6MTsgLyogSW5kaWNhdGUgd2hldGhlciBFeHRlbmRlZCBUUEhcbitcdFx0XHRcdFx0ICAgICogcmVxdWVzdGVyIGlzIHN1cHBvcnRlZCAqL1xuK1x0dTE2XHRcdHRwaF9lbmFibGVkOjE7XHQvKiBXaGV0aGVyIFRQSCBpcyBlbmFibGVkICovXG4gXHR1OFx0XHR0cGhfbW9kZTtcdC8qIFRQSCBtb2RlICovXG4gXHR1OFx0XHR0cGhfcmVxX3R5cGU7XHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyOS4uOWE2ZTgyYzVjMDBjZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xNDksNiArMTQ5LDggQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0bmI7XG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRtZW1vcnlfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRtYWJ1ZnM7XG4rXHR1OFx0XHRcdHRwaF9wb2xpY3k7XG4rXHRib29sXHRcdFx0dHBoX3Blcm1pdDtcbiB9O1xuIFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uZWQwNGI2MjgwY2Q2OWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDY4IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIXHRcdDEzXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFXHQxNFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE1XG4rXG4rLypcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4rICpcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxuKyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIGluIGZsYWdzLlxuKyAqL1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XG4rXHRfX3UzMiBmbGFncztcbit9O1xuK1xuKy8qIENhcGFiaWxpdHkgYml0cyByZXR1cm5lZCBieSBHRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfRE1BQlVGXHQoMXUgXHUwMDNjXHUwMDNjIDApIC8qIERNQUJVRiBzb3VyY2VzIHJlc29sdmFibGUgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfQ1BVXHRcdCgxdSBcdTAwM2NcdTAwM2MgMSkgLyogQ1BVIHNvdXJjZXMgcmVzb2x2YWJsZSB2aWEgX0RTTSAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9MSVRFUkFMXHQoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIExJVEVSQUwgU1Qgc291cmNlIHN1cHBvcnRlZCAqL1xuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgUEgvU1QgdGFnIHZhbHVlIGZyb20gc291cmNlXG4rICogTm90ZTogR0VUIG9ubHlcbisgKi9cbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4rXHRfX3UzMiBmbGFncztcdC8qIElOOiBzb3VyY2UgdHlwZSArIG5hbWVzcGFjZSBtb2RpZmllcnMgKi9cbitcdF9fdTMyIHNyYztcdC8qIElOOiBkbWEtYnVmIGZkIG9yIENQVSBJRCBiYXNlZCBvbiBmbGFncyAqL1xuK1x0X191OCB2YWxpZDtcdC8qIE9VVDogYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbitcdF9fdTggcGg7XHQvKiBPVVQ6IFRQSCBwcm9jZXNzaW5nIGhpbnQgKi9cbitcdF9fdTE2IHN0O1x0LyogT1VUOiByYXcgc3RlZXJpbmcgdGFnIHZhbHVlICovXG4rfTtcbitcbisvKlxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBTVCB0YWJsZSBlbnRyaWVzXG4rICogUmV0dXJuIHZhbHVlOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gZW50cmllc1xuKyAqIE5vdGU6IFNFVCBvbmx5XG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcbitcdF9fdTMyIGZsYWdzO1x0XHQvKiBJTjogc291cmNlIHR5cGUgKyBuYW1lc3BhY2UgbW9kaWZpZXJzICovXG4rXHRfX3UxNiBzdGFydDtcdFx0LyogSU46IGZpcnN0IFNUIHRhYmxlIGluZGV4IC8gTVNJLVggdmVjdG9yICovXG4rXHRfX3UxNiBjb3VudDtcdFx0LyogSU46IG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gcHJvZ3JhbSAqL1xuK1x0X19hbGlnbmVkX3U2NCBkZXN0cztcdC8qIElOOiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc291cmNlIHUzMiB2YWx1ZXMgKi9cbit9O1xuK1xuKy8qIENvbW1vbiBmbGFncyBzaGFyZWQgYnkgVFBIX1JFU09MVkUgYW5kIFRQSF9TVCBmZWF0dXJlcyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FICAgICAgICAgICAoMXUgXHUwMDNjXHUwMDNjIDApIC8qIFRQSF9TVCBvbmx5OiBzZXQgU1Q9MCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUZcdCAgICgxdSBcdTAwM2NcdTAwM2MgMSkgLyogc3JjID0gZG1hLWJ1ZiBmZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgICAoMXUgXHUwMDNjXHUwMDNjIDIpIC8qIHNyYyA9IHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQgKDF1IFx1MDAzY1x1MDAzYyAzKSAvKiBzcmMgPSBwZXJzaXN0ZW50IG1lbW9yeSBDUFUgSUQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTElURVJBTCAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyA0KSAvKiBUUEhfU1Qgb25seTogc3JjID0gcmF3IGxpdGVyYWwgU1QgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCAgICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMCkgLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBTVCBuYW1lc3BhY2UgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUICAgICAgICAgKDF1IFx1MDAzY1x1MDAzYyAzMSkgLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgU1Q9MCAqL1xuK1xuKy8qIE1hc2sgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZSBzb3VyY2UgdHlwZSBiaXRzLCBvbmx5IG9uZSBtYXkgYmUgc2V0ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX01BU0tcdChWRklPX0RFVklDRV9UUEhfU1JDX05PTkUgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfCBcXFxuK1x0XHRcdFx0XHQgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVCB8IFxcXG4rXHRcdFx0XHRcdCBWRklPX0RFVklDRV9UUEhfU1JDX0xJVEVSQUwpXG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjowNi4yNTM1MzMxNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTE5ODc5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBWRklPL1BDSSBUUEggUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKmFic29sdXRlbHkqIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby8qYCBhbmQgaW5jbHVkZXMgaGVhZGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBpcyBhIGh1Z2UgaW5kaWNhdG9yLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgYnVnIGZpeC4gSXQncyBhZGRpbmcgbmV3IGZlYXR1cmVzIHRvIFZGSU8gc3BlY2lmaWNhbGx5IGFyb3VuZCBQQ0llIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpLlxuXG5TcGVjaWZpY2FsbHksIHRoZXNlIG5ldyBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRWAsIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RgIGlvY3RscyBzY3JlYW0gXCJ1c2Vyc3BhY2UgaW50ZXJhY3Rpb24sXCIgYW5kIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gTW9kaWZ5aW5nIHRoZSBWRklPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nIHRvIGFsbG93IHdyaXRpbmcgdG8gdGhlIFRQSCBjYXBhYmlsaXR5IGFsc28gb3BlbnMgdXAgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhlIGFkZGl0aW9uIG9mIGEgYHRwaGAgbW9kdWxlIHBhcmFtZXRlciB0byBgdmZpb19wY2lgIGZ1cnRoZXIgc29saWRpZmllcyB0aGUgaW1wYWN0LlxuXG5TbywgeWVhaCwgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlIGNvZGUsIEkndmUgZ290IGEgbGlzdDpcblxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgXG4qICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWBcbiogICBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYFxuKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYFxuXG5UaG9zZSBhcmUgdGhlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhleSBhcmUgYWxsIHVzZXJzcGFjZSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50cy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGdhdGVkIGJ5IGBDT05GSUdfUENJRV9UUEhgIGFuZCBgQ09ORklHX1ZGSU9fUENJYC4gSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGFuZCBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgUENJRV9UUEhgIGlzIGRlZmluZWQgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjE0Ljc3MzQxNTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwMjc0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lFX1RQSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5Ni1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJUTFAgUHJvY2Vzc2luZyBIaW50c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MTcuNTgzNjk4Njc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5ODQ3MjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk5lY2Vzc2FyeSBDb25maWd1cmF0aW9uIGZvciBWRklPIGFuZCBETUEgQnVmZmVycyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MgaGVyZSwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gVkZJTy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBDSUVfVFBIYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGVuYWJsaW5nIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgVkZJT19QQ0lgIHNldHRpbmcgaXMgYWxzbyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5CdXQgbm93LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBtaWdodCBiZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhhdCBmdW5jdGlvbiBjYWxsLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gVGhhdCBzY3JlYW1zIERNQSBidWZmZXIgc3VwcG9ydC4gU28sIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4gSXQgbG9va3MgbGlrZSB0aGF0IG1pZ2h0IGJlIGFub3RoZXIgcmVxdWlyZW1lbnQgaWYgSSdtIGFpbWluZyB0byBsZXZlcmFnZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzY2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MjAuNjgyMTczMzY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTM2OTgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fUENJX0RNQUJVRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU4OmNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MjMuMTc1ODk5NzQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzcyMzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBWRklPX1BDSV9ETUFCVUYgYW5kIFJlbGF0ZWQgRmVhdHVyZXMqKlxuXG5Pa2F5LCBzbyBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sZWFuLCByaWdodD8gSXQgaGluZ2VzIG9uIGBWRklPX1BDSV9DT1JFYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgYFZGSU9fUENJX0RNQUJVRmAgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFyZSBhbHNvIGVuYWJsZWQsIGFzc3VtaW5nIHRoZXkgYXJlbid0IGFscmVhZHkuXG5cbkluc3RlYWQgb2YgZXhwbGljaXRseSBtZW50aW9uaW5nIGV2ZXJ5IGRlcGVuZGVuY3ksIEknbGwganVzdCBsaXN0IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgUENJX1AyUERNQWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGEgY29uY2lzZSBhbmQgZm9jdXNlZCBhcHByb2FjaC5cblxuTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAgYW5kIHRoZSBvdGhlcnMgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjoyNy40ODM2MjU2OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MDQyNjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MDE9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyNy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI4OnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2NTktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTY2MDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTY2MS1cXHRcXHRcXHR1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgdHBoX2dldF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cywgdTMyIHNyY19obmRsLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNzc2OnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xODQ5PWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NjctXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODY4OlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODY5LVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODcwOlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg3MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg3Mi1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4NzM6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NzQtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6MzAuMTc0MDU3MTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDEyODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkZJTy1QQ0kgVFBIIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGUgVFBIIChUcmFuc2xhdGVkIFBoeXNpY2FsIEFkZHJlc3MpIGZlYXR1cmUgZm9yIFZGSU8tUENJLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIHRyYW5zbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGFzcGVjdHMgd29yay5cblxuRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3M6IGNvbmZpcm0gdGhhdCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aCwgYW5kIGtub3dpbmcgaWYgaXQncyB0aGVyZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVzdC4gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHByZXNlbnQgc28gdGhlIGZlYXR1cmUgY2FuIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjMzLjk2NDE4ODU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAwMzQ4OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNDg9c3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMTQ5OnN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNTAtXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTIyOD1pbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNDYtXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMjQ3OlxcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI0OC1cXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEyOjM2LjI2NDU0MTY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyOTE3Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCoqXG5cblJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FzZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkYCBpcyBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0by4gVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhbmQgYSBxdWljayByZS1leGFtaW5hdGlvbiBuZXZlciBodXJ0cywgZ2l2ZW4gaXRzIHJvbGUgd2l0aGluIHRoZSB2ZmlvLXBjaSBETUEgYnVmZmVyIGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHRoZSBzdWJ0bGV0aWVzIGluIHRoaXMgYXJlYS4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2ODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjozOS40NTc0NjE2NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDI4NzU2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2NjA9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTcwNS1cXHRpZiAoc3JjX2JpdHMgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3MDY6XFx0XFx0cmV0ID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzA3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRhZywgXFx1MDAyNnBoKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3NTA9c3RhdGljIGludCB0cGhfZ2V0X3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLCB1MzIgc3JjX2huZGwsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzU4LVxcdGVsc2UgaWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTc1OTpcXHRcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmQoc3JjX2huZGwsIGV4dGVuZGVkLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YWcsIFxcdTAwMjZwaCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjEzNjppbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaClcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNy17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMTk9c3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNC0jaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyNTppbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICp0YWcsIHU4ICpwaCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI2LWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTEzMD12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTMxLSNlbHNlXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTMyOnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTMzLVxcdFxcdFxcdFxcdFxcdFxcdCB1MTYgKnRhZywgdTggKnBoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMjo0Mi4wNjAzNDE5NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NjgxNjQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBIYW5kbGluZyBpbiBWRklPLVBDSSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBWRklPLVBDSSBkcml2ZXIsIGFuZCBteSBmb2N1cyBoYXMgc2hpZnRlZCB0byBETUEgYnVmZmVyIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSdtIGRyaWxsaW5nIGRvd24gaW50byBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiAoVFBIKSBmb3IgRE1BIHRyYW5zZmVycy4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGFyZSB3aGF0IEknbSBpbnRlcmVzdGVkIGluIGhlcmUuXG5cbk15IHRyYWluIG9mIHRob3VnaHQgaXMgdGhhdCBJJ20gZW5jb3VudGVyaW5nIGEgbmV3IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIERNQSBidWZmZXJzLiBUaGUgbmFtZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGEgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBETUEgYnVmZmVycyBtYW5hZ2VkIHZpYSB0aGUgYGRtYV9idWZgIGZyYW1ld29yayBhbmQgdGhlIFBDSSBUcmFuc2xhdGlvbiBhbmQgUHJvdGVjdGlvbiBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgRE1BIGJ1ZmZlciBmcmFtZXdvcms/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgVFBIIGJlaW5nIGludm9sdmVkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gU1ZBPyBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSByZWdhcmRpbmcgc2VjdXJlIGFuZCBlZmZpY2llbnQgRE1BIGFjY2VzcyB3aXRoaW4gYSB2aXJ0dWFsaXplZCBWRklPIGVudmlyb25tZW50LiBJdCBwcm9iYWJseSBob2xkcyBjbHVlcyB0byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGRtYV9idWYgYW5kIHBjaSBsYXllcnMgaW4gdGhlc2Ugc3BlY2lmaWMgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2hlcmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6NDYuODM3MTYxMDQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE3ODkzNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03OT1zdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTkwLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6OTE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy05Mi1cXHRcXHRcXHRcXHRcXHR1MTYgKnRhZywgdTggKnBoKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xMzY9aW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqdGFnLCB1OCAqcGgpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTE0OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjE1MDpcXHRyZXQgPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHRhZywgcGgpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTUxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTI6NDkuMzU1MDYwMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNDU5MjY1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZGSU8tUENJIFRQSCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBWRklPLVBDSSBUUEggc3R1ZmYuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3RwaF9ieV9mZGAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIG5vdy5cblxuTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IEkndmUgZ290IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCBgVkZJT19QQ0lfRE1BQlVGYC4gSG9sZCBvbiwgbG9va3MgbGlrZSBgVkZJT19QQ0lfRE1BQlVGYCBpcyBhIGRlcGVuZGVudCBib29sLiBJdCdzIG9ubHkgc2V0IHRvICd5JyBpZiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCBhcmUgZW5hYmxlZC4gUmlnaHQuIEkgc2hvdWxkIGluY2x1ZGUgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGluIHRoZSBsaXN0LCBqdXN0IGluIGNhc2UuIFRoZXkncmUgcGFydCBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdgIGZpbGUgYWdhaW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBlbm91Z2ggb2YgYSBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MDMuNDAwOTk3NjUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM5OTI3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSV9ETUFCVUZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ3PWNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEzOjA1Ljg0MDkzMTY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxNDIxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW5hYmxpbmcgRE1BLUJVRiBTaGFyaW5nIHdpdGggVkZJTyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRvIGdldCBgVkZJT19QQ0lfRE1BQlVGYCB3b3JraW5nIHByb3Blcmx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgYm90aCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgYXJlIGVuYWJsZWQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciB0aGUgdW5kZXJseWluZyBETUEgaW5mcmFzdHJ1Y3R1cmUuIEkgY2Fu4oCZdCByZW1lbWJlciBvZmYgdGhlIHRvcCBvZiBteSBoZWFkIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZlYXR1cmVzLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvcGNpL0tjb25maWdgIGZpbGUuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IGBQQ0lFX1RQSGAgcG90ZW50aWFsbHkgcGxheWluZyBhIHJvbGUgaW4gdGhpcyBETUEgcGF0aCwgc28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RhdHVzIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJ2xsIG1ha2Ugc3VyZSBpdOKAmXMgY29uZmlndXJlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc2V0dXAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBpbnRlcnJlbGF0ZXMgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzowOS4xNDIzNjg4MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjcyMTUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzoxMS40Njk1OTIwNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTk5NzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYFBDSUVfVFBIYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYFBDSUVfVFBIYCwgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIGJvb2xlYW4uIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIHRoZSBpbXBsaWNhdGlvbnMuIEEgYm9vbGVhbiBpbmRpY2F0ZXMgYSBzaW1wbGUgXCJlbmFibGVkL2Rpc2FibGVkXCIgc3RhdGUuIFRoaXMgdHJpZ2dlcnMgYSBxdWljayBtZW1vcnkgY2hlY2s6IHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5PyBXaGVyZSBpcyB0aGlzIGJlaW5nIHVzZWQ/IFdoYXQgY29udHJvbCBkb2VzIHRoaXMgcHJvdmlkZT9cblxuTXkgbmV4dCBpbnN0aW5jdCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgVkZJT19QQ0lgIGlzIHNldC4gSXQgc2VlbXMgdGhpcyB3b3VsZCBiZSB1c2VmdWwgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBvZiBgVkZJT19QQ0lgIGhhcyBhbnkgYmVhcmluZyBvbiBgUENJRV9UUEhgLCBzbyBJJ20gaGVhZGluZyB0byBgZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnYC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gcmV2ZWFsLiBJIGV4cGVjdCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBmZWF0dXJlcyBkZWZpbmVkIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgdGhlIGtleSB0byBtYW5hZ2luZyB0aGlzIGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MTUuNTM1NTkxMjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NjEzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzoxNy44NTQyMTAxODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MDE1ODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlZGSU8gXHUwMDI2IFBDSSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgVkZJT19QQ0lgLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgVkZJTyBpcyB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIGFuZCBQQ0kgaXMgdGhlIG1lY2hhbmlzbSBmb3IgZGlyZWN0IGRldmljZSBhY2Nlc3MuIEdpdmVuIHRoYXQsIEkgd2FudCB0byBjb25maXJtIG91ciBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBzb2xpZC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9wY2kvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgZGlyZWN0b3J5IGJlY2F1c2Ugb2YgdGhlIFBDSSBmb2N1cy4gVGhlIGtleSBwYXJhbWV0ZXIgdG8gY2hlY2sgaW4gdGhhdCBmaWxlIHdvdWxkIGJlIGBQQ0lfUDJQRE1BYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IERNQSBmdW5jdGlvbmFsaXR5IGlzIGNvcnJlY3RseSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIG91ciBzZXR1cCwgYW5kIEknbSB1c2luZyBgUENJX1AyUERNQWAgYXMgdGhlIGZsYWcgdG8gZW5zdXJlIHRoYXQgdGhlIHNldHRpbmdzIG1hdGNoIHdoYXQgd2UncmUgZXhwZWN0aW5nIGZvciB0aGlzIGhhcmR3YXJlLiBJIHdpbGwgbmVlZCB0byBjaGVjayBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MjIuOTI0MzcyNDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcxNjM4NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDUtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjEzOjI1LjM5NjAyMDE1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk2Mzk1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgRE1BIGJ1ZmZlciBzaXR1YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYERNQV9TSEFSRURfQlVGRkVSYCwgaXMgZGVmaW5lZC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUgbG9va2luZy4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgd2hlbiBkZWFsaW5nIHdpdGggRE1BIGJ1ZmZlcnMsIHdoaWNoIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgdG8gb3B0aW1pemUgdGhlIGRyaXZlcidzIHBlcmZvcm1hbmNlLiBTbywgeWVhaCwgdGhhdCdzIG15IGZvY3VzIG5vdywgZmlndXJpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MTM6MjguMTkyNDE3OTM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTAxNjEyMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjoxMzozMi4yOTQwMzg3NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MTk5NjkyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kvVkZJTyBUUEggTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIFRQSCAoVHJhbnNsYXRlZCBQaHlzaWNhbCBBZGRyZXNzIEhlYWRlcikgc3VwcG9ydCB3aXRoaW4gdGhlIFBDSSBhbmQgVkZJTyBzdWJzeXN0ZW1zLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSBib29sZWFuLCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0IG1pZ2h0IGludGVyYWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW51bWVyYXRlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IGFyZSByZWxldmFudCwgd2hpY2ggSSd2ZSBqdXN0IHdyaXR0ZW4gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSeKAmW0gdXNpbmcgdGhlc2UgdG8gc2V0IHRoZSBzdGFnZSBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuTm93LCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIHN5bWJvbHMuIEkgc3RhcnRlZCBieSBsb29raW5nIGluIGBkcml2ZXJzL3BjaS90cGguY2AgYW5kIGZvdW5kIGEgYnVuY2ggb2YgdGhlbTogYHBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRgLCBgcGNpZV9lbmFibGVfdHBoX2V4cGxpY2l0YCwgYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgLCBgcGNpZV90cGhfc3VwcG9ydGVkYCwgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4gSSBhZGRlZCB0aGVzZSB0byBteSBncm93aW5nIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuVGhlbiwgSSBsb29rZWQgaW4gb3RoZXIgcmVsZXZhbnQgbG9jYXRpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBJIGZvdW5kOiBgdHBoX2dldF9zdF90YWdgIGFuZCBgdHBoX2NhbGNfc3Rfc2l6ZWAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIFZGSU8gaW50ZXJhY3Rpb25zLiBJbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY2AsIEkgc2F3OiBgdmZpb190cGhfY2FwYWJpbGl0eV9hZGp1c3RgLCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYW5kIGBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtYC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aG9zZS5cblxuVGhpcyBsZWQgbWUgdG8gaWRlbnRpZnkgbW9yZSByZWxldmFudCBzeW1ib2xzLCBwYXJ0aWN1bGFybHkgZnJvbSBgdmZpb19wY2lfY29yZS5jYCBhbmQgYHZmaW9fcGNpX2NvbmZpZy5jYC4gSSBoYXZlIGFkZGVkIHRoZXNlIHN5bWJvbHM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0YCwgYHBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdGAsIGBwY2llX3RwaF9zdXBwb3J0ZWRgLCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCwgYXQgbGVhc3QgZm9yIHRoZSBpbml0aWFsIG92ZXJ2aWV3LiBOb3csIEkgZmVlbCByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLCBzbyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMTMsIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjE0OjA0LjExNDAxMDc2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM4MDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCIsXG4gICAgXCJ2ZmlvX3RwaF9jYXBhYmlsaXR5X2FkanVzdFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfdHBoX2J5X2ZkXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4cGxpY2l0XCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXhwbGljaXRcIixcbiAgICBcInBjaWVfdHBoX3N1cHBvcnRlZFwiLFxuICAgIFwicGNpZV90cGhfZHNtX3N1cHBvcnRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IFZGSU8gZGV2aWNlIGZlYXR1cmVzIGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLCBpbnRyb2R1Y2luZyBuZXcgaW9jdGxzIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlIGhhbmRsaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBBUElzIHRvIHVzZXJzcGFjZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIixcbiAgICBcInZmaW9fdHBoX2NhcGFiaWxpdHlfYWRqdXN0XCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF90cGhfYnlfZmRcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXhwbGljaXRcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHBsaWNpdFwiLFxuICAgIFwicGNpZV90cGhfc3VwcG9ydGVkXCIsXG4gICAgXCJwY2llX3RwaF9kc21fc3VwcG9ydGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgVkZJTyBkZXZpY2UgZmVhdHVyZXMgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCksIGludHJvZHVjaW5nIG5ldyBpb2N0bHMgYW5kIGNvbmZpZ3VyYXRpb24gc3BhY2UgaGFuZGxpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IEFQSXMgdG8gdXNlcnNwYWNlLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4n5jw[1] Phase: Succeeded StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:15:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:15:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[2] Phase: Succeeded StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:56:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 16:15:48 +0000 UTC FinishedAt: 2026-07-02 16:16:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow4n5jw/series-workflow4n5jw-convert-artifact-2127701445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 16:16:42 +0000 UTC FinishedAt: 2026-07-02 16:55:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 16:16:42 +0000 UTC FinishedAt: 2026-07-02 16:55:26 +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:*7058fa3f-7206-48af-b895-ee4fdb91afc2,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-workflow4n5jw/series-workflow4n5jw-convert-artifact-2127701445/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": "e1eefd85-97cf-4ef2-844c-a18bceb95f52", "success": false },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-workflow4n5jw/series-workflow4n5jw-build-action-1238713262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-07-02 16:16:42 +0000 UTC FinishedAt: 2026-07-02 16:20:54 +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:*7058fa3f-7206-48af-b895-ee4fdb91afc2,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-workflow4n5jw/series-workflow4n5jw-convert-artifact-2127701445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-07-02 16:27:07 +0000 UTC FinishedAt: 2026-07-02 16:53:53 +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:*7058fa3f-7206-48af-b895-ee4fdb91afc2,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-workflow4n5jw/series-workflow4n5jw-convert-artifact-2127701445/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": "e1eefd85-97cf-4ef2-844c-a18bceb95f52", "success": false },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-workflow4n5jw/series-workflow4n5jw-build-action-1238713262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-02 16:55:26 +0000 UTC FinishedAt: 2026-07-02 16:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4n5jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_tph_config_write","vfio_tph_capability_adjust","vfio_pci_dma_buf_get_tph_by_fd","vfio_pci_dma_buf_get_pci_tph","pcie_tph_get_cpu_st_explicit","pcie_enable_tph_explicit","pcie_tph_supported","pcie_tph_dsm_supported"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4f441960e691d37c880d2cc004de06bb5b6bd5e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"0bebeab7-12e5-4969-83f3-2d1e71f3277c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-07-02 16:55:26 +0000 UTC FinishedAt: 2026-07-02 16:55:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}