Name: series-workflowdpt6c Phase: Succeeded StartedAt: 2026-08-31 12:10:42 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[0] Phase: Succeeded StartedAt: 2026-08-31 12:10:42 +0000 UTC FinishedAt: 2026-08-31 12:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 12:10:42 +0000 UTC FinishedAt: 2026-08-31 12:40:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9542b56cd42cf145b763258075dca774daa0cb0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "SPARSEMEM_VMEMMAP", "DEVICE_PRIVATE", "FS_DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9542b56cd42cf145b763258075dca774daa0cb0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "SPARSEMEM_VMEMMAP", "DEVICE_PRIVATE", "FS_DAX" ], "series_id": "0f04c229-b1a9-40fb-bc2d-4edb88804df8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages", "devm_memremap_pages", "__memcpy_flushcache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzhlOGUwMDZmNTk1M2ExM2YzMTY3YjJlNGQ5NGI2NWU4YjU2YWVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MjU6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uODMxZDNkZGEzYjM4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTgyLDI0ICYjNDM7ODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7bW92bnRpbCAlMSwgJTBcJiMzNDtcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDs9bVwmIzM0OygqKHUzMiAqKWRzdClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDtyXCYjMzQ7KCooY29uc3QgdTMyICopc3JjKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlsICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTMyICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopKGRzdCAmIzQzOyA4KSkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxuJiM0MztcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4mIzQzO1x0ICogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGxcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xuJiM0MztcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKGNudCkge1xuJiM0MztcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4mIzQzO1x0Y2FzZSA4OiAgbW92bnRpXzgoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDQ4OiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOyBicmVhaztcbiYjNDM7XHRjYXNlIDY0OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDgwOiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhaztcbiYjNDM7XHRjYXNlIDk2OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMzIoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhaztcbiYjNDM7XHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcbiBcdH1cbi1cdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuJiM0MztcbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsXG4mIzQzOy8qXG4mIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuJiM0MzsgKiBwcmltaXRpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuJiM0MztcdFx0c2l6ZV90IGNudClcbiYjNDM7e1xuJiM0MztcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42NjQwYzc1MjI4MjIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNjQ0LDEyICYjNDM7MjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI4NzIsOSAmIzQzOzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiLi42Y2I1Y2RkMDExNThiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuQEAgLTI3OCw2ICYjNDM7Mjc4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4mIzQzOy8qXG4mIzQzOyAqIG1lbWNweV9ub250ZW1wb3JhbCgpIHJlcXVlc3RzIGEgbm9uLXRlbXBvcmFsIGNvcHkgd2hlbiB0aGVcbiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4mIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYVxuJiM0MzsgKiBmdW5jdGlvbi1saWtlIG1hY3JvIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbFxuJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbiYjNDM7ICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4mIzQzO1x0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgJiM0MzsxMDAwLDkgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4mIzQzO1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbiYjNDM7XHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuJiM0MztcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbiBcdCAqL1xuIFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuQEAgLTEwMjEsNiAmIzQzOzEwMTcsMTcgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4mIzQzO1x0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4mIzQzO1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2l0aCBjb21wb3VuZCBwYWdlIGdlb21ldHJ5IGFuZCB3aGVuIHN0cnVjdCBwYWdlcyBhcmUgc3RvcmVkIGluIHJhbSBtb3N0XG4gICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0b1xuQEAgLTEwNTMsNiAmIzQzOzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxuQEAgLTEwNjEsMTMgJiM0MzsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGUgc3RhdGUgZXN0YWJsaXNoZWQgYnlcbiYjNDM7XHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQgdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZm4gPSBoZWFkX3BmbiAmIzQzOyAxO1xuJiM0MztcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuJiM0MztcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbiYjNDM7XHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDI7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOylcbiYjNDM7XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuIFxuQEAgLTEwODMsNiAmIzQzOzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTEwOTcsMTAgJiM0MzsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuJiM0MztcdGlmICghbnJfcGFnZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4mIzQzO1x0ICogcGFnZS4gVGhlIG5vcm1hbCBwYWdlLWluaXQgYW5kIHJlZmNvdW50IGhlbHBlcnMgbXVzdCBvcGVyYXRlIG9uXG4mIzQzO1x0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZm4gPSBzdGFydF9wZm47XG4mIzQzO1x0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4mIzQzO1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XHRpZiAocGZuc19wZXJfY29tcG91bmQgIT0gMSlcbiYjNDM7XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjNDM7XHRwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgaGVhZCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xuJiM0MztcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiYjNDM7XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX21lbWNweV9mbHVzaGNhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzhlOGUwMDZmNTk1M2ExM2YzMTY3YjJlNGQ5NGI2NWU4YjU2YWVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTI6MjU6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCkBAIC04MiwyNCAmIzQzOzgyLDc3IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpbCAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHUzMiAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHUzMiAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkgewotCQlzd2l0Y2ggKGNudCkgewotCQkJY2FzZSA0OgotCQkJCWFzbSAoJiMzNDttb3ZudGlsICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTMyICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTMyICopc3JjKSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSA4OgotCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSAxNjoKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKXNyYykpOwotCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopKGRzdCAmIzQzOyA4KSkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTsKLQkJCQlyZXR1cm47Ci0JCX0KJiM0MzsJbW92bnRpXzE2KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzE2KGRzdCAmIzQzOyAxNiwgc3JjICYjNDM7IDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCQkJCSAgICAgIHNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpCiYjNDM7CQlyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6CiYjNDM7CSAqIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsCiYjNDM7CSAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZSBjYXNlcyBiYWNrIHRvCiYjNDM7CSAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoY250KSB7CiYjNDM7CWNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgODogIG1vdm50aV84KGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgMTY6IG1vdm50aV8xNihkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSA0ODogbW92bnRpXzMyKGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsgYnJlYWs7CiYjNDM7CWNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDgwOiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhazsKJiM0MzsJY2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7CiYjNDM7CWRlZmF1bHQ6IF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7IGJyZWFrOwogCX0KLQlfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwogfQomIzQzOwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5CiYjNDM7ICogcHJpbWl0aXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQlzaXplX3QgY250KQomIzQzO3sKJiM0MzsJbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjY0NCwxMiAmIzQzOzI2NDQsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCUFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtJmd0O2YsIFNFQ1RJT05TX01BU0sgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVCk7CiAJcmV0dXJuIChtZGYtJmd0O2YgJmd0OyZndDsgU0VDVElPTlNfUEdTSElGVCkgJmFtcDsgU0VDVElPTlNfTUFTSzsKIH0KICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiAwOwpAQCAtMjg3Miw5ICYjNDM7Mjg4Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSwKIHsKIAlzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpOwogCXNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7Ci0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTCi0Jc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKLSNlbmRpZgomIzQzOwlzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNTcwMmRhY2E0MzI2Yi4uNmNiNWNkZDAxMTU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMTUzM2FlYmFmYjY4OC4uNWE2MWMwYzgzZmE3NCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwMCwxMyAmIzQzOzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiAKIAkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgogCSAqLwogCXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKIAljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgpAQCAtMTAyMSw2ICYjNDM7MTAxNywxNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFdpdGggY29tcG91bmQgcGFnZSBnZW9tZXRyeSBhbmQgd2hlbiBzdHJ1Y3QgcGFnZXMgYXJlIHN0b3JlZCBpbiByYW0gbW9zdAogICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0bwpAQCAtMTA1Myw2ICYjNDM7MTA2MCw4IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogewogCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtJmd0O3ZtZW1tYXBfc2hpZnQ7CiYjNDM7CXN0cnVjdCBwYWdlIHRlbXBsYXRlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy4KQEAgLTEwNjEsMTMgJiM0MzsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogCSAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby4KIAkgKi8KIAlfX1NldFBhZ2VIZWFkKGhlYWQpOwotCWZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMTsgcGZuICZsdDsgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7Ci0JCXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5CiYjNDM7CSAqIHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZSBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZAomIzQzOwkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQgdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS4KJiM0MzsJICovCiYjNDM7CXBmbiA9IGhlYWRfcGZuICYjNDM7IDE7CiYjNDM7CXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7CW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi8KJiM0MzsJZm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAyOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KQomIzQzOwkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLAomIzQzOwkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQogCkBAIC0xMDgzLDYgJiM0MzsxMTAyLDggQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTEwOTcsMTAgJiM0MzsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJCW5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKIAl9CiAKLQlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiYjNDM7CWlmICghbnJfcGFnZXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZSBmaXJzdCByZWFsIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb24KJiM0MzsJICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJICovCiYjNDM7CXBmbiA9IHN0YXJ0X3BmbjsKJiM0MzsJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiYjNDM7CV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CWlmIChwZm5zX3Blcl9jb21wb3VuZCAhPSAxKQomIzQzOwkJbWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCwKJiM0MzsJCQkJICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTsKJiM0MzsJcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZDsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi8KJiM0MzsJZm9yICg7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHsKJiM0MzsJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgcHJlc2VudHMgYW55IGp1aWN5IGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgY29tcGxleGl0eSwgcG90ZW50aWFsIGZvciBuZXcgY29kZSBwYXRocywgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBTbywgSSBzZWUgdGhhdCB3ZSYjMzk7dmUgZ290OgoKMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGA6IEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgb3B0aW1pemluZyBgbWVtY3B5X2ZsdXNoY2FjaGVgIGJ5IGFkZGluZyBpbmxpbmUgaW1wbGVtZW50YXRpb25zIGZvciBmaXhlZC1zaXplIGNvcGllcyB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIE9wdGltaXphdGlvbiBvZnRlbiBtZWFucyB0aGV5JiMzOTtyZSBhaW1pbmcgZm9yIHBlcmZvcm1hbmNlIGluIGhvdCBjb2RlIHBhdGhzLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG1pc2hhbmRsZWQuIFRoZXkmIzM5O3ZlIGFsc28gZGVmaW5lZCBgbWVtY3B5X25vbnRlbXBvcmFsYCBhcyBgbWVtY3B5X2ZsdXNoY2FjaGVgLgoKMi4gIGBpbmNsdWRlL2xpbnV4L21tLmhgOiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc2VjdGlvbnMgYXJlIHNldCBhbmQgbGlua2VkLCBpbmNsdWRpbmcgYSBuZXcgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCjMuICBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGA6IFRoaXMgc2VlbXMgdG8gYmUgYSBmYWxsYmFjaywgd2hlcmUgYG1lbWNweV9ub250ZW1wb3JhbGAgZmFsbHMgYmFjayB0byBgbWVtY3B5YC4gTWFrZXMgc2Vuc2UuCgo0LiAgYG1tL21tX2luaXQuY2A6IFRoaXMgaXMgdGhlIG1lYXQgb2YgaXQuIFRoZXJlIGFyZSBzdWJzdGFudGlhbCBjaGFuZ2VzIGhlcmU6CiAgICAqICAgSW5pdGlhbGl6YXRpb24gb2YgYFpPTkVfREVWSUNFYCBwYWdlcyBoYXMgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBGU1xfREFYIHBhZ2VzIG5vIGxvbmdlciBnZXQgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdoeSB0aGUgY2hhbmdlPyBUaGlzIGNvdWxkIGhpbnQgYXQgc29tZSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIG1hbmFnZWQsIGFuZCBwZXJoYXBzIGEgbmV3IGNsYXNzIG9mIGJ1Zy4KICAgICogICBUaGV5JiMzOTt2ZSBhZGRlZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgbm93IHVzZXMgYG1lbWNweV9ub250ZW1wb3JhbGAgZm9yIGluaXRpYWxpemluZyBzdHJ1Y3QgcGFnZXMgZm9yIGBaT05FX0RFVklDRWAuIFRoaXMgc291bmRzIGxpa2UgYW4gZWZmb3J0IHRvIG9wdGltaXplIGFuZCBzdGFuZGFyZGl6ZSBwYWdlIGluaXRpYWxpemF0aW9uLCBidXQgaXQgYWxzbyBicmluZ3MgaW4gbmV3IGNvZGUuIEFueSB0aW1lIHlvdSBpbnRyb2R1Y2UgbmV3IHBhZ2UgaW5pdGlhbGl6YXRpb24gY29kZSwgeW91IG9wZW4gdGhlIGRvb3IgdG8gYWxsIHNvcnRzIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBpbml0aWFsaXphdGlvbiBidWdzLgogICAgKiAgIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYXJlIG5vdyB1c2luZyB0aGVzZSB0ZW1wbGF0ZXMgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGxpa2VseSBpcyB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlLgoKTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGRldGVybWluZSB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0OgoKKiAgIFdoZXJlIGlzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhpcyBjb2RlIGlzIHJlYWNoZWQgYW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGRlcGVuZGVudCBvbiBpdC4KKiAgIFdoYXQga2VybmVsIGNvbmZpZ3MgZW5hYmxlIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgY29kZS4gVGhpcyBpcyBjcml0aWNhbCBmb3Igc2VsZWN0aW5nIGEgdGFyZ2V0IGZvciB0aGUgZnV6emVyLgoqICAgVXNpbmcgYGdyZXBwZXJgLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRob3NlIGNhbGxzIHRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBaT05FX0RFVklDRWAgYW5kIHNlZSB3aGF0IGVsc2UgSSBjYW4gZGlnIHVwLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGFmZmVjdGVkIHN1YnN5c3RlbXMuCgpJJiMzOTttIHRoaW5raW5nIHRoYXQgYW55dGhpbmcgaW52b2x2aW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBlc3BlY2lhbGx5IGl0cyB1c2UgaW4gaW5pdGlhbGl6aW5nIHBhZ2VzLCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVmY291bnQgY2hhbmdlIGlzIGFsc28gYSByZWQgZmxhZy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBuYXJyb3cgb3VyIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMzMtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMzQ6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMzNS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNDEtXHQgKi9cbm1tL21lbXJlbWFwLmM6MjQyOlx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXHUwMDI2Tk9ERV9EQVRBKG5pZCktXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXG5tbS9tZW1yZW1hcC5jLTI0My1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbi0tXG5tbS9tbV9pbml0LmM9MTA1NT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA5Mi1cbm1tL21tX2luaXQuYzoxMDkzOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTA5NC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgUmVtYXBwaW5nIENhbGxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBzb21lIGtleSBtZW1vcnkgcmVtYXBwaW5nIGZ1bmN0aW9ucy4gTXkgZm9jdXMgaGVyZSBpcyBvbiBob3cgYHBhZ2VtYXBfcmFuZ2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFyZSBiZWluZyBlbXBsb3llZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHBpY3R1cmUgb2YgKndoZW4qIHRoZXkgYXJlIGNhbGxlZCwgKndoeSogdGhleSYjMzk7cmUgY2FsbGVkIChzcGVjaWZpY2FsbHkgd2hhdCB0aGUgdXNlIGNhc2UgaXMpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIHVzZWQsIGFzIGl0IHByb3ZpZGVzIG1hbmFnZWQgbWVtb3J5IHJlbWFwcGluZyBhbmQgc28gbGlrZWx5IGhhcyBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuIFVsdGltYXRlbHkgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0zMDc9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOC0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTk6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjAtXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyMy1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjQ6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI1LWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM2LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXA7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwLCBOVU1BX05PX05PREUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjM9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc1LVx0LypcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5NzY6XHQgKiBTcGVjaWFsIGNhc2U6IGFkZF9wYWdlcygpIGlzIGNhbGxlZCBieSBtZW1yZW1hcF9wYWdlcygpIGZvciBhZGRpbmcgZGV2aWNlXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc3LVx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yNzk9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMTktXG5kcml2ZXJzL2RheC9mc2Rldi5jOjMyMDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0zMjEtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0yOTY9bm91dmVhdV9kbWVtX2NodW5rX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLCBzdHJ1Y3QgcGFnZSAqKnBwYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMzMzpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmNodW5rLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzk4PXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MzktXHRwYWdlbWFwLVx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NDA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NDEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgyPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMS1cdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDEyOlx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTMtXHQgKiBhbGlnbm1lbnQgZXhjZWVkcyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgZm9saW8gb3JkZXIgZm9yIHRoaXMga2VybmVsIGNvbmZpZy5cbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjAtXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjE6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjItXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjM6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjQtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ2Mz1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMzOlx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzNC1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTQ1LVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU0NjpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NDctXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTkzND1FWFBPUlRfU1lNQk9MKG5kX3JlZ2lvbl9yZWxlYXNlX2xhbmUpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjkzNzogKiBQb3dlclBDIHJlcXVpcmVzIHRoaXMgYWxpZ25tZW50IGZvciBtZW1yZW1hcF9wYWdlcygpLiBBbGwgb3RoZXIgYXJjaHNcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyMy1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0Olx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTI1LVx0aWYgKElTX0VSUih2YWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzU9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTUtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNjpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE3LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI1LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI2Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI3LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMjk6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cdC8qXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5Olx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkzLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1yZW1hcF9jb21wYXRfYWxpZ24odm9pZClcbi0tXG5saWIvdGVzdF9obW0uYz02NjE9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbi0tXG5saWIvdGVzdF9obW0uYy03MTgtXHR9XG5saWIvdGVzdF9obW0uYzo3MTk6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xubGliL3Rlc3RfaG1tLmMtNzIwLVx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcbi0tXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcbi0tXG5tbS9tZW1yZW1hcC5jLTE5LS8qXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XG5tbS9tZW1yZW1hcC5jLTIyLSAqIGNvbnN0cmFpbnRzIG9uIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIG1hcHBpbmcgKG5hbWVzcGFjZSkuXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxubW0vbWVtcmVtYXAuYzoyNTogKiB0aGUgbWluaW11bSBtYXBwaW5nIGdyYW51bGFyaXR5IG9mIG1lbXJlbWFwX3BhZ2VzKCkgaXMgMTZNQi5cbm1tL21lbXJlbWFwLmMtMjYtICpcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NDA0PWludCBfX21lbWluaXQgdm1lbW1hcF9wb3B1bGF0ZV9odWdlcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcbm1tL3NwYXJzZS12bWVtbWFwLmM6NDYyOiAqIE5vdGUgdGhhdCBtZW1yZW1hcF9wYWdlcygpIHJlc2V0cyBAbnJfcmFuZ2UgdmFsdWUgYW5kIHdpbGwgaW5jcmVtZW50XG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2My0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0xMz1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MTQ6bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkLTE1LWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE0LVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVx0aWYgKCFuZml0X3JlcylcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMjI6XHRcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMzU6RVhQT1JUX1NZTUJPTF9HUEwoX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oPTIxMj12b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cdFx0c2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBSZW1hcHBpbmcgaW4gUUVNVSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaG93IHdlIGNhbiByZWFjaCB0aG9zZSBjYWxscyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgbGV0JiMzOTtzIGxvb2sgYXQgYSBmZXcgc3BlY2lmaWMgYXJlYXMgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBGb3Igc3RhcnRlcnMsIEkgc2hvdWxkIGV4YW1pbmUgYGxpYi90ZXN0X2htbS5jYCDigJMgdGhhdCBITU0gdGVzdCBkZXZpY2UsIGAvZGV2L2htbV9kbWlycm9yYCwgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgdmlydGlvX2ZzYCB3aXRoIERBWCBtaWdodCBiZSBpbnZvbHZlZCwgYXMgd2VsbCBhcyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggcGVyc2lzdGVudCBtZW1vcnkgdGVjaG5vbG9naWVzIGxpa2UgYHBtZW1gLCBgbnZkaW1tYCwgYW5kIG90aGVyIERBWCBjb25maWd1cmF0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IHVzaW5nIHRoaXMuIGBkYXhfcG1lbWAsIGBkZXZfZGF4YCwgYW5kIGBmc2Rldl9kYXhgIGFyZSBhbHNvIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBsaWIvS2NvbmZpZ2AgdG8gc2VlIGlmIGBURVNUX0hNTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpbmdzIGxpa2UgYG52ZGltbWAgb3Igc2ltaWxhciBwZXJzaXN0ZW50IG1lbW9yeSBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVnaW9ucywgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGFsbCBLY29uZmlnIGZpbGVzIGZvciBgWk9ORV9ERVZJQ0VgLCB3aGljaCBpcyBrZXkgZm9yIERBWCBhbmQgZGV2aWNlLWJhc2VkIG1lbW9yeSBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZ2AuIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBsaW5lIDEyMjUgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbm90IGV4cGVjdGluZyBhIGdyb3VuZGJyZWFraW5nIHJldmVsYXRpb24sIGJ1dCBvZnRlbiB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgSSYjMzk7dmUgYmVlbiBwdXp6bGluZyBvdmVyLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRocm91Z2ggdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBoYXBwZW5zIGFzIG9wdGlvbnMgY2hhbmdlLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBwYXJ0aWN1bGFyIG9wdGlvbiBJIG5lZWQgdG8gZWl0aGVyIHNldCwgb3IgdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3Mgbm90IGJlaW5nIHNldCBjb3JyZWN0bHkuIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQ1Olx0IyB0YWJsZXMuXG4xMjQ2Olx0I1xuMTI0NzpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQ4Olx0XHRib29sXG4xMjQ5Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI1MDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI1MTpcdFxuMTI1MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNTM6XHRcdGJvb2xcbjEyNTQ6XHRcbjEyNTU6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNTY6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjU3Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjU4Olx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyB0aGUgVUFDQ0VTUyBGbHVzaCBDYWNoZSBGbGFnKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBXZSYjMzk7dmUgZ290IHRoaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZGVhbGluZyB3aXRoIG1lbW9yeSBhY2Nlc3MsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCBidXQgd2UgaGF2ZSB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgY29ycmVjdC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2FjaGUgY29oZXJlbmN5IHByb3Blcmx5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHVzZXItc3BhY2UgYWNjZXNzLiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIHNwZWNpZmljcywgSSBzaG91bGQgZ28gYWhlYWQgYW5kIGV4YW1pbmUgdGhlIG1hY3JvLCBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmZWF0dXJlLiBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggc3lzdGVtcyBiZWZvcmUgd2hlcmUgY2FjaGUgZmx1c2hlcyBhcm91bmQgdXNlci1zcGFjZSBhY2Nlc3NlcyB3ZXJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB0byBhdm9pZCBzdGFsZSBkYXRhIGlzc3VlcyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gdGVsbHMgdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBpbXBhY3RzIG91ciBjdXJyZW50IGNvZGUgcGF0aC4gRXNzZW50aWFsbHksICppcyogdGhlcmUgYSByZXF1aXJlbWVudCwgYnkgZGVzaWduLCB0byBmbHVzaCB0aGUgY2FjaGUsIGFuZCBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBjb25kaXRpb25hbGl6ZXMgaXRzZWxmIGFyb3VuZCB0aGlzIGZsYWcsIGFuZCB3aGV0aGVyIHRoaXMgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSBvcHRpbWl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdHJ5IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGFic29sdXRlIHJlcXVpcmVtZW50LCBvciBpZiB0aGlzIGNhbiBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYW55IG9wdGltaXphdGlvbnMgd2UgaW50cm9kdWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5NzY9Y29uZmlnIEFSTTY0X1BNRU1cbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTk3OC1cdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjE5Nzk6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L0tjb25maWctMTk4MC1cdGhlbHBcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDUtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oOjQ2OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD00NzU9ZXh0ZXJuIF9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDc3OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00NzgtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xuLS1cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlPTY9bGliLXlcdFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1x0XHRcXFxuLS1cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTExLVxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6MTI6bGliLSQoQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSkgJiM0Mzs9IHVhY2Nlc3NfZmx1c2hjYWNoZS5vXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0xMy1cbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFx0XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9pbnZhbGlkYXRlX3BtZW0pO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY2LS8qXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo2NzogKiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFIHN5bWJvbHNcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY4LSAqL1xuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTAzLVx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXHRpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC94ODYvS2NvbmZpZzoxMDQ6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTA1LVx0c2VsZWN0IEFSQ0hfSEFTX0NPUFlfTUNcdFx0XHRpZiBYODZfNjRcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD04MD1pbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04MS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjgyOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNy1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xOS0vKipcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUwOC1cdGZ1YSA9IG52ZGltbV9oYXNfZmx1c2gobmRfcmVnaW9uKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MDk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSkgfHwgZnVhIFx1MDAzYyAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTEwLVx0XHRkZXZfd2FybihkZXYsIFwmIzM0O3VuYWJsZSB0byBndWFyYW50ZWUgcGVyc2lzdGVuY2Ugb2Ygd3JpdGVzXFxuXCYjMzQ7KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTI2MT1ib29sIGNvcHlfZnJvbV9pdGVyX2Z1bGxfbm9jYWNoZSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI2OS1cbmluY2x1ZGUvbGludXgvdWlvLmg6MjcwOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3MS0vKlxuLS1cbmluY2x1ZGUvbGludXgvdWlvLmgtMjczLSAqIF9jb3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKCkgdGhhbiBfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSgpIG11c3QgY2hlY2sgZm9yXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3NDogKiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIGJlZm9yZSBhc3N1bWluZyB0aGF0IHRoZVxuaW5jbHVkZS9saW51eC91aW8uaC0yNzUtICogZGVzdGluYXRpb24gaXMgZmx1c2hlZCBmcm9tIHRoZSBjYWNoZSBvbiByZXR1cm4uXG4tLVxubGliL0tjb25maWc9NTM2PWNvbmZpZyBVQUNDRVNTX01FTUNQWVxuLS1cbmxpYi9LY29uZmlnLTUzOC1cbmxpYi9LY29uZmlnOjUzOTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvS2NvbmZpZy01NDAtXHRib29sXG4tLVxubGliL2lvdl9pdGVyLmM9MjkyPUVYUE9SVF9TWU1CT0woX2NvcHlfZnJvbV9pdGVyX25vY2FjaGUpO1xubGliL2lvdl9pdGVyLmMtMjkzLVxubGliL2lvdl9pdGVyLmM6Mjk0OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvaW92X2l0ZXIuYy0yOTUtc3RhdGljIF9fYWx3YXlzX2lubGluZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgVEVTVF9ITU0qKgoKQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNvbmNpc2U6ICYjMzQ7TGV0JiMzOTtzIHNlZSB3aGF0IGhhcHBlbnMgd2l0aCBgVEVTVF9ITU1gJiMzNDsuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGZldyB0aGluZ3MgdG8gbWUuIEZpcnN0LCBgVEVTVF9ITU1gIGxpa2VseSByZWZlcnMgdG8gYSBzcGVjaWZpYywgcG90ZW50aWFsbHkgZXhwZXJpbWVudGFsLCBwaWVjZSBvZiBjb2RlIG9yIGEgc2V0IG9mIHBhcmFtZXRlcnMgcmVsYXRlZCB0byBhIEhpZGRlbiBNYXJrb3YgTW9kZWwuIFRoZSB1c2Ugb2YgYWxsIGNhcHMgYW5kIHRoZSBwcmVzZW5jZSBvZiAmIzM0O1RFU1QmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHRlc3Qgc2V0dXAsIHBlcmhhcHMgYSBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvciBhIHNjcmlwdCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGV2YWx1YXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyB0aGUgZ29hbCBvZiB0aGlzIHRlc3Q/IEFyZSB3ZSBsb29raW5nIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIGVkZ2UgY2FzZSBkZXRlY3Rpb24sIHJvYnVzdG5lc3MgdmFsaWRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgdHJ1ZSB1bmRlcnN0YW5kaW5nIHJlcXVpcmVzIHRoZSBzcGVjaWZpY3MuIFRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucy4uLiYjMzQ7IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgaW4gYW4gZXhwbG9yYXRvcnkgcGhhc2UuIFdlJiMzOTtyZSBydW5uaW5nIHRoaXMgYW5kIHdhdGNoaW5nIHRoZSBvdXRwdXRzLCBwcm9iYWJseSBsb2dnaW5nIHRoZW0sIGFuZCBwcmVwYXJpbmcgdG8gYW5hbHl6ZSB0aGUgcmVzdWx0cyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW3igJlzIGJlaGF2aW9yIHdpdGggdGhpcyBzcGVjaWZpYyBtb2RlbCB2YXJpYW50IG9yIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZXhwZXJpbWVudGFsIHNldHVwLCBleHBlY3RlZCByZXN1bHRzLCBhbmQgdGhlIHNwZWNpZmljIG1ldHJpY3MuIFRoaXMgY291bGQgbWVhbiBhIGxvdCBvZiB0aGluZ3MuIEkmIzM5O20gcmVhZHkgdG8gZXZhbHVhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNi1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNy1DT05GSUdfR1VQX1RFU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cdFx0ZWNobyBcJiMzNDskMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDozNjpcdFx0ZWNobyBcJiMzNDtDT05GSUdfVEVTVF9ITU09bVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXHRcdGV4aXQgJGtzZnRfc2tpcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludm9jYXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIExldCYjMzk7cyBzZWUuLi4gRmlyc3QsIEkmIzM5O2xsIGdvIHRvIGBtbS9tZW1yZW1hcC5jYC4gUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLCB3aGljaCB0aGVuIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFoLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGl0c2VsZiBpcyBpbnZva2VkIHdoZW4gWk9ORV9ERVZJQ0UgbWVtb3J5IGlzIGVpdGhlciBtYXBwZWQgb3IgaG90cGx1Z2dlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKTm93LCBJJiMzOTtsbCBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbi4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgSSYjMzk7bGwgbmF2aWdhdGUgb3ZlciB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2VzcyBwcm9wZXJseSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4xMDgxOlx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbjEwODI6XHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4xMDgzOlx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbjEwODQ6XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4xMDg1Olx0XG4xMDg2Olx0XHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgdGFpbCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xuMTA4NzpcdFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAyOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspXG4xMDg4Olx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbixcbjEwODk6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuMTA5MDpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbjEwOTE6XHR9XG4xMDkyOlx0XG4xMDkzOlx0dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbjEwOTQ6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuMTA5NTpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjEwOTY6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMDk3Olx0e1xuMTA5ODpcdFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4xMDk5Olx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuMTEwMDpcdFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApO1xuMTEwMTpcdFx0dW5zaWduZWQgaW50IHBmbnNfcGVyX2NvbXBvdW5kID0gcGdtYXBfdm1lbW1hcF9ucihwZ21hcCk7XG4xMTAyOlx0XHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4xMTAzOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbjExMDQ6XHRcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuMTEwNTpcdFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4xMTA2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExMDc6XHRcbjExMDg6XHRcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbjExMDk6XHRcdFx0cmV0dXJuO1xuMTExMDpcdFxuMTExMTpcdFx0LypcbjExMTI6XHRcdCAqIFRoZSBjYWxsIHRvIG1lbW1hcF9pbml0IHNob3VsZCBoYXZlIGFscmVhZHkgdGFrZW4gY2FyZVxuMTExMzpcdFx0ICogb2YgdGhlIHBhZ2VzIHJlc2VydmVkIGZvciB0aGUgbWVtbWFwLCBzbyB3ZSBjYW4ganVzdCBqdW1wIHRvXG4xMTE0Olx0XHQgKiB0aGUgZW5kIG9mIHRoYXQgcmVnaW9uIGFuZCBzdGFydCBwcm9jZXNzaW5nIHRoZSBkZXZpY2UgcGFnZXMuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdGlmIChhbHRtYXApIHtcbjExMTc6XHRcdFx0c3RhcnRfcGZuID0gYWx0bWFwLVx1MDAzZWJhc2VfcGZuICYjNDM7IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApO1xuMTExODpcdFx0XHRucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4xMTE5Olx0XHR9XG4xMTIwOlx0XG4xMTIxOlx0XHRpZiAoIW5yX3BhZ2VzKVxuMTEyMjpcdFx0XHRyZXR1cm47XG4xMTIzOlx0XG4xMTI0Olx0XHQvKlxuMTEyNTpcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4xMTI2Olx0XHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbjExMjc6XHRcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4xMTI4Olx0XHQgKi9cbjExMjk6XHRcdHBmbiA9IHN0YXJ0X3BmbjtcbjExMzA6XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuMTEzMTpcdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4xMTMyOlx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuMTEzMzpcdFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4xMTM0Olx0XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4xMTM1Olx0XHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuMTEzNjpcdFx0cGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZDtcbjExMzc6XHRcbjExMzg6XHRcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4xMTM5Olx0XHRmb3IgKDsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4xMTQwOlx0XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuMTE0MTpcdFxuMTE0MjpcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4xMTQzOlx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbjExNDQ6XHRcbjExNDU6XHRcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4xMTQ2Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRcdGlmIChwZm5zX3Blcl9jb21wb3VuZCA9PSAxKVxuMTE0OTpcdFx0XHRcdGNvbnRpbnVlO1xuMTE1MDpcdFxuMTE1MTpcdFx0XHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxuMTE1MjpcdFx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbjExNTM6XHRcdH1cbjExNTQ6XHRcbjExNTU6XHRcdHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHN0YXJ0X3BmbiwgbnJfcGFnZXMsIE1JR1JBVEVfTU9WQUJMRSwgZmFsc2UpO1xuMTE1NjpcdFxuMTE1NzpcdFx0cHJfZGVidWcoXCYjMzQ7JXMgaW5pdGlhbGlzZWQgJWx1IHBhZ2VzIGluICV1bXNcXG5cJiMzNDssIF9fZnVuY19fLFxuMTE1ODpcdFx0XHRucl9wYWdlcywgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpKTtcbjExNTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgbWVtb3J5IGNvcHlpbmcsIHNwZWNpZmljYWxseSBmb3Igbm9uLXRlbXBvcmFsIGFjY2VzcywgYW5kIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCB1cGRhdGUgY29uY2VybmluZyBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBkaWZmZXJlbnQgbWVtb3J5IGRldmljZSB0eXBlcy4KCkZpcnN0LCBJIHNlZSB0aGUgb3B0aW1pemF0aW9uIG9mIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHg4Ni4gVGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgaXMgbm93IHNwb3J0aW5nIGlubGluZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMg4oCTIHRob3NlIG5vbi10ZW1wb3JhbCBzdG9yZSBoaW50cyDigJMgdGFpbG9yZWQgZm9yIGZpeGVkLXNpemUgY29waWVzOiA0LCA4LCAxNiwgMzIsIDQ4LCA2NCwgODAsIGFuZCA5NiBieXRlcy4gTmljZSwgdGhpcyBpcyB0aGUga2luZCBvZiB0YXJnZXRlZCBvcHRpbWl6YXRpb24gSSBhcHByZWNpYXRlLiBDbGVhcmx5LCB0aGUgZ29hbCBoZXJlIGlzIHRvIHJlZHVjZSBjYWNoZSBwb2xsdXRpb24gZHVyaW5nIHRoZXNlIG1lbW9yeSBjb3BpZXMuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uIHRoYXQgbGV2ZXJhZ2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAgb24geDg2LCB3aXRoIGEgZmFsbGJhY2sgdG8gdGhlIHN0YW5kYXJkIGBtZW1jcHlgIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMsIHJlaW5mb3JjZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgc2Vuc2libGUgYXBwcm9hY2guCgpOb3csIHdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGhvdyB0aGlzIGlzIGFsbCBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBub3cgY2FsbGluZyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBpbml0aWFsaXplIGBzdHJ1Y3QgcGFnZWAgZW50cmllcyBmcm9tIGEgdGVtcGxhdGUgYHN0cnVjdCBwYWdlYCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB0aGUgcGFnZSB2aXJ0dWFsIGFkZHJlc3MuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBleHBlY3RpbmcgcGVyZm9ybWFuY2UgZ2FpbnMgd2hlbiBpbml0aWFsaXppbmcgdGhlc2UgcGFnZXMuCgpGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiByZWZjb3VudCBoYW5kbGluZyB3aXRoaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIEZTX0RBWCwgd2hpY2ggSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBjcml0aWNhbC4gVGhlIHByZXZpb3VzIGNvZGUgc3RydWN0dXJlIGhhZCBhIHN3aXRjaCBzdGF0ZW1lbnQgdGhhdCBoYW5kbGVkIHBhZ2UgY291bnQgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gdGhlIGBwZ21hcC0mZ3Q7dHlwZWAuIFRoZSBjaGFuZ2UgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBgTUVNT1JZX0RFVklDRV9HRU5FUklDYCB0eXBlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBwcmV2aW91c2x5IHNraXBwZWQsIGJ1dCBub3cgd2UmIzM5O3JlIGV4cGxpY2l0bHkgKm5vdCogaW5pdGlhbGl6aW5nIHRoZSBwYWdlIGNvdW50IGZvciB0aGlzIHR5cGUsIHdoZXJlYXMgYmVmb3JlIGl0IHdvdWxkIGhhdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLCBzcGVjaWZpY2FsbHksIGhvdyB0aGlzIGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIEkgdGhpbmsgSSYjMzk7bGwganVtcCBkaXJlY3RseSB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgbGluZXMgOTkwLTEwMzAgdG8gZ2FpbiBtb3JlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGFuZ2UgaXMgZXNzZW50aWFsIHRvIGVuc3VyaW5nIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHQgKiB0aGUgZmxhZyBhcyB3ZSBhcmUgc3RpbGwgaW5pdGlhbGl6aW5nIHRoZSBwYWdlcy5cbiA5OTE6XHRcdCAqL1xuIDk5MjpcdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGFnZSk7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKlxuIDk5NTpcdFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVx1MDAzZWxydSB3aXRoIGEgLVx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxuIDk5NjpcdFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcbiA5OTc6XHRcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cbiA5OTg6XHRcdCAqL1xuIDk5OTpcdFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuMTAwMDpcdFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbjEwMDE6XHRcbjEwMDI6XHRcdC8qXG4xMDAzOlx0XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuMTAwNDpcdFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbjEwMDU6XHRcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbjEwMDY6XHRcdCAqL1xuMTAwNzpcdFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4xMDA4Olx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuMTAwOTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4xMDEwOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4xMDExOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbjEwMTI6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDEzOlx0XHRcdGJyZWFrO1xuMTAxNDpcdFxuMTAxNTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4xMDE2Olx0XHRcdGJyZWFrO1xuMTAxNzpcdFx0fVxuMTAxODpcdH1cbjEwMTk6XHRcbjEwMjA6XHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbjEwMjI6XHR7XG4xMDIzOlx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTAyNDpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTAyNTpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDI2Olx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDI3Olx0I2VuZGlmXG4xMDI4Olx0XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuMTAyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIGFuZCBpdCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlzIGludm9sdmVkLCBhbmQgd2UgYXJlIHdvcmtpbmcgZGlyZWN0bHkgb24gYHBhZ2VgIHVzaW5nIGEgYHRlbXBsYXRlYC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBtb2RpZnlpbmcgYHRlbXBsYXRlYCAod2hpY2ggaXMgcGFzc2VkIGJ5IHBvaW50ZXIhKSBjaGFuZ2VzIHRoZSBzaGFyZWQgdGVtcGxhdGUuIEluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdGhlIGBwZm5gIGluY3JlbWVudHMgYW5kIHVwZGF0ZXMgYHRlbXBsYXRlYCBkdXJpbmcgaXRlcmF0aW9ucywgd2hpY2ggaXMgdGhlbiBjb3BpZWQgdG8gYHBhZ2VgIGluIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIGl0IGxvb2tzIGxpa2UgYSByZXNvdW5kaW5nIFlFUy4gVGhpcyBpc24mIzM5O3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGxvZ2dpbmc7IGl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIChgbW0vbW1faW5pdC5jYCksIGFuZCBhZmZlY3RpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0dWZmIGxpa2UgYG1lbWNweV9mbHVzaGNhY2hlYCAod2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGApIGFuZCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYXMgd2VsbC4gVGhpcyBpbXBhY3RzIERBWCwgcG1lbSwgdGVzdF9obW0gKHZpcnR1YWwgZGV2aWNlIGZvciB0ZXN0aW5nIEhNTSAvIFpPTkVfREVWSUNFKSwgcDJwZG1hLCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGFyZWFzLgoKSW1wb3J0YW50bHksIGBaT05FX0RFVklDRWAgbWVtb3J5ICpjYW4qIGJlIHVzZWQgYW5kIHRlc3RlZCBpbiBRRU1VISBXZSBjYW4gZW11bGF0ZSBwZXJzaXN0ZW50IG1lbW9yeSAoTlZESU1NL3BtZW0pIGFuZCBEQVggdXNpbmcgYC1kZXZpY2UgbnZkaW1tYCwgb3IgdGhyb3VnaCBkdW1teSBtb2R1bGVzIGxpa2UgYHRlc3RfaG1tLmtvYCBvciBgL2Rldi9kYXhgLiBQbHVzLCB0aGVyZSYjMzk7cyBhIHJlZmNvdW50IGNoYW5nZSBpbiBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgIChmcm9tIDEgdG8gMCksIGRpcmVjdGx5IGFsdGVyaW5nIHBhZ2UgbGlmZWN5Y2xlIGJlaGF2aW9yLiBGdXJ0aGVybW9yZSwgdGhlIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgNC84LzE2LzMyLzQ4LzY0LzgwLzk2LWJ5dGUgY29waWVzIGluIGBtZW1jcHlfZmx1c2hjYWNoZWAgYWZmZWN0IGNhbGxlcnMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgISBUaGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gV2Ugd2FudCBub24tZ2VuZXJpYywgbm9uLWhvdC1wYXRoLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6CgpJbiBgbW0vbW1faW5pdC5jYCwgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiB0YXJnZXQsIHdoaWNoIGlzIGV4cG9ydGVkLiBOb3RlIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYW5kIGBfX2luaXRfem9uZV9kZXZpY2VfcGFnZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9tbV9pbml0LmNgLCBzbyB3aWxsIG5vdCBiZSBmdXp6ZWQgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQuCgpJbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIHdlIGhhdmUgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBJdCBsb29rcyB0byBiZSBhbiBBU00gZnVuY3Rpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGNhbiBiZSBjYWxsZWQuCgpXaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucz8gV2Ugc2hvdWxkIGFsc28gY2hlY2sgYW55IGNhbGxlcnMgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSXQgbG9va3MgbGlrZSBgbWVtcmVtYXBfcGFnZXNgIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaW4gYG1tL21lbXJlbWFwLmNgIGNhbGwgaXQsIHNvIGxldCYjMzk7cyBjaGVjayB0aGVyZSB0b28sIGFuZCBhbHNvIGluIHJlbGF0ZWQgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlfG1lbXJlbWFwX3BhZ2VzfGRldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcmVtYXAuYz0xNz1zdGF0aWMgREVGSU5FX1hBUlJBWShwZ21hcF9hcnJheSk7XG4tLVxubW0vbWVtcmVtYXAuYy0xOS0vKlxubW0vbWVtcmVtYXAuYzoyMDogKiBUaGUgbWVtcmVtYXAoKSBhbmQgbWVtcmVtYXBfcGFnZXMoKSBpbnRlcmZhY2VzIGFyZSBhbHRlcm5hdGVseSB1c2VkXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxubW0vbWVtcmVtYXAuYzoyMzogKiBtZW1yZW1hcCgpIGNhbiBtYXAgaW5kaXZpZHVhbCBQQUdFX1NJWkUgcGFnZXMuIG1lbXJlbWFwX3BhZ2VzKCkgY2FuXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXG5tbS9tZW1yZW1hcC5jLTI2LSAqXG4tLVxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0xMzEtXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcbm1tL21lbXJlbWFwLmMtMTMzLXtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL21tX2luaXQuYz0xMDU1PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDkyLVxubW0vbW1faW5pdC5jOjEwOTM6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21tX2luaXQuYy0xMDk0LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDQ9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKlxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjI6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBNYXBwaW5nIEludmVzdGlnYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIG1lbW9yeSBtYXBwaW5nIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMsIGJlY2F1c2UgSSBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIG92ZXJsb29rIHNvbWV0aGluZyBpbiB0aGlzIGFyZWEuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIGZ1bmN0aW9uLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGRlZmluaXRpb24gZm9yIGBfX21lbWNweV9mbHVzaGNhY2hlYCBjYW4gYmUgZm91bmQ7IHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHRoZSBjYWNoZSBiZWhhdmlvciBkdXJpbmcgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucywgYW5kIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgbXkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjg0OnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyMy1cdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyNDpcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjUtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI5LVx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEzMDpcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMS1cdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0MC1cdGNhc2UgOTY6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7IGJyZWFrO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTQxOlx0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDItXHR9XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtNzktXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0NC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1bmN0aW9uIElubGluaW5nIGFuZCBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHdlJiMzOTtyZSBhdCB3aXRoIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbmxpbmluZyBzdGF0dXMgb2YgYSBmZXcga2V5IGZ1bmN0aW9ucy4gUmlnaHQsIGBtZW1jcHlfZmx1c2hjYWNoZWAgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgIC0gYm90aCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBtZWFuaW5nIHRoZSBjb21waWxlciAqc2hvdWxkKiBpbmxpbmUgdGhlbS4gR29vZC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgLSBib3RoIGFyZSBgc3RhdGljYCBzbyBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIGFsc28gbGVzcyBsaWtlbHkgdG8gY29udHJpYnV0ZSB0byBjb2RlIGJsb2F0LgoKTm93LCBmb3IgdGhvc2UgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhlaXIgbG9jYWwgY29tcGlsYXRpb24gdW5pdCAtIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGFrZXMgem9uZSwgc3RhcnQgUEZOLCBudW1iZXIgb2YgcGFnZXMsIGFuZCBwYWdlIG1hcCBhcyBwYXJhbWV0ZXJzLiBJbnRlcmVzdGluZy4gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIC0gdGFrZSBhIHBhZ2UgbWFwIGFuZCBlaXRoZXIgYSBub2RlIElEIG9yIGRldmljZSBzdHJ1Y3QgcmVzcGVjdGl2ZWx5LgoKTmV4dCB1cCwgSSBuZWVkIHRvIGtub3cgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhY3RpdmF0ZWQuIFRpbWUgdG8gZGlnIGludG8gYG1tL01ha2VmaWxlYCBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tX2luaXQuY2AgYW5kIGBtZW1yZW1hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX2luaXRcXC5vfG1lbXJlbWFwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZTo1NTpcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxubW0vTWFrZWZpbGUtNTYtXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbi0tXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgJiM0Mzs9IHBlcmNwdS1zdGF0cy5vXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSAmIzQzOz0gaG1tLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGV2aWNlIFpvbmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYXAgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgZGV2aWNlIHpvbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1tL21tX2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMuIE5vdywgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdpbGwgYmUgdGhlIGtleS4gSWYgaXQmIzM5O3MgcHJlc2VudCBhbmQgZ3VhcmRpbmcgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgdGhlbiBJJiMzOTtsbCBrbm93IHRoYXQgdGhlIGRldmljZSB6b25lIGluaXRpYWxpemF0aW9uIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBldmVuIGdldHMgY2FsbGVkLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgYW5kIGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHVuY29uZGl0aW9uYWxseSBleGVjdXRlZCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCB3aXRoIGRlYnVnZ2luZyBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICYjNDM7PSBwZXJjcHUtc3RhdHMub1xubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IG1lbXJlbWFwLm9cbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGhtbS5vXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz03MTA9c3RhdGljIHZvaWQgX19tZW1pbml0IHJlc2l6ZV9wZ2RhdF9yYW5nZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyMS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NzIyOiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzIzLXN0YXRpYyB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbW1faW5pdC5jPTY3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cbi0tXG5tbS9tbV9pbml0LmMtNjc5LVxubW0vbW1faW5pdC5jOjY4MDojaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIHx8IGRlZmluZWQoQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQpXG5tbS9tbV9pbml0LmMtNjgxLXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmM9ODQ3PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuYy04NTgtXG5tbS9tbV9pbml0LmM6ODU5OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21tX2luaXQuYy04NjAtXHQvKlxuLS1cbm1tL21tX2luaXQuYy04OTEtXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xubW0vbW1faW5pdC5jOjg5MjojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtODkzLVx0XHRcdGlmICh6b25lID09IFpPTkVfREVWSUNFKVxuLS1cbm1tL21tX2luaXQuYz05NDA9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTk3Ni1cbm1tL21tX2luaXQuYzo5Nzc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vbW1faW5pdC5jLTk3OC1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vcGFnZV9hbGxvYy5jPTI0NT1jaGFyICogY29uc3Qgem9uZV9uYW1lc1tNQVhfTlJfWk9ORVNdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yNTYtXHQgXCYjMzQ7TW92YWJsZVwmIzM0Oyxcbm1tL3BhZ2VfYWxsb2MuYzoyNTc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vcGFnZV9hbGxvYy5jLTI1OC1cdCBcJiMzNDtEZXZpY2VcJiMzNDssXG4tLVxubW0vdm1zdGF0LmM9MTE1Nj1pbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3Ztc3RhdC5jLTExODQtXG5tbS92bXN0YXQuYzoxMTg1OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL3Ztc3RhdC5jLTExODYtI2RlZmluZSBURVhUX0ZPUl9ERVZJQ0UoeHgsIHl5KSBbeHgjI19ERVZJQ0VdID0geXkgXCYjMzQ7X2RldmljZVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRGV2aWNlIE1lbW9yeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9tbV9pbml0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhvc2UgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmRpdGlvbmFscyBzdXJyb3VuZGluZyBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCBmbGFncyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHk7IGFueXRoaW5nIHJlbGF0ZWQgdG8gem9uZSBkZXZpY2VzIGlzIG9mdGVuIGNyaXRpY2FsIGZvciBtb2Rlcm4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaGV0ZXJvZ2VuZW91cyBtZW1vcnkgYXJjaGl0ZWN0dXJlcy4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGF0IGV4YWN0bHkgaXMgYENPTkZJR19aT05FX0RFVklDRWAgYWxsIGFib3V0PyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRob3NlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4KClJpZ2h0LCB0aW1lIHRvIGNvbnN1bHQgYG1tL0tjb25maWdgLiBMZXQmIzM5O3Mgc2tpcCB0byB0aGUgcmVsZXZhbnQgcGFydCwgYXJvdW5kIGxpbmUgMTIyNS4gQWhhISBJIHNlZSBpdDoKCmBgYApjb25maWcgWk9ORV9ERVZJQ0UKCWJvb2wgJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0JiMzNDsKCWRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRQoJc2VsZWN0IFhBUlJBWV9NVUxUSQpgYGAKCiYjMzQ7RGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQsJiMzNDsgdGhhdOKAmXMgd2hhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCwgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcGVyc2lzdGVudCBtZW1vcnksIGhvc3QtbWFuYWdlZCBtZW1vcnksIGV0Yy4gVGhlIGBkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVgIGxpbmUgaXMga2V5LiBPa2F5LCBzbyBkZXZpY2UgbWVtb3J5IGlzICpkZXBlbmRlbnQqIG9uIGhvdCByZW1vdmFsIHN1cHBvcnQuIE1ha2VzIHNlbnNlLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGR5bmFtaWNhbGx5IGFkZCBhbmQgcmVtb3ZlIHRoZXNlIGRldmljZXMuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHdoYXQgKnRoYXQqIGRlcGVuZHMgb24gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgTUVNT1JZX0hPVFJFTU9WRWAmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIG5leHQuIFRoaXMgaXMgZ29pbmcgdG8gdGVsbCBtZSB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgdHJ1ZSBmb3IgdGhpcyBlbnRpcmUgZnVuY3Rpb25hbGl0eSB0byBiZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4MD1lbmRjaG9pY2Vcbm1tL0tjb25maWctNTgxLVxubW0vS2NvbmZpZzo1ODI6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTgzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1ODIuIFRoYXQgcmVnaW9uIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb24gb3IgYSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gYXNwZWN0LCBnaXZlbiB0aGUgZmlsZSYjMzk7cyBuYW1lLiBJJiMzOTttIGhvcGluZyBpdCB0b3VjaGVzIG9uIHRoZSBhcmVhIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4OiBgY29uZmlnYCwgYGJvb2xgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgaGVscGAsIGFuZCBzbyBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBQZXJoYXBzIGl0IGRlc2NyaWJlcyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gdGhhdCBsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGluc2lnaHRzIGFyZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxuIDU3MTpcdFx0ICBob3RwbHVnIG1lbW9yeSBpbnRvIFpPTkVfTU9WQUJMRS4gVGhpcyBtZW1vcnkgd2lsbCBnZW5lcmFsbHlcbiA1NzI6XHRcdCAgbm90IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cbiA1NzM6XHRcbiA1NzQ6XHRcdCAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlIGFkbWluIGtub3dzIHN1ZmZpY2llbnRcbiA1NzU6XHRcdCAgWk9ORV9OT1JNQUwgbWVtb3J5IGlzIGF2YWlsYWJsZSB0byBkZXNjcmliZSBob3RwbHVnIG1lbW9yeSxcbiA1NzY6XHRcdCAgb3RoZXJ3aXNlIGhvdHBsdWcgbWVtb3J5IG1heSBmYWlsIHRvIG9ubGluZS4gRm9yIGV4YW1wbGUsXG4gNTc3Olx0XHQgIHN1ZmZpY2llbnQga2VybmVsLWNhcGFibGUgbWVtb3J5IChaT05FX05PUk1BTCkgbXVzdCBiZVxuIDU3ODpcdFx0ICBhdmFpbGFibGUgdG8gYWxsb2NhdGUgcGFnZSBzdHJ1Y3RzIHRvIGRlc2NyaWJlIFpPTkVfTU9WQUJMRS5cbiA1Nzk6XHRcbiA1ODA6XHRlbmRjaG9pY2VcbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MzpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODU6XHRcbiA1ODY6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODc6XHRcdGRlZl9ib29sIHlcbiA1ODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODk6XHRcbiA1OTA6XHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG4gNTkxOlx0XG4gNTkyOlx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4gNTkzOlx0ICAgICAgIGJvb2xcbiA1OTQ6XHRcbiA1OTU6XHQjIEhlYXZpbHkgdGhyZWFkZWQgYXBwbGljYXRpb25zIG1heSBiZW5lZml0IGZyb20gc3BsaXR0aW5nIHRoZSBtbS13aWRlXG4gNTk2Olx0IyBwYWdlX3RhYmxlX2xvY2ssIHNvIHRoYXQgZmF1bHRzIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgdXNlciBhZGRyZXNzXG4gNTk3Olx0IyBzcGFjZSBjYW4gYmUgaGFuZGxlZCB3aXRoIGxlc3MgY29udGVudGlvbjogc3BsaXQgaXQgYXQgdGhpcyBOUl9DUFVTLlxuIDU5ODpcdCMgRGVmYXVsdCB0byA0IGZvciB3aWRlciB0ZXN0aW5nLCB0aG91Z2ggOCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLlxuIDU5OTpcdCMgQVJNJiMzOTtzIGFkanVzdF9wdGUgKHVudXNlZCBpZiBWSVBUKSBkZXBlbmRzIG9uIG1tLXdpZGUgcGFnZV90YWJsZV9sb2NrLlxuIDYwMDpcdCMgUEEtUklTQyA3eHh4JiMzOTtzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxuIDYwMTpcdCMgU1BBUkMzMiBhbGxvY2F0ZXMgbXVsdGlwbGUgcHRlIHRhYmxlcyB3aXRoaW4gYSBzaW5nbGUgcGFnZSwgYW5kIHRoZXJlZm9yZVxuIDYwMjpcdCMgYSBwZXItcGFnZSBsb2NrIGxlYWRzIHRvIHByb2JsZW1zIHdoZW4gbXVsdGlwbGUgdGFibGVzIG5lZWQgdG8gYmUgbG9ja2VkXG4gNjAzOlx0IyBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIGNvcHlfcGFnZV9yYW5nZSgpKS5cbiA2MDQ6XHQjIERFQlVHX1NQSU5MT0NLIGFuZCBERUJVR19MT0NLX0FMTE9DIHNwaW5sb2NrX3QgYWxzbyBlbmxhcmdlIHN0cnVjdCBwYWdlLlxuIDYwNTpcdCNcbiA2MDY6XHRjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcbiA2MDc6XHRcdGRlZl9ib29sIHlcbiA2MDg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFNNUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ4MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgRGVwZW5kZW5jeSBXZWIgb2YgTUVNT1JZX0hPVFBMVUcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW4uIGBNRU1PUllfSE9UUExVR2DigKYgd2hhdCYjMzk7cyB0aGUgbGF5IG9mIHRoZSBsYW5kPyBUaW1lIHRvIHVucmF2ZWwgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbmV2ZXIganVzdCBvbmUgdGhpbmcsIGlzIGl0PyBJdOKAmXMgYSB3aG9sZSBlY29zeXN0ZW0uIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucywgZmVhdHVyZXMsIG9yIHVuZGVybHlpbmcgcGllY2VzIG9mIHRoZSBrZXJuZWwgdGhpcyB0aGluZyBsZWFucyBvbi4gVGhpcyBob3RwbHVnIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGlzIGxpa2VseSBpbnRlcnR3aW5lZCB3aXRoIHNldmVyYWwgb3RoZXIgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGFyZSBiZWZvcmUgSSBjYW4gZnVsbHkgZ3Jhc3AgaXRzIGJlaGF2aW9yLCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBhbmQgaG93IHRvIHVzZSBpdCBvcHRpbWFsbHkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUdcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTA9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MTMtIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUxNDptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxNS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50LiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTAuIEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseSwgc28gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgbG9naWMgZGVmaW5pbmcgdGhlIHJlbGV2YW50IG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBvciBwZXJoYXBzIGV2ZW4gY29uZGl0aW9uYWwgaW5jbHVzaW9ucyBvZiBvdGhlciBLY29uZmlnIGZyYWdtZW50cy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgYSBkZWZpbml0aW9uIG9mIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoaW4gYW4gYGlmYCBibG9jaywgb3IgbWF5YmUgYSBtZW51IHN0cnVjdHVyZS4gSSYjMzk7bSBicmFjaW5nIG15c2VsZiBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBvdGVudGlhbGx5IHNwYW5uaW5nIG11bHRpcGxlIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN5bnRheCwgbG9va2luZyBmb3IgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgZW5kLXVzZXIgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIDUxMTpcdFx0Ym9vbFxuIDUxMjpcdFxuIDUxMzpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUxNDpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MTU6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MTY6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTE3Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTE4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTE5Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTIwOlx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUyMTpcdFxuIDUyMjpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTIzOlx0XG4gNTI0Olx0Y2hvaWNlXG4gNTI1Olx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUyNjpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTI3Olx0XHRoZWxwXG4gNTI4Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUyOTpcdFxuIDUzMDpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuIDUzMTpcdFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcbiA1MzI6XHRcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXG4gNTMzOlx0XHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxuIDUzNDpcdFxuIDUzNTpcdFx0ICBUaGUgZGVmYXVsdCBpcyAmIzM5O29mZmxpbmUmIzM5Oy5cbiA1MzY6XHRcbiA1Mzc6XHRcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXG4gNTM4Olx0XHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXG4gNTM5Olx0XHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXG4gNTQwOlx0XHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxuIDU0MTpcdFxuIDU0MjpcdFx0ICBFeGFtcGxlIGtlcm5lbCB1c2FnZSB3b3VsZCBiZSBwYWdlIHN0cnVjdHMgYW5kIHBhZ2UgdGFibGVzLlxuIDU0MzpcdFxuIDU0NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNTQ1Olx0XG4gNTQ2Olx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbiA1NDc6XHRcdGJvb2wgXCYjMzQ7b2ZmbGluZVwmIzM0O1xuIDU0ODpcdFx0aGVscFxuIDU0OTpcdFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBvcnRhbnQgb25lczogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhlc2UgYXJlIGNvcmUgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkgYW5kIGRldmljZXMsIGFuZCBhbnkgc3VidGxlIGNoYW5nZSBoZXJlIGNhbiBoYXZlIHJpcHBsZSBlZmZlY3RzLiBBbmQsIGFoYSwgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgLSBpbnRlcmVzdGluZyB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IHRoZSBiaWcgdGhyZWU6IHg4Nl82NCwgQVJNNjQsIGFuZCBQUEMuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBpbiB0ZXJtcyBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3JzLgoKUmlnaHQsIHdpdGggYFpPTkVfREVWSUNFYCBpbiBmb2N1cywgbGV04oCZcyBtYWtlIHN1cmUgd2UmIzM5O3ZlIHByb3Blcmx5IHRlc3RlZCB0aGUgZHJpdmVycyBhbmQgdXNlcnMuIExldCYjMzk7cyBsaXN0IHRob3NlIG91dDogYERFVklDRV9QUklWQVRFYCwgYFRFU1RfSE1NYCwgYEZTX0RBWGAsIGBERVZfREFYYCwgYW5kIG9mIGNvdXJzZSwgYFg4Nl82NGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgem9uZSBkZXZpY2UgYXJlIHdlbGwtdW5kZXJzdG9vZC4gRmluYWxseSwgdGltZSB0byBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFRFU1RfSE1NYC4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMxNz1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzMyNC1cbmxpYi9LY29uZmlnLmRlYnVnOjMzMjU6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyBLY29uZmlnIGZvciBEZWJ1Z2dpbmcgT3B0aW9ucyoqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRlYnVnZ2luZyBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIGtub3cgdGhhdCBmaWxlIHVzdWFsbHkgaG91c2VzIGEgbG90IG9mIHRoZSBjb3JlIGRlYnVnZ2luZyBzZXR0aW5ncywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDMzMjUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhhdCBhcmVhIGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGRlYnVnZ2luZyBmZWF0dXJlIG9yIGEgcmVsZXZhbnQgZ3JvdXBpbmcgb2Ygb3B0aW9ucy4gTWlnaHQgYmUgYSBzcGVjaWZpYyBzdWJzeXN0ZW0mIzM5O3MgZGVidWcgb3B0aW9ucywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBnZW5lcmFsLiBUaW1lIHRvIGdldCB0aGUgSURFIGZpcmVkIHVwIGFuZCBoYXZlIGEgbG9vazsgdGhlIGRldGFpbHMgd2lsbCByZXZlYWwgdGhlbXNlbHZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMDpcdFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cbjMzMjE6XHRcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxuMzMyMjpcdFxuMzMyMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMyNDpcdFxuMzMyNTpcdGNvbmZpZyBURVNUX0hNTVxuMzMyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4zMzI3Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4zMzI4Olx0XHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG4zMzI5Olx0XHRzZWxlY3QgSE1NX01JUlJPUlxuMzMzMDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMzMzMTpcdFx0aGVscFxuMzMzMjpcdFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cbjMzMzM6XHRcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuMzMzNDpcdFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXG4zMzM1Olx0XG4zMzM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzM3Olx0XG4zMzM4Olx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xuMzMzOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBmcmVlaW5nIHBhZ2VzXCYjMzQ7XG4zMzQwOlx0XHRoZWxwXG4zMzQxOlx0XHQgIFRlc3QgdGhhdCBhIG1lbW9yeSBsZWFrIGRvZXMgbm90IG9jY3VyIGR1ZSB0byBhIHJhY2UgYmV0d2VlblxuMzM0MjpcdFx0ICBmcmVlaW5nIGEgYmxvY2sgb2YgcGFnZXMgYW5kIGEgc3BlY3VsYXRpdmUgcGFnZSByZWZlcmVuY2UuXG4zMzQzOlx0XHQgIExvYWRpbmcgdGhpcyBtb2R1bGUgaXMgc2FmZSBpZiB5b3VyIGtlcm5lbCBoYXMgdGhlIGJ1ZyBmaXhlZC5cbjMzNDQ6XHRcdCAgSWYgdGhlIGJ1ZyBpcyBub3QgZml4ZWQsIGl0IHdpbGwgbGVhayBnaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZFxuMzM0NTpcdFx0ICBwcm9iYWJseSBPT00geW91ciBzeXN0ZW0uXG4zMzQ2Olx0XG4zMzQ3Olx0Y29uZmlnIFRFU1RfRlBVXG4zMzQ4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgaW4ga2VybmVsIHNwYWNlXCYjMzQ7XG4zMzQ5Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0tFUk5FTF9GUFVfU1VQUE9SVCBcdTAwMjZcdTAwMjYgIUtDT1ZfSU5TVFJVTUVOVF9BTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgYXMgYSBxdWljayBtZW50YWwgcnVuZG93bjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFzcGVjdHMgc3RyYWlnaHQuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBhIGZldyBrZXkgZmVhdHVyZXM6IGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgLiBUaG9zZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB3ZSYjMzk7cmUgYWltaW5nIGZvci4KClJpZ2h0LCBgRlNfREFYYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlIGNoZWNrIHdoZXJlIHRoYXTigJlzIGRlZmluZWQuIEVpdGhlciBpdCYjMzk7cyBpbiB0aGUgc3RhbmRhcmQgYGZzL0tjb25maWdgIGZpbGUgb3IsIGRlcGVuZGluZyBvbiBob3cgdGhleeKAmXZlIHN0cnVjdHVyZWQgdGhlIGRyaXZlcnMgZm9yIHRoaXMgcGFydGljdWxhciBzZXR1cCwgaXQgbWlnaHQgYmUgaGlkaW5nIGluIGBkcml2ZXJzL2RheC9LY29uZmlnYC4gVGltZSB0byBnZXQgdGhlIEtjb25maWcgZmlsZXMgb3BlbiBhbmQgY29uZmlybSB0aGUgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19EQVhcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01Nj1lbmRpZiAjIEJMT0NLXG5mcy9LY29uZmlnLTU3LVxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXG5mcy9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25jZXJuKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1OC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHByb2JhYmx5IGRlZmluZXMgc29tZSBjcml0aWNhbCBmaWxlIHN5c3RlbSBvcHRpb25zLiBJdCBtaWdodCBiZSBhIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYSBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgYSBoZWFkYWNoZSwgYnV0IHBpbnBvaW50aW5nIHRoYXQgbGluZSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLCBpZiBhbnkuIExpa2VseSB0aGlzIGlzIGEgYnVpbGQgZmxhZyBvciBhIGZlYXR1cmUgZmxhZy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZGVidWcgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFxuICA1NjpcdGVuZGlmICMgQkxPQ0tcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgRlNfREFYXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAgNjE6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAgNjI6XHRcdHNlbGVjdCBGU19JT01BUFxuICA2MzpcdFx0c2VsZWN0IERBWFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBEaXJlY3QgQWNjZXNzIChEQVgpIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy5cbiAgNjY6XHRcdCAgSWYgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0cyBEQVggYW5kIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIERBWCxcbiAgNjc6XHRcdCAgdGhlbiB5b3UgY2FuIGF2b2lkIHVzaW5nIHRoZSBwYWdlY2FjaGUgdG8gYnVmZmVyIEkvT3MuICBUdXJuaW5nXG4gIDY4Olx0XHQgIG9uIHRoaXMgb3B0aW9uIHdpbGwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBEQVguXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxuICA3MTpcdFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXG4gIDcyOlx0XHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxuICA3MzpcdFxuICA3NDpcdFx0XHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxuICA3NTpcdFx0XHRcdC0tbW9kZT1mc2RheCAtLW1hcD1tZW1cbiAgNzY6XHRcbiAgNzc6XHRcdCAgU2VlIHRoZSAmIzM5O2NyZWF0ZS1uYW1lc3BhY2UmIzM5OyBtYW4gcGFnZSBmb3IgZGV0YWlscyBvbiB0aGUgb3ZlcmhlYWQgb2ZcbiAgNzg6XHRcdCAgLS1tYXA9bWVtOlxuICA3OTpcdFx0ICBodHRwczovL2RvY3MucG1lbS5pby9uZGN0bC11c2VyLWd1aWRlL25kY3RsLW1hbi1wYWdlcy9uZGN0bC1jcmVhdGUtbmFtZXNwYWNlXG4gIDgwOlx0XG4gIDgxOlx0XHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcbiAgODI6XHRcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcbiAgODM6XHRcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxuICA4NDpcdFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODU1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBERVZfREFYYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiBob3cgYERFVl9EQVhgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL2RheC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGZlYXR1cmUgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBob3cgaXQmIzM5O3MgcHJlc2VudGVkIGFzIGFuIG9wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAgb3Igd2hhdCBvdGhlciBvcHRpb25zIGFyZSBwcm92aWRlZC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGxheSBvdXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIHBlcnNpc3RlbnQgbWVtb3J5IHN1cHBvcnQgb3IgYSBzcGVjaWZpYyBmaWxlc3lzdGVtKSwgYW5kIGFueSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzLCBJIGNhbiBtb3JlIGVmZmljaWVudGx5IHRyb3VibGVzaG9vdCBpc3N1ZXMgb3IgY29uZmlybSBpdHMgcHJlc2VuY2UgZHVyaW5nIGEgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZfREFYXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWc9Nj1pZiBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNy1cbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERBWCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBEQVggY29uZmlndXJhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGRyaXZlciwgZGVmaW5pbmcgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgZmlsZSB3aWxsIGxpa2VseSB0ZWxsIG1lIGhvdyBEQVggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIGF0IGJ1aWxkIHRpbWUsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIHNwZWNpZmljcyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgREFYXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxuICAgNTpcdFxuICAgNjpcdGlmIERBWFxuICAgNzpcdFxuICAgODpcdGNvbmZpZyBERVZfREFYXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFN1cHBvcnQgcmF3IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCAocGVyc2lzdGVuY2UsIGJhbmR3aWR0aCxcbiAgMTM6XHRcdCAgbGF0ZW5jeS4uLikgbWVtb3J5IHZpYSBhbiBtbWFwKDIpIGNhcGFibGUgY2hhcmFjdGVyXG4gIDE0Olx0XHQgIGRldmljZS4gIFBsYXRmb3JtIGZpcm13YXJlIG9yIGEgZGV2aWNlIGRyaXZlciBtYXkgaWRlbnRpZnkgYVxuICAxNTpcdFx0ICBwbGF0Zm9ybSBtZW1vcnkgcmVzb3VyY2UgdGhhdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIHRoZVxuICAxNjpcdFx0ICBiYXNlbGluZSBtZW1vcnkgcG9vbC4gIE1hcHBpbmdzIG9mIGEgL2Rldi9kYXhYLlkgZGV2aWNlIGltcG9zZVxuICAxNzpcdFx0ICByZXN0cmljdGlvbnMgdGhhdCBtYWtlIHRoZSBtYXBwaW5nIGJlaGF2aW9yIGRldGVybWluaXN0aWMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIERFVl9EQVhfUE1FTVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gTElCTlZESU1NIFx1MDAyNlx1MDAyNiBOVkRJTU1fREFYIFx1MDAyNlx1MDAyNiBERVZfREFYXG4gIDIyOlx0XHRkZWZhdWx0IERFVl9EQVhcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU3VwcG9ydCByYXcgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5LiAgTm90ZSB0aGF0IHRoaXNcbiAgMjU6XHRcdCAgZHJpdmVyIGNvbnN1bWVzIG1lbW9yeSByYW5nZXMgYWxsb2NhdGVkIGFuZCBleHBvcnRlZCBieSB0aGVcbiAgMjY6XHRcdCAgbGlibnZkaW1tIHN1Yi1zeXN0ZW0uXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFNheSBNIGlmIHVuc3VyZVxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBERVZfREFYX0hNRU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MTcKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN5bWJvbHMgYXJlIGluIHBsYWNlLiBDaGVja2luZyBgRm9jdXNTeW1ib2xzYCwgSSBzZWUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgLCBhbmQgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVxdWlyZW1lbnRzOiBJIG5lZWQgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYEZTX0RBWGAgZW5hYmxlZC4gWWVwLCBhbGwgdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2AgYXJlIGluIG9yZGVyLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gd29yayBhcyBpbnRlbmRlZC4gVGhlIGxpc3RlZCBgRm9jdXNTeW1ib2xzYCBhcmUgY29uc2lzdGVudC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggYWxpZ25zIHdpdGggdGhlIHNjb3BlIG9mIHRoaXMgd29yayBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgc3VjaCBsb3ctbGV2ZWwgYXNwZWN0cyBvZiB0aGUga2VybmVsLgoKVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBjb25jaXNlIGJ1dCBhY2N1cmF0ZTogSXQmIzM5O3MgcmVmYWN0b3JpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLCB1dGlsaXppbmcgcGFnZSB0ZW1wbGF0ZXMgYW5kIG5vbi10ZW1wb3JhbCBjb3BpZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIHdpdGhpbiBgbW0vbW1faW5pdC5jYC4gSXQgYWxzbyB0b3VjaGVzIHVwb24gcmVmY291bnQgaW5pdGlhbGl6YXRpb24gZm9yIGBNRU1PUllfREVWSUNFX0ZTX0RBWGAgcGFnZXMgYW5kIG9wdGltaXplcyBmaXhlZC1zaXplIGNhY2hlLWZsdXNoaW5nIGNvcGllcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBUaGUgY2hhbmdlcyBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IGBaT05FX0RFVklDRWAgcGFnZXMgYXJlIHNldCB1cCwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIERBWCwgTlZESU1NLCBvciBITU0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGVmZmljaWVudCwgZXNwZWNpYWxseSBpbiB0aGVzZSBlbWVyZ2luZyB1c2UgY2FzZXMuCgpHaXZlbiBhbGwgb2YgdGhpcywgZXZlcnl0aGluZyBzZWVtcyBzb2xpZCBhbmQgd2VsbC12ZXJpZmllZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBvciBhcmVhcyBvZiBjb25jZXJuLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXRjaCBpcyByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLUxlYWsgQW5hbHlzaXMgKEtNU0FOKTpcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpYCBmcm9tIGEgc3RydWN0IHBhZ2UgdGhhdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgX19pbml0X3NpbmdsZV9wYWdlKClgICh3aGljaCBpbnZva2VzIGBtbV96ZXJvX3N0cnVjdF9wYWdlKClgKS5cbi0gQWxsIGJ5dGVzIGluY2x1ZGluZyBwYWRkaW5nIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHRoZSBzdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgdGFyZ2V0cy5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBPdXQtb2YtYm91bmRzIC8gTWVtb3J5IENvcnJ1cHRpb24gQW5hbHlzaXMgKEtBU0FOKTpcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM4ZThlMDA2ZjU5NTNhMTNmMzE2N2IyZTRkOTRiNjVlOGI1NmFlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEyOjI1OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzLi44MzFkM2RkYTNiMzgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsMjQgJiM0Mzs4Miw3NyBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRQogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxCiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpOwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aWwgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1MzIgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1MzIgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1NjQgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfOChkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHsKLQkJc3dpdGNoIChjbnQpIHsKLQkJCWNhc2UgNDoKLQkJCQlhc20gKCYjMzQ7bW92bnRpbCAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHUzMiAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHUzMiAqKXNyYykpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgODoKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKXNyYykpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgMTY6Ci0JCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpIDogJiMzNDtyJiMzNDsoKih1NjQgKilzcmMpKTsKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogJiMzNDtyJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7Ci0JCQkJcmV0dXJuOwotCQl9CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQomIzQzO3sKJiM0MzsJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKQomIzQzOwkJcmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUgeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOgomIzQzOwkgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbAomIzQzOwkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0bwomIzQzOwkgKiBfX21lbWNweV9mbHVzaGNhY2hlKCkuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKGNudCkgewomIzQzOwljYXNlIDQ6ICBtb3ZudGlfNChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSAzMjogbW92bnRpXzMyKGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7IGJyZWFrOwomIzQzOwljYXNlIDY0OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7CiYjNDM7CWNhc2UgOTY6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7IGJyZWFrOwomIzQzOwlkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhazsKIAl9Ci0JX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKIH0KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWwKJiM0MzsvKgomIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weQomIzQzOyAqIHByaW1pdGl2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAomIzQzOwkJc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjY2NDBjNzUyMjgyMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI2NDQsMTIgJiM0MzsyNjQ0LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBTRUNUSU9OU19NQVNLICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQpOwogCXJldHVybiAobWRmLSZndDtmICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI4NzIsOSAmIzQzOzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQogfQogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZQomIzQzOyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYQomIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYQomIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsCiYjNDM7ICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuCiYjNDM7ICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcCiYjNDM7CSgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpCiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTEwMDAsMTMgJiM0MzsxMDAwLDkgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCXBhZ2UtJmd0O3pvbmVfZGV2aWNlX2RhdGEgPSBOVUxMOwogCiAJLyoKLQkgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkCi0JICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudAotCSAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLgotCSAqCi0JICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZQotCSAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyCi0JICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuCiYjNDM7CSAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlCiYjNDM7CSAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlCiYjNDM7CSAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC4KIAkgKi8KIAlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7CiAJY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKQEAgLTEwMjEsNiAmIzQzOzEwMTcsMTcgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzOwltZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3QKICAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG8KQEAgLTEwNTMsNiAmIzQzOzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCXVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLSZndDt2bWVtbWFwX3NoaWZ0OwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDYxLDEzICYjNDM7MTA3MCwyMyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKLQlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZSBzdGF0ZSBlc3RhYmxpc2hlZCBieQomIzQzOwkgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0IHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuCiYjNDM7CSAqLwomIzQzOwlwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOwomIzQzOwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKJiM0MzsJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzOwltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovCiYjNDM7CWZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykKJiM0MzsJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbiwKJiM0MzsJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiAJcHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTsKIH0KIApAQCAtMTA4Myw2ICYjNDM7MTEwMiw4IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwogCiAJaWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKQogCQlyZXR1cm47CkBAIC0xMDk3LDEwICYjNDM7MTExOCwyOSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCQlucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CiAJfQogCi0JZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlpZiAoIW5yX3BhZ2VzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUgZmlyc3QgcmVhbCBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVGhlIG5vcm1hbCBwYWdlLWluaXQgYW5kIHJlZmNvdW50IGhlbHBlcnMgbXVzdCBvcGVyYXRlIG9uCiYjNDM7CSAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuCiYjNDM7CSAqLwomIzQzOwlwZm4gPSBzdGFydF9wZm47CiYjNDM7CXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwlpZiAocGZuc19wZXJfY29tcG91bmQgIT0gMSkKJiM0MzsJCW1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsCiYjNDM7CQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7CiYjNDM7CXBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovCiYjNDM7CWZvciAoOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiYjNDM7CQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbiwKJiM0MzsJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOLXdvcnRoeSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLgoKQWxyaWdodCwgdGhlIHBhdGNoIGxvb2tzIGxpa2UgdGhpczoKCiogICBXZSYjMzk7cmUgYWRkaW5nIGlubGluZSBoZWxwZXIgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgKGBtb3ZudGlfNGAsIGBtb3ZudGlfOGAsIGV0Yy4pIHRvIGVuaGFuY2UgYG1lbWNweV9mbHVzaGNhY2hlYC4gV2UmIzM5O3JlIG9wdGltaXppbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBieSBpbmxpbmluZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbW92bnRpXypgKSBmb3IgZml4ZWQgc2l6ZXMgKDQsIDgsIDE2LCBldGMuIGJ5dGVzKS4gVGhlcmUmIzM5O3MgYWxzbyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIG1hY3JvIGRlZmluZWQgdGhhdCBjYWxscyB0aGlzIGBtZW1jcHlfZmx1c2hjYWNoZWAuCgoqICAgV2UgaGF2ZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBBZGRpbmcgYSBoZWxwZXIgYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB1cGRhdGluZyBgc2V0X3BhZ2VfbGlua3NgIHRvIHVzZSBpdC4KCiogICBJbiBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIHRoZXJlJiMzOTtzIGEgZmFsbGJhY2sgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IGRlZmluZWQ6IGl0IHVzZXMgYSByZWd1bGFyIGBtZW1jcHlgLgoKKiAgIE5vdywgaW4gYG1tL21tX2luaXQuY2AsIHdlIHNlZSBvcHRpbWl6YXRpb25zIGZvciBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzLiBUaGV5JiMzOTtyZSB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCB0ZW1wbGF0ZSBgc3RydWN0IHBhZ2VgLCBpbml0aWFsaXplZCBieSBjb3B5aW5nIGEgcHJlLWV4aXN0aW5nIGBzdHJ1Y3QgcGFnZWAgKGBwYWdlYCksIGFuZCB0aGVuIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgdGhpcyB0ZW1wbGF0ZSB0byBvdGhlciBgc3RydWN0IHBhZ2Vgcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBydWIgLSBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHN0cnVjdCBwYWdlYCByZXR1cm5lZCBieSBgcGZuX3RvX3BhZ2UocGZuKWAgKmlzIGZ1bGx5IGluaXRpYWxpemVkKiBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgYG1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgb3BlcmF0aW9uLiBUaGlzIGlzIGNydWNpYWwhCgpMZXQmIzM5O3Mgc2VlLi4uIHdlIGhhdmU6CgpgYGBjCnN0cnVjdCBwYWdlIHRlbXBsYXRlOwpzdHJ1Y3QgcGFnZSAqcGFnZTsKLi4uCnBmbiA9IGhlYWRfcGZuICYjNDM7IDE7CnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwpfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Cm1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKYGBgCgpTbywgYmVmb3JlIHRoZSBgbWVtY3B5YCBvZiB0aGUgYHBhZ2VgLCBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgcHJlcF9jb21wb3VuZF90YWlsYCBhbmQgYHNldF9wYWdlX2NvdW50YCBhcmUgY2FsbGVkIG9uIGl0LiBTbywgbGV0JiMzOTtzIHNlZSBob3cgYFpPTkVfREVWSUNFYCBzdHJ1Y3QgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IHVzZSBteSB0b29scyAoYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgKSB0byB0cmFjZSBob3cgdGhlIGBtZW1tYXBgIGFuZCBgWk9ORV9ERVZJQ0VgIHN0cnVjdCBwYWdlcyBhcmUgYWxsb2NhdGVkL2luaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2luaXRfem9uZV9kZXZpY2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9OTQwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy05NzctI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vbW1faW5pdC5jOjk3ODpzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG5tbS9tbV9pbml0LmMtOTc5LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4tLVxubW0vbW1faW5pdC5jPTEwNTU9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTEwODAtXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbm1tL21tX2luaXQuYzoxMDgxOlx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG5tbS9tbV9pbml0LmMtMTA4Mi1cdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tLVxubW0vbW1faW5pdC5jPTEwOTM9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTEzMC1cdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xubW0vbW1faW5pdC5jOjExMzE6XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbm1tL21tX2luaXQuYy0xMTMyLVx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL21tX2luaXQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSBwcm9ibGVtIGF0IGhhbmQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSBJIG5lZWQgdG8gc2NydXRpbml6ZSBsaWVzIHdpdGhpbiBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA5NzUgdG8gMTA0MC4gSSBrbm93IHRoaXMgZmlsZSBpbnRpbWF0ZWx5LCBzbyBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGxpa2VseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgcmFuZ2Ugb2Z0ZW4gZGVhbHMgd2l0aCBpbml0aWFsIHNldHVwcywgYm91bmRhcnkgY29uZGl0aW9uIHRlc3RzLCBvciBwZXJoYXBzIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLCBhbmQgdHJ5IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBwaWVjZXMgdGhhdCBhcmVuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgd2VlZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NzU6XHR9XG4gOTc2Olx0XG4gOTc3Olx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuIDk3ODpcdHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiA5Nzk6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuIDk4MDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4gOTgxOlx0e1xuIDk4MjpcdFxuIDk4MzpcdFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XG4gOTg0Olx0XG4gOTg1Olx0XHQvKlxuIDk4NjpcdFx0ICogTWFyayBwYWdlIHJlc2VydmVkIGFzIGl0IHdpbGwgbmVlZCB0byB3YWl0IGZvciBvbmxpbmluZ1xuIDk4NzpcdFx0ICogcGhhc2UgZm9yIGl0IHRvIGJlIGZ1bGx5IGFzc29jaWF0ZWQgd2l0aCBhIHpvbmUuXG4gOTg4Olx0XHQgKlxuIDk4OTpcdFx0ICogV2UgY2FuIHVzZSB0aGUgbm9uLWF0b21pYyBfX3NldF9iaXQgb3BlcmF0aW9uIGZvciBzZXR0aW5nXG4gOTkwOlx0XHQgKiB0aGUgZmxhZyBhcyB3ZSBhcmUgc3RpbGwgaW5pdGlhbGl6aW5nIHRoZSBwYWdlcy5cbiA5OTE6XHRcdCAqL1xuIDk5MjpcdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGFnZSk7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKlxuIDk5NTpcdFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVx1MDAzZWxydSB3aXRoIGEgLVx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxuIDk5NjpcdFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcbiA5OTc6XHRcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cbiA5OTg6XHRcdCAqL1xuIDk5OTpcdFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuMTAwMDpcdFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbjEwMDE6XHRcbjEwMDI6XHRcdC8qXG4xMDAzOlx0XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuMTAwNDpcdFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbjEwMDU6XHRcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbjEwMDY6XHRcdCAqL1xuMTAwNzpcdFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4xMDA4Olx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuMTAwOTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4xMDEwOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4xMDExOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbjEwMTI6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDEzOlx0XHRcdGJyZWFrO1xuMTAxNDpcdFxuMTAxNTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4xMDE2Olx0XHRcdGJyZWFrO1xuMTAxNzpcdFx0fVxuMTAxODpcdH1cbjEwMTk6XHRcbjEwMjA6XHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbjEwMjI6XHR7XG4xMDIzOlx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTAyNDpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTAyNTpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDI2Olx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDI3Olx0I2VuZGlmXG4xMDI4Olx0XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuMTAyOTpcdH1cbjEwMzA6XHRcbjEwMzE6XHQvKlxuMTAzMjpcdCAqIFdpdGggY29tcG91bmQgcGFnZSBnZW9tZXRyeSBhbmQgd2hlbiBzdHJ1Y3QgcGFnZXMgYXJlIHN0b3JlZCBpbiByYW0gbW9zdFxuMTAzMzpcdCAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG9cbjEwMzQ6XHQgKiBpbml0aWFsaXplIGlzIGEgbG90IHNtYWxsZXIgdGhhdCB0aGUgdG90YWwgYW1vdW50IG9mIHN0cnVjdCBwYWdlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhpcyBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgX19pbml0X3NpbmdsZV9wYWdlYCBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmVzLCBJJiMzOTttIGFscmVhZHkgaW5mZXJyaW5nIHRoaXMgaXMgbGlrZWx5IGFuIGludGVybmFsIG9yICYjMzQ7cHJpdmF0ZSYjMzQ7IG1ldGhvZCB3aXRoaW4gYSBjbGFzcy4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93LCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBjbGFzcyB1bmxlc3MgSSAqcmVhbGx5KiBrbm93IHdoYXQgSSYjMzk7bSBkb2luZy4gTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIG9yIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlICYjMzQ7cGFnZSYjMzQ7IHdpdGhpbiBhIGxhcmdlciBkb2N1bWVudCBvciBwb3RlbnRpYWxseSBhIHdlYnNpdGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCBpdHMgaW1wbGVtZW50YXRpb24gdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGl0IHVzaW5nLCBpcyB0aGVyZSBhbiBpbmRpY2F0aW9uIHRvIGFuIEFQSSBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRvZXMgaXQgKnJldHVybiouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX2luaXRfc2luZ2xlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBTZWFyY2gqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4gR2l2ZW4gd2hhdCB3ZSYjMzk7cmUgbGlrZWx5IHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbnMgSSYjMzk7bSBhY2N1c3RvbWVkIHRvLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIHByb2JhYmx5IGEgbWV0aG9kLCBhbmQgbWF5YmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYSBzaW5nbGUgcGFnZSB2aWV3LiBTbywgbGV0JiMzOTtzIGZpcmUgdXAgdGhlIHNlYXJjaCBhbmQgZ28gZm9yIGBfX2luaXRfc2luZ2xlX3BhZ2VgLiBJdCYjMzk7cyBhIHByZXR0eSB0YXJnZXRlZCB0ZXJtLCBidXQgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSB3aGF0IHN1cmZhY2VzLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZXhwYW5kIG9yIHJlZmluZSB0aGUgc2VhcmNoIGlmIG5lY2Vzc2FyeSwgYnV0IHRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pbml0X3NpbmdsZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zMTY4PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODQtXHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IHN0YXJ0X3BhZ2VfbnVtYmVyOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBhZ2UmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5tbS9odWdldGxiLmM6MzE4NTpcdFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgbmlkKTtcbm1tL2h1Z2V0bGIuYy0zMTg2LVx0XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuLS1cbm1tL21tX2luaXQuYz0zNzE9c3RhdGljIHZvaWQgX19pbml0IGZpbmRfem9uZV9tb3ZhYmxlX3BmbnNfZm9yX25vZGVzKHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTU5NC1cbm1tL21tX2luaXQuYzo1OTU6dm9pZCBfX21lbWluaXQgX19pbml0X3NpbmdsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbm1tL21tX2luaXQuYy01OTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmUsIGludCBuaWQpXG4tLVxubW0vbW1faW5pdC5jPTc1Mj1zdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4tLVxubW0vbW1faW5pdC5jLTc2NS1cdH1cbm1tL21tX2luaXQuYzo3NjY6XHRfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6aWQsIG5pZCk7XG5tbS9tbV9pbml0LmMtNzY3LVxuLS1cbm1tL21tX2luaXQuYz03OTI9dm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuLS1cbm1tL21tX2luaXQuYy03OTgtICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxubW0vbW1faW5pdC5jOjc5OTogKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xubW0vbW1faW5pdC5jLTgwMC0gKiBtZW1tYXBfaW5pdF96b25lX3JhbmdlKCkuXG4tLVxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tLVxubW0vbW1faW5pdC5jLTgyNy1cdGZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHtcbm1tL21tX2luaXQuYzo4Mjg6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xubW0vbW1faW5pdC5jLTgyOS1cdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7XG4tLVxubW0vbW1faW5pdC5jPTg0Nz12b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtODg5LVx0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbm1tL21tX2luaXQuYzo4OTA6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIG5pZCk7XG5tbS9tbV9pbml0LmMtODkxLVx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0hPVFBMVUcpIHtcbi0tXG5tbS9tbV9pbml0LmM9OTc4PXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtOTgyLVxubW0vbW1faW5pdC5jOjk4MzpcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xubW0vbW1faW5pdC5jLTk4NC1cbi0tXG5tbS9tbV9pbml0LmM9MTk5Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZGVmZXJyZWRfaW5pdF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMjAwNC1cdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzssIHBhZ2UmIzQzOyYjNDM7KVxubW0vbW1faW5pdC5jOjIwMDU6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHppZCwgbmlkKTtcbm1tL21tX2luaXQuYy0yMDA2LVx0cmV0dXJuIG5yX3BhZ2VzO1xuLS1cbm1tL21tX2luaXQuaD0xMTU9dm9pZCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKTtcbm1tL21tX2luaXQuaC0xMTYtXG5tbS9tbV9pbml0Lmg6MTE3OnZvaWQgX19tZW1pbml0IF9faW5pdF9zaW5nbGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG5tbS9tbV9pbml0LmgtMTE4LVx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTA5MT1zdGF0aWMgaW50IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUoc3RydWN0IHBhZ2UgKmhlYWRfcGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTExOTQtICogMS4gUGFnZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIGZvciB0aGUgZmlyc3QgdGltZSwgaW5jbHVkaW5nIGR1cmluZyBkZWZlcnJlZFxubW0vcGFnZV9hbGxvYy5jOjExOTU6ICogICAgbWVtb3J5IGluaXQ7IHNlZSB0aGUgY2FsbCB0byBwYWdlX2thc2FuX3RhZ19yZXNldCBpbiBfX2luaXRfc2luZ2xlX3BhZ2UuXG5tbS9wYWdlX2FsbG9jLmMtMTE5Ni0gKiAyLiBUaGUgYWxsb2NhdGlvbiB3YXMgbm90IHVucG9pc29uZWQgZHVlIHRvIF9fR0ZQX1NLSVBfS0FTQU4sIHdpdGggdGhlXG4tLVxubW0vcGFnZV9hbGxvYy5jPTE2MDA9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTYwNy1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6MTYwODpcdCAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1tYXAsIF9faW5pdF9zaW5nbGVfcGFnZSgpIHNldHMgdGhlIHJlZmNvdW50XG5tbS9wYWdlX2FsbG9jLmMtMTYwOS1cdCAqIG9mIGFsbCBwYWdlcyB0byAxIChcJiMzNDthbGxvY2F0ZWRcJiMzNDsvXCYjMzQ7bm90IGZyZWVcJiMzNDspLiBXZSBoYXZlIHRvIHNldCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxOTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYF9faW5pdF9zaW5nbGVfcGFnZWAgaW4gYG1tL21tX2luaXQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9faW5pdF9zaW5nbGVfcGFnZWAgd2l0aGluIHRoZSBgbW1faW5pdC5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGluaXRpYWwgbWVtb3J5IHNldHVwLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2luZ2xlIHBhZ2VzLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBtYXBwaW5nIG9mIGEgc2luZ2xlIHBoeXNpY2FsIHBhZ2UsIHByb2JhYmx5IGZvciBjcml0aWNhbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVhcmx5IGJvb3Qgc3RhZ2VzLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgaG93IHRoZSBwYWdlIHRhYmxlcyBhcmUgc2V0IHVwLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJha2VkIGludG8gaXRzIGRlc2lnbi4gSXMgaXQgb3B0aW1pemVkIGZvciBzaXplLCBzcGVlZCwgb3IgYSBiYWxhbmNlIG9mIGJvdGg/IEFuZCBob3cgZG9lcyB0aGlzIGxvdy1sZXZlbCBpbml0IGZ1bmN0aW9uIHBsYXkgd2l0aCB0aGUgbGF0ZXItc3RhZ2UgbWVtb3J5IG1hbmFnZW1lbnQ/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgaXMgYnVpbHQsIHNvIGdldHRpbmcgdGhpcyBjbGVhciBpcyBwYXJhbW91bnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRvdXQ6XG4gNTkxOlx0XHQvKiByZXN0b3JlIHRoZSBub2RlX3N0YXRlICovXG4gNTkyOlx0XHRub2RlX3N0YXRlc1tOX01FTU9SWV0gPSBzYXZlZF9ub2RlX3N0YXRlO1xuIDU5MzpcdH1cbiA1OTQ6XHRcbiA1OTU6XHR2b2lkIF9fbWVtaW5pdCBfX2luaXRfc2luZ2xlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIDU5NjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKVxuIDU5NzpcdHtcbiA1OTg6XHRcdG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSk7XG4gNTk5Olx0XHRzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7XG4gNjAwOlx0XHRpbml0X3BhZ2VfY291bnQocGFnZSk7XG4gNjAxOlx0XHRhdG9taWNfc2V0KFx1MDAyNnBhZ2UtXHUwMDNlX21hcGNvdW50LCAtMSk7XG4gNjAyOlx0XHRwYWdlX2NwdXBpZF9yZXNldF9sYXN0KHBhZ2UpO1xuIDYwMzpcdFx0cGFnZV9rYXNhbl90YWdfcmVzZXQocGFnZSk7XG4gNjA0Olx0XG4gNjA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4gNjA2Olx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4gNjA3Olx0XHQvKiBUaGUgc2hpZnQgd29uJiMzOTt0IG92ZXJmbG93IGJlY2F1c2UgWk9ORV9OT1JNQUwgaXMgYmVsb3cgNEcuICovXG4gNjA4Olx0XHRpZiAoIWlzX2hpZ2htZW1faWR4KHpvbmUpKVxuIDYwOTpcdFx0XHRzZXRfcGFnZV9hZGRyZXNzKHBhZ2UsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gNjEwOlx0I2VuZGlmXG4gNjExOlx0fVxuIDYxMjpcdFxuIDYxMzpcdCNpZmRlZiBDT05GSUdfTlVNQVxuIDYxNDpcdC8qXG4gNjE1Olx0ICogRHVyaW5nIG1lbW9yeSBpbml0IG1lbWJsb2NrcyBtYXAgcGZucyB0byBuaWRzLiBUaGUgc2VhcmNoIGlzIGV4cGVuc2l2ZSBhbmRcbiA2MTY6XHQgKiB0aGlzIGNhY2hlcyByZWNlbnQgbG9va3Vwcy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZWFybHlfcGZuX3RvX25pZFxuIDYxNzpcdCAqIHRyZWF0cyBzdGFydC9lbmQgYXMgcGZucy5cbiA2MTg6XHQgKi9cbiA2MTk6XHRzdHJ1Y3QgbW1pbml0X3Bmbm5pZF9jYWNoZSB7XG4gNjIwOlx0XHR1bnNpZ25lZCBsb25nIGxhc3Rfc3RhcnQ7XG4gNjIxOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfZW5kO1xuIDYyMjpcdFx0aW50IGxhc3RfbmlkO1xuIDYyMzpcdH07XG4gNjI0Olx0XG4gNjI1Olx0c3RhdGljIHN0cnVjdCBtbWluaXRfcGZubmlkX2NhY2hlIGVhcmx5X3Bmbm5pZF9jYWNoZSBfX21lbWluaXRkYXRhO1xuIDYyNjpcdFxuIDYyNzpcdC8qXG4gNjI4Olx0ICogUmVxdWlyZWQgYnkgU1BBUlNFTUVNLiBHaXZlbiBhIFBGTiwgcmV0dXJuIHdoYXQgbm9kZSB0aGUgUEZOIGlzIG9uLlxuIDYyOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBJbml0aWFsaXphdGlvbiBhbmQgQ2FjaGUgRmx1c2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgX19pbml0X3NpbmdsZV9wYWdlYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxpbmcgYG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSlgIGluaXRpYWxseSwgd2hpY2ggcHJlc3VtYWJseSBjbGVhcnMgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgYW5kIHNldHMgdXAgaXRzIGluaXRpYWwgZmllbGRzLiAgVGhlbiwgYSB0ZW1wbGF0ZSBpcyBjcmVhdGVkIHZpYSBhIGBtZW1jcHlgIG9mIHRoZSBpbml0aWFsIHBhZ2UuIEZvciBzdWJzZXF1ZW50IHBhZ2VzLCB0aGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyB1c2VkLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlICp0ZW1wbGF0ZSogYW5kIHRoZW4gY29waWVzIHRoZSAqdGVtcGxhdGUqIGludG8gdGhlIHBhZ2UgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhY3R1YWxseSBkb2luZyBoZXJlPyAgSSBrbm93IHRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBzY2VuYXJpb3MgbGlrZSB0aGlzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24uIFRoZSB4ODYtNjQgYXJjaGl0ZWN0dXJlIGRlZmluZXMgYG1vdm50aV8qYCBmdW5jdGlvbnMsIGFuZCBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgd3JhcHBlciBmb3IgdGhlbS4KCkxldCYjMzk7cyBjaGVjayBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgOgoKVGhlIGlubGluZSBmdW5jdGlvbnMgYG1vdm50aV80YCwgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBgbW92bnRpbGAgYW5kIGBtb3ZudGlxYCBpbnN0cnVjdGlvbnMuIFRoZXNlIGFyZSBub24tdGVtcG9yYWwgc3RvcmVzLCB3aGljaCBieXBhc3MgdGhlIGNhY2hlIHRvIHdyaXRlIGRpcmVjdGx5IHRvIG1lbW9yeS4gIGBtZW1jcHlfZmx1c2hjYWNoZWAgdXNlcyB0aGVzZSBgbW92bnRpXypgIGZ1bmN0aW9ucyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgKDQsIDgsIDE2LCAzMiwgNDgsIDY0LCA4MCBhbmQgOTYgYnl0ZXMpIGFuZCBjYWxscyBgX19tZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHRoZSBvdGhlciBzaXplcy4KClRoZSBmaXhlZC1zaXplIGNhc2VzIGluIHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGltcGxlbWVudGF0aW9uIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMgb24geDg2LTY0LCBzcGVjaWZpY2FsbHkgNjQsIDgwIGFuZCA5NiBieXRlcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZXNlIGNvbW1vbiBzdHJ1Y3R1cmVzLCBvcHRpbWl6aW5nIGZvciB0aGUgbWVtb3J5IGNvcHkgaW4gdGhvc2Uga2V5IHVzZSBjYXNlcy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gV2hlcmUgYXJlIHRoZXNlIGBtZW1jcHlfZmx1c2hjYWNoZWAgY2FsbHMgKmFjdHVhbGx5KiBiZWluZyB1c2VkPyBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGl0cyB1c2FnZXMsIGFuZCBhbHNvIHRoZSB1c2FnZXMgb2YgdGhlIHVuZGVybHlpbmcgYG1vdm50aV8qYCBmdW5jdGlvbnMgYW5kIHRoZSBgX19tZW1jcHlfZmx1c2hjYWNoZWAgdGhhdCBgbWVtY3B5X2ZsdXNoY2FjaGVgIHVzZXMsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGVpciBhcHBsaWNhdGlvbiB3aWxsIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgaXMgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTExND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjEtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTIzLVx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTI0Olx0XHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyNS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjktXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMwOlx0ICogX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMxLVx0ICovXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTQwLVx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNDE6XHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0Mi1cdH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xNTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTIte1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTUzOlx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTQtfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jPTQ0OD12b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYy00OTgtXHR4Y2hnKFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jOjQ5OTpcdG1lbWNweV9mbHVzaGNhY2hlKG9sZF9lbGZjb3JlaGRyLCBlbGZidWYsIGVsZnN6KTtcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTUwMC1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTgxLXtcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6MTQzOkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MzE9c3RhdGljIHZvaWQgZnNkZXZfd3JpdGVfZGF4KHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzctXG5kcml2ZXJzL2RheC9mc2Rldi5jOjM4Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShhZGRyLCBtZW0gJiM0Mzsgb2ZmLCBjaHVuayk7XG5kcml2ZXJzL2RheC9mc2Rldi5jLTM5LVx0XHRrdW5tYXBfbG9jYWwobWVtKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jPTE3PXN0YXRpYyB2b2lkIGNhY2hlX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNS1cdGNhY2hlLVx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXHUwMDNlaW5mb19pbmRleCAmIzQzOyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MjY6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfY2FjaGVfaW5mb19hZGRyKGNhY2hlKSwgY2FjaGVfaW5mbyxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXHRcdFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9ODc9dm9pZCBjYWNoZV9wb3NfZW5jb2RlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLFxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAwLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoxMDE6XHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcdTAwMjZwb3Nfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfcG9zX29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAyLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYz0xNDA9c3RhdGljIHZvaWQgc2Jfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9kZXYgKmNhY2hlX2Rldiwgc3RydWN0IHBjYWNoZV9zYiAqc2IpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQzLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmM6MTQ0Olx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDUtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEzNz1zdGF0aWMgdm9pZCBhcHBlbmRfbGFzdF9rc2V0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgbmV4dF9zZWcpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ1LVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTQ2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ3LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xNTE9aW50IGNhY2hlX2tzZXRfY2xvc2Uoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldCAqa3NldClcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzYtXHRcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgaW4gbmV4dCBzZWcgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE3NzpcdFx0bWVtY3B5X2ZsdXNoY2FjaGUobmV4dF9zZWctXHUwMDNlc2VnbWVudC5kYXRhLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3OC1cdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTg4LVx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBhZnRlciBjdXJyZW50IGtzZXQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE4OTpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSAmIzQzOyBrc2V0X29ubWVkaWFfc2l6ZSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xOTAtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE5MS1cdC8qIHdyaXRlIGN1cnJlbnQga3NldCBpbnRvIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE5MjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xOTMtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0yMD1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXHRzZWdfaW5mb19hZGRyID0gZ2V0X3NlZ19pbmZvX2FkZHIoY2FjaGVfc2VnKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzozMjpcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMy1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTEyNj1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfY3RybF93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjEzNzpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9zZWdfZ2VuX2FkZHIoY2FjaGVfc2VnKSwgXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTEzOC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTE4Mj1pbnQgY2FjaGVfc2VnX2luaXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBzZWdfaWQsIHUzMiBjYWNoZV9zZWdfaWQsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBzZWdtZW50ICovXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShzZWdtZW50LVx1MDAzZWRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0yMTgtXHRcdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDctXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1x0XHRcdFx0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQ4Olx0bWVtY3B5X2ZsdXNoY2FjaGUoXHUwMDI2KGRlc3QpLCBcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1x0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ5LX0gd2hpbGUgKDApXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTE5Mj1zdGF0aWMgaW50IHdyaXRlY2FjaGVfbWVzc2FnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2LFxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEtXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjEyOnN0YXRpYyB2b2lkIG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZCh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBzaXplKVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIxMy17XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cdCAqIE5PVEU6IHRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBub3cgKHdpdGggZG0td3JpdGVjYWNoZSYjMzk7cyBzaW5nbGVcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMjc6XHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI4LVx0ICogZW5hYmxlZCB0byB1c2UgbW92ZGlyNjRiIHdoaWNoIG1pZ2h0IGludmFsaWRhdGUgdGhpcyBwZXJmb3JtYW5jZVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDQtI2VuZGlmXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjQ1Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDYtfVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDg9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cdFx0XHRmbHVzaF9kY2FjaGVfcGFnZShiaW9fcGFnZShiaW8pKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzQ6XHRcdFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjc1LVx0XHR9XG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYz0yMzM9c3RhdGljIGludCBuc2lvX3J3X2J5dGVzKHN0cnVjdCBuZF9uYW1lc3BhY2VfY29tbW9uICpuZG5zLFxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc2LVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYzoyNzc6XHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVx1MDAzZWFkZHIgJiM0Mzsgb2Zmc2V0LCBidWYsIHNpemUpO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzgtXHRyZXQgPSBudmRpbW1fZmx1c2godG9fbmRfcmVnaW9uKG5kbnMtXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0xMjQ9c3RhdGljIHZvaWQgd3JpdGVfcG1lbSh2b2lkICpwbWVtX2FkZHIsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzItXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTMzOlx0XHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9MTEwOT1pbnQgZ2VuZXJpY19udmRpbW1fZmx1c2goc3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyNC1cdCAqIHRoZSBwbGF0Zm9ybSBidWZmZXIgZmx1c2guIE5vdGUgdGhhdCB3ZSYjMzk7dmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzoxMTI1Olx0ICogd3JpdGVzIHRvIGF2b2lkIHRoZSBjYWNoZSB2aWEgbWVtY3B5X2ZsdXNoY2FjaGUoKS4gIFRoZSBmaW5hbFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTI2LVx0ICogd21iKCkgZW5zdXJlcyBvcmRlcmluZyBmb3IgdGhlIE5WRElNTSBmbHVzaCB3cml0ZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzQtI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzYte1xuLS1cbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTMwNS17XG5saWIvaW92X2l0ZXIuYzozMDY6XHRtZW1jcHlfZmx1c2hjYWNoZSh0byAmIzQzOyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xubGliL2lvdl9pdGVyLmMtMzA3LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgxCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDEyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggQW5hbHlzaXMgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGBOZWVkc0tNU0FOPXRydWVgLiBUaGlzIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UuIE15IGZvY3VzIGlzIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgS01TQU4gd291bGQgYmUgZGVzaWduZWQgdG8gZGV0ZWN0LgoKRmlyc3QsIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXM6IEl0IGludHJvZHVjZXMgYW4gb3B0aW1pemVkIGBtZW1jcHlfZmx1c2hjYWNoZWAgd2l0aCBpbmxpbmUgYXNzZW1ibHkgdXRpbGl6aW5nIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgZmFzdGVyIG5vbi10ZW1wb3JhbCB3cml0ZXMgKHg4NiksIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgcmVmYWN0b3JzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcy4KClRoZSBjcnVjaWFsIHBhcnRzIGFyZSBpbiBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBIZXJlLCByYXRoZXIgdGhhbiBpbml0aWFsaXppbmcgZWFjaCBgc3RydWN0IHBhZ2VgIGluZGl2aWR1YWxseSwgYSAmIzM0O3RlbXBsYXRlJiMzNDsgYXBwcm9hY2ggaXMgdXNlZC4gVGhlIGZpcnN0IGBwYWdlYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBfX2luaXRfem9uZV9kZXZpY2VfcGFnZWAsIHdoaWNoIGNhbGxzIGBfX2luaXRfc2luZ2xlX3BhZ2VgLiBDcml0aWNhbGx5LCBgX19pbml0X3NpbmdsZV9wYWdlYCBleHBsaWNpdGx5IHplcm9lcyB0aGUgZW50aXJlIGBzdHJ1Y3QgcGFnZWAgd2l0aCBgbW1femVyb19zdHJ1Y3RfcGFnZWAgYmVmb3JlIHNldHRpbmcgb3RoZXIgZmllbGRzLiBUaGlzIGZ1bGx5IGluaXRpYWxpemVkIHBhZ2UgaXMgdGhlbiBjb3BpZWQgdG8gYSBzdGFjayB2YXJpYWJsZSBjYWxsZWQgYHRlbXBsYXRlYC4gU3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcyBhcmUgaW5pdGlhbGl6ZWQgYnkgY29weWluZyBmcm9tIHRoaXMgdGVtcGxhdGUgYWZ0ZXIgc29tZSBmaWVsZHMgKGxpa2UgdGhlIHNlY3Rpb24pIGhhdmUgYmVlbiBhZGp1c3RlZC4gSXQmIzM5O3MgdGhlbiB0aGF0IHRoZSBzcGVjaWFsaXplZCBgbWVtY3B5X25vbnRlbXBvcmFsYCBjYWxsICh3aGljaCBpcyBhbGlhc2VkIGFzIGBtZW1jcHlfZmx1c2hjYWNoZWAgaW4gdGhlIHBhdGNoKSBpcyB1c2VkLCBtZWFuaW5nIG5vIHRlbXBvcmFsIGNhY2hlIG1pc3NlcyBhcmUgaW5jdXJyZWQgb24gbGFyZ2UgcGFnZSBjb3BpZXMuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqIE5vdCBoZXJlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwgb3V0cHV0LCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRldGVybWluaXN0aWMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkOioqIE5vdCBoZXJlLiBUaGUgYHN0cnVjdCBwYWdlYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvaW5nIGFuZCBzcGVjaWZpYyBmaWVsZCBzZXRzLiBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCBzdG9yZXMgYSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHBhZ2VgLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8sIHRoZSBjb3BpZXMgdXNlIGBzaXplb2YoKnBhZ2UpYCB3aGljaCBpcyBhIGRlZmluZWQgc2l6ZSwgYW5kIHdlIHJlbHkgb24gS0FTQU4gb3IgRk9SVElGWSB0byBwaWNrIHVwIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk15IGNvbmNsdXNpb24/IEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBzZWUgKm5vKiBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCwgdXNlZCBpbnRlcm5hbGx5IGluIGEgcHJvYmxlbWF0aWMgd2F5LCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdGFjay1iYXNlZCBgdGVtcGxhdGVgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgY29weSBmcm9tIGEgemVyb2VkIGBzdHJ1Y3QgcGFnZWAsIHdoaWNoIGlzIHRoZW4gY29waWVkIHRvIHRoZSB0YXJnZXQgYHBhZ2VgIGluc3RhbmNlcy4gVGhlIGlubGluZSBhc3NlbWJseSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHJlYWRzIGluaXRpYWxpemVkIHZhbHVlcyBmcm9tIGBzcmNgIHRvIGBkc3RgLCB3aGljaCBhcmUgYWxsIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgS01TQU4gd291bGQgZmluZC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUmVndWxhciBLQVNBTi9GT1JUSUZZIG1lY2hhbmlzbXMgd291bGQgY2F0Y2ggYW55IGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgaXQgd2VyZSB0byBvY2N1ciBpbiB0aGUgY29weSBvcGVyYXRpb25zLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgbG9naWMgYXBwZWFycyBzb3VuZDsgbGV0JiMzOTtzIGNhbGwgaXQgYSBkYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBhbmQgaW50cm9kdWNlcyBvcHRpbWl6ZWQgZml4ZWQtc2l6ZSBub24tdGVtcG9yYWwgY29waWVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCAvIGBtZW1jcHlfZmx1c2hjYWNoZWApIHVzaW5nIGlubGluZSBhc3NlbWJseSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxuLSBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCAoYSBgc3RydWN0IHBhZ2VgKSBpbiBgbW0vbW1faW5pdC5jYCBpcyBpbml0aWFsaXplZCB2aWEgYG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIGZyb20gYSBzdHJ1Y3QgcGFnZSB0aGF0IHdhcyBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBfX2luaXRfc2luZ2xlX3BhZ2UoKWAgKHdoaWNoIGludm9rZXMgYG1tX3plcm9fc3RydWN0X3BhZ2UoKWApLlxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxuLSBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGluY29ycmVjdCBzdHJ1Y3QgcGFnZSBzaXplIGNvcGllcywgYWxpZ25tZW50IGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3b3VsZCBiZSBtZW1vcnkgY29ycnVwdGlvbi9PT0IgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoyNToxMS43NjU1MDY2NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA0NDcwMjU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiX19tZW1jcHlfZmx1c2hjYWNoZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXFxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI1OjExLjc2NTUxMTI4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwNDI3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGM4ZThlMDA2ZjU5NTNhMTNmMzE2N2IyZTRkOTRiNjVlOGI1NmFlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uODMxZDNkZGEzYjM4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuQEAgLTgyLDI0ICs4Miw3NyBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJtb3ZudGlsICUxLCAlMFxcXCJcXG4rXFx0XFx0ICAgICA6IFxcXCI9bVxcXCIoKih1MzIgKilkc3QpXFxuK1xcdFxcdCAgICAgOiBcXFwiclxcXCIoKihjb25zdCB1MzIgKilzcmMpXFxuK1xcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRhc20gdm9sYXRpbGUoXFxcIm1vdm50aXEgJTEsICUwXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdClcXG4rXFx0XFx0ICAgICA6IFxcXCJyXFxcIigqKGNvbnN0IHU2NCAqKXNyYylcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRtb3ZudGlfOChkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbiB7XFxuLVxcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XFxuLVxcdFxcdHN3aXRjaCAoY250KSB7XFxuLVxcdFxcdFxcdGNhc2UgNDpcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpbCAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHUzMiAqKWRzdCkgOiBcXFwiclxcXCIoKih1MzIgKilzcmMpKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRcXHRjYXNlIDg6XFxuLVxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0XFx0Y2FzZSAxNjpcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpcSAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdCkgOiBcXFwiclxcXCIoKih1NjQgKilzcmMpKTtcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpcSAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHU2NCAqKShkc3QgKyA4KSkgOiBcXFwiclxcXCIoKih1NjQgKikoc3JjICsgOCkpKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuK1xcdG1vdm50aV8xNihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxcbitcXHRcXHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUgeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOlxcbitcXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxcbitcXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xcbitcXHQgKiBfX21lbWNweV9mbHVzaGNhY2hlKCkuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKGNudCkge1xcbitcXHRjYXNlIDQ6ICBtb3ZudGlfNChkc3QsIHNyYyk7IGJyZWFrO1xcbitcXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xcbitcXHRjYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhaztcXG4rXFx0Y2FzZSAzMjogbW92bnRpXzMyKGRzdCwgc3JjKTsgYnJlYWs7XFxuK1xcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcXG4rXFx0Y2FzZSA2NDogbW92bnRpXzY0KGRzdCwgc3JjKTsgYnJlYWs7XFxuK1xcdGNhc2UgODA6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpOyBicmVhaztcXG4rXFx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xcbitcXHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcXG4gXFx0fVxcbi1cXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xcbiB9XFxuK1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG4rLypcXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XFxuKyAqIHByaW1pdGl2ZS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbiB9XFxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI4NzIsOSArMjg4Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxcbi1cXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XFxuLVxcdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxcbi1cXHQgKlxcbi1cXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxcbitcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbitcXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxcbitcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuIFxcdCAqL1xcbiBcXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuQEAgLTEwMjEsNiArMTAxNywxNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuK1xcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxcbitcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbitcXHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcXG4gICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0b1xcbkBAIC0xMDUzLDYgKzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVxcdTAwM2V2bWVtbWFwX3NoaWZ0O1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiBcXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXFxuIFxcdCAqL1xcbiBcXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xcbi1cXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMTsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuLVxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuLVxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbi1cXHR9XFxuK1xcdC8qXFxuK1xcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZSBzdGF0ZSBlc3RhYmxpc2hlZCBieVxcbitcXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0IHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdCAqL1xcbitcXHRwZm4gPSBoZWFkX3BmbiArIDE7XFxuK1xcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbitcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cXG4rXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDI7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKVxcbitcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGVtcGxhdGUpO1xcbiBcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbiB9XFxuIFxcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdFxcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuK1xcdGlmICghbnJfcGFnZXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZSBmaXJzdCByZWFsIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cXG4rXFx0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4rXFx0ICovXFxuK1xcdHBmbiA9IHN0YXJ0X3BmbjtcXG4rXFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuK1xcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXFxuK1xcdFxcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuK1xcdHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZDtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXFxuK1xcdGZvciAoOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4rXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjU6MTIuMTg2ODM1OTcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTA4Mzc0MDg0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiX19tZW1jcHlfZmx1c2hjYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjOGU4ZTAwNmY1OTUzYTEzZjMxNjdiMmU0ZDk0YjY1ZThiNTZhZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04MiwyNCArODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aWwgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHUzMiAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTMyICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcIm1vdm50aWwgJTEsICUwXCIgOiBcIj1tXCIoKih1MzIgKilkc3QpIDogXCJyXCIoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuK3tcbitcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbitcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4rXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbitcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChjbnQpIHtcbitcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSAxNjogbW92bnRpXzE2KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbitcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcbitcdGNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG4gXHR9XG4tXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuKyAqIHByaW1pdGl2ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0yODcyLDkgKzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuIFx0ICovXG4gXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG5AQCAtMTAyMSw2ICsxMDE3LDE3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbit9XG4rXG4gLypcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcbiAgKiB0YWlsIHBhZ2VzIGFyZSByZXVzZWQuIENvbnNlcXVlbnRseSwgdGhlIGFtb3VudCBvZiB1bmlxdWUgc3RydWN0IHBhZ2VzIHRvXG5AQCAtMTA1Myw2ICsxMDYwLDggQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5XG4rXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdCB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0ICovXG4rXHRwZm4gPSBoZWFkX3BmbiArIDE7XG4rXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbitcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcbitcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4rXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4rKylcbitcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxuK1x0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbiBcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4rXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbitcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4rXHQgKi9cbitcdHBmbiA9IHN0YXJ0X3BmbjtcbitcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuK1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4rXHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuK1x0cGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbitcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuK1x0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI1OjEyLjE4NjgzODA1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjc2NjIxMDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBwcmVzZW50cyBhbnkganVpY3kgZnV6emluZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBjb21wbGV4aXR5LCBwb3RlbnRpYWwgZm9yIG5ldyBjb2RlIHBhdGhzLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gU28sIEkgc2VlIHRoYXQgd2UndmUgZ290OlxuXG4xLiAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYDogSXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBieSBhZGRpbmcgaW5saW5lIGltcGxlbWVudGF0aW9ucyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGludGVyZXN0aW5nLiBPcHRpbWl6YXRpb24gb2Z0ZW4gbWVhbnMgdGhleSdyZSBhaW1pbmcgZm9yIHBlcmZvcm1hbmNlIGluIGhvdCBjb2RlIHBhdGhzLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG1pc2hhbmRsZWQuIFRoZXkndmUgYWxzbyBkZWZpbmVkIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFzIGBtZW1jcHlfZmx1c2hjYWNoZWAuXG5cbjIuICBgaW5jbHVkZS9saW51eC9tbS5oYDogV2UncmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc2VjdGlvbnMgYXJlIHNldCBhbmQgbGlua2VkLCBpbmNsdWRpbmcgYSBuZXcgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuMy4gIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYDogVGhpcyBzZWVtcyB0byBiZSBhIGZhbGxiYWNrLCB3aGVyZSBgbWVtY3B5X25vbnRlbXBvcmFsYCBmYWxscyBiYWNrIHRvIGBtZW1jcHlgLiBNYWtlcyBzZW5zZS5cblxuNC4gIGBtbS9tbV9pbml0LmNgOiBUaGlzIGlzIHRoZSBtZWF0IG9mIGl0LiBUaGVyZSBhcmUgc3Vic3RhbnRpYWwgY2hhbmdlcyBoZXJlOlxuICAgICogICBJbml0aWFsaXphdGlvbiBvZiBgWk9ORV9ERVZJQ0VgIHBhZ2VzIGhhcyBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIEZTXFxfREFYIHBhZ2VzIG5vIGxvbmdlciBnZXQgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdoeSB0aGUgY2hhbmdlPyBUaGlzIGNvdWxkIGhpbnQgYXQgc29tZSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIG1hbmFnZWQsIGFuZCBwZXJoYXBzIGEgbmV3IGNsYXNzIG9mIGJ1Zy5cbiAgICAqICAgVGhleSd2ZSBhZGRlZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgbm93IHVzZXMgYG1lbWNweV9ub250ZW1wb3JhbGAgZm9yIGluaXRpYWxpemluZyBzdHJ1Y3QgcGFnZXMgZm9yIGBaT05FX0RFVklDRWAuIFRoaXMgc291bmRzIGxpa2UgYW4gZWZmb3J0IHRvIG9wdGltaXplIGFuZCBzdGFuZGFyZGl6ZSBwYWdlIGluaXRpYWxpemF0aW9uLCBidXQgaXQgYWxzbyBicmluZ3MgaW4gbmV3IGNvZGUuIEFueSB0aW1lIHlvdSBpbnRyb2R1Y2UgbmV3IHBhZ2UgaW5pdGlhbGl6YXRpb24gY29kZSwgeW91IG9wZW4gdGhlIGRvb3IgdG8gYWxsIHNvcnRzIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBpbml0aWFsaXphdGlvbiBidWdzLlxuICAgICogICBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFyZSBub3cgdXNpbmcgdGhlc2UgdGVtcGxhdGVzIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhpcyBsaWtlbHkgaXMgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZS5cblxuTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGRldGVybWluZSB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQ6XG5cbiogICBXaGVyZSBpcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgY29kZSBpcyByZWFjaGVkIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZXBlbmRlbnQgb24gaXQuXG4qICAgV2hhdCBrZXJuZWwgY29uZmlncyBlbmFibGUgYFpPTkVfREVWSUNFYD8gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2UgdGhpcyBjb2RlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWxlY3RpbmcgYSB0YXJnZXQgZm9yIHRoZSBmdXp6ZXIuXG4qICAgVXNpbmcgYGdyZXBwZXJgLCBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgY2FsbHMgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYFpPTkVfREVWSUNFYCBhbmQgc2VlIHdoYXQgZWxzZSBJIGNhbiBkaWcgdXAuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtcy5cblxuSSdtIHRoaW5raW5nIHRoYXQgYW55dGhpbmcgaW52b2x2aW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBlc3BlY2lhbGx5IGl0cyB1c2UgaW4gaW5pdGlhbGl6aW5nIHBhZ2VzLCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVmY291bnQgY2hhbmdlIGlzIGFsc28gYSByZWQgZmxhZy4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG5hcnJvdyBvdXIgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjc6MTguOTUzMDUyODU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM4NDY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMzI0PXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMzMtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzM0OmV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzM1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjQxLVxcdCAqL1xcbm1tL21lbXJlbWFwLmM6MjQyOlxcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXFxubW0vbWVtcmVtYXAuYy0yNDMtXFx0XFx0XFx0XFx0UEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21tX2luaXQuYz0xMDU1PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwOTItXFxubW0vbW1faW5pdC5jOjEwOTM6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTA5NC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjc6MjEuMzc2OTExMjMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyNzMyNDY0ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUmVtYXBwaW5nIENhbGxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHNvbWUga2V5IG1lbW9yeSByZW1hcHBpbmcgZnVuY3Rpb25zLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGhvdyBgcGFnZW1hcF9yYW5nZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGFyZSBpbnRlcnR3aW5lZC4gSSdtIGhvcGluZyB0byBnZXQgYSBwaWN0dXJlIG9mICp3aGVuKiB0aGV5IGFyZSBjYWxsZWQsICp3aHkqIHRoZXkncmUgY2FsbGVkIChzcGVjaWZpY2FsbHkgd2hhdCB0aGUgdXNlIGNhc2UgaXMpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgdXNlZCwgYXMgaXQgcHJvdmlkZXMgbWFuYWdlZCBtZW1vcnkgcmVtYXBwaW5nIGFuZCBzbyBsaWtlbHkgaGFzIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gVWx0aW1hdGVseSBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjI0LjEwOTM3OTAyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2NTU1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXJlbWFwX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0zMDc9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE4LSAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE5OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzIzLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjQ6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNS1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcXHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2Mz1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3NS1cXHQvKlxcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5NzY6XFx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzctXFx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXFx0XFx0XFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXFx1MDAzZWFsaWduIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM9Mjc5PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMTktXFxuZHJpdmVycy9kYXgvZnNkZXYuYzozMjA6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMjEtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcXHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXFx0aWYgKElTX0VSUihyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XFx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmNodW5rLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3OTg9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODM5LVxcdHBhZ2VtYXAtXFx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODQwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NDEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgyPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDExLVxcdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMjpcXHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTMtXFx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjAtXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIxOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjItXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMzpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDI0LVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMyLVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMzOlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTM0LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0NS1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU0NjpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0Ny1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XFx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc1PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTUtXFx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE2OlxcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNy1cXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjY6XFx0ZnMtXFx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNy1cXHRpZiAoSVNfRVJSKGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcXHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVxcdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz02NjE9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTcxOC1cXHR9XFxubGliL3Rlc3RfaG1tLmM6NzE5OlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZtZW0tXFx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5saWIvdGVzdF9obW0uYy03MjAtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwND1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MjogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjk6MjUuOTk1OTM5NDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyMjA1MTYyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUmVtYXBwaW5nIGluIFFFTVUgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaG93IHdlIGNhbiByZWFjaCB0aG9zZSBjYWxscyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBsZXQncyBsb29rIGF0IGEgZmV3IHNwZWNpZmljIGFyZWFzIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gRm9yIHN0YXJ0ZXJzLCBJIHNob3VsZCBleGFtaW5lIGBsaWIvdGVzdF9obW0uY2Ag4oCTIHRoYXQgSE1NIHRlc3QgZGV2aWNlLCBgL2Rldi9obW1fZG1pcnJvcmAsIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYHZpcnRpb19mc2Agd2l0aCBEQVggbWlnaHQgYmUgaW52b2x2ZWQsIGFzIHdlbGwgYXMgdGhlIGludGVyYWN0aW9ucyB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHRlY2hub2xvZ2llcyBsaWtlIGBwbWVtYCwgYG52ZGltbWAsIGFuZCBvdGhlciBEQVggY29uZmlndXJhdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSB1c2luZyB0aGlzLiBgZGF4X3BtZW1gLCBgZGV2X2RheGAsIGFuZCBgZnNkZXZfZGF4YCBhcmUgYWxzbyBnb29kIHN0YXJ0aW5nIHBvaW50cy5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgbGliL0tjb25maWdgIHRvIHNlZSBpZiBgVEVTVF9ITU1gIGlzIGVuYWJsZWQuIEl0J3MgbGlrZWx5IHRoYXQgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpbmdzIGxpa2UgYG52ZGltbWAgb3Igc2ltaWxhciBwZXJzaXN0ZW50IG1lbW9yeSBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSByZWdpb25zLCBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggYWxsIEtjb25maWcgZmlsZXMgZm9yIGBaT05FX0RFVklDRWAsIHdoaWNoIGlzIGtleSBmb3IgREFYIGFuZCBkZXZpY2UtYmFzZWQgbWVtb3J5IG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzg1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjM4LjIxNjQ1ODYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1NDE0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIyNC1cXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjI2LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjM5LjkyMTg4MTA1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzI0MDY5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBsaW5lIDEyMjUgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEknbSBub3QgZXhwZWN0aW5nIGEgZ3JvdW5kYnJlYWtpbmcgcmV2ZWxhdGlvbiwgYnV0IG9mdGVuIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgYW5kIHRoaXMgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlnIG9wdGlvbidzIGRlcGVuZGVuY2llcyBvciBjb25zdHJhaW50cyB0aGF0IEkndmUgYmVlbiBwdXp6bGluZyBvdmVyLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRocm91Z2ggdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBoYXBwZW5zIGFzIG9wdGlvbnMgY2hhbmdlLiBJIHN1c3BlY3QgdGhlcmUncyBhIHBhcnRpY3VsYXIgb3B0aW9uIEkgbmVlZCB0byBlaXRoZXIgc2V0LCBvciB1bmRlcnN0YW5kIHdoeSBpdCdzIG5vdCBiZWluZyBzZXQgY29ycmVjdGx5LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGRlZmluZWQgdGhlcmUsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzA6MjAuNjQ1OTU0NDg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjIxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIyMjpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjIzOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjI2OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI5OlxcdFxcbjEyMzA6XFx0XFx0aGVscFxcbjEyMzE6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMzI6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzM6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjM0OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjM1OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM4OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzk6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI0MDpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNDE6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjQyOlxcdFxcbjEyNDM6XFx0I1xcbjEyNDQ6XFx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXFxuMTI0NTpcXHQjIHRhYmxlcy5cXG4xMjQ2OlxcdCNcXG4xMjQ3OlxcdGNvbmZpZyBITU1fTUlSUk9SXFxuMTI0ODpcXHRcXHRib29sXFxuMTI0OTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNTA6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjEyNTE6XFx0XFxuMTI1MjpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1MzpcXHRcXHRib29sXFxuMTI1NDpcXHRcXG4xMjU1OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNTY6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNTc6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNTg6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMwOjIwLjY0NjExMTUzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0NzUxNTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyB0aGUgVUFDQ0VTUyBGbHVzaCBDYWNoZSBGbGFnKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBXZSd2ZSBnb3QgdGhpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFjY2VzcywgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnV0IHdlIGhhdmUgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgY29ycmVjdC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGhhbmRsaW5nIHRoZSBjYWNoZSBjb2hlcmVuY3kgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBhY2Nlc3MuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUncyBzcGVjaWZpY3MsIEkgc2hvdWxkIGdvIGFoZWFkIGFuZCBleGFtaW5lIHRoZSBtYWNybywgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgZmVhdHVyZS4gSSBrbm93IEkndmUgd29ya2VkIHdpdGggc3lzdGVtcyBiZWZvcmUgd2hlcmUgY2FjaGUgZmx1c2hlcyBhcm91bmQgdXNlci1zcGFjZSBhY2Nlc3NlcyB3ZXJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB0byBhdm9pZCBzdGFsZSBkYXRhIGlzc3VlcyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gdGVsbHMgdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBpbXBhY3RzIG91ciBjdXJyZW50IGNvZGUgcGF0aC4gRXNzZW50aWFsbHksICppcyogdGhlcmUgYSByZXF1aXJlbWVudCwgYnkgZGVzaWduLCB0byBmbHVzaCB0aGUgY2FjaGUsIGFuZCBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBjb25kaXRpb25hbGl6ZXMgaXRzZWxmIGFyb3VuZCB0aGlzIGZsYWcsIGFuZCB3aGV0aGVyIHRoaXMgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSBvcHRpbWl6YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0cnkgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYWJzb2x1dGUgcmVxdWlyZW1lbnQsIG9yIGlmIHRoaXMgY2FuIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCB0aGF0IGNvdWxkIGluZmx1ZW5jZSBhbnkgb3B0aW1pemF0aW9ucyB3ZSBpbnRyb2R1Y2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMDo0OS44OTM2Mjk4NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIxNjYwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xOTc2PWNvbmZpZyBBUk02NF9QTUVNXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTk3OC1cXHRzZWxlY3QgQVJDSF9IQVNfUE1FTV9BUElcXG5hcmNoL2FybTY0L0tjb25maWc6MTk3OTpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5ODAtXFx0aGVscFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaD00ND1leHRlcm4gdm9pZCAqX19tZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00NS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oOjQ2OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD00NzU9ZXh0ZXJuIF9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3Ni1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo0Nzc6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00NzgtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xcbi0tXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU9Nj1saWIteVxcdFxcdDo9IGNsZWFyX3VzZXIubyBkZWxheS5vIGNvcHlfZnJvbV91c2VyLm9cXHRcXHRcXFxcXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0xMS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZToxMjpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSArPSB1YWNjZXNzX2ZsdXNoY2FjaGUub1xcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTEzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cXHRzZWxlY3QgQVJDSF9IQVNfVElDS19CUk9BRENBU1RcXHRcXHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE1OTpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9pbnZhbGlkYXRlX3BtZW0pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtNjYtLypcXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo2NzogKiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFIHN5bWJvbHNcXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02OC0gKi9cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMDMtXFx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXFx0aWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC94ODYvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTA1LVxcdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXFx0XFx0XFx0aWYgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD04MD1pbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODI6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE3LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTktLyoqXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTA4LVxcdGZ1YSA9IG52ZGltbV9oYXNfZmx1c2gobmRfcmVnaW9uKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTA5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSB8fCBmdWEgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxMC1cXHRcXHRkZXZfd2FybihkZXYsIFxcXCJ1bmFibGUgdG8gZ3VhcmFudGVlIHBlcnNpc3RlbmNlIG9mIHdyaXRlc1xcXFxuXFxcIik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTI2MT1ib29sIGNvcHlfZnJvbV9pdGVyX2Z1bGxfbm9jYWNoZSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjY5LVxcbmluY2x1ZGUvbGludXgvdWlvLmg6MjcwOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNzEtLypcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjczLSAqIF9jb3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKCkgdGhhbiBfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSgpIG11c3QgY2hlY2sgZm9yXFxuaW5jbHVkZS9saW51eC91aW8uaDoyNzQ6ICogSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSBiZWZvcmUgYXNzdW1pbmcgdGhhdCB0aGVcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3NS0gKiBkZXN0aW5hdGlvbiBpcyBmbHVzaGVkIGZyb20gdGhlIGNhY2hlIG9uIHJldHVybi5cXG4tLVxcbmxpYi9LY29uZmlnPTUzNj1jb25maWcgVUFDQ0VTU19NRU1DUFlcXG4tLVxcbmxpYi9LY29uZmlnLTUzOC1cXG5saWIvS2NvbmZpZzo1Mzk6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9LY29uZmlnLTU0MC1cXHRib29sXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0yOTI9RVhQT1JUX1NZTUJPTChfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSk7XFxubGliL2lvdl9pdGVyLmMtMjkzLVxcbmxpYi9pb3ZfaXRlci5jOjI5NDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9pb3ZfaXRlci5jLTI5NS1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMwOjUyLjM3NTgyMjA3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzYzMzQ5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRFU1RfSE1NKipcblxuQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNvbmNpc2U6IFwiTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoIGBURVNUX0hNTWBcIi4gVGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIGEgZmV3IHRoaW5ncyB0byBtZS4gRmlyc3QsIGBURVNUX0hNTWAgbGlrZWx5IHJlZmVycyB0byBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSBleHBlcmltZW50YWwsIHBpZWNlIG9mIGNvZGUgb3IgYSBzZXQgb2YgcGFyYW1ldGVycyByZWxhdGVkIHRvIGEgSGlkZGVuIE1hcmtvdiBNb2RlbC4gVGhlIHVzZSBvZiBhbGwgY2FwcyBhbmQgdGhlIHByZXNlbmNlIG9mIFwiVEVTVFwiIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgbGlrZWx5IGEgdGVzdCBzZXR1cCwgcGVyaGFwcyBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9yIGEgc2NyaXB0IHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgZXZhbHVhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCdzIHRoZSBnb2FsIG9mIHRoaXMgdGVzdD8gQXJlIHdlIGxvb2tpbmcgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgZWRnZSBjYXNlIGRldGVjdGlvbiwgcm9idXN0bmVzcyB2YWxpZGF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0cnVlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgdGhlIHNwZWNpZmljcy4gVGhlIHBocmFzZSBcIkxldCdzIHNlZSB3aGF0IGhhcHBlbnMuLi5cIiB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgaW4gYW4gZXhwbG9yYXRvcnkgcGhhc2UuIFdlJ3JlIHJ1bm5pbmcgdGhpcyBhbmQgd2F0Y2hpbmcgdGhlIG91dHB1dHMsIHByb2JhYmx5IGxvZ2dpbmcgdGhlbSwgYW5kIHByZXBhcmluZyB0byBhbmFseXplIHRoZSByZXN1bHRzIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbeKAmXMgYmVoYXZpb3Igd2l0aCB0aGlzIHNwZWNpZmljIG1vZGVsIHZhcmlhbnQgb3IgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGV4cGVyaW1lbnRhbCBzZXR1cCwgZXhwZWN0ZWQgcmVzdWx0cywgYW5kIHRoZSBzcGVjaWZpYyBtZXRyaWNzLiBUaGlzIGNvdWxkIG1lYW4gYSBsb3Qgb2YgdGhpbmdzLiBJJ20gcmVhZHkgdG8gZXZhbHVhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjI1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzE6MDIuMTM5MTc0NDUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MzU3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjYtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTYtICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxcbmxpYi90ZXN0X2htbV91YXBpLmgtOS1cXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTgwLVxcbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9NT1DT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnLTctQ09ORklHX0dVUF9URVNUPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM1LVxcdFxcdGVjaG8gXFxcIiQwOiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbDpcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g6MzY6XFx0XFx0ZWNobyBcXFwiQ09ORklHX1RFU1RfSE1NPW1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjAzLjk5MzU1NjcyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI2NTI3MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludm9jYXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0J3Mgc2VlLi4uIEZpcnN0LCBJJ2xsIGdvIHRvIGBtbS9tZW1yZW1hcC5jYC4gUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLCB3aGljaCB0aGVuIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFoLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGl0c2VsZiBpcyBpbnZva2VkIHdoZW4gWk9ORV9ERVZJQ0UgbWVtb3J5IGlzIGVpdGhlciBtYXBwZWQgb3IgaG90cGx1Z2dlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5Ob3csIEknbGwgZm9jdXMgb24gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpdHNlbGYuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24ncyBkZWZpbml0aW9uLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmssIEknbGwgbmF2aWdhdGUgb3ZlciB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2VzcyBwcm9wZXJseSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjE1LjI1ODgzMDEzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1faW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuMTA4MTpcXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4xMDgyOlxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuMTA4MzpcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4xMDg0OlxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgdGFpbCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xcbjEwODc6XFx0XFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDI7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKVxcbjEwODg6XFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxcbjEwODk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuMTA5MDpcXHRcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbjEwOTE6XFx0fVxcbjEwOTI6XFx0XFxuMTA5MzpcXHR2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbjEwOTQ6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuMTA5NTpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICsgbnJfcGFnZXM7XFxuMTA5OTpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG4xMTAwOlxcdFxcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcXG4xMTAxOlxcdFxcdHVuc2lnbmVkIGludCBwZm5zX3Blcl9jb21wb3VuZCA9IHBnbWFwX3ZtZW1tYXBfbnIocGdtYXApO1xcbjExMDI6XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xcbjExMDM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XFxuMTEwNDpcXHRcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuMTEwNTpcXHRcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4xMTA2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXFxuMTEwOTpcXHRcXHRcXHRyZXR1cm47XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdC8qXFxuMTExMjpcXHRcXHQgKiBUaGUgY2FsbCB0byBtZW1tYXBfaW5pdCBzaG91bGQgaGF2ZSBhbHJlYWR5IHRha2VuIGNhcmVcXG4xMTEzOlxcdFxcdCAqIG9mIHRoZSBwYWdlcyByZXNlcnZlZCBmb3IgdGhlIG1lbW1hcCwgc28gd2UgY2FuIGp1c3QganVtcCB0b1xcbjExMTQ6XFx0XFx0ICogdGhlIGVuZCBvZiB0aGF0IHJlZ2lvbiBhbmQgc3RhcnQgcHJvY2Vzc2luZyB0aGUgZGV2aWNlIHBhZ2VzLlxcbjExMTU6XFx0XFx0ICovXFxuMTExNjpcXHRcXHRpZiAoYWx0bWFwKSB7XFxuMTExNzpcXHRcXHRcXHRzdGFydF9wZm4gPSBhbHRtYXAtXFx1MDAzZWJhc2VfcGZuICsgdm1lbV9hbHRtYXBfb2Zmc2V0KGFsdG1hcCk7XFxuMTExODpcXHRcXHRcXHRucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47XFxuMTExOTpcXHRcXHR9XFxuMTEyMDpcXHRcXG4xMTIxOlxcdFxcdGlmICghbnJfcGFnZXMpXFxuMTEyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTEyMzpcXHRcXG4xMTI0OlxcdFxcdC8qXFxuMTEyNTpcXHRcXHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUgZmlyc3QgcmVhbCBzdHJ1Y3RcXG4xMTI2OlxcdFxcdCAqIHBhZ2UuIFRoZSBub3JtYWwgcGFnZS1pbml0IGFuZCByZWZjb3VudCBoZWxwZXJzIG11c3Qgb3BlcmF0ZSBvblxcbjExMjc6XFx0XFx0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4xMTI4OlxcdFxcdCAqL1xcbjExMjk6XFx0XFx0cGZuID0gc3RhcnRfcGZuO1xcbjExMzA6XFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuMTEzMTpcXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4xMTMyOlxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbjExMzM6XFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXFxuMTEzNDpcXHRcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbjExMzU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcXG4xMTM2OlxcdFxcdHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZDtcXG4xMTM3OlxcdFxcbjExMzg6XFx0XFx0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cXG4xMTM5OlxcdFxcdGZvciAoOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4xMTQwOlxcdFxcdFxcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXFxuMTE0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuMTE0NjpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kID09IDEpXFxuMTE0OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0XFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcXG4xMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuMTE1MzpcXHRcXHR9XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHN0YXJ0X3BmbiwgbnJfcGFnZXMsIE1JR1JBVEVfTU9WQUJMRSwgZmFsc2UpO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgaW5pdGlhbGlzZWQgJWx1IHBhZ2VzIGluICV1bXNcXFxcblxcXCIsIF9fZnVuY19fLFxcbjExNTg6XFx0XFx0XFx0bnJfcGFnZXMsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7XFxuMTE1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjE1LjI1ODk3NjQ3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDY2ODIxNDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgaG9uZXMgaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBvcHRpbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi10ZW1wb3JhbCBhY2Nlc3MsIGFuZCB0aGVyZSdzIGEgcmVsYXRlZCB1cGRhdGUgY29uY2VybmluZyBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBkaWZmZXJlbnQgbWVtb3J5IGRldmljZSB0eXBlcy5cblxuRmlyc3QsIEkgc2VlIHRoZSBvcHRpbWl6YXRpb24gb2YgYG1lbWNweV9mbHVzaGNhY2hlYCBmb3IgeDg2LiBUaGlzIGZ1bmN0aW9uLCByZXNpZGluZyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCBpcyBub3cgc3BvcnRpbmcgaW5saW5lIGBtb3ZudGlgIGluc3RydWN0aW9ucyDigJMgdGhvc2Ugbm9uLXRlbXBvcmFsIHN0b3JlIGhpbnRzIOKAkyB0YWlsb3JlZCBmb3IgZml4ZWQtc2l6ZSBjb3BpZXM6IDQsIDgsIDE2LCAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBOaWNlLCB0aGlzIGlzIHRoZSBraW5kIG9mIHRhcmdldGVkIG9wdGltaXphdGlvbiBJIGFwcHJlY2lhdGUuIENsZWFybHksIHRoZSBnb2FsIGhlcmUgaXMgdG8gcmVkdWNlIGNhY2hlIHBvbGx1dGlvbiBkdXJpbmcgdGhlc2UgbWVtb3J5IGNvcGllcy5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCBhcyBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbiB0aGF0IGxldmVyYWdlcyBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9uIHg4Niwgd2l0aCBhIGZhbGxiYWNrIHRvIHRoZSBzdGFuZGFyZCBgbWVtY3B5YCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLCByZWluZm9yY2VzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFRoaXMgaXMgYSBjb21tb24gYW5kIHNlbnNpYmxlIGFwcHJvYWNoLlxuXG5Ob3csIHdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGhvdyB0aGlzIGlzIGFsbCBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBub3cgY2FsbGluZyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBpbml0aWFsaXplIGBzdHJ1Y3QgcGFnZWAgZW50cmllcyBmcm9tIGEgdGVtcGxhdGUgYHN0cnVjdCBwYWdlYCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB0aGUgcGFnZSB2aXJ0dWFsIGFkZHJlc3MuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHdlJ3JlIGV4cGVjdGluZyBwZXJmb3JtYW5jZSBnYWlucyB3aGVuIGluaXRpYWxpemluZyB0aGVzZSBwYWdlcy5cblxuRmluYWxseSwgdGhlcmUncyBhIGNoYW5nZSBpbiByZWZjb3VudCBoYW5kbGluZyB3aXRoaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIEZTX0RBWCwgd2hpY2ggSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3Mgc3VidGxlLCBidXQgY3JpdGljYWwuIFRoZSBwcmV2aW91cyBjb2RlIHN0cnVjdHVyZSBoYWQgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgaGFuZGxlZCBwYWdlIGNvdW50IGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHRoZSBgcGdtYXAtXHUwMDNldHlwZWAuIFRoZSBjaGFuZ2UgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBgTUVNT1JZX0RFVklDRV9HRU5FUklDYCB0eXBlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBwcmV2aW91c2x5IHNraXBwZWQsIGJ1dCBub3cgd2UncmUgZXhwbGljaXRseSAqbm90KiBpbml0aWFsaXppbmcgdGhlIHBhZ2UgY291bnQgZm9yIHRoaXMgdHlwZSwgd2hlcmVhcyBiZWZvcmUgaXQgd291bGQgaGF2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGNoYW5nZWQsIHNwZWNpZmljYWxseSwgaG93IHRoaXMgaW1wYWN0cyBtZW1vcnkgbWFuYWdlbWVudC4gSSB0aGluayBJJ2xsIGp1bXAgZGlyZWN0bHkgdG8gYG1tL21tX2luaXQuY2AgYW5kIGNoZWNrIGxpbmVzIDk5MC0xMDMwIHRvIGdhaW4gbW9yZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhbmdlIGlzIGVzc2VudGlhbCB0byBlbnN1cmluZyBjb3JyZWN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMToyOS45MjcxOTQ0NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0ICogdGhlIGZsYWcgYXMgd2UgYXJlIHN0aWxsIGluaXRpYWxpemluZyB0aGUgcGFnZXMuXFxuIDk5MTpcXHRcXHQgKi9cXG4gOTkyOlxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBhZ2UpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHQvKlxcbiA5OTU6XFx0XFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVxcdTAwM2VscnUgd2l0aCBhIC1cXHUwMDNlcGdtYXAgYmFjayBwb2ludGVyXFxuIDk5NjpcXHRcXHQgKiBhbmQgem9uZV9kZXZpY2VfZGF0YS4gIEl0IGlzIGEgYnVnIGlmIGEgWk9ORV9ERVZJQ0UgcGFnZSBpc1xcbiA5OTc6XFx0XFx0ICogZXZlciBmcmVlZCBvciBwbGFjZWQgb24gYSBkcml2ZXItcHJpdmF0ZSBsaXN0LlxcbiA5OTg6XFx0XFx0ICovXFxuIDk5OTpcXHRcXHRwYWdlX2ZvbGlvKHBhZ2UpLVxcdTAwM2VwZ21hcCA9IHBnbWFwO1xcbjEwMDA6XFx0XFx0cGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XFxuMTAwMTpcXHRcXG4xMDAyOlxcdFxcdC8qXFxuMTAwMzpcXHRcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbjEwMDQ6XFx0XFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcXG4xMDA1OlxcdFxcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4xMDA2OlxcdFxcdCAqL1xcbjEwMDc6XFx0XFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbjEwMDg6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4xMDA5OlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbjEwMTA6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbjEwMTE6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuMTAxMjpcXHRcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4xMDEzOlxcdFxcdFxcdGJyZWFrO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4xMDE2OlxcdFxcdFxcdGJyZWFrO1xcbjEwMTc6XFx0XFx0fVxcbjEwMTg6XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMDIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuMTAyMjpcXHR7XFxuMTAyMzpcXHRcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbjEwMjQ6XFx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuMTAyNTpcXHRcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4xMDI2OlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMDI3OlxcdCNlbmRpZlxcbjEwMjg6XFx0XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4xMDI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzE6MjkuOTI3NDExNjQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDc3NzI1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzLCBhbmQgaXQgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgbWVtY3B5X25vbnRlbXBvcmFsYCBpcyBpbnZvbHZlZCwgYW5kIHdlIGFyZSB3b3JraW5nIGRpcmVjdGx5IG9uIGBwYWdlYCB1c2luZyBhIGB0ZW1wbGF0ZWAuIEknbSBzZWVpbmcgdGhhdCBtb2RpZnlpbmcgYHRlbXBsYXRlYCAod2hpY2ggaXMgcGFzc2VkIGJ5IHBvaW50ZXIhKSBjaGFuZ2VzIHRoZSBzaGFyZWQgdGVtcGxhdGUuIEluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdGhlIGBwZm5gIGluY3JlbWVudHMgYW5kIHVwZGF0ZXMgYHRlbXBsYXRlYCBkdXJpbmcgaXRlcmF0aW9ucywgd2hpY2ggaXMgdGhlbiBjb3BpZWQgdG8gYHBhZ2VgIGluIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaXQgbG9va3MgbGlrZSBhIHJlc291bmRpbmcgWUVTLiBUaGlzIGlzbid0IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nOyBpdCdzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIChgbW0vbW1faW5pdC5jYCksIGFuZCBhZmZlY3RpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0dWZmIGxpa2UgYG1lbWNweV9mbHVzaGNhY2hlYCAod2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGApIGFuZCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYXMgd2VsbC4gVGhpcyBpbXBhY3RzIERBWCwgcG1lbSwgdGVzdF9obW0gKHZpcnR1YWwgZGV2aWNlIGZvciB0ZXN0aW5nIEhNTSAvIFpPTkVfREVWSUNFKSwgcDJwZG1hLCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGFyZWFzLlxuXG5JbXBvcnRhbnRseSwgYFpPTkVfREVWSUNFYCBtZW1vcnkgKmNhbiogYmUgdXNlZCBhbmQgdGVzdGVkIGluIFFFTVUhIFdlIGNhbiBlbXVsYXRlIHBlcnNpc3RlbnQgbWVtb3J5IChOVkRJTU0vcG1lbSkgYW5kIERBWCB1c2luZyBgLWRldmljZSBudmRpbW1gLCBvciB0aHJvdWdoIGR1bW15IG1vZHVsZXMgbGlrZSBgdGVzdF9obW0ua29gIG9yIGAvZGV2L2RheGAuIFBsdXMsIHRoZXJlJ3MgYSByZWZjb3VudCBjaGFuZ2UgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCAoZnJvbSAxIHRvIDApLCBkaXJlY3RseSBhbHRlcmluZyBwYWdlIGxpZmVjeWNsZSBiZWhhdmlvci4gRnVydGhlcm1vcmUsIHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgZm9yIDQvOC8xNi8zMi80OC82NC84MC85Ni1ieXRlIGNvcGllcyBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFmZmVjdCBjYWxsZXJzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgISBUaGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIHdhbnQgbm9uLWdlbmVyaWMsIG5vbi1ob3QtcGF0aCwgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6XG5cbkluIGBtbS9tbV9pbml0LmNgLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBtYWluIHRhcmdldCwgd2hpY2ggaXMgZXhwb3J0ZWQuIE5vdGUgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tX2luaXQuY2AsIHNvIHdpbGwgbm90IGJlIGZ1enplZCBhcyBhIGRpcmVjdCBlbnRyeSBwb2ludC5cblxuSW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCB3ZSBoYXZlIGBfX21lbWNweV9mbHVzaGNhY2hlYC4gSXQgbG9va3MgdG8gYmUgYW4gQVNNIGZ1bmN0aW9uLiBMZXQncyBtYWtlIHN1cmUgaXQncyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZC5cblxuV2hhdCBhYm91dCBvdGhlciBmdW5jdGlvbnM/IFdlIHNob3VsZCBhbHNvIGNoZWNrIGFueSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEl0IGxvb2tzIGxpa2UgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGluIGBtbS9tZW1yZW1hcC5jYCBjYWxsIGl0LCBzbyBsZXQncyBjaGVjayB0aGVyZSB0b28sIGFuZCBhbHNvIGluIHJlbGF0ZWQgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODM4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjAxLjQwNTE0MDQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTk4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlfG1lbXJlbWFwX3BhZ2VzfGRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9tbV9pbml0LmM9MTA1NT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMDkyLVxcbm1tL21tX2luaXQuYzoxMDkzOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTEwOTQtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwND1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MjogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjAxLjU5NjM0OTI1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUzMzU4NDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hcHBpbmcgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9scywgYmVjYXVzZSBJIGtub3cgaG93IGVhc3kgaXQgaXMgdG8gb3Zlcmxvb2sgc29tZXRoaW5nIGluIHRoaXMgYXJlYS4gQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBmdW5jdGlvbi4gTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGRlZmluaXRpb24gZm9yIGBfX21lbWNweV9mbHVzaGNhY2hlYCBjYW4gYmUgZm91bmQ7IHRoYXQncyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIGNhY2hlIGJlaGF2aW9yIGR1cmluZyBtZW1vcnkgY29weSBvcGVyYXRpb25zLCBhbmQgaXQgY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6MTQuMTI5OTM3NzA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk3MzU5OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEyMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjMtXFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyNDpcXHRcXHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjktXFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMzA6XFx0ICogX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0MC1cXHRjYXNlIDk2OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTsgYnJlYWs7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTQxOlxcdGRlZmF1bHQ6IF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7IGJyZWFrO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0Mi1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjE3LjEyNzMwMzYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDU3MDY0ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBJbmxpbmluZyBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hlcmUgd2UncmUgYXQgd2l0aCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGEgZmV3IGtleSBmdW5jdGlvbnMuIFJpZ2h0LCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYCAtIGJvdGggYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgKnNob3VsZCogaW5saW5lIHRoZW0uIEdvb2QuIFRoYXQncyBhIHBvaW50IGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIC0gYm90aCBhcmUgYHN0YXRpY2Agc28gb25seSBhdmFpbGFibGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBhbHNvIGxlc3MgbGlrZWx5IHRvIGNvbnRyaWJ1dGUgdG8gY29kZSBibG9hdC5cblxuTm93LCBmb3IgdGhvc2UgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhlaXIgbG9jYWwgY29tcGlsYXRpb24gdW5pdCAtIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGFrZXMgem9uZSwgc3RhcnQgUEZOLCBudW1iZXIgb2YgcGFnZXMsIGFuZCBwYWdlIG1hcCBhcyBwYXJhbWV0ZXJzLiBJbnRlcmVzdGluZy4gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIC0gdGFrZSBhIHBhZ2UgbWFwIGFuZCBlaXRoZXIgYSBub2RlIElEIG9yIGRldmljZSBzdHJ1Y3QgcmVzcGVjdGl2ZWx5LlxuXG5OZXh0IHVwLCBJIG5lZWQgdG8ga25vdyB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIGNvZGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhY3RpdmF0ZWQuIFRpbWUgdG8gZGlnIGludG8gYG1tL01ha2VmaWxlYCBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tX2luaXQuY2AgYW5kIGBtZW1yZW1hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjMyLjE4NDM3MTY4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTU3ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2luaXRcXFxcLm98bWVtcmVtYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NTpcXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICs9IHBlcmNwdS1zdGF0cy5vXFxubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gbWVtcmVtYXAub1xcbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfSE1NX01JUlJPUikgKz0gaG1tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6MzIuMzQwNTM1NDM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3NTI3NDYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIERldmljZSBab25lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IG1hcCBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBkZXZpY2Ugem9uZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBOb3csIEknbSBnb2luZyB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdpbGwgYmUgdGhlIGtleS4gSWYgaXQncyBwcmVzZW50IGFuZCBndWFyZGluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCB0aGVuIEknbGwga25vdyB0aGF0IHRoZSBkZXZpY2Ugem9uZSBpbml0aWFsaXphdGlvbiBpcyBjb25kaXRpb25hbCwgYW5kIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZXZlbiBnZXRzIGNhbGxlZC4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGFuZCBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0ncyBydW50aW1lIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHVuY29uZGl0aW9uYWxseSBleGVjdXRlZCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCB3aXRoIGRlYnVnZ2luZyBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkyNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjQwLjA5MzI4NTYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyNDA4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgKz0gcGVyY3B1LXN0YXRzLm9cXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXFxubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz03MTA9c3RhdGljIHZvaWQgX19tZW1pbml0IHJlc2l6ZV9wZ2RhdF9yYW5nZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzIxLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6NzIyOiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyMy1zdGF0aWMgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbW1faW5pdC5jPTY3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cXG4tLVxcbm1tL21tX2luaXQuYy02NzktXFxubW0vbW1faW5pdC5jOjY4MDojaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIHx8IGRlZmluZWQoQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQpXFxubW0vbW1faW5pdC5jLTY4MS1zdGF0aWMgX19tZW1pbml0IHZvaWQgcGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9ODQ3PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTg1OC1cXG5tbS9tbV9pbml0LmM6ODU5OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtODYwLVxcdC8qXFxuLS1cXG5tbS9tbV9pbml0LmMtODkxLVxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xcbm1tL21tX2luaXQuYzo4OTI6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy04OTMtXFx0XFx0XFx0aWYgKHpvbmUgPT0gWk9ORV9ERVZJQ0UpXFxuLS1cXG5tbS9tbV9pbml0LmM9OTQwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTk3Ni1cXG5tbS9tbV9pbml0LmM6OTc3OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtOTc4LXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yNDU9Y2hhciAqIGNvbnN0IHpvbmVfbmFtZXNbTUFYX05SX1pPTkVTXSA9IHtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTYtXFx0IFxcXCJNb3ZhYmxlXFxcIixcXG5tbS9wYWdlX2FsbG9jLmM6MjU3OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9wYWdlX2FsbG9jLmMtMjU4LVxcdCBcXFwiRGV2aWNlXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jPTExNTY9aW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc3RhdC5jLTExODQtXFxubW0vdm1zdGF0LmM6MTE4NTojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxubW0vdm1zdGF0LmMtMTE4Ni0jZGVmaW5lIFRFWFRfRk9SX0RFVklDRSh4eCwgeXkpIFt4eCMjX0RFVklDRV0gPSB5eSBcXFwiX2RldmljZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjQwLjIzNjUzNDcyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk4ODE1ODEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9tbV9pbml0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhvc2UgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmRpdGlvbmFscyBzdXJyb3VuZGluZyBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCBmbGFncyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHk7IGFueXRoaW5nIHJlbGF0ZWQgdG8gem9uZSBkZXZpY2VzIGlzIG9mdGVuIGNyaXRpY2FsIGZvciBtb2Rlcm4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaGV0ZXJvZ2VuZW91cyBtZW1vcnkgYXJjaGl0ZWN0dXJlcy4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGF0IGV4YWN0bHkgaXMgYENPTkZJR19aT05FX0RFVklDRWAgYWxsIGFib3V0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRob3NlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuUmlnaHQsIHRpbWUgdG8gY29uc3VsdCBgbW0vS2NvbmZpZ2AuIExldCdzIHNraXAgdG8gdGhlIHJlbGV2YW50IHBhcnQsIGFyb3VuZCBsaW5lIDEyMjUuIEFoYSEgSSBzZWUgaXQ6XG5cbmBgYFxuY29uZmlnIFpPTkVfREVWSUNFXG5cdGJvb2wgXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCJcblx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG5cdHNlbGVjdCBYQVJSQVlfTVVMVElcbmBgYFxuXG5cIkRldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0LFwiIHRoYXTigJlzIHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCwgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcGVyc2lzdGVudCBtZW1vcnksIGhvc3QtbWFuYWdlZCBtZW1vcnksIGV0Yy4gVGhlIGBkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVgIGxpbmUgaXMga2V5LiBPa2F5LCBzbyBkZXZpY2UgbWVtb3J5IGlzICpkZXBlbmRlbnQqIG9uIGhvdCByZW1vdmFsIHN1cHBvcnQuIE1ha2VzIHNlbnNlLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGR5bmFtaWNhbGx5IGFkZCBhbmQgcmVtb3ZlIHRoZXNlIGRldmljZXMuIEJ1dCBsZXQncyB2ZXJpZnkgd2hhdCAqdGhhdCogZGVwZW5kcyBvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBNRU1PUllfSE9UUkVNT1ZFYCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZXh0LiBUaGlzIGlzIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIHRydWUgZm9yIHRoaXMgZW50aXJlIGZ1bmN0aW9uYWxpdHkgdG8gYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6NTMuMjI0Njk1NzIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU0NjUwODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxcbm1tL0tjb25maWctNTgxLVxcbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMjo1NS44NzkzNTMyNjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDk4OTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4Mi4gVGhhdCByZWdpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbiBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBhc3BlY3QsIGdpdmVuIHRoZSBmaWxlJ3MgbmFtZS4gSSdtIGhvcGluZyBpdCB0b3VjaGVzIG9uIHRoZSBhcmVhIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBLY29uZmlnIHN5bnRheDogYGNvbmZpZ2AsIGBib29sYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGhlbHBgLCBhbmQgc28gb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBQZXJoYXBzIGl0IGRlc2NyaWJlcyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGF0IGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCBpbnNpZ2h0cyBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6MDAuNDY0MzQ4NTE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcXG4gNTcxOlxcdFxcdCAgaG90cGx1ZyBtZW1vcnkgaW50byBaT05FX01PVkFCTEUuIFRoaXMgbWVtb3J5IHdpbGwgZ2VuZXJhbGx5XFxuIDU3MjpcXHRcXHQgIG5vdCBiZSB1dGlsaXplZCBmb3Iga2VybmVsIGRhdGEuXFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdCAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlIGFkbWluIGtub3dzIHN1ZmZpY2llbnRcXG4gNTc1OlxcdFxcdCAgWk9ORV9OT1JNQUwgbWVtb3J5IGlzIGF2YWlsYWJsZSB0byBkZXNjcmliZSBob3RwbHVnIG1lbW9yeSxcXG4gNTc2OlxcdFxcdCAgb3RoZXJ3aXNlIGhvdHBsdWcgbWVtb3J5IG1heSBmYWlsIHRvIG9ubGluZS4gRm9yIGV4YW1wbGUsXFxuIDU3NzpcXHRcXHQgIHN1ZmZpY2llbnQga2VybmVsLWNhcGFibGUgbWVtb3J5IChaT05FX05PUk1BTCkgbXVzdCBiZVxcbiA1Nzg6XFx0XFx0ICBhdmFpbGFibGUgdG8gYWxsb2NhdGUgcGFnZSBzdHJ1Y3RzIHRvIGRlc2NyaWJlIFpPTkVfTU9WQUJMRS5cXG4gNTc5OlxcdFxcbiA1ODA6XFx0ZW5kY2hvaWNlXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuIDU4MzpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDU4NTpcXHRcXG4gNTg2OlxcdGNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxcbiA1ODc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA1ODg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1ODk6XFx0XFxuIDU5MDpcXHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxuIDU5MTpcXHRcXG4gNTkyOlxcdGNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1OTM6XFx0ICAgICAgIGJvb2xcXG4gNTk0OlxcdFxcbiA1OTU6XFx0IyBIZWF2aWx5IHRocmVhZGVkIGFwcGxpY2F0aW9ucyBtYXkgYmVuZWZpdCBmcm9tIHNwbGl0dGluZyB0aGUgbW0td2lkZVxcbiA1OTY6XFx0IyBwYWdlX3RhYmxlX2xvY2ssIHNvIHRoYXQgZmF1bHRzIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgdXNlciBhZGRyZXNzXFxuIDU5NzpcXHQjIHNwYWNlIGNhbiBiZSBoYW5kbGVkIHdpdGggbGVzcyBjb250ZW50aW9uOiBzcGxpdCBpdCBhdCB0aGlzIE5SX0NQVVMuXFxuIDU5ODpcXHQjIERlZmF1bHQgdG8gNCBmb3Igd2lkZXIgdGVzdGluZywgdGhvdWdoIDggbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS5cXG4gNTk5OlxcdCMgQVJNJ3MgYWRqdXN0X3B0ZSAodW51c2VkIGlmIFZJUFQpIGRlcGVuZHMgb24gbW0td2lkZSBwYWdlX3RhYmxlX2xvY2suXFxuIDYwMDpcXHQjIFBBLVJJU0MgN3h4eCdzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxcbiA2MDE6XFx0IyBTUEFSQzMyIGFsbG9jYXRlcyBtdWx0aXBsZSBwdGUgdGFibGVzIHdpdGhpbiBhIHNpbmdsZSBwYWdlLCBhbmQgdGhlcmVmb3JlXFxuIDYwMjpcXHQjIGEgcGVyLXBhZ2UgbG9jayBsZWFkcyB0byBwcm9ibGVtcyB3aGVuIG11bHRpcGxlIHRhYmxlcyBuZWVkIHRvIGJlIGxvY2tlZFxcbiA2MDM6XFx0IyBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIGNvcHlfcGFnZV9yYW5nZSgpKS5cXG4gNjA0OlxcdCMgREVCVUdfU1BJTkxPQ0sgYW5kIERFQlVHX0xPQ0tfQUxMT0Mgc3BpbmxvY2tfdCBhbHNvIGVubGFyZ2Ugc3RydWN0IHBhZ2UuXFxuIDYwNTpcXHQjXFxuIDYwNjpcXHRjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG4gNjA3OlxcdFxcdGRlZl9ib29sIHlcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDYwOTpcXHRcXHRkZXBlbmRzIG9uIFNNUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMzowMC40NjQ1MzYwNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4MzY0Njc3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwZW5kZW5jeSBXZWIgb2YgTUVNT1JZX0hPVFBMVUcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGluLiBgTUVNT1JZX0hPVFBMVUdg4oCmIHdoYXQncyB0aGUgbGF5IG9mIHRoZSBsYW5kPyBUaW1lIHRvIHVucmF2ZWwgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBuZXZlciBqdXN0IG9uZSB0aGluZywgaXMgaXQ/IEl04oCZcyBhIHdob2xlIGVjb3N5c3RlbS4gR290dGEgZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBmZWF0dXJlcywgb3IgdW5kZXJseWluZyBwaWVjZXMgb2YgdGhlIGtlcm5lbCB0aGlzIHRoaW5nIGxlYW5zIG9uLiBUaGlzIGhvdHBsdWcgbWVjaGFuaXNtIGZvciBtZW1vcnkgaXMgbGlrZWx5IGludGVydHdpbmVkIHdpdGggc2V2ZXJhbCBvdGhlciB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgYXJlIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IsIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGFuZCBob3cgdG8gdXNlIGl0IG9wdGltYWxseS4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMzOjE3LjMwMTAwOTAxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyNzM3NTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxMD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTEzLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUxNDptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MTUtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMzOjIwLjQyODM5MTIwM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI4MTY5Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGVsZW1lbnQuIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTEwLiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHksIHNvIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGxvZ2ljIGRlZmluaW5nIHRoZSByZWxldmFudCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIG9wdGlvbiBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIG9yIHBlcmhhcHMgZXZlbiBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9mIG90aGVyIEtjb25maWcgZnJhZ21lbnRzLiBJIGFudGljaXBhdGUgZmluZGluZyBhIGRlZmluaXRpb24gb2YgYSBzeW1ib2wsIHBvc3NpYmx5IHdpdGhpbiBhbiBgaWZgIGJsb2NrLCBvciBtYXliZSBhIG1lbnUgc3RydWN0dXJlLiBJJ20gYnJhY2luZyBteXNlbGYgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwb3RlbnRpYWxseSBzcGFubmluZyBtdWx0aXBsZSBmaWxlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN5bnRheCwgbG9va2luZyBmb3IgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgZW5kLXVzZXIgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6MjQuNTU2NTYzOTE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4gNTExOlxcdFxcdGJvb2xcXG4gNTEyOlxcdFxcbiA1MTM6XFx0IyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbiA1MTQ6XFx0bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbiA1MTU6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuIDUxNjpcXHRcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbiA1MTc6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbiA1MTg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1MTk6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbiA1MjA6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4gNTIxOlxcdFxcbiA1MjI6XFx0aWYgTUVNT1JZX0hPVFBMVUdcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0Y2hvaWNlXFxuIDUyNTpcXHRcXHRwcm9tcHQgXFxcIk1lbW9yeSBIb3RwbHVnIERlZmF1bHQgT25saW5lIFR5cGVcXFwiXFxuIDUyNjpcXHRcXHRkZWZhdWx0IE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcXG4gNTI3OlxcdFxcdGhlbHBcXG4gNTI4OlxcdFxcdCAgRGVmYXVsdCBtZW1vcnkgdHlwZSBmb3IgaG90cGx1Z2dlZCBtZW1vcnkuXFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBwb2xpY3kgc2V0dGluZyBmb3IgbWVtb3J5IGhvdHBsdWdcXG4gNTMxOlxcdFxcdCAgb25saW5pbmcgcG9saWN5ICgvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9hdXRvX29ubGluZV9ibG9ja3MpIHdoaWNoXFxuIDUzMjpcXHRcXHQgIGRldGVybWluZXMgd2hhdCBoYXBwZW5zIHRvIG5ld2x5IGFkZGVkIG1lbW9yeSByZWdpb25zLiBQb2xpY3kgc2V0dGluZ1xcbiA1MzM6XFx0XFx0ICBjYW4gYWx3YXlzIGJlIGNoYW5nZWQgYXQgcnVudGltZS5cXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ICBUaGUgZGVmYXVsdCBpcyAnb2ZmbGluZScuXFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXFxuIDUzODpcXHRcXHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXFxuIDUzOTpcXHRcXHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXFxuIDU0MDpcXHRcXHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHQgIEV4YW1wbGUga2VybmVsIHVzYWdlIHdvdWxkIGJlIHBhZ2Ugc3RydWN0cyBhbmQgcGFnZSB0YWJsZXMuXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiA1NDU6XFx0XFxuIDU0NjpcXHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbiA1NDc6XFx0XFx0Ym9vbCBcXFwib2ZmbGluZVxcXCJcXG4gNTQ4OlxcdFxcdGhlbHBcXG4gNTQ5OlxcdFxcdCAgSG90cGx1Z2dlZCBtZW1vcnkgd2lsbCBub3QgYmUgb25saW5lZCBieSBkZWZhdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMzoyNC41NTY3NTg2NTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3NTU2MzA4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBvcnRhbnQgb25lczogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhlc2UgYXJlIGNvcmUgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkgYW5kIGRldmljZXMsIGFuZCBhbnkgc3VidGxlIGNoYW5nZSBoZXJlIGNhbiBoYXZlIHJpcHBsZSBlZmZlY3RzLiBBbmQsIGFoYSwgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgLSBpbnRlcmVzdGluZyB0aGF0IGl0J3Mgc2VsZWN0ZWQgYnkgdGhlIGJpZyB0aHJlZTogeDg2XzY0LCBBUk02NCwgYW5kIFBQQy4gRGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGluIHRlcm1zIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiZWhhdmlvcnMuXG5cblJpZ2h0LCB3aXRoIGBaT05FX0RFVklDRWAgaW4gZm9jdXMsIGxldOKAmXMgbWFrZSBzdXJlIHdlJ3ZlIHByb3Blcmx5IHRlc3RlZCB0aGUgZHJpdmVycyBhbmQgdXNlcnMuIExldCdzIGxpc3QgdGhvc2Ugb3V0OiBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBgRlNfREFYYCwgYERFVl9EQVhgLCBhbmQgb2YgY291cnNlLCBgWDg2XzY0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGludGVyYWN0aW9ucyB3aXRoIHRoZSB6b25lIGRldmljZSBhcmUgd2VsbC11bmRlcnN0b29kLiBGaW5hbGx5LCB0aW1lIHRvIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVEVTVF9ITU1gLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNlY3Rpb24gYXJlIGFjY291bnRlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6NTkuMzEyMzkzMTM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NjE3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjAyLjEyMTAzMTcyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4NzY3ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBEZWJ1Z2dpbmcgT3B0aW9ucyoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBkZWJ1Z2dpbmcgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIGtub3cgdGhhdCBmaWxlIHVzdWFsbHkgaG91c2VzIGEgbG90IG9mIHRoZSBjb3JlIGRlYnVnZ2luZyBzZXR0aW5ncywgYW5kIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMzMyNSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0IGFyZWEgZGVhbHMgd2l0aCBhIHBhcnRpY3VsYXIgZGVidWdnaW5nIGZlYXR1cmUgb3IgYSByZWxldmFudCBncm91cGluZyBvZiBvcHRpb25zLiBNaWdodCBiZSBhIHNwZWNpZmljIHN1YnN5c3RlbSdzIGRlYnVnIG9wdGlvbnMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbC4gVGltZSB0byBnZXQgdGhlIElERSBmaXJlZCB1cCBhbmQgaGF2ZSBhIGxvb2s7IHRoZSBkZXRhaWxzIHdpbGwgcmV2ZWFsIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MTIuNzA4NzE1Mzk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMzMyMTpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMjQ6XFx0XFxuMzMyNTpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzI2OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzMyNzpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzMyODpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzMyOTpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzMzA6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzMzE6XFx0XFx0aGVscFxcbjMzMzI6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzMzOlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzMzQ6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzMzNTpcXHRcXG4zMzM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzM3OlxcdFxcbjMzMzg6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcbjMzMzk6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgZnJlZWluZyBwYWdlc1xcXCJcXG4zMzQwOlxcdFxcdGhlbHBcXG4zMzQxOlxcdFxcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXFxuMzM0MjpcXHRcXHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cXG4zMzQzOlxcdFxcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxcbjMzNDQ6XFx0XFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXFxuMzM0NTpcXHRcXHQgIHByb2JhYmx5IE9PTSB5b3VyIHN5c3RlbS5cXG4zMzQ2OlxcdFxcbjMzNDc6XFx0Y29uZmlnIFRFU1RfRlBVXFxuMzM0ODpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGluIGtlcm5lbCBzcGFjZVxcXCJcXG4zMzQ5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfS0VSTkVMX0ZQVV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2ICFLQ09WX0lOU1RSVU1FTlRfQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjEyLjcwODkyNzYwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYzODA3ODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGV4cHJlc3NlZCBhcyBhIHF1aWNrIG1lbnRhbCBydW5kb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBzdHJhaWdodC4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBhIGZldyBrZXkgZmVhdHVyZXM6IGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgLiBUaG9zZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB3ZSdyZSBhaW1pbmcgZm9yLlxuXG5SaWdodCwgYEZTX0RBWGAgaXMgdGhlIG9uZSB0aGF0J3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUgY2hlY2sgd2hlcmUgdGhhdOKAmXMgZGVmaW5lZC4gRWl0aGVyIGl0J3MgaW4gdGhlIHN0YW5kYXJkIGBmcy9LY29uZmlnYCBmaWxlIG9yLCBkZXBlbmRpbmcgb24gaG93IHRoZXnigJl2ZSBzdHJ1Y3R1cmVkIHRoZSBkcml2ZXJzIGZvciB0aGlzIHBhcnRpY3VsYXIgc2V0dXAsIGl0IG1pZ2h0IGJlIGhpZGluZyBpbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IHRoZSBLY29uZmlnIGZpbGVzIG9wZW4gYW5kIGNvbmZpcm0gdGhlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MzEuMzQ3MDA5OTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDA1MjY3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjM0LjY4NzU0MzU1NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDMxNTA4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTguIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHByb2JhYmx5IGRlZmluZXMgc29tZSBjcml0aWNhbCBmaWxlIHN5c3RlbSBvcHRpb25zLiBJdCBtaWdodCBiZSBhIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYSBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aGF0J3MgY2F1c2luZyBtZSBhIGhlYWRhY2hlLCBidXQgcGlucG9pbnRpbmcgdGhhdCBsaW5lIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCByZXNvbHZpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWUsIGlmIGFueS4gTGlrZWx5IHRoaXMgaXMgYSBidWlsZCBmbGFnIG9yIGEgZmVhdHVyZSBmbGFnLiBJJ20gaG9waW5nIEkgY2FuIGRlYnVnIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MzcuMTE5MDU0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjM3LjExOTEzNTQ4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTkxMjIwNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYERFVl9EQVhgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gaG93IGBERVZfREFYYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgZmVhdHVyZSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IGhvdyBpdCdzIHByZXNlbnRlZCBhcyBhbiBvcHRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAgb3Igd2hhdCBvdGhlciBvcHRpb25zIGFyZSBwcm92aWRlZC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGxheSBvdXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIHBlcnNpc3RlbnQgbWVtb3J5IHN1cHBvcnQgb3IgYSBzcGVjaWZpYyBmaWxlc3lzdGVtKSwgYW5kIGFueSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzLCBJIGNhbiBtb3JlIGVmZmljaWVudGx5IHRyb3VibGVzaG9vdCBpc3N1ZXMgb3IgY29uZmlybSBpdHMgcHJlc2VuY2UgZHVyaW5nIGEgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODU1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNDo0OC4xMTAzNTg0NTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTI5NDU5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVl9EQVhcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnPTY9aWYgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6NTEuMTAzMzExNjU1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTY1MzQzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIERBWCBjb25maWd1cmF0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGRyaXZlciwgZGVmaW5pbmcgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgZmlsZSB3aWxsIGxpa2VseSB0ZWxsIG1lIGhvdyBEQVggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIGF0IGJ1aWxkIHRpbWUsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIHNwZWNpZmljcyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzU6NDkuMDY4NjYwMDYyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIERBWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxcbiAgIDU6XFx0XFxuICAgNjpcXHRpZiBEQVhcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERFVl9EQVhcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgKHBlcnNpc3RlbmNlLCBiYW5kd2lkdGgsXFxuICAxMzpcXHRcXHQgIGxhdGVuY3kuLi4pIG1lbW9yeSB2aWEgYW4gbW1hcCgyKSBjYXBhYmxlIGNoYXJhY3RlclxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuICBQbGF0Zm9ybSBmaXJtd2FyZSBvciBhIGRldmljZSBkcml2ZXIgbWF5IGlkZW50aWZ5IGFcXG4gIDE1OlxcdFxcdCAgcGxhdGZvcm0gbWVtb3J5IHJlc291cmNlIHRoYXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSB0aGVcXG4gIDE2OlxcdFxcdCAgYmFzZWxpbmUgbWVtb3J5IHBvb2wuICBNYXBwaW5ncyBvZiBhIC9kZXYvZGF4WC5ZIGRldmljZSBpbXBvc2VcXG4gIDE3OlxcdFxcdCAgcmVzdHJpY3Rpb25zIHRoYXQgbWFrZSB0aGUgbWFwcGluZyBiZWhhdmlvciBkZXRlcm1pbmlzdGljLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgREVWX0RBWF9QTUVNXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG4gIDIyOlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkuICBOb3RlIHRoYXQgdGhpc1xcbiAgMjU6XFx0XFx0ICBkcml2ZXIgY29uc3VtZXMgbWVtb3J5IHJhbmdlcyBhbGxvY2F0ZWQgYW5kIGV4cG9ydGVkIGJ5IHRoZVxcbiAgMjY6XFx0XFx0ICBsaWJudmRpbW0gc3ViLXN5c3RlbS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBTYXkgTSBpZiB1bnN1cmVcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIERFVl9EQVhfSE1FTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNTo0OS4wNjg3OTc4NjJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM4MjIwMjY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN5bWJvbHMgYXJlIGluIHBsYWNlLiBDaGVja2luZyBgRm9jdXNTeW1ib2xzYCwgSSBzZWUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgLCBhbmQgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czogSSBuZWVkIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYFNQQVJTRU1FTV9WTUVNTUFQYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgIGVuYWJsZWQuIFllcCwgYWxsIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBpbiBvcmRlciwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgYXMgaW50ZW5kZWQuIFRoZSBsaXN0ZWQgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbnNpc3RlbnQuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHN1Y2ggbG93LWxldmVsIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC5cblxuVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBjb25jaXNlIGJ1dCBhY2N1cmF0ZTogSXQncyByZWZhY3RvcmluZyBgWk9ORV9ERVZJQ0VgIHBhZ2UgaW5pdGlhbGl6YXRpb24sIHV0aWxpemluZyBwYWdlIHRlbXBsYXRlcyBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBJdCBhbHNvIHRvdWNoZXMgdXBvbiByZWZjb3VudCBpbml0aWFsaXphdGlvbiBmb3IgYE1FTU9SWV9ERVZJQ0VfRlNfREFYYCBwYWdlcyBhbmQgb3B0aW1pemVzIGZpeGVkLXNpemUgY2FjaGUtZmx1c2hpbmcgY29waWVzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIFRoZSBjaGFuZ2VzIGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgYFpPTkVfREVWSUNFYCBwYWdlcyBhcmUgc2V0IHVwLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggREFYLCBOVkRJTU0sIG9yIEhNTS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyBpdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGFuZCBlZmZpY2llbnQsIGVzcGVjaWFsbHkgaW4gdGhlc2UgZW1lcmdpbmcgdXNlIGNhc2VzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgZXZlcnl0aGluZyBzZWVtcyBzb2xpZCBhbmQgd2VsbC12ZXJpZmllZC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIG9mIGNvbmNlcm4uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQgYXBwZWFycyB0aGF0IHRoaXMgcGF0Y2ggaXMgcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgxNywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjowMi44OTA4MjkxMjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MTE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgICBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgICBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjowMy4wMjQyNDg5NjlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE4ODI3MjUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjAzLjAyNDg1MjA4OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTE4NzY2Mzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXFxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjOGU4ZTAwNmY1OTUzYTEzZjMxNjdiMmU0ZDk0YjY1ZThiNTZhZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04MiwyNCArODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aWwgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHUzMiAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTMyICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcIm1vdm50aWwgJTEsICUwXCIgOiBcIj1tXCIoKih1MzIgKilkc3QpIDogXCJyXCIoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuK3tcbitcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbitcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4rXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbitcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChjbnQpIHtcbitcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSAxNjogbW92bnRpXzE2KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbitcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcbitcdGNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG4gXHR9XG4tXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuKyAqIHByaW1pdGl2ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0yODcyLDkgKzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuIFx0ICovXG4gXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG5AQCAtMTAyMSw2ICsxMDE3LDE3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbit9XG4rXG4gLypcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcbiAgKiB0YWlsIHBhZ2VzIGFyZSByZXVzZWQuIENvbnNlcXVlbnRseSwgdGhlIGFtb3VudCBvZiB1bmlxdWUgc3RydWN0IHBhZ2VzIHRvXG5AQCAtMTA1Myw2ICsxMDYwLDggQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5XG4rXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdCB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0ICovXG4rXHRwZm4gPSBoZWFkX3BmbiArIDE7XG4rXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbitcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcbitcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4rXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4rKylcbitcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxuK1x0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbiBcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4rXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbitcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4rXHQgKi9cbitcdHBmbiA9IHN0YXJ0X3BmbjtcbitcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuK1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4rXHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuK1x0cGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbitcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuK1x0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjAzLjAyNDg1MzAwOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUyODg3NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOLXdvcnRoeSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBsb29rcyBsaWtlIHRoaXM6XG5cbiogICBXZSdyZSBhZGRpbmcgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCAoYG1vdm50aV80YCwgYG1vdm50aV84YCwgZXRjLikgdG8gZW5oYW5jZSBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBXZSdyZSBvcHRpbWl6aW5nIGBtZW1jcHlfZmx1c2hjYWNoZWAgYnkgaW5saW5pbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1vdm50aV8qYCkgZm9yIGZpeGVkIHNpemVzICg0LCA4LCAxNiwgZXRjLiBieXRlcykuIFRoZXJlJ3MgYWxzbyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIG1hY3JvIGRlZmluZWQgdGhhdCBjYWxscyB0aGlzIGBtZW1jcHlfZmx1c2hjYWNoZWAuXG5cbiogICBXZSBoYXZlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAuIEFkZGluZyBhIGhlbHBlciBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYW5kIHVwZGF0aW5nIGBzZXRfcGFnZV9saW5rc2AgdG8gdXNlIGl0LlxuXG4qICAgSW4gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgLCB0aGVyZSdzIGEgZmFsbGJhY2sgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlmIGl0J3Mgbm90IGFscmVhZHkgZGVmaW5lZDogaXQgdXNlcyBhIHJlZ3VsYXIgYG1lbWNweWAuXG5cbiogICBOb3csIGluIGBtbS9tbV9pbml0LmNgLCB3ZSBzZWUgb3B0aW1pemF0aW9ucyBmb3IgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSGVyZSdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzLiBUaGV5J3JlIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAsIGluaXRpYWxpemVkIGJ5IGNvcHlpbmcgYSBwcmUtZXhpc3RpbmcgYHN0cnVjdCBwYWdlYCAoYHBhZ2VgKSwgYW5kIHRoZW4gdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gY29weSB0aGlzIHRlbXBsYXRlIHRvIG90aGVyIGBzdHJ1Y3QgcGFnZWBzLlxuXG5CdXQgaGVyZSdzIHRoZSBydWIgLSBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHN0cnVjdCBwYWdlYCByZXR1cm5lZCBieSBgcGZuX3RvX3BhZ2UocGZuKWAgKmlzIGZ1bGx5IGluaXRpYWxpemVkKiBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgYG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIG9wZXJhdGlvbi4gVGhpcyBpcyBjcnVjaWFsIVxuXG5MZXQncyBzZWUuLi4gd2UgaGF2ZTpcblxuYGBgY1xuc3RydWN0IHBhZ2UgdGVtcGxhdGU7XG5zdHJ1Y3QgcGFnZSAqcGFnZTtcbi4uLlxucGZuID0gaGVhZF9wZm4gKyAxO1xucGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG5fX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbnByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG5zZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbm1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG5gYGBcblxuU28sIGJlZm9yZSB0aGUgYG1lbWNweWAgb2YgdGhlIGBwYWdlYCwgYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgYHByZXBfY29tcG91bmRfdGFpbGAgYW5kIGBzZXRfcGFnZV9jb3VudGAgYXJlIGNhbGxlZCBvbiBpdC4gU28sIGxldCdzIHNlZSBob3cgYFpPTkVfREVWSUNFYCBzdHJ1Y3QgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IHVzZSBteSB0b29scyAoYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgKSB0byB0cmFjZSBob3cgdGhlIGBtZW1tYXBgIGFuZCBgWk9ORV9ERVZJQ0VgIHN0cnVjdCBwYWdlcyBhcmUgYWxsb2NhdGVkL2luaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzY6MTUuNTUzNzMyODUzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzAzMTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luaXRfem9uZV9kZXZpY2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTk0MD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy05NzctI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYzo5Nzg6c3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbm1tL21tX2luaXQuYy05NzktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbi0tXFxubW0vbW1faW5pdC5jPTEwNTU9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA4MC1cXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG5tbS9tbV9pbml0LmM6MTA4MTpcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG5tbS9tbV9pbml0LmMtMTA4Mi1cXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbi0tXFxubW0vbW1faW5pdC5jPTEwOTM9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTMwLVxcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbm1tL21tX2luaXQuYzoxMTMxOlxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbm1tL21tX2luaXQuYy0xMTMyLVxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjoxNS42NDA3ODgwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1MDE3Mjk0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL21tX2luaXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmFzZWQgb24gdGhlIHByb2JsZW0gYXQgaGFuZCwgSSB0aGluayB0aGUgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlIEkgbmVlZCB0byBzY3J1dGluaXplIGxpZXMgd2l0aGluIGBtbS9tbV9pbml0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDk3NSB0byAxMDQwLiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHksIHNvIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLCBsaWtlbHkgY29uY2VybmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHJhbmdlIG9mdGVuIGRlYWxzIHdpdGggaW5pdGlhbCBzZXR1cHMsIGJvdW5kYXJ5IGNvbmRpdGlvbiB0ZXN0cywgb3IgcGVyaGFwcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLCBhbmQgdHJ5IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBwaWVjZXMgdGhhdCBhcmVuJ3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGltZSB0byBnZXQgZG93biBpbnRvIHRoZSB3ZWVkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjMxLjE0MjUyMzEzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1faW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk3NTpcXHR9XFxuIDk3NjpcXHRcXG4gOTc3OlxcdCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4gOTc4OlxcdHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gOTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gOTgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcbiA5ODM6XFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdC8qXFxuIDk4NjpcXHRcXHQgKiBNYXJrIHBhZ2UgcmVzZXJ2ZWQgYXMgaXQgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIG9ubGluaW5nXFxuIDk4NzpcXHRcXHQgKiBwaGFzZSBmb3IgaXQgdG8gYmUgZnVsbHkgYXNzb2NpYXRlZCB3aXRoIGEgem9uZS5cXG4gOTg4OlxcdFxcdCAqXFxuIDk4OTpcXHRcXHQgKiBXZSBjYW4gdXNlIHRoZSBub24tYXRvbWljIF9fc2V0X2JpdCBvcGVyYXRpb24gZm9yIHNldHRpbmdcXG4gOTkwOlxcdFxcdCAqIHRoZSBmbGFnIGFzIHdlIGFyZSBzdGlsbCBpbml0aWFsaXppbmcgdGhlIHBhZ2VzLlxcbiA5OTE6XFx0XFx0ICovXFxuIDk5MjpcXHRcXHRfX1NldFBhZ2VSZXNlcnZlZChwYWdlKTtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0LypcXG4gOTk1OlxcdFxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIHVuaW9uIC1cXHUwMDNlbHJ1IHdpdGggYSAtXFx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxcbiA5OTY6XFx0XFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcXG4gOTk3OlxcdFxcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cXG4gOTk4OlxcdFxcdCAqL1xcbiA5OTk6XFx0XFx0cGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXAgPSBwZ21hcDtcXG4xMDAwOlxcdFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHQvKlxcbjEwMDM6XFx0XFx0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcXG4xMDA0OlxcdFxcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuMTAwNTpcXHRcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuMTAwNjpcXHRcXHQgKi9cXG4xMDA3OlxcdFxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4xMDA4OlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuMTAwOTpcXHRcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4xMDEwOlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4xMDExOlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbjEwMTI6XFx0XFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuMTAxMzpcXHRcXHRcXHRicmVhaztcXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuMTAxNjpcXHRcXHRcXHRicmVhaztcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuMTAyMTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbjEwMjI6XFx0e1xcbjEwMjM6XFx0XFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4xMDI0OlxcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbjEwMjU6XFx0XFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXFxuMTAyNjpcXHRcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuMTAyNzpcXHQjZW5kaWZcXG4xMDI4OlxcdFxcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuMTAyOTpcXHR9XFxuMTAzMDpcXHRcXG4xMDMxOlxcdC8qXFxuMTAzMjpcXHQgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcXG4xMDMzOlxcdCAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG9cXG4xMDM0OlxcdCAqIGluaXRpYWxpemUgaXMgYSBsb3Qgc21hbGxlciB0aGF0IHRoZSB0b3RhbCBhbW91bnQgb2Ygc3RydWN0IHBhZ2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjMxLjE0Mjg3NDQ3NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODM3MjA1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBhbmFseXplIHRoaXMgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZXMsIEknbSBhbHJlYWR5IGluZmVycmluZyB0aGlzIGlzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBtZXRob2Qgd2l0aGluIGEgY2xhc3MuIFRoYXQgaW1wbGllcyBpdCdzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93LCBhbmQgc2hvdWxkbid0IGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGNsYXNzIHVubGVzcyBJICpyZWFsbHkqIGtub3cgd2hhdCBJJ20gZG9pbmcuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIG9yIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIFwicGFnZVwiIHdpdGhpbiBhIGxhcmdlciBkb2N1bWVudCBvciBwb3RlbnRpYWxseSBhIHdlYnNpdGUuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpdCB1c2luZywgaXMgdGhlcmUgYW4gaW5kaWNhdGlvbiB0byBhbiBBUEkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBkb2VzIGl0ICpyZXR1cm4qLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjozMy45ODAwODI1NDlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzI3NzY1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX2luaXRfc2luZ2xlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjozNC41MzMzNjc4MDdaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE4ODc2MDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBJbml0aWFsIFNlYXJjaCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLiBHaXZlbiB3aGF0IHdlJ3JlIGxpa2VseSB3b3JraW5nIHdpdGgsIGFuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIEknbSBhY2N1c3RvbWVkIHRvLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyB0aGF0J3MgcHJvYmFibHkgYSBtZXRob2QsIGFuZCBtYXliZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBhIHNpbmdsZSBwYWdlIHZpZXcuIFNvLCBsZXQncyBmaXJlIHVwIHRoZSBzZWFyY2ggYW5kIGdvIGZvciBgX19pbml0X3NpbmdsZV9wYWdlYC4gSXQncyBhIHByZXR0eSB0YXJnZXRlZCB0ZXJtLCBidXQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgc3VyZmFjZXMuIEZyb20gdGhlcmUsIHdlIGNhbiBleHBhbmQgb3IgcmVmaW5lIHRoZSBzZWFyY2ggaWYgbmVjZXNzYXJ5LCBidXQgdGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzY6NDMuNzIyMTMwMzE2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMDc0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pbml0X3NpbmdsZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzE2OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3RhaWxfdm1lbW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxODQtXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIHN0YXJ0X3BhZ2VfbnVtYmVyOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwYWdlKyssIHBmbisrKSB7XFxubW0vaHVnZXRsYi5jOjMxODU6XFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgbmlkKTtcXG5tbS9odWdldGxiLmMtMzE4Ni1cXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9tbV9pbml0LmM9MzcxPXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3pvbmVfbW92YWJsZV9wZm5zX2Zvcl9ub2Rlcyh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTU5NC1cXG5tbS9tbV9pbml0LmM6NTk1OnZvaWQgX19tZW1pbml0IF9faW5pdF9zaW5nbGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxubW0vbW1faW5pdC5jLTU5Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmUsIGludCBuaWQpXFxuLS1cXG5tbS9tbV9pbml0LmM9NzUyPXN0YXRpYyB2b2lkIF9fbWVtaW5pdCBfX2luaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcXG4tLVxcbm1tL21tX2luaXQuYy03NjUtXFx0fVxcbm1tL21tX2luaXQuYzo3NjY6XFx0X19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgemlkLCBuaWQpO1xcbm1tL21tX2luaXQuYy03NjctXFxuLS1cXG5tbS9tbV9pbml0LmM9NzkyPXZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcXG4tLVxcbm1tL21tX2luaXQuYy03OTgtICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxcbm1tL21tX2luaXQuYzo3OTk6ICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5tbS9tbV9pbml0LmMtODAwLSAqIG1lbW1hcF9pbml0X3pvbmVfcmFuZ2UoKS5cXG4tLVxcbm1tL21tX2luaXQuYz04MjA9c3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTgyNy1cXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XFxubW0vbW1faW5pdC5jOjgyODpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6b25lLCBub2RlKTtcXG5tbS9tbV9pbml0LmMtODI5LVxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpO1xcbi0tXFxubW0vbW1faW5pdC5jPTg0Nz12b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy04ODktXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxubW0vbW1faW5pdC5jOjg5MDpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lLCBuaWQpO1xcbm1tL21tX2luaXQuYy04OTEtXFx0XFx0aWYgKGNvbnRleHQgPT0gTUVNSU5JVF9IT1RQTFVHKSB7XFxuLS1cXG5tbS9tbV9pbml0LmM9OTc4PXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21tX2luaXQuYy05ODItXFxubW0vbW1faW5pdC5jOjk4MzpcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcXG5tbS9tbV9pbml0LmMtOTg0LVxcbi0tXFxubW0vbW1faW5pdC5jPTE5OTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGRlZmVycmVkX2luaXRfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMjAwNC1cXHRmb3IgKDsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyssIHBhZ2UrKylcXG5tbS9tbV9pbml0LmM6MjAwNTpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6aWQsIG5pZCk7XFxubW0vbW1faW5pdC5jLTIwMDYtXFx0cmV0dXJuIG5yX3BhZ2VzO1xcbi0tXFxubW0vbW1faW5pdC5oPTExNT12b2lkIG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpO1xcbm1tL21tX2luaXQuaC0xMTYtXFxubW0vbW1faW5pdC5oOjExNzp2b2lkIF9fbWVtaW5pdCBfX2luaXRfc2luZ2xlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbm1tL21tX2luaXQuaC0xMTgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMDkxPXN0YXRpYyBpbnQgZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqaGVhZF9wYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTk0LSAqIDEuIFBhZ2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBmb3IgdGhlIGZpcnN0IHRpbWUsIGluY2x1ZGluZyBkdXJpbmcgZGVmZXJyZWRcXG5tbS9wYWdlX2FsbG9jLmM6MTE5NTogKiAgICBtZW1vcnkgaW5pdDsgc2VlIHRoZSBjYWxsIHRvIHBhZ2Vfa2FzYW5fdGFnX3Jlc2V0IGluIF9faW5pdF9zaW5nbGVfcGFnZS5cXG5tbS9wYWdlX2FsbG9jLmMtMTE5Ni0gKiAyLiBUaGUgYWxsb2NhdGlvbiB3YXMgbm90IHVucG9pc29uZWQgZHVlIHRvIF9fR0ZQX1NLSVBfS0FTQU4sIHdpdGggdGhlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTYwMD12b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE2MDctXFx0LypcXG5tbS9wYWdlX2FsbG9jLmM6MTYwODpcXHQgKiBXaGVuIGluaXRpYWxpemluZyB0aGUgbWVtbWFwLCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBzZXRzIHRoZSByZWZjb3VudFxcbm1tL3BhZ2VfYWxsb2MuYy0xNjA5LVxcdCAqIG9mIGFsbCBwYWdlcyB0byAxIChcXFwiYWxsb2NhdGVkXFxcIi9cXFwibm90IGZyZWVcXFwiKS4gV2UgaGF2ZSB0byBzZXQgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQzLjg5MTM0NDUzM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzczMzA3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgX19pbml0X3NpbmdsZV9wYWdlYCBpbiBgbW0vbW1faW5pdC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBmb2N1c2luZyBvbiBgX19pbml0X3NpbmdsZV9wYWdlYCB3aXRoaW4gdGhlIGBtbV9pbml0LmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBzaW5nbGUgcGFnZXMsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBtYXBwaW5nIG9mIGEgc2luZ2xlIHBoeXNpY2FsIHBhZ2UsIHByb2JhYmx5IGZvciBjcml0aWNhbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVhcmx5IGJvb3Qgc3RhZ2VzLiBJJ20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBob3cgdGhlIHBhZ2UgdGFibGVzIGFyZSBzZXQgdXAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIElzIGl0IG9wdGltaXplZCBmb3Igc2l6ZSwgc3BlZWQsIG9yIGEgYmFsYW5jZSBvZiBib3RoPyBBbmQgaG93IGRvZXMgdGhpcyBsb3ctbGV2ZWwgaW5pdCBmdW5jdGlvbiBwbGF5IHdpdGggdGhlIGxhdGVyLXN0YWdlIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIGlzIGJ1aWx0LCBzbyBnZXR0aW5nIHRoaXMgY2xlYXIgaXMgcGFyYW1vdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQ4LjI2NDY1NTFaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0b3V0OlxcbiA1OTE6XFx0XFx0LyogcmVzdG9yZSB0aGUgbm9kZV9zdGF0ZSAqL1xcbiA1OTI6XFx0XFx0bm9kZV9zdGF0ZXNbTl9NRU1PUlldID0gc2F2ZWRfbm9kZV9zdGF0ZTtcXG4gNTkzOlxcdH1cXG4gNTk0OlxcdFxcbiA1OTU6XFx0dm9pZCBfX21lbWluaXQgX19pbml0X3NpbmdsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gNTk2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgem9uZSwgaW50IG5pZClcXG4gNTk3OlxcdHtcXG4gNTk4OlxcdFxcdG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSk7XFxuIDU5OTpcXHRcXHRzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7XFxuIDYwMDpcXHRcXHRpbml0X3BhZ2VfY291bnQocGFnZSk7XFxuIDYwMTpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwYWdlLVxcdTAwM2VfbWFwY291bnQsIC0xKTtcXG4gNjAyOlxcdFxcdHBhZ2VfY3B1cGlkX3Jlc2V0X2xhc3QocGFnZSk7XFxuIDYwMzpcXHRcXHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlKTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSk7XFxuIDYwNjpcXHQjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcXG4gNjA3OlxcdFxcdC8qIFRoZSBzaGlmdCB3b24ndCBvdmVyZmxvdyBiZWNhdXNlIFpPTkVfTk9STUFMIGlzIGJlbG93IDRHLiAqL1xcbiA2MDg6XFx0XFx0aWYgKCFpc19oaWdobWVtX2lkeCh6b25lKSlcXG4gNjA5OlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3MocGFnZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbiA2MTA6XFx0I2VuZGlmXFxuIDYxMTpcXHR9XFxuIDYxMjpcXHRcXG4gNjEzOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbiA2MTQ6XFx0LypcXG4gNjE1OlxcdCAqIER1cmluZyBtZW1vcnkgaW5pdCBtZW1ibG9ja3MgbWFwIHBmbnMgdG8gbmlkcy4gVGhlIHNlYXJjaCBpcyBleHBlbnNpdmUgYW5kXFxuIDYxNjpcXHQgKiB0aGlzIGNhY2hlcyByZWNlbnQgbG9va3Vwcy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZWFybHlfcGZuX3RvX25pZFxcbiA2MTc6XFx0ICogdHJlYXRzIHN0YXJ0L2VuZCBhcyBwZm5zLlxcbiA2MTg6XFx0ICovXFxuIDYxOTpcXHRzdHJ1Y3QgbW1pbml0X3Bmbm5pZF9jYWNoZSB7XFxuIDYyMDpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3Rfc3RhcnQ7XFxuIDYyMTpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfZW5kO1xcbiA2MjI6XFx0XFx0aW50IGxhc3RfbmlkO1xcbiA2MjM6XFx0fTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0c3RhdGljIHN0cnVjdCBtbWluaXRfcGZubmlkX2NhY2hlIGVhcmx5X3Bmbm5pZF9jYWNoZSBfX21lbWluaXRkYXRhO1xcbiA2MjY6XFx0XFxuIDYyNzpcXHQvKlxcbiA2Mjg6XFx0ICogUmVxdWlyZWQgYnkgU1BBUlNFTUVNLiBHaXZlbiBhIFBGTiwgcmV0dXJuIHdoYXQgbm9kZSB0aGUgUEZOIGlzIG9uLlxcbiA2Mjk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQ4LjI2NDk5MjAyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjU5MTgzODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIEluaXRpYWxpemF0aW9uIGFuZCBDYWNoZSBGbHVzaGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgX19pbml0X3NpbmdsZV9wYWdlYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxpbmcgYG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSlgIGluaXRpYWxseSwgd2hpY2ggcHJlc3VtYWJseSBjbGVhcnMgdGhlIHBhZ2UncyBjb250ZW50cyBhbmQgc2V0cyB1cCBpdHMgaW5pdGlhbCBmaWVsZHMuICBUaGVuLCBhIHRlbXBsYXRlIGlzIGNyZWF0ZWQgdmlhIGEgYG1lbWNweWAgb2YgdGhlIGluaXRpYWwgcGFnZS4gRm9yIHN1YnNlcXVlbnQgcGFnZXMsIHRoZSBmdW5jdGlvbiBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgdGhpcyBmdW5jdGlvbiBtb2RpZmllcyB0aGUgKnRlbXBsYXRlKiBhbmQgdGhlbiBjb3BpZXMgdGhlICp0ZW1wbGF0ZSogaW50byB0aGUgcGFnZSB1c2luZyBgbWVtY3B5X25vbnRlbXBvcmFsYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhY3R1YWxseSBkb2luZyBoZXJlPyAgSSBrbm93IHRoYXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIHNjZW5hcmlvcyBsaWtlIHRoaXMuIFNvLCBsZXQncyBkaXZlIGludG8gdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLiBUaGUgeDg2LTY0IGFyY2hpdGVjdHVyZSBkZWZpbmVzIGBtb3ZudGlfKmAgZnVuY3Rpb25zLCBhbmQgYSBgbWVtY3B5X2ZsdXNoY2FjaGVgIHdyYXBwZXIgZm9yIHRoZW0uXG5cbkxldCdzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGA6XG5cblRoZSBpbmxpbmUgZnVuY3Rpb25zIGBtb3ZudGlfNGAsIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYG1vdm50aWxgIGFuZCBgbW92bnRpcWAgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBhcmUgbm9uLXRlbXBvcmFsIHN0b3Jlcywgd2hpY2ggYnlwYXNzIHRoZSBjYWNoZSB0byB3cml0ZSBkaXJlY3RseSB0byBtZW1vcnkuICBgbWVtY3B5X2ZsdXNoY2FjaGVgIHVzZXMgdGhlc2UgYG1vdm50aV8qYCBmdW5jdGlvbnMgZm9yIGZpeGVkLXNpemUgY29waWVzICg0LCA4LCAxNiwgMzIsIDQ4LCA2NCwgODAgYW5kIDk2IGJ5dGVzKSBhbmQgY2FsbHMgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciB0aGUgb3RoZXIgc2l6ZXMuXG5cblRoZSBmaXhlZC1zaXplIGNhc2VzIGluIHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGltcGxlbWVudGF0aW9uIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMgb24geDg2LTY0LCBzcGVjaWZpY2FsbHkgNjQsIDgwIGFuZCA5NiBieXRlcy4gSSdtIGd1ZXNzaW5nIHRoaXMgb3B0aW1pemF0aW9uIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2UgY29tbW9uIHN0cnVjdHVyZXMsIG9wdGltaXppbmcgZm9yIHRoZSBtZW1vcnkgY29weSBpbiB0aG9zZSBrZXkgdXNlIGNhc2VzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIFdoZXJlIGFyZSB0aGVzZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGNhbGxzICphY3R1YWxseSogYmVpbmcgdXNlZD8gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciBpdHMgdXNhZ2VzLCBhbmQgYWxzbyB0aGUgdXNhZ2VzIG9mIHRoZSB1bmRlcmx5aW5nIGBtb3ZudGlfKmAgZnVuY3Rpb25zIGFuZCB0aGUgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgIHRoYXQgYG1lbWNweV9mbHVzaGNhY2hlYCB1c2VzLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlaXIgYXBwbGljYXRpb24gd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBpZiB0aGUgYmVoYXZpb3Igb2YgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIGlzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM3OjM2LjUyNDIyMDEyMVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0ODc4ODczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jcHlfZmx1c2hjYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg6NDg6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00OS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTktXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MTA6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XFxuLS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xOS19XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTIxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg6Mjk6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmgtMzAtXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYz02OT1zaXplX3QgY29weV9mcm9tX3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODE6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTgyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTg3LX1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4ODpFWFBPUlRfU1lNQk9MKG1lbWNweV9mbHVzaGNhY2hlKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjg0OnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMjA6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyMS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY250KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTIzLVxcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMjQ6XFx0XFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI1LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI5LVxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZSBjYXNlcyBiYWNrIHRvXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMwOlxcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzEtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDAtXFx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE0MTpcXHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDItXFx0fVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTIte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1MzpcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTQtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NDQ4PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNDk4LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYzo0OTk6XFx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTUwMC1cXHR4Y2hnKFxcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM3LVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zOS1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjUtXFx0Y2FjaGUtXFx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXFx1MDAzZWluZm9faW5kZXggKyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjI2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMC1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcXHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcXHUwMDI2cG9zX29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX3Bvc19vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0My1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQ1LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMzc9c3RhdGljIHZvaWQgYXBwZW5kX2xhc3Rfa3NldChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIG5leHRfc2VnKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ1LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE0NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFxcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE0Ny1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTUxPWludCBjYWNoZV9rc2V0X2Nsb3NlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXQgKmtzZXQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzYtXFx0XFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE3NzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cXHUwMDNlc2VnbWVudC5kYXRhLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTc4LVxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTg4LVxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgYWZ0ZXIgY3VycmVudCBrc2V0ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTg5OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSArIGtzZXRfb25tZWRpYV9zaXplLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTkwLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE5MS1cXHQvKiB3cml0ZSBjdXJyZW50IGtzZXQgaW50byBzZWdtZW50ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTkyOlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTkzLVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MjA9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXFx0c2VnX2luZm9fYWRkciA9IGdldF9zZWdfaW5mb19hZGRyKGNhY2hlX3NlZyk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzMtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xMjY9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2N0cmxfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoxMzc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzgtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xODI9aW50IGNhY2hlX3NlZ19pbml0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgc2VnX2lkLCB1MzIgY2FjaGVfc2VnX2lkLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXFx1MDAzZWRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cXHRcXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcXHRtZW1jcHlfZmx1c2hjYWNoZShcXHUwMDI2KGRlc3QpLCBcXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTI9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEtXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMjpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjEzLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXFx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJ3Mgc2luZ2xlXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNzpcXHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyOC1cXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LSNlbmRpZlxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDU6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ2LX1cXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDg9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjczLVxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzQ6XFx0XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3Ni1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcXHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVxcdTAwM2VhZGRyICsgb2Zmc2V0LCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc4LVxcdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTMyLVxcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEzMzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSArIG9mZiwgY2h1bmspO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXFx0XFx0a3VubWFwX2xvY2FsKG1lbSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTExMDk9aW50IGdlbmVyaWNfbnZkaW1tX2ZsdXNoKHN0cnVjdCBuZF9yZWdpb24gKm5kX3JlZ2lvbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyNC1cXHQgKiB0aGUgcGxhdGZvcm0gYnVmZmVyIGZsdXNoLiBOb3RlIHRoYXQgd2UndmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6MTEyNTpcXHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTI2LVxcdCAqIHdtYigpIGVuc3VyZXMgb3JkZXJpbmcgZm9yIHRoZSBOVkRJTU0gZmx1c2ggd3JpdGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc2LXtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMzA1LXtcXG5saWIvaW92X2l0ZXIuYzozMDY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUodG8gKyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTMwNy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mzc6MzkuODczMDIwOTI2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjMzOTQ2NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uOiBQYXRjaCBBbmFseXNpcyBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGBOZWVkc0tNU0FOPXRydWVgLiBUaGlzIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UuIE15IGZvY3VzIGlzIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgS01TQU4gd291bGQgYmUgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5GaXJzdCwgbGV0J3Mgc3VtbWFyaXplIHRoZSBwYXRjaCdzIGNoYW5nZXM6IEl0IGludHJvZHVjZXMgYW4gb3B0aW1pemVkIGBtZW1jcHlfZmx1c2hjYWNoZWAgd2l0aCBpbmxpbmUgYXNzZW1ibHkgdXRpbGl6aW5nIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgZmFzdGVyIG5vbi10ZW1wb3JhbCB3cml0ZXMgKHg4NiksIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgcmVmYWN0b3JzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcy5cblxuVGhlIGNydWNpYWwgcGFydHMgYXJlIGluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEhlcmUsIHJhdGhlciB0aGFuIGluaXRpYWxpemluZyBlYWNoIGBzdHJ1Y3QgcGFnZWAgaW5kaXZpZHVhbGx5LCBhIFwidGVtcGxhdGVcIiBhcHByb2FjaCBpcyB1c2VkLiBUaGUgZmlyc3QgYHBhZ2VgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggY2FsbHMgYF9faW5pdF9zaW5nbGVfcGFnZWAuIENyaXRpY2FsbHksIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBlbnRpcmUgYHN0cnVjdCBwYWdlYCB3aXRoIGBtbV96ZXJvX3N0cnVjdF9wYWdlYCBiZWZvcmUgc2V0dGluZyBvdGhlciBmaWVsZHMuIFRoaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcGFnZSBpcyB0aGVuIGNvcGllZCB0byBhIHN0YWNrIHZhcmlhYmxlIGNhbGxlZCBgdGVtcGxhdGVgLiBTdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBieSBjb3B5aW5nIGZyb20gdGhpcyB0ZW1wbGF0ZSBhZnRlciBzb21lIGZpZWxkcyAobGlrZSB0aGUgc2VjdGlvbikgaGF2ZSBiZWVuIGFkanVzdGVkLiBJdCdzIHRoZW4gdGhhdCB0aGUgc3BlY2lhbGl6ZWQgYG1lbWNweV9ub250ZW1wb3JhbGAgY2FsbCAod2hpY2ggaXMgYWxpYXNlZCBhcyBgbWVtY3B5X2ZsdXNoY2FjaGVgIGluIHRoZSBwYXRjaCkgaXMgdXNlZCwgbWVhbmluZyBubyB0ZW1wb3JhbCBjYWNoZSBtaXNzZXMgYXJlIGluY3VycmVkIG9uIGxhcmdlIHBhZ2UgY29waWVzLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm90IGhlcmUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBpbnZvbHZlZC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRldGVybWluaXN0aWMuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZDoqKiBOb3QgaGVyZS4gVGhlIGBzdHJ1Y3QgcGFnZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIHdpdGggemVyb2luZyBhbmQgc3BlY2lmaWMgZmllbGQgc2V0cy4gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgc3RvcmVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBwYWdlYC5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhlIGNvcGllcyB1c2UgYHNpemVvZigqcGFnZSlgIHdoaWNoIGlzIGEgZGVmaW5lZCBzaXplLCBhbmQgd2UgcmVseSBvbiBLQVNBTiBvciBGT1JUSUZZIHRvIHBpY2sgdXAgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5NeSBjb25jbHVzaW9uPyBCYXNlZCBvbiB0aGUgYW5hbHlzaXMsIEkgc2VlICpubyogcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGNyZWF0ZWQsIHVzZWQgaW50ZXJuYWxseSBpbiBhIHByb2JsZW1hdGljIHdheSwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RhY2stYmFzZWQgYHRlbXBsYXRlYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkgZnJvbSBhIHplcm9lZCBgc3RydWN0IHBhZ2VgLCB3aGljaCBpcyB0aGVuIGNvcGllZCB0byB0aGUgdGFyZ2V0IGBwYWdlYCBpbnN0YW5jZXMuIFRoZSBpbmxpbmUgYXNzZW1ibHkgaW4gYG1lbWNweV9mbHVzaGNhY2hlYCByZWFkcyBpbml0aWFsaXplZCB2YWx1ZXMgZnJvbSBgc3JjYCB0byBgZHN0YCwgd2hpY2ggYXJlIGFsbCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgYW5kIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBmaW5kLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFJlZ3VsYXIgS0FTQU4vRk9SVElGWSBtZWNoYW5pc21zIHdvdWxkIGNhdGNoIGFueSBidWZmZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIGl0IHdlcmUgdG8gb2NjdXIgaW4gdGhlIGNvcHkgb3BlcmF0aW9ucy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgbG9naWMgYXBwZWFycyBzb3VuZDsgbGV0J3MgY2FsbCBpdCBhIGRheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODEsIk91dHB1dFRva2VucyI6Mjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MDoxMi4yMTI0ODkyOTVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLUxlYWsgQW5hbHlzaXMgKEtNU0FOKTpcXG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIGZyb20gYSBzdHJ1Y3QgcGFnZSB0aGF0IHdhcyBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBfX2luaXRfc2luZ2xlX3BhZ2UoKWAgKHdoaWNoIGludm9rZXMgYG1tX3plcm9fc3RydWN0X3BhZ2UoKWApLlxcbi0gQWxsIGJ5dGVzIGluY2x1ZGluZyBwYWRkaW5nIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHRoZSBzdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgdGFyZ2V0cy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBPdXQtb2YtYm91bmRzIC8gTWVtb3J5IENvcnJ1cHRpb24gQW5hbHlzaXMgKEtBU0FOKTpcXG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBhbmQgaW50cm9kdWNlcyBvcHRpbWl6ZWQgZml4ZWQtc2l6ZSBub24tdGVtcG9yYWwgY29waWVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCAvIGBtZW1jcHlfZmx1c2hjYWNoZWApIHVzaW5nIGlubGluZSBhc3NlbWJseSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XFxuLSBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCAoYSBgc3RydWN0IHBhZ2VgKSBpbiBgbW0vbW1faW5pdC5jYCBpcyBpbml0aWFsaXplZCB2aWEgYG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpYCBmcm9tIGEgc3RydWN0IHBhZ2UgdGhhdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgX19pbml0X3NpbmdsZV9wYWdlKClgICh3aGljaCBpbnZva2VzIGBtbV96ZXJvX3N0cnVjdF9wYWdlKClgKS5cXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XFxuLSBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGluY29ycmVjdCBzdHJ1Y3QgcGFnZSBzaXplIGNvcGllcywgYWxpZ25tZW50IGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3b3VsZCBiZSBtZW1vcnkgY29ycnVwdGlvbi9PT0IgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdpt6c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 12:10:42 +0000 UTC FinishedAt: 2026-08-31 12:40:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9542b56cd42cf145b763258075dca774daa0cb0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "SPARSEMEM_VMEMMAP", "DEVICE_PRIVATE", "FS_DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9542b56cd42cf145b763258075dca774daa0cb0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "SPARSEMEM_VMEMMAP", "DEVICE_PRIVATE", "FS_DAX" ], "series_id": "0f04c229-b1a9-40fb-bc2d-4edb88804df8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages", "devm_memremap_pages", "__memcpy_flushcache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYzhlOGUwMDZmNTk1M2ExM2YzMTY3YjJlNGQ5NGI2NWU4YjU2YWVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MjU6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uODMxZDNkZGEzYjM4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTgyLDI0ICYjNDM7ODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7bW92bnRpbCAlMSwgJTBcJiMzNDtcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDs9bVwmIzM0OygqKHUzMiAqKWRzdClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDtyXCYjMzQ7KCooY29uc3QgdTMyICopc3JjKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlsICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTMyICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopKGRzdCAmIzQzOyA4KSkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxuJiM0MztcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4mIzQzO1x0ICogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGxcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xuJiM0MztcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2l0Y2ggKGNudCkge1xuJiM0MztcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4mIzQzO1x0Y2FzZSA4OiAgbW92bnRpXzgoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDQ4OiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOyBicmVhaztcbiYjNDM7XHRjYXNlIDY0OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBicmVhaztcbiYjNDM7XHRjYXNlIDgwOiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhaztcbiYjNDM7XHRjYXNlIDk2OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMzIoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhaztcbiYjNDM7XHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcbiBcdH1cbi1cdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuJiM0MztcbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsXG4mIzQzOy8qXG4mIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuJiM0MzsgKiBwcmltaXRpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuJiM0MztcdFx0c2l6ZV90IGNudClcbiYjNDM7e1xuJiM0MztcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi42NjQwYzc1MjI4MjIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNjQ0LDEyICYjNDM7MjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI4NzIsOSAmIzQzOzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiLi42Y2I1Y2RkMDExNThiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxuQEAgLTI3OCw2ICYjNDM7Mjc4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4mIzQzOy8qXG4mIzQzOyAqIG1lbWNweV9ub250ZW1wb3JhbCgpIHJlcXVlc3RzIGEgbm9uLXRlbXBvcmFsIGNvcHkgd2hlbiB0aGVcbiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4mIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYVxuJiM0MzsgKiBmdW5jdGlvbi1saWtlIG1hY3JvIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbFxuJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbiYjNDM7ICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4mIzQzO1x0KCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgJiM0MzsxMDAwLDkgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4mIzQzO1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbiYjNDM7XHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuJiM0MztcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbiBcdCAqL1xuIFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuQEAgLTEwMjEsNiAmIzQzOzEwMTcsMTcgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4mIzQzO1x0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4mIzQzO1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2l0aCBjb21wb3VuZCBwYWdlIGdlb21ldHJ5IGFuZCB3aGVuIHN0cnVjdCBwYWdlcyBhcmUgc3RvcmVkIGluIHJhbSBtb3N0XG4gICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0b1xuQEAgLTEwNTMsNiAmIzQzOzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdC8qXG4gXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxuQEAgLTEwNjEsMTMgJiM0MzsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGUgc3RhdGUgZXN0YWJsaXNoZWQgYnlcbiYjNDM7XHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQgdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZm4gPSBoZWFkX3BmbiAmIzQzOyAxO1xuJiM0MztcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuJiM0MztcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbiYjNDM7XHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDI7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOylcbiYjNDM7XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuIFxuQEAgLTEwODMsNiAmIzQzOzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTEwOTcsMTAgJiM0MzsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuJiM0MztcdGlmICghbnJfcGFnZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4mIzQzO1x0ICogcGFnZS4gVGhlIG5vcm1hbCBwYWdlLWluaXQgYW5kIHJlZmNvdW50IGhlbHBlcnMgbXVzdCBvcGVyYXRlIG9uXG4mIzQzO1x0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZm4gPSBzdGFydF9wZm47XG4mIzQzO1x0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4mIzQzO1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XHRpZiAocGZuc19wZXJfY29tcG91bmQgIT0gMSlcbiYjNDM7XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjNDM7XHRwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgaGVhZCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xuJiM0MztcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiYjNDM7XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX21lbWNweV9mbHVzaGNhY2hlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzhlOGUwMDZmNTk1M2ExM2YzMTY3YjJlNGQ5NGI2NWU4YjU2YWVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTI6MjU6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCkBAIC04MiwyNCAmIzQzOzgyLDc3IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpbCAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHUzMiAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHUzMiAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkgewotCQlzd2l0Y2ggKGNudCkgewotCQkJY2FzZSA0OgotCQkJCWFzbSAoJiMzNDttb3ZudGlsICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTMyICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTMyICopc3JjKSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSA4OgotCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSAxNjoKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKXNyYykpOwotCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopKGRzdCAmIzQzOyA4KSkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTsKLQkJCQlyZXR1cm47Ci0JCX0KJiM0MzsJbW92bnRpXzE2KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzE2KGRzdCAmIzQzOyAxNiwgc3JjICYjNDM7IDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCQkJCSAgICAgIHNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpCiYjNDM7CQlyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6CiYjNDM7CSAqIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsCiYjNDM7CSAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZSBjYXNlcyBiYWNrIHRvCiYjNDM7CSAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJICovCiYjNDM7CXN3aXRjaCAoY250KSB7CiYjNDM7CWNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgODogIG1vdm50aV84KGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgMTY6IG1vdm50aV8xNihkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSA0ODogbW92bnRpXzMyKGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsgYnJlYWs7CiYjNDM7CWNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDgwOiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOyBicmVhazsKJiM0MzsJY2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7CiYjNDM7CWRlZmF1bHQ6IF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7IGJyZWFrOwogCX0KLQlfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwogfQomIzQzOwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5CiYjNDM7ICogcHJpbWl0aXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQlzaXplX3QgY250KQomIzQzO3sKJiM0MzsJbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjY0NCwxMiAmIzQzOzI2NDQsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCUFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtJmd0O2YsIFNFQ1RJT05TX01BU0sgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVCk7CiAJcmV0dXJuIChtZGYtJmd0O2YgJmd0OyZndDsgU0VDVElPTlNfUEdTSElGVCkgJmFtcDsgU0VDVElPTlNfTUFTSzsKIH0KICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiAwOwpAQCAtMjg3Miw5ICYjNDM7Mjg4Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSwKIHsKIAlzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpOwogCXNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7Ci0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTCi0Jc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKLSNlbmRpZgomIzQzOwlzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNTcwMmRhY2E0MzI2Yi4uNmNiNWNkZDAxMTU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMTUzM2FlYmFmYjY4OC4uNWE2MWMwYzgzZmE3NCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwMCwxMyAmIzQzOzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiAKIAkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgogCSAqLwogCXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKIAljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgpAQCAtMTAyMSw2ICYjNDM7MTAxNywxNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFdpdGggY29tcG91bmQgcGFnZSBnZW9tZXRyeSBhbmQgd2hlbiBzdHJ1Y3QgcGFnZXMgYXJlIHN0b3JlZCBpbiByYW0gbW9zdAogICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0bwpAQCAtMTA1Myw2ICYjNDM7MTA2MCw4IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogewogCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtJmd0O3ZtZW1tYXBfc2hpZnQ7CiYjNDM7CXN0cnVjdCBwYWdlIHRlbXBsYXRlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy4KQEAgLTEwNjEsMTMgJiM0MzsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLAogCSAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby4KIAkgKi8KIAlfX1NldFBhZ2VIZWFkKGhlYWQpOwotCWZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMTsgcGZuICZsdDsgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7Ci0JCXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5CiYjNDM7CSAqIHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZSBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZAomIzQzOwkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQgdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS4KJiM0MzsJICovCiYjNDM7CXBmbiA9IGhlYWRfcGZuICYjNDM7IDE7CiYjNDM7CXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7CW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi8KJiM0MzsJZm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAyOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4mIzQzOyYjNDM7KQomIzQzOwkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLAomIzQzOwkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQogCkBAIC0xMDgzLDYgJiM0MzsxMTAyLDggQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTEwOTcsMTAgJiM0MzsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJCW5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKIAl9CiAKLQlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiYjNDM7CWlmICghbnJfcGFnZXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZSBmaXJzdCByZWFsIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb24KJiM0MzsJICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJICovCiYjNDM7CXBmbiA9IHN0YXJ0X3BmbjsKJiM0MzsJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiYjNDM7CV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CWlmIChwZm5zX3Blcl9jb21wb3VuZCAhPSAxKQomIzQzOwkJbWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCwKJiM0MzsJCQkJICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTsKJiM0MzsJcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZDsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi8KJiM0MzsJZm9yICg7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHsKJiM0MzsJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgcHJlc2VudHMgYW55IGp1aWN5IGZ1enppbmcgdGFyZ2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgY29tcGxleGl0eSwgcG90ZW50aWFsIGZvciBuZXcgY29kZSBwYXRocywgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBTbywgSSBzZWUgdGhhdCB3ZSYjMzk7dmUgZ290OgoKMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGA6IEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgb3B0aW1pemluZyBgbWVtY3B5X2ZsdXNoY2FjaGVgIGJ5IGFkZGluZyBpbmxpbmUgaW1wbGVtZW50YXRpb25zIGZvciBmaXhlZC1zaXplIGNvcGllcyB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIE9wdGltaXphdGlvbiBvZnRlbiBtZWFucyB0aGV5JiMzOTtyZSBhaW1pbmcgZm9yIHBlcmZvcm1hbmNlIGluIGhvdCBjb2RlIHBhdGhzLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG1pc2hhbmRsZWQuIFRoZXkmIzM5O3ZlIGFsc28gZGVmaW5lZCBgbWVtY3B5X25vbnRlbXBvcmFsYCBhcyBgbWVtY3B5X2ZsdXNoY2FjaGVgLgoKMi4gIGBpbmNsdWRlL2xpbnV4L21tLmhgOiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc2VjdGlvbnMgYXJlIHNldCBhbmQgbGlua2VkLCBpbmNsdWRpbmcgYSBuZXcgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCjMuICBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGA6IFRoaXMgc2VlbXMgdG8gYmUgYSBmYWxsYmFjaywgd2hlcmUgYG1lbWNweV9ub250ZW1wb3JhbGAgZmFsbHMgYmFjayB0byBgbWVtY3B5YC4gTWFrZXMgc2Vuc2UuCgo0LiAgYG1tL21tX2luaXQuY2A6IFRoaXMgaXMgdGhlIG1lYXQgb2YgaXQuIFRoZXJlIGFyZSBzdWJzdGFudGlhbCBjaGFuZ2VzIGhlcmU6CiAgICAqICAgSW5pdGlhbGl6YXRpb24gb2YgYFpPTkVfREVWSUNFYCBwYWdlcyBoYXMgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBGU1xfREFYIHBhZ2VzIG5vIGxvbmdlciBnZXQgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdoeSB0aGUgY2hhbmdlPyBUaGlzIGNvdWxkIGhpbnQgYXQgc29tZSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIG1hbmFnZWQsIGFuZCBwZXJoYXBzIGEgbmV3IGNsYXNzIG9mIGJ1Zy4KICAgICogICBUaGV5JiMzOTt2ZSBhZGRlZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgbm93IHVzZXMgYG1lbWNweV9ub250ZW1wb3JhbGAgZm9yIGluaXRpYWxpemluZyBzdHJ1Y3QgcGFnZXMgZm9yIGBaT05FX0RFVklDRWAuIFRoaXMgc291bmRzIGxpa2UgYW4gZWZmb3J0IHRvIG9wdGltaXplIGFuZCBzdGFuZGFyZGl6ZSBwYWdlIGluaXRpYWxpemF0aW9uLCBidXQgaXQgYWxzbyBicmluZ3MgaW4gbmV3IGNvZGUuIEFueSB0aW1lIHlvdSBpbnRyb2R1Y2UgbmV3IHBhZ2UgaW5pdGlhbGl6YXRpb24gY29kZSwgeW91IG9wZW4gdGhlIGRvb3IgdG8gYWxsIHNvcnRzIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBpbml0aWFsaXphdGlvbiBidWdzLgogICAgKiAgIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYXJlIG5vdyB1c2luZyB0aGVzZSB0ZW1wbGF0ZXMgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGxpa2VseSBpcyB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlLgoKTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGRldGVybWluZSB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0OgoKKiAgIFdoZXJlIGlzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhpcyBjb2RlIGlzIHJlYWNoZWQgYW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGRlcGVuZGVudCBvbiBpdC4KKiAgIFdoYXQga2VybmVsIGNvbmZpZ3MgZW5hYmxlIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgY29kZS4gVGhpcyBpcyBjcml0aWNhbCBmb3Igc2VsZWN0aW5nIGEgdGFyZ2V0IGZvciB0aGUgZnV6emVyLgoqICAgVXNpbmcgYGdyZXBwZXJgLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRob3NlIGNhbGxzIHRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBaT05FX0RFVklDRWAgYW5kIHNlZSB3aGF0IGVsc2UgSSBjYW4gZGlnIHVwLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGFmZmVjdGVkIHN1YnN5c3RlbXMuCgpJJiMzOTttIHRoaW5raW5nIHRoYXQgYW55dGhpbmcgaW52b2x2aW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBlc3BlY2lhbGx5IGl0cyB1c2UgaW4gaW5pdGlhbGl6aW5nIHBhZ2VzLCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVmY291bnQgY2hhbmdlIGlzIGFsc28gYSByZWQgZmxhZy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBuYXJyb3cgb3VyIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMzMtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMzQ6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMzNS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNDEtXHQgKi9cbm1tL21lbXJlbWFwLmM6MjQyOlx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXHUwMDI2Tk9ERV9EQVRBKG5pZCktXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXG5tbS9tZW1yZW1hcC5jLTI0My1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbi0tXG5tbS9tbV9pbml0LmM9MTA1NT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTA5Mi1cbm1tL21tX2luaXQuYzoxMDkzOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTA5NC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgUmVtYXBwaW5nIENhbGxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBzb21lIGtleSBtZW1vcnkgcmVtYXBwaW5nIGZ1bmN0aW9ucy4gTXkgZm9jdXMgaGVyZSBpcyBvbiBob3cgYHBhZ2VtYXBfcmFuZ2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFyZSBiZWluZyBlbXBsb3llZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHBpY3R1cmUgb2YgKndoZW4qIHRoZXkgYXJlIGNhbGxlZCwgKndoeSogdGhleSYjMzk7cmUgY2FsbGVkIChzcGVjaWZpY2FsbHkgd2hhdCB0aGUgdXNlIGNhc2UgaXMpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIHVzZWQsIGFzIGl0IHByb3ZpZGVzIG1hbmFnZWQgbWVtb3J5IHJlbWFwcGluZyBhbmQgc28gbGlrZWx5IGhhcyBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuIFVsdGltYXRlbHkgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0zMDc9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOC0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTk6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjAtXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyMy1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjQ6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI1LWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM2LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXA7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwLCBOVU1BX05PX05PREUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjM9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc1LVx0LypcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5NzY6XHQgKiBTcGVjaWFsIGNhc2U6IGFkZF9wYWdlcygpIGlzIGNhbGxlZCBieSBtZW1yZW1hcF9wYWdlcygpIGZvciBhZGRpbmcgZGV2aWNlXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc3LVx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yNzk9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMTktXG5kcml2ZXJzL2RheC9mc2Rldi5jOjMyMDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0zMjEtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0yOTY9bm91dmVhdV9kbWVtX2NodW5rX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLCBzdHJ1Y3QgcGFnZSAqKnBwYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMzMzpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmNodW5rLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzk4PXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MzktXHRwYWdlbWFwLVx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NDA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NDEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgyPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMS1cdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDEyOlx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTMtXHQgKiBhbGlnbm1lbnQgZXhjZWVkcyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgZm9saW8gb3JkZXIgZm9yIHRoaXMga2VybmVsIGNvbmZpZy5cbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjAtXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjE6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjItXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjM6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjQtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ2Mz1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMzOlx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzNC1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTQ1LVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU0NjpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NDctXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTkzND1FWFBPUlRfU1lNQk9MKG5kX3JlZ2lvbl9yZWxlYXNlX2xhbmUpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjkzNzogKiBQb3dlclBDIHJlcXVpcmVzIHRoaXMgYWxpZ25tZW50IGZvciBtZW1yZW1hcF9wYWdlcygpLiBBbGwgb3RoZXIgYXJjaHNcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyMy1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0Olx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTI1LVx0aWYgKElTX0VSUih2YWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzU9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTUtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNjpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE3LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI1LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI2Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI3LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMjk6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cdC8qXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5Olx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkzLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1yZW1hcF9jb21wYXRfYWxpZ24odm9pZClcbi0tXG5saWIvdGVzdF9obW0uYz02NjE9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbi0tXG5saWIvdGVzdF9obW0uYy03MTgtXHR9XG5saWIvdGVzdF9obW0uYzo3MTk6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xubGliL3Rlc3RfaG1tLmMtNzIwLVx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcbi0tXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcbi0tXG5tbS9tZW1yZW1hcC5jLTE5LS8qXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XG5tbS9tZW1yZW1hcC5jLTIyLSAqIGNvbnN0cmFpbnRzIG9uIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIG1hcHBpbmcgKG5hbWVzcGFjZSkuXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxubW0vbWVtcmVtYXAuYzoyNTogKiB0aGUgbWluaW11bSBtYXBwaW5nIGdyYW51bGFyaXR5IG9mIG1lbXJlbWFwX3BhZ2VzKCkgaXMgMTZNQi5cbm1tL21lbXJlbWFwLmMtMjYtICpcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NDA0PWludCBfX21lbWluaXQgdm1lbW1hcF9wb3B1bGF0ZV9odWdlcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcbm1tL3NwYXJzZS12bWVtbWFwLmM6NDYyOiAqIE5vdGUgdGhhdCBtZW1yZW1hcF9wYWdlcygpIHJlc2V0cyBAbnJfcmFuZ2UgdmFsdWUgYW5kIHdpbGwgaW5jcmVtZW50XG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2My0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0xMz1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MTQ6bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkLTE1LWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE0LVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVx0aWYgKCFuZml0X3JlcylcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMjI6XHRcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMzU6RVhQT1JUX1NZTUJPTF9HUEwoX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oPTIxMj12b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cdFx0c2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBSZW1hcHBpbmcgaW4gUUVNVSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaG93IHdlIGNhbiByZWFjaCB0aG9zZSBjYWxscyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgbGV0JiMzOTtzIGxvb2sgYXQgYSBmZXcgc3BlY2lmaWMgYXJlYXMgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBGb3Igc3RhcnRlcnMsIEkgc2hvdWxkIGV4YW1pbmUgYGxpYi90ZXN0X2htbS5jYCDigJMgdGhhdCBITU0gdGVzdCBkZXZpY2UsIGAvZGV2L2htbV9kbWlycm9yYCwgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgdmlydGlvX2ZzYCB3aXRoIERBWCBtaWdodCBiZSBpbnZvbHZlZCwgYXMgd2VsbCBhcyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggcGVyc2lzdGVudCBtZW1vcnkgdGVjaG5vbG9naWVzIGxpa2UgYHBtZW1gLCBgbnZkaW1tYCwgYW5kIG90aGVyIERBWCBjb25maWd1cmF0aW9ucy4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IHVzaW5nIHRoaXMuIGBkYXhfcG1lbWAsIGBkZXZfZGF4YCwgYW5kIGBmc2Rldl9kYXhgIGFyZSBhbHNvIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBsaWIvS2NvbmZpZ2AgdG8gc2VlIGlmIGBURVNUX0hNTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpbmdzIGxpa2UgYG52ZGltbWAgb3Igc2ltaWxhciBwZXJzaXN0ZW50IG1lbW9yeSBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVnaW9ucywgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGFsbCBLY29uZmlnIGZpbGVzIGZvciBgWk9ORV9ERVZJQ0VgLCB3aGljaCBpcyBrZXkgZm9yIERBWCBhbmQgZGV2aWNlLWJhc2VkIG1lbW9yeSBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZ2AuIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBsaW5lIDEyMjUgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gbm90IGV4cGVjdGluZyBhIGdyb3VuZGJyZWFraW5nIHJldmVsYXRpb24sIGJ1dCBvZnRlbiB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGlzIGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgSSYjMzk7dmUgYmVlbiBwdXp6bGluZyBvdmVyLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRocm91Z2ggdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBoYXBwZW5zIGFzIG9wdGlvbnMgY2hhbmdlLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBwYXJ0aWN1bGFyIG9wdGlvbiBJIG5lZWQgdG8gZWl0aGVyIHNldCwgb3IgdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3Mgbm90IGJlaW5nIHNldCBjb3JyZWN0bHkuIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQ1Olx0IyB0YWJsZXMuXG4xMjQ2Olx0I1xuMTI0NzpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQ4Olx0XHRib29sXG4xMjQ5Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI1MDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI1MTpcdFxuMTI1MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNTM6XHRcdGJvb2xcbjEyNTQ6XHRcbjEyNTU6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNTY6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjU3Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjU4Olx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyB0aGUgVUFDQ0VTUyBGbHVzaCBDYWNoZSBGbGFnKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBXZSYjMzk7dmUgZ290IHRoaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZGVhbGluZyB3aXRoIG1lbW9yeSBhY2Nlc3MsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCBidXQgd2UgaGF2ZSB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgY29ycmVjdC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2FjaGUgY29oZXJlbmN5IHByb3Blcmx5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHVzZXItc3BhY2UgYWNjZXNzLiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIHNwZWNpZmljcywgSSBzaG91bGQgZ28gYWhlYWQgYW5kIGV4YW1pbmUgdGhlIG1hY3JvLCBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmZWF0dXJlLiBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggc3lzdGVtcyBiZWZvcmUgd2hlcmUgY2FjaGUgZmx1c2hlcyBhcm91bmQgdXNlci1zcGFjZSBhY2Nlc3NlcyB3ZXJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB0byBhdm9pZCBzdGFsZSBkYXRhIGlzc3VlcyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gdGVsbHMgdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBpbXBhY3RzIG91ciBjdXJyZW50IGNvZGUgcGF0aC4gRXNzZW50aWFsbHksICppcyogdGhlcmUgYSByZXF1aXJlbWVudCwgYnkgZGVzaWduLCB0byBmbHVzaCB0aGUgY2FjaGUsIGFuZCBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBjb25kaXRpb25hbGl6ZXMgaXRzZWxmIGFyb3VuZCB0aGlzIGZsYWcsIGFuZCB3aGV0aGVyIHRoaXMgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSBvcHRpbWl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdHJ5IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGFic29sdXRlIHJlcXVpcmVtZW50LCBvciBpZiB0aGlzIGNhbiBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQgdGhhdCBjb3VsZCBpbmZsdWVuY2UgYW55IG9wdGltaXphdGlvbnMgd2UgaW50cm9kdWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5NzY9Y29uZmlnIEFSTTY0X1BNRU1cbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTk3OC1cdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjE5Nzk6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L0tjb25maWctMTk4MC1cdGhlbHBcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDUtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oOjQ2OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD00NzU9ZXh0ZXJuIF9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDc3OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00NzgtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xuLS1cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlPTY9bGliLXlcdFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1x0XHRcXFxuLS1cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTExLVxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6MTI6bGliLSQoQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSkgJiM0Mzs9IHVhY2Nlc3NfZmx1c2hjYWNoZS5vXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0xMy1cbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFx0XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9pbnZhbGlkYXRlX3BtZW0pO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY2LS8qXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo2NzogKiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFIHN5bWJvbHNcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY4LSAqL1xuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTAzLVx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXHRpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC94ODYvS2NvbmZpZzoxMDQ6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTA1LVx0c2VsZWN0IEFSQ0hfSEFTX0NPUFlfTUNcdFx0XHRpZiBYODZfNjRcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD04MD1pbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04MS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjgyOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNy1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xOS0vKipcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUwOC1cdGZ1YSA9IG52ZGltbV9oYXNfZmx1c2gobmRfcmVnaW9uKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MDk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSkgfHwgZnVhIFx1MDAzYyAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTEwLVx0XHRkZXZfd2FybihkZXYsIFwmIzM0O3VuYWJsZSB0byBndWFyYW50ZWUgcGVyc2lzdGVuY2Ugb2Ygd3JpdGVzXFxuXCYjMzQ7KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTI2MT1ib29sIGNvcHlfZnJvbV9pdGVyX2Z1bGxfbm9jYWNoZSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI2OS1cbmluY2x1ZGUvbGludXgvdWlvLmg6MjcwOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3MS0vKlxuLS1cbmluY2x1ZGUvbGludXgvdWlvLmgtMjczLSAqIF9jb3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKCkgdGhhbiBfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSgpIG11c3QgY2hlY2sgZm9yXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3NDogKiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIGJlZm9yZSBhc3N1bWluZyB0aGF0IHRoZVxuaW5jbHVkZS9saW51eC91aW8uaC0yNzUtICogZGVzdGluYXRpb24gaXMgZmx1c2hlZCBmcm9tIHRoZSBjYWNoZSBvbiByZXR1cm4uXG4tLVxubGliL0tjb25maWc9NTM2PWNvbmZpZyBVQUNDRVNTX01FTUNQWVxuLS1cbmxpYi9LY29uZmlnLTUzOC1cbmxpYi9LY29uZmlnOjUzOTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvS2NvbmZpZy01NDAtXHRib29sXG4tLVxubGliL2lvdl9pdGVyLmM9MjkyPUVYUE9SVF9TWU1CT0woX2NvcHlfZnJvbV9pdGVyX25vY2FjaGUpO1xubGliL2lvdl9pdGVyLmMtMjkzLVxubGliL2lvdl9pdGVyLmM6Mjk0OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvaW92X2l0ZXIuYy0yOTUtc3RhdGljIF9fYWx3YXlzX2lubGluZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgVEVTVF9ITU0qKgoKQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNvbmNpc2U6ICYjMzQ7TGV0JiMzOTtzIHNlZSB3aGF0IGhhcHBlbnMgd2l0aCBgVEVTVF9ITU1gJiMzNDsuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGZldyB0aGluZ3MgdG8gbWUuIEZpcnN0LCBgVEVTVF9ITU1gIGxpa2VseSByZWZlcnMgdG8gYSBzcGVjaWZpYywgcG90ZW50aWFsbHkgZXhwZXJpbWVudGFsLCBwaWVjZSBvZiBjb2RlIG9yIGEgc2V0IG9mIHBhcmFtZXRlcnMgcmVsYXRlZCB0byBhIEhpZGRlbiBNYXJrb3YgTW9kZWwuIFRoZSB1c2Ugb2YgYWxsIGNhcHMgYW5kIHRoZSBwcmVzZW5jZSBvZiAmIzM0O1RFU1QmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHRlc3Qgc2V0dXAsIHBlcmhhcHMgYSBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvciBhIHNjcmlwdCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGV2YWx1YXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyB0aGUgZ29hbCBvZiB0aGlzIHRlc3Q/IEFyZSB3ZSBsb29raW5nIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIGVkZ2UgY2FzZSBkZXRlY3Rpb24sIHJvYnVzdG5lc3MgdmFsaWRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgdHJ1ZSB1bmRlcnN0YW5kaW5nIHJlcXVpcmVzIHRoZSBzcGVjaWZpY3MuIFRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucy4uLiYjMzQ7IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgaW4gYW4gZXhwbG9yYXRvcnkgcGhhc2UuIFdlJiMzOTtyZSBydW5uaW5nIHRoaXMgYW5kIHdhdGNoaW5nIHRoZSBvdXRwdXRzLCBwcm9iYWJseSBsb2dnaW5nIHRoZW0sIGFuZCBwcmVwYXJpbmcgdG8gYW5hbHl6ZSB0aGUgcmVzdWx0cyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW3igJlzIGJlaGF2aW9yIHdpdGggdGhpcyBzcGVjaWZpYyBtb2RlbCB2YXJpYW50IG9yIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZXhwZXJpbWVudGFsIHNldHVwLCBleHBlY3RlZCByZXN1bHRzLCBhbmQgdGhlIHNwZWNpZmljIG1ldHJpY3MuIFRoaXMgY291bGQgbWVhbiBhIGxvdCBvZiB0aGluZ3MuIEkmIzM5O20gcmVhZHkgdG8gZXZhbHVhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNi1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNy1DT05GSUdfR1VQX1RFU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cdFx0ZWNobyBcJiMzNDskMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDozNjpcdFx0ZWNobyBcJiMzNDtDT05GSUdfVEVTVF9ITU09bVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXHRcdGV4aXQgJGtzZnRfc2tpcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludm9jYXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIExldCYjMzk7cyBzZWUuLi4gRmlyc3QsIEkmIzM5O2xsIGdvIHRvIGBtbS9tZW1yZW1hcC5jYC4gUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLCB3aGljaCB0aGVuIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFoLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGl0c2VsZiBpcyBpbnZva2VkIHdoZW4gWk9ORV9ERVZJQ0UgbWVtb3J5IGlzIGVpdGhlciBtYXBwZWQgb3IgaG90cGx1Z2dlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKTm93LCBJJiMzOTtsbCBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbi4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgSSYjMzk7bGwgbmF2aWdhdGUgb3ZlciB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2VzcyBwcm9wZXJseSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4xMDgxOlx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbjEwODI6XHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4xMDgzOlx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbjEwODQ6XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4xMDg1Olx0XG4xMDg2Olx0XHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgdGFpbCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xuMTA4NzpcdFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAyOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspXG4xMDg4Olx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbixcbjEwODk6XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuMTA5MDpcdFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbjEwOTE6XHR9XG4xMDkyOlx0XG4xMDkzOlx0dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbjEwOTQ6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuMTA5NTpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjEwOTY6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMDk3Olx0e1xuMTA5ODpcdFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4xMDk5Olx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuMTEwMDpcdFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApO1xuMTEwMTpcdFx0dW5zaWduZWQgaW50IHBmbnNfcGVyX2NvbXBvdW5kID0gcGdtYXBfdm1lbW1hcF9ucihwZ21hcCk7XG4xMTAyOlx0XHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4xMTAzOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbjExMDQ6XHRcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuMTEwNTpcdFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4xMTA2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExMDc6XHRcbjExMDg6XHRcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbjExMDk6XHRcdFx0cmV0dXJuO1xuMTExMDpcdFxuMTExMTpcdFx0LypcbjExMTI6XHRcdCAqIFRoZSBjYWxsIHRvIG1lbW1hcF9pbml0IHNob3VsZCBoYXZlIGFscmVhZHkgdGFrZW4gY2FyZVxuMTExMzpcdFx0ICogb2YgdGhlIHBhZ2VzIHJlc2VydmVkIGZvciB0aGUgbWVtbWFwLCBzbyB3ZSBjYW4ganVzdCBqdW1wIHRvXG4xMTE0Olx0XHQgKiB0aGUgZW5kIG9mIHRoYXQgcmVnaW9uIGFuZCBzdGFydCBwcm9jZXNzaW5nIHRoZSBkZXZpY2UgcGFnZXMuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdGlmIChhbHRtYXApIHtcbjExMTc6XHRcdFx0c3RhcnRfcGZuID0gYWx0bWFwLVx1MDAzZWJhc2VfcGZuICYjNDM7IHZtZW1fYWx0bWFwX29mZnNldChhbHRtYXApO1xuMTExODpcdFx0XHRucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4xMTE5Olx0XHR9XG4xMTIwOlx0XG4xMTIxOlx0XHRpZiAoIW5yX3BhZ2VzKVxuMTEyMjpcdFx0XHRyZXR1cm47XG4xMTIzOlx0XG4xMTI0Olx0XHQvKlxuMTEyNTpcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4xMTI2Olx0XHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbjExMjc6XHRcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4xMTI4Olx0XHQgKi9cbjExMjk6XHRcdHBmbiA9IHN0YXJ0X3BmbjtcbjExMzA6XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuMTEzMTpcdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4xMTMyOlx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuMTEzMzpcdFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4xMTM0Olx0XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4xMTM1Olx0XHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuMTEzNjpcdFx0cGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZDtcbjExMzc6XHRcbjExMzg6XHRcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4xMTM5Olx0XHRmb3IgKDsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4xMTQwOlx0XHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuMTE0MTpcdFxuMTE0MjpcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4xMTQzOlx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbjExNDQ6XHRcbjExNDU6XHRcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4xMTQ2Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRcdGlmIChwZm5zX3Blcl9jb21wb3VuZCA9PSAxKVxuMTE0OTpcdFx0XHRcdGNvbnRpbnVlO1xuMTE1MDpcdFxuMTE1MTpcdFx0XHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxuMTE1MjpcdFx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbjExNTM6XHRcdH1cbjExNTQ6XHRcbjExNTU6XHRcdHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHN0YXJ0X3BmbiwgbnJfcGFnZXMsIE1JR1JBVEVfTU9WQUJMRSwgZmFsc2UpO1xuMTE1NjpcdFxuMTE1NzpcdFx0cHJfZGVidWcoXCYjMzQ7JXMgaW5pdGlhbGlzZWQgJWx1IHBhZ2VzIGluICV1bXNcXG5cJiMzNDssIF9fZnVuY19fLFxuMTE1ODpcdFx0XHRucl9wYWdlcywgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpKTtcbjExNTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgbWVtb3J5IGNvcHlpbmcsIHNwZWNpZmljYWxseSBmb3Igbm9uLXRlbXBvcmFsIGFjY2VzcywgYW5kIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCB1cGRhdGUgY29uY2VybmluZyBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBkaWZmZXJlbnQgbWVtb3J5IGRldmljZSB0eXBlcy4KCkZpcnN0LCBJIHNlZSB0aGUgb3B0aW1pemF0aW9uIG9mIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHg4Ni4gVGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgaXMgbm93IHNwb3J0aW5nIGlubGluZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMg4oCTIHRob3NlIG5vbi10ZW1wb3JhbCBzdG9yZSBoaW50cyDigJMgdGFpbG9yZWQgZm9yIGZpeGVkLXNpemUgY29waWVzOiA0LCA4LCAxNiwgMzIsIDQ4LCA2NCwgODAsIGFuZCA5NiBieXRlcy4gTmljZSwgdGhpcyBpcyB0aGUga2luZCBvZiB0YXJnZXRlZCBvcHRpbWl6YXRpb24gSSBhcHByZWNpYXRlLiBDbGVhcmx5LCB0aGUgZ29hbCBoZXJlIGlzIHRvIHJlZHVjZSBjYWNoZSBwb2xsdXRpb24gZHVyaW5nIHRoZXNlIG1lbW9yeSBjb3BpZXMuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uIHRoYXQgbGV2ZXJhZ2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAgb24geDg2LCB3aXRoIGEgZmFsbGJhY2sgdG8gdGhlIHN0YW5kYXJkIGBtZW1jcHlgIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMsIHJlaW5mb3JjZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgc2Vuc2libGUgYXBwcm9hY2guCgpOb3csIHdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGhvdyB0aGlzIGlzIGFsbCBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBub3cgY2FsbGluZyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBpbml0aWFsaXplIGBzdHJ1Y3QgcGFnZWAgZW50cmllcyBmcm9tIGEgdGVtcGxhdGUgYHN0cnVjdCBwYWdlYCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB0aGUgcGFnZSB2aXJ0dWFsIGFkZHJlc3MuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBleHBlY3RpbmcgcGVyZm9ybWFuY2UgZ2FpbnMgd2hlbiBpbml0aWFsaXppbmcgdGhlc2UgcGFnZXMuCgpGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiByZWZjb3VudCBoYW5kbGluZyB3aXRoaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIEZTX0RBWCwgd2hpY2ggSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBzdWJ0bGUsIGJ1dCBjcml0aWNhbC4gVGhlIHByZXZpb3VzIGNvZGUgc3RydWN0dXJlIGhhZCBhIHN3aXRjaCBzdGF0ZW1lbnQgdGhhdCBoYW5kbGVkIHBhZ2UgY291bnQgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gdGhlIGBwZ21hcC0mZ3Q7dHlwZWAuIFRoZSBjaGFuZ2UgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBgTUVNT1JZX0RFVklDRV9HRU5FUklDYCB0eXBlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBwcmV2aW91c2x5IHNraXBwZWQsIGJ1dCBub3cgd2UmIzM5O3JlIGV4cGxpY2l0bHkgKm5vdCogaW5pdGlhbGl6aW5nIHRoZSBwYWdlIGNvdW50IGZvciB0aGlzIHR5cGUsIHdoZXJlYXMgYmVmb3JlIGl0IHdvdWxkIGhhdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLCBzcGVjaWZpY2FsbHksIGhvdyB0aGlzIGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIEkgdGhpbmsgSSYjMzk7bGwganVtcCBkaXJlY3RseSB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgbGluZXMgOTkwLTEwMzAgdG8gZ2FpbiBtb3JlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGFuZ2UgaXMgZXNzZW50aWFsIHRvIGVuc3VyaW5nIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHQgKiB0aGUgZmxhZyBhcyB3ZSBhcmUgc3RpbGwgaW5pdGlhbGl6aW5nIHRoZSBwYWdlcy5cbiA5OTE6XHRcdCAqL1xuIDk5MjpcdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGFnZSk7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKlxuIDk5NTpcdFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVx1MDAzZWxydSB3aXRoIGEgLVx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxuIDk5NjpcdFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcbiA5OTc6XHRcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cbiA5OTg6XHRcdCAqL1xuIDk5OTpcdFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuMTAwMDpcdFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbjEwMDE6XHRcbjEwMDI6XHRcdC8qXG4xMDAzOlx0XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuMTAwNDpcdFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbjEwMDU6XHRcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbjEwMDY6XHRcdCAqL1xuMTAwNzpcdFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4xMDA4Olx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuMTAwOTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4xMDEwOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4xMDExOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbjEwMTI6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDEzOlx0XHRcdGJyZWFrO1xuMTAxNDpcdFxuMTAxNTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4xMDE2Olx0XHRcdGJyZWFrO1xuMTAxNzpcdFx0fVxuMTAxODpcdH1cbjEwMTk6XHRcbjEwMjA6XHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbjEwMjI6XHR7XG4xMDIzOlx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTAyNDpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTAyNTpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDI2Olx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDI3Olx0I2VuZGlmXG4xMDI4Olx0XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuMTAyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIGFuZCBpdCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlzIGludm9sdmVkLCBhbmQgd2UgYXJlIHdvcmtpbmcgZGlyZWN0bHkgb24gYHBhZ2VgIHVzaW5nIGEgYHRlbXBsYXRlYC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBtb2RpZnlpbmcgYHRlbXBsYXRlYCAod2hpY2ggaXMgcGFzc2VkIGJ5IHBvaW50ZXIhKSBjaGFuZ2VzIHRoZSBzaGFyZWQgdGVtcGxhdGUuIEluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdGhlIGBwZm5gIGluY3JlbWVudHMgYW5kIHVwZGF0ZXMgYHRlbXBsYXRlYCBkdXJpbmcgaXRlcmF0aW9ucywgd2hpY2ggaXMgdGhlbiBjb3BpZWQgdG8gYHBhZ2VgIGluIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIGl0IGxvb2tzIGxpa2UgYSByZXNvdW5kaW5nIFlFUy4gVGhpcyBpc24mIzM5O3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGxvZ2dpbmc7IGl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIChgbW0vbW1faW5pdC5jYCksIGFuZCBhZmZlY3RpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0dWZmIGxpa2UgYG1lbWNweV9mbHVzaGNhY2hlYCAod2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGApIGFuZCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYXMgd2VsbC4gVGhpcyBpbXBhY3RzIERBWCwgcG1lbSwgdGVzdF9obW0gKHZpcnR1YWwgZGV2aWNlIGZvciB0ZXN0aW5nIEhNTSAvIFpPTkVfREVWSUNFKSwgcDJwZG1hLCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGFyZWFzLgoKSW1wb3J0YW50bHksIGBaT05FX0RFVklDRWAgbWVtb3J5ICpjYW4qIGJlIHVzZWQgYW5kIHRlc3RlZCBpbiBRRU1VISBXZSBjYW4gZW11bGF0ZSBwZXJzaXN0ZW50IG1lbW9yeSAoTlZESU1NL3BtZW0pIGFuZCBEQVggdXNpbmcgYC1kZXZpY2UgbnZkaW1tYCwgb3IgdGhyb3VnaCBkdW1teSBtb2R1bGVzIGxpa2UgYHRlc3RfaG1tLmtvYCBvciBgL2Rldi9kYXhgLiBQbHVzLCB0aGVyZSYjMzk7cyBhIHJlZmNvdW50IGNoYW5nZSBpbiBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgIChmcm9tIDEgdG8gMCksIGRpcmVjdGx5IGFsdGVyaW5nIHBhZ2UgbGlmZWN5Y2xlIGJlaGF2aW9yLiBGdXJ0aGVybW9yZSwgdGhlIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgNC84LzE2LzMyLzQ4LzY0LzgwLzk2LWJ5dGUgY29waWVzIGluIGBtZW1jcHlfZmx1c2hjYWNoZWAgYWZmZWN0IGNhbGxlcnMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgISBUaGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gV2Ugd2FudCBub24tZ2VuZXJpYywgbm9uLWhvdC1wYXRoLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6CgpJbiBgbW0vbW1faW5pdC5jYCwgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiB0YXJnZXQsIHdoaWNoIGlzIGV4cG9ydGVkLiBOb3RlIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYW5kIGBfX2luaXRfem9uZV9kZXZpY2VfcGFnZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9tbV9pbml0LmNgLCBzbyB3aWxsIG5vdCBiZSBmdXp6ZWQgYXMgYSBkaXJlY3QgZW50cnkgcG9pbnQuCgpJbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIHdlIGhhdmUgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBJdCBsb29rcyB0byBiZSBhbiBBU00gZnVuY3Rpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGNhbiBiZSBjYWxsZWQuCgpXaGF0IGFib3V0IG90aGVyIGZ1bmN0aW9ucz8gV2Ugc2hvdWxkIGFsc28gY2hlY2sgYW55IGNhbGxlcnMgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSXQgbG9va3MgbGlrZSBgbWVtcmVtYXBfcGFnZXNgIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaW4gYG1tL21lbXJlbWFwLmNgIGNhbGwgaXQsIHNvIGxldCYjMzk7cyBjaGVjayB0aGVyZSB0b28sIGFuZCBhbHNvIGluIHJlbGF0ZWQgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlfG1lbXJlbWFwX3BhZ2VzfGRldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcmVtYXAuYz0xNz1zdGF0aWMgREVGSU5FX1hBUlJBWShwZ21hcF9hcnJheSk7XG4tLVxubW0vbWVtcmVtYXAuYy0xOS0vKlxubW0vbWVtcmVtYXAuYzoyMDogKiBUaGUgbWVtcmVtYXAoKSBhbmQgbWVtcmVtYXBfcGFnZXMoKSBpbnRlcmZhY2VzIGFyZSBhbHRlcm5hdGVseSB1c2VkXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxubW0vbWVtcmVtYXAuYzoyMzogKiBtZW1yZW1hcCgpIGNhbiBtYXAgaW5kaXZpZHVhbCBQQUdFX1NJWkUgcGFnZXMuIG1lbXJlbWFwX3BhZ2VzKCkgY2FuXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXG5tbS9tZW1yZW1hcC5jLTI2LSAqXG4tLVxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0xMzEtXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcbm1tL21lbXJlbWFwLmMtMTMzLXtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL21tX2luaXQuYz0xMDU1PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMDkyLVxubW0vbW1faW5pdC5jOjEwOTM6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21tX2luaXQuYy0xMDk0LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDQ9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKlxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjI6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBNYXBwaW5nIEludmVzdGlnYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIG1lbW9yeSBtYXBwaW5nIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciByZWxhdGVkIHN5bWJvbHMsIGJlY2F1c2UgSSBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIG92ZXJsb29rIHNvbWV0aGluZyBpbiB0aGlzIGFyZWEuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIGZ1bmN0aW9uLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGRlZmluaXRpb24gZm9yIGBfX21lbWNweV9mbHVzaGNhY2hlYCBjYW4gYmUgZm91bmQ7IHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHRoZSBjYWNoZSBiZWhhdmlvciBkdXJpbmcgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucywgYW5kIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgbXkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjg0OnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyMy1cdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyNDpcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjUtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI5LVx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEzMDpcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMS1cdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0MC1cdGNhc2UgOTY6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7IGJyZWFrO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTQxOlx0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDItXHR9XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtNzktXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0NC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1bmN0aW9uIElubGluaW5nIGFuZCBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHdlJiMzOTtyZSBhdCB3aXRoIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbmxpbmluZyBzdGF0dXMgb2YgYSBmZXcga2V5IGZ1bmN0aW9ucy4gUmlnaHQsIGBtZW1jcHlfZmx1c2hjYWNoZWAgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgIC0gYm90aCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBtZWFuaW5nIHRoZSBjb21waWxlciAqc2hvdWxkKiBpbmxpbmUgdGhlbS4gR29vZC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgLSBib3RoIGFyZSBgc3RhdGljYCBzbyBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIGFsc28gbGVzcyBsaWtlbHkgdG8gY29udHJpYnV0ZSB0byBjb2RlIGJsb2F0LgoKTm93LCBmb3IgdGhvc2UgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhlaXIgbG9jYWwgY29tcGlsYXRpb24gdW5pdCAtIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGFrZXMgem9uZSwgc3RhcnQgUEZOLCBudW1iZXIgb2YgcGFnZXMsIGFuZCBwYWdlIG1hcCBhcyBwYXJhbWV0ZXJzLiBJbnRlcmVzdGluZy4gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIC0gdGFrZSBhIHBhZ2UgbWFwIGFuZCBlaXRoZXIgYSBub2RlIElEIG9yIGRldmljZSBzdHJ1Y3QgcmVzcGVjdGl2ZWx5LgoKTmV4dCB1cCwgSSBuZWVkIHRvIGtub3cgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhY3RpdmF0ZWQuIFRpbWUgdG8gZGlnIGludG8gYG1tL01ha2VmaWxlYCBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tX2luaXQuY2AgYW5kIGBtZW1yZW1hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX2luaXRcXC5vfG1lbXJlbWFwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZTo1NTpcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxubW0vTWFrZWZpbGUtNTYtXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbi0tXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgJiM0Mzs9IHBlcmNwdS1zdGF0cy5vXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSAmIzQzOz0gaG1tLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGV2aWNlIFpvbmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYXAgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgZGV2aWNlIHpvbmVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1tL21tX2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMuIE5vdywgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdpbGwgYmUgdGhlIGtleS4gSWYgaXQmIzM5O3MgcHJlc2VudCBhbmQgZ3VhcmRpbmcgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgdGhlbiBJJiMzOTtsbCBrbm93IHRoYXQgdGhlIGRldmljZSB6b25lIGluaXRpYWxpemF0aW9uIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBldmVuIGdldHMgY2FsbGVkLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgYW5kIGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHVuY29uZGl0aW9uYWxseSBleGVjdXRlZCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCB3aXRoIGRlYnVnZ2luZyBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICYjNDM7PSBwZXJjcHUtc3RhdHMub1xubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IG1lbXJlbWFwLm9cbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGhtbS5vXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz03MTA9c3RhdGljIHZvaWQgX19tZW1pbml0IHJlc2l6ZV9wZ2RhdF9yYW5nZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyMS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NzIyOiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzIzLXN0YXRpYyB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbW1faW5pdC5jPTY3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cbi0tXG5tbS9tbV9pbml0LmMtNjc5LVxubW0vbW1faW5pdC5jOjY4MDojaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIHx8IGRlZmluZWQoQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQpXG5tbS9tbV9pbml0LmMtNjgxLXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmM9ODQ3PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuYy04NTgtXG5tbS9tbV9pbml0LmM6ODU5OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21tX2luaXQuYy04NjAtXHQvKlxuLS1cbm1tL21tX2luaXQuYy04OTEtXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xubW0vbW1faW5pdC5jOjg5MjojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtODkzLVx0XHRcdGlmICh6b25lID09IFpPTkVfREVWSUNFKVxuLS1cbm1tL21tX2luaXQuYz05NDA9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTk3Ni1cbm1tL21tX2luaXQuYzo5Nzc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vbW1faW5pdC5jLTk3OC1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vcGFnZV9hbGxvYy5jPTI0NT1jaGFyICogY29uc3Qgem9uZV9uYW1lc1tNQVhfTlJfWk9ORVNdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yNTYtXHQgXCYjMzQ7TW92YWJsZVwmIzM0Oyxcbm1tL3BhZ2VfYWxsb2MuYzoyNTc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vcGFnZV9hbGxvYy5jLTI1OC1cdCBcJiMzNDtEZXZpY2VcJiMzNDssXG4tLVxubW0vdm1zdGF0LmM9MTE1Nj1pbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3Ztc3RhdC5jLTExODQtXG5tbS92bXN0YXQuYzoxMTg1OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL3Ztc3RhdC5jLTExODYtI2RlZmluZSBURVhUX0ZPUl9ERVZJQ0UoeHgsIHl5KSBbeHgjI19ERVZJQ0VdID0geXkgXCYjMzQ7X2RldmljZVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NDEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRGV2aWNlIE1lbW9yeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9tbV9pbml0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhvc2UgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmRpdGlvbmFscyBzdXJyb3VuZGluZyBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCBmbGFncyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHk7IGFueXRoaW5nIHJlbGF0ZWQgdG8gem9uZSBkZXZpY2VzIGlzIG9mdGVuIGNyaXRpY2FsIGZvciBtb2Rlcm4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaGV0ZXJvZ2VuZW91cyBtZW1vcnkgYXJjaGl0ZWN0dXJlcy4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGF0IGV4YWN0bHkgaXMgYENPTkZJR19aT05FX0RFVklDRWAgYWxsIGFib3V0PyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRob3NlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4KClJpZ2h0LCB0aW1lIHRvIGNvbnN1bHQgYG1tL0tjb25maWdgLiBMZXQmIzM5O3Mgc2tpcCB0byB0aGUgcmVsZXZhbnQgcGFydCwgYXJvdW5kIGxpbmUgMTIyNS4gQWhhISBJIHNlZSBpdDoKCmBgYApjb25maWcgWk9ORV9ERVZJQ0UKCWJvb2wgJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0JiMzNDsKCWRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRQoJc2VsZWN0IFhBUlJBWV9NVUxUSQpgYGAKCiYjMzQ7RGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQsJiMzNDsgdGhhdOKAmXMgd2hhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCwgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcGVyc2lzdGVudCBtZW1vcnksIGhvc3QtbWFuYWdlZCBtZW1vcnksIGV0Yy4gVGhlIGBkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVgIGxpbmUgaXMga2V5LiBPa2F5LCBzbyBkZXZpY2UgbWVtb3J5IGlzICpkZXBlbmRlbnQqIG9uIGhvdCByZW1vdmFsIHN1cHBvcnQuIE1ha2VzIHNlbnNlLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGR5bmFtaWNhbGx5IGFkZCBhbmQgcmVtb3ZlIHRoZXNlIGRldmljZXMuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHdoYXQgKnRoYXQqIGRlcGVuZHMgb24gdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgTUVNT1JZX0hPVFJFTU9WRWAmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIG5leHQuIFRoaXMgaXMgZ29pbmcgdG8gdGVsbCBtZSB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgdHJ1ZSBmb3IgdGhpcyBlbnRpcmUgZnVuY3Rpb25hbGl0eSB0byBiZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4MD1lbmRjaG9pY2Vcbm1tL0tjb25maWctNTgxLVxubW0vS2NvbmZpZzo1ODI6Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTgzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1ODIuIFRoYXQgcmVnaW9uIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb24gb3IgYSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gYXNwZWN0LCBnaXZlbiB0aGUgZmlsZSYjMzk7cyBuYW1lLiBJJiMzOTttIGhvcGluZyBpdCB0b3VjaGVzIG9uIHRoZSBhcmVhIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4OiBgY29uZmlnYCwgYGJvb2xgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgaGVscGAsIGFuZCBzbyBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBQZXJoYXBzIGl0IGRlc2NyaWJlcyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gdGhhdCBsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGluc2lnaHRzIGFyZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxuIDU3MTpcdFx0ICBob3RwbHVnIG1lbW9yeSBpbnRvIFpPTkVfTU9WQUJMRS4gVGhpcyBtZW1vcnkgd2lsbCBnZW5lcmFsbHlcbiA1NzI6XHRcdCAgbm90IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cbiA1NzM6XHRcbiA1NzQ6XHRcdCAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlIGFkbWluIGtub3dzIHN1ZmZpY2llbnRcbiA1NzU6XHRcdCAgWk9ORV9OT1JNQUwgbWVtb3J5IGlzIGF2YWlsYWJsZSB0byBkZXNjcmliZSBob3RwbHVnIG1lbW9yeSxcbiA1NzY6XHRcdCAgb3RoZXJ3aXNlIGhvdHBsdWcgbWVtb3J5IG1heSBmYWlsIHRvIG9ubGluZS4gRm9yIGV4YW1wbGUsXG4gNTc3Olx0XHQgIHN1ZmZpY2llbnQga2VybmVsLWNhcGFibGUgbWVtb3J5IChaT05FX05PUk1BTCkgbXVzdCBiZVxuIDU3ODpcdFx0ICBhdmFpbGFibGUgdG8gYWxsb2NhdGUgcGFnZSBzdHJ1Y3RzIHRvIGRlc2NyaWJlIFpPTkVfTU9WQUJMRS5cbiA1Nzk6XHRcbiA1ODA6XHRlbmRjaG9pY2VcbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MzpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODU6XHRcbiA1ODY6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODc6XHRcdGRlZl9ib29sIHlcbiA1ODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODk6XHRcbiA1OTA6XHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG4gNTkxOlx0XG4gNTkyOlx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4gNTkzOlx0ICAgICAgIGJvb2xcbiA1OTQ6XHRcbiA1OTU6XHQjIEhlYXZpbHkgdGhyZWFkZWQgYXBwbGljYXRpb25zIG1heSBiZW5lZml0IGZyb20gc3BsaXR0aW5nIHRoZSBtbS13aWRlXG4gNTk2Olx0IyBwYWdlX3RhYmxlX2xvY2ssIHNvIHRoYXQgZmF1bHRzIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgdXNlciBhZGRyZXNzXG4gNTk3Olx0IyBzcGFjZSBjYW4gYmUgaGFuZGxlZCB3aXRoIGxlc3MgY29udGVudGlvbjogc3BsaXQgaXQgYXQgdGhpcyBOUl9DUFVTLlxuIDU5ODpcdCMgRGVmYXVsdCB0byA0IGZvciB3aWRlciB0ZXN0aW5nLCB0aG91Z2ggOCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLlxuIDU5OTpcdCMgQVJNJiMzOTtzIGFkanVzdF9wdGUgKHVudXNlZCBpZiBWSVBUKSBkZXBlbmRzIG9uIG1tLXdpZGUgcGFnZV90YWJsZV9sb2NrLlxuIDYwMDpcdCMgUEEtUklTQyA3eHh4JiMzOTtzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxuIDYwMTpcdCMgU1BBUkMzMiBhbGxvY2F0ZXMgbXVsdGlwbGUgcHRlIHRhYmxlcyB3aXRoaW4gYSBzaW5nbGUgcGFnZSwgYW5kIHRoZXJlZm9yZVxuIDYwMjpcdCMgYSBwZXItcGFnZSBsb2NrIGxlYWRzIHRvIHByb2JsZW1zIHdoZW4gbXVsdGlwbGUgdGFibGVzIG5lZWQgdG8gYmUgbG9ja2VkXG4gNjAzOlx0IyBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIGNvcHlfcGFnZV9yYW5nZSgpKS5cbiA2MDQ6XHQjIERFQlVHX1NQSU5MT0NLIGFuZCBERUJVR19MT0NLX0FMTE9DIHNwaW5sb2NrX3QgYWxzbyBlbmxhcmdlIHN0cnVjdCBwYWdlLlxuIDYwNTpcdCNcbiA2MDY6XHRjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcbiA2MDc6XHRcdGRlZl9ib29sIHlcbiA2MDg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFNNUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ4MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgRGVwZW5kZW5jeSBXZWIgb2YgTUVNT1JZX0hPVFBMVUcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW4uIGBNRU1PUllfSE9UUExVR2DigKYgd2hhdCYjMzk7cyB0aGUgbGF5IG9mIHRoZSBsYW5kPyBUaW1lIHRvIHVucmF2ZWwgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbmV2ZXIganVzdCBvbmUgdGhpbmcsIGlzIGl0PyBJdOKAmXMgYSB3aG9sZSBlY29zeXN0ZW0uIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucywgZmVhdHVyZXMsIG9yIHVuZGVybHlpbmcgcGllY2VzIG9mIHRoZSBrZXJuZWwgdGhpcyB0aGluZyBsZWFucyBvbi4gVGhpcyBob3RwbHVnIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGlzIGxpa2VseSBpbnRlcnR3aW5lZCB3aXRoIHNldmVyYWwgb3RoZXIgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGFyZSBiZWZvcmUgSSBjYW4gZnVsbHkgZ3Jhc3AgaXRzIGJlaGF2aW9yLCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBhbmQgaG93IHRvIHVzZSBpdCBvcHRpbWFsbHkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUdcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTA9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MTMtIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUxNDptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxNS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBlbGVtZW50LiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTAuIEkga25vdyB0aGlzIGZpbGUgaW50aW1hdGVseSwgc28gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgbG9naWMgZGVmaW5pbmcgdGhlIHJlbGV2YW50IG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBvciBwZXJoYXBzIGV2ZW4gY29uZGl0aW9uYWwgaW5jbHVzaW9ucyBvZiBvdGhlciBLY29uZmlnIGZyYWdtZW50cy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgYSBkZWZpbml0aW9uIG9mIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoaW4gYW4gYGlmYCBibG9jaywgb3IgbWF5YmUgYSBtZW51IHN0cnVjdHVyZS4gSSYjMzk7bSBicmFjaW5nIG15c2VsZiBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBvdGVudGlhbGx5IHNwYW5uaW5nIG11bHRpcGxlIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN5bnRheCwgbG9va2luZyBmb3IgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgZW5kLXVzZXIgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIDUxMTpcdFx0Ym9vbFxuIDUxMjpcdFxuIDUxMzpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUxNDpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MTU6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MTY6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTE3Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTE4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTE5Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTIwOlx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUyMTpcdFxuIDUyMjpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTIzOlx0XG4gNTI0Olx0Y2hvaWNlXG4gNTI1Olx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUyNjpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTI3Olx0XHRoZWxwXG4gNTI4Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUyOTpcdFxuIDUzMDpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuIDUzMTpcdFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcbiA1MzI6XHRcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXG4gNTMzOlx0XHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxuIDUzNDpcdFxuIDUzNTpcdFx0ICBUaGUgZGVmYXVsdCBpcyAmIzM5O29mZmxpbmUmIzM5Oy5cbiA1MzY6XHRcbiA1Mzc6XHRcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXG4gNTM4Olx0XHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXG4gNTM5Olx0XHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXG4gNTQwOlx0XHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxuIDU0MTpcdFxuIDU0MjpcdFx0ICBFeGFtcGxlIGtlcm5lbCB1c2FnZSB3b3VsZCBiZSBwYWdlIHN0cnVjdHMgYW5kIHBhZ2UgdGFibGVzLlxuIDU0MzpcdFxuIDU0NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNTQ1Olx0XG4gNTQ2Olx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbiA1NDc6XHRcdGJvb2wgXCYjMzQ7b2ZmbGluZVwmIzM0O1xuIDU0ODpcdFx0aGVscFxuIDU0OTpcdFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBvcnRhbnQgb25lczogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhlc2UgYXJlIGNvcmUgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkgYW5kIGRldmljZXMsIGFuZCBhbnkgc3VidGxlIGNoYW5nZSBoZXJlIGNhbiBoYXZlIHJpcHBsZSBlZmZlY3RzLiBBbmQsIGFoYSwgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgLSBpbnRlcmVzdGluZyB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IHRoZSBiaWcgdGhyZWU6IHg4Nl82NCwgQVJNNjQsIGFuZCBQUEMuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBpbiB0ZXJtcyBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmVoYXZpb3JzLgoKUmlnaHQsIHdpdGggYFpPTkVfREVWSUNFYCBpbiBmb2N1cywgbGV04oCZcyBtYWtlIHN1cmUgd2UmIzM5O3ZlIHByb3Blcmx5IHRlc3RlZCB0aGUgZHJpdmVycyBhbmQgdXNlcnMuIExldCYjMzk7cyBsaXN0IHRob3NlIG91dDogYERFVklDRV9QUklWQVRFYCwgYFRFU1RfSE1NYCwgYEZTX0RBWGAsIGBERVZfREFYYCwgYW5kIG9mIGNvdXJzZSwgYFg4Nl82NGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgem9uZSBkZXZpY2UgYXJlIHdlbGwtdW5kZXJzdG9vZC4gRmluYWxseSwgdGltZSB0byBmb2xsb3cgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFRFU1RfSE1NYC4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMxNz1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzMyNC1cbmxpYi9LY29uZmlnLmRlYnVnOjMzMjU6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyBLY29uZmlnIGZvciBEZWJ1Z2dpbmcgT3B0aW9ucyoqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRlYnVnZ2luZyBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIGtub3cgdGhhdCBmaWxlIHVzdWFsbHkgaG91c2VzIGEgbG90IG9mIHRoZSBjb3JlIGRlYnVnZ2luZyBzZXR0aW5ncywgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDMzMjUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhhdCBhcmVhIGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGRlYnVnZ2luZyBmZWF0dXJlIG9yIGEgcmVsZXZhbnQgZ3JvdXBpbmcgb2Ygb3B0aW9ucy4gTWlnaHQgYmUgYSBzcGVjaWZpYyBzdWJzeXN0ZW0mIzM5O3MgZGVidWcgb3B0aW9ucywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBnZW5lcmFsLiBUaW1lIHRvIGdldCB0aGUgSURFIGZpcmVkIHVwIGFuZCBoYXZlIGEgbG9vazsgdGhlIGRldGFpbHMgd2lsbCByZXZlYWwgdGhlbXNlbHZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMDpcdFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cbjMzMjE6XHRcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxuMzMyMjpcdFxuMzMyMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMyNDpcdFxuMzMyNTpcdGNvbmZpZyBURVNUX0hNTVxuMzMyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4zMzI3Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4zMzI4Olx0XHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG4zMzI5Olx0XHRzZWxlY3QgSE1NX01JUlJPUlxuMzMzMDpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMzMzMTpcdFx0aGVscFxuMzMzMjpcdFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cbjMzMzM6XHRcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuMzMzNDpcdFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXG4zMzM1Olx0XG4zMzM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzM3Olx0XG4zMzM4Olx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xuMzMzOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBmcmVlaW5nIHBhZ2VzXCYjMzQ7XG4zMzQwOlx0XHRoZWxwXG4zMzQxOlx0XHQgIFRlc3QgdGhhdCBhIG1lbW9yeSBsZWFrIGRvZXMgbm90IG9jY3VyIGR1ZSB0byBhIHJhY2UgYmV0d2VlblxuMzM0MjpcdFx0ICBmcmVlaW5nIGEgYmxvY2sgb2YgcGFnZXMgYW5kIGEgc3BlY3VsYXRpdmUgcGFnZSByZWZlcmVuY2UuXG4zMzQzOlx0XHQgIExvYWRpbmcgdGhpcyBtb2R1bGUgaXMgc2FmZSBpZiB5b3VyIGtlcm5lbCBoYXMgdGhlIGJ1ZyBmaXhlZC5cbjMzNDQ6XHRcdCAgSWYgdGhlIGJ1ZyBpcyBub3QgZml4ZWQsIGl0IHdpbGwgbGVhayBnaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZFxuMzM0NTpcdFx0ICBwcm9iYWJseSBPT00geW91ciBzeXN0ZW0uXG4zMzQ2Olx0XG4zMzQ3Olx0Y29uZmlnIFRFU1RfRlBVXG4zMzQ4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgaW4ga2VybmVsIHNwYWNlXCYjMzQ7XG4zMzQ5Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0tFUk5FTF9GUFVfU1VQUE9SVCBcdTAwMjZcdTAwMjYgIUtDT1ZfSU5TVFJVTUVOVF9BTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgYXMgYSBxdWljayBtZW50YWwgcnVuZG93bjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFzcGVjdHMgc3RyYWlnaHQuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBhIGZldyBrZXkgZmVhdHVyZXM6IGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgLiBUaG9zZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB3ZSYjMzk7cmUgYWltaW5nIGZvci4KClJpZ2h0LCBgRlNfREFYYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgZG91YmxlIGNoZWNrIHdoZXJlIHRoYXTigJlzIGRlZmluZWQuIEVpdGhlciBpdCYjMzk7cyBpbiB0aGUgc3RhbmRhcmQgYGZzL0tjb25maWdgIGZpbGUgb3IsIGRlcGVuZGluZyBvbiBob3cgdGhleeKAmXZlIHN0cnVjdHVyZWQgdGhlIGRyaXZlcnMgZm9yIHRoaXMgcGFydGljdWxhciBzZXR1cCwgaXQgbWlnaHQgYmUgaGlkaW5nIGluIGBkcml2ZXJzL2RheC9LY29uZmlnYC4gVGltZSB0byBnZXQgdGhlIEtjb25maWcgZmlsZXMgb3BlbiBhbmQgY29uZmlybSB0aGUgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19EQVhcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01Nj1lbmRpZiAjIEJMT0NLXG5mcy9LY29uZmlnLTU3LVxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXG5mcy9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25jZXJuKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1OC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHByb2JhYmx5IGRlZmluZXMgc29tZSBjcml0aWNhbCBmaWxlIHN5c3RlbSBvcHRpb25zLiBJdCBtaWdodCBiZSBhIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYSBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIGNhdXNpbmcgbWUgYSBoZWFkYWNoZSwgYnV0IHBpbnBvaW50aW5nIHRoYXQgbGluZSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLCBpZiBhbnkuIExpa2VseSB0aGlzIGlzIGEgYnVpbGQgZmxhZyBvciBhIGZlYXR1cmUgZmxhZy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZGVidWcgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFxuICA1NjpcdGVuZGlmICMgQkxPQ0tcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgRlNfREFYXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAgNjE6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAgNjI6XHRcdHNlbGVjdCBGU19JT01BUFxuICA2MzpcdFx0c2VsZWN0IERBWFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBEaXJlY3QgQWNjZXNzIChEQVgpIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy5cbiAgNjY6XHRcdCAgSWYgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0cyBEQVggYW5kIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIERBWCxcbiAgNjc6XHRcdCAgdGhlbiB5b3UgY2FuIGF2b2lkIHVzaW5nIHRoZSBwYWdlY2FjaGUgdG8gYnVmZmVyIEkvT3MuICBUdXJuaW5nXG4gIDY4Olx0XHQgIG9uIHRoaXMgb3B0aW9uIHdpbGwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBEQVguXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxuICA3MTpcdFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXG4gIDcyOlx0XHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxuICA3MzpcdFxuICA3NDpcdFx0XHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxuICA3NTpcdFx0XHRcdC0tbW9kZT1mc2RheCAtLW1hcD1tZW1cbiAgNzY6XHRcbiAgNzc6XHRcdCAgU2VlIHRoZSAmIzM5O2NyZWF0ZS1uYW1lc3BhY2UmIzM5OyBtYW4gcGFnZSBmb3IgZGV0YWlscyBvbiB0aGUgb3ZlcmhlYWQgb2ZcbiAgNzg6XHRcdCAgLS1tYXA9bWVtOlxuICA3OTpcdFx0ICBodHRwczovL2RvY3MucG1lbS5pby9uZGN0bC11c2VyLWd1aWRlL25kY3RsLW1hbi1wYWdlcy9uZGN0bC1jcmVhdGUtbmFtZXNwYWNlXG4gIDgwOlx0XG4gIDgxOlx0XHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcbiAgODI6XHRcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcbiAgODM6XHRcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxuICA4NDpcdFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODU1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBERVZfREFYYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiBob3cgYERFVl9EQVhgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL2RheC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGZlYXR1cmUgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBob3cgaXQmIzM5O3MgcHJlc2VudGVkIGFzIGFuIG9wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAgb3Igd2hhdCBvdGhlciBvcHRpb25zIGFyZSBwcm92aWRlZC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGxheSBvdXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIHBlcnNpc3RlbnQgbWVtb3J5IHN1cHBvcnQgb3IgYSBzcGVjaWZpYyBmaWxlc3lzdGVtKSwgYW5kIGFueSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzLCBJIGNhbiBtb3JlIGVmZmljaWVudGx5IHRyb3VibGVzaG9vdCBpc3N1ZXMgb3IgY29uZmlybSBpdHMgcHJlc2VuY2UgZHVyaW5nIGEgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZfREFYXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGF4L0tjb25maWc9Nj1pZiBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctNy1cbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERBWCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBEQVggY29uZmlndXJhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGRyaXZlciwgZGVmaW5pbmcgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgZmlsZSB3aWxsIGxpa2VseSB0ZWxsIG1lIGhvdyBEQVggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIGF0IGJ1aWxkIHRpbWUsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIHNwZWNpZmljcyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgREFYXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxuICAgNTpcdFxuICAgNjpcdGlmIERBWFxuICAgNzpcdFxuICAgODpcdGNvbmZpZyBERVZfREFYXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFN1cHBvcnQgcmF3IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCAocGVyc2lzdGVuY2UsIGJhbmR3aWR0aCxcbiAgMTM6XHRcdCAgbGF0ZW5jeS4uLikgbWVtb3J5IHZpYSBhbiBtbWFwKDIpIGNhcGFibGUgY2hhcmFjdGVyXG4gIDE0Olx0XHQgIGRldmljZS4gIFBsYXRmb3JtIGZpcm13YXJlIG9yIGEgZGV2aWNlIGRyaXZlciBtYXkgaWRlbnRpZnkgYVxuICAxNTpcdFx0ICBwbGF0Zm9ybSBtZW1vcnkgcmVzb3VyY2UgdGhhdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIHRoZVxuICAxNjpcdFx0ICBiYXNlbGluZSBtZW1vcnkgcG9vbC4gIE1hcHBpbmdzIG9mIGEgL2Rldi9kYXhYLlkgZGV2aWNlIGltcG9zZVxuICAxNzpcdFx0ICByZXN0cmljdGlvbnMgdGhhdCBtYWtlIHRoZSBtYXBwaW5nIGJlaGF2aW9yIGRldGVybWluaXN0aWMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIERFVl9EQVhfUE1FTVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gTElCTlZESU1NIFx1MDAyNlx1MDAyNiBOVkRJTU1fREFYIFx1MDAyNlx1MDAyNiBERVZfREFYXG4gIDIyOlx0XHRkZWZhdWx0IERFVl9EQVhcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU3VwcG9ydCByYXcgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5LiAgTm90ZSB0aGF0IHRoaXNcbiAgMjU6XHRcdCAgZHJpdmVyIGNvbnN1bWVzIG1lbW9yeSByYW5nZXMgYWxsb2NhdGVkIGFuZCBleHBvcnRlZCBieSB0aGVcbiAgMjY6XHRcdCAgbGlibnZkaW1tIHN1Yi1zeXN0ZW0uXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFNheSBNIGlmIHVuc3VyZVxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBERVZfREFYX0hNRU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MTcKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN5bWJvbHMgYXJlIGluIHBsYWNlLiBDaGVja2luZyBgRm9jdXNTeW1ib2xzYCwgSSBzZWUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgLCBhbmQgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcmVxdWlyZW1lbnRzOiBJIG5lZWQgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYEZTX0RBWGAgZW5hYmxlZC4gWWVwLCBhbGwgdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2AgYXJlIGluIG9yZGVyLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gd29yayBhcyBpbnRlbmRlZC4gVGhlIGxpc3RlZCBgRm9jdXNTeW1ib2xzYCBhcmUgY29uc2lzdGVudC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggYWxpZ25zIHdpdGggdGhlIHNjb3BlIG9mIHRoaXMgd29yayBnaXZlbiB0aGF0IGl0IHRvdWNoZXMgc3VjaCBsb3ctbGV2ZWwgYXNwZWN0cyBvZiB0aGUga2VybmVsLgoKVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBjb25jaXNlIGJ1dCBhY2N1cmF0ZTogSXQmIzM5O3MgcmVmYWN0b3JpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLCB1dGlsaXppbmcgcGFnZSB0ZW1wbGF0ZXMgYW5kIG5vbi10ZW1wb3JhbCBjb3BpZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIHdpdGhpbiBgbW0vbW1faW5pdC5jYC4gSXQgYWxzbyB0b3VjaGVzIHVwb24gcmVmY291bnQgaW5pdGlhbGl6YXRpb24gZm9yIGBNRU1PUllfREVWSUNFX0ZTX0RBWGAgcGFnZXMgYW5kIG9wdGltaXplcyBmaXhlZC1zaXplIGNhY2hlLWZsdXNoaW5nIGNvcGllcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBUaGUgY2hhbmdlcyBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IGBaT05FX0RFVklDRWAgcGFnZXMgYXJlIHNldCB1cCwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIERBWCwgTlZESU1NLCBvciBITU0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGVmZmljaWVudCwgZXNwZWNpYWxseSBpbiB0aGVzZSBlbWVyZ2luZyB1c2UgY2FzZXMuCgpHaXZlbiBhbGwgb2YgdGhpcywgZXZlcnl0aGluZyBzZWVtcyBzb2xpZCBhbmQgd2VsbC12ZXJpZmllZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBvciBhcmVhcyBvZiBjb25jZXJuLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXRjaCBpcyByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7X19tZW1jcHlfZmx1c2hjYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLUxlYWsgQW5hbHlzaXMgKEtNU0FOKTpcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpYCBmcm9tIGEgc3RydWN0IHBhZ2UgdGhhdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgX19pbml0X3NpbmdsZV9wYWdlKClgICh3aGljaCBpbnZva2VzIGBtbV96ZXJvX3N0cnVjdF9wYWdlKClgKS5cbi0gQWxsIGJ5dGVzIGluY2x1ZGluZyBwYWRkaW5nIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHRoZSBzdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgdGFyZ2V0cy5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4yLiBPdXQtb2YtYm91bmRzIC8gTWVtb3J5IENvcnJ1cHRpb24gQW5hbHlzaXMgKEtBU0FOKTpcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM4ZThlMDA2ZjU5NTNhMTNmMzE2N2IyZTRkOTRiNjVlOGI1NmFlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEyOjI1OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzLi44MzFkM2RkYTNiMzgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsMjQgJiM0Mzs4Miw3NyBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRQogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxCiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpOwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aWwgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1MzIgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1MzIgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1NjQgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfOChkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHsKLQkJc3dpdGNoIChjbnQpIHsKLQkJCWNhc2UgNDoKLQkJCQlhc20gKCYjMzQ7bW92bnRpbCAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHUzMiAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHUzMiAqKXNyYykpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgODoKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkgOiAmIzM0O3ImIzM0OygqKHU2NCAqKXNyYykpOwotCQkJCXJldHVybjsKLQkJCWNhc2UgMTY6Ci0JCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpIDogJiMzNDtyJiMzNDsoKih1NjQgKilzcmMpKTsKLQkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogJiMzNDtyJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7Ci0JCQkJcmV0dXJuOwotCQl9CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQomIzQzO3sKJiM0MzsJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKQomIzQzOwkJcmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUgeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOgomIzQzOwkgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbAomIzQzOwkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0bwomIzQzOwkgKiBfX21lbWNweV9mbHVzaGNhY2hlKCkuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKGNudCkgewomIzQzOwljYXNlIDQ6ICBtb3ZudGlfNChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrOwomIzQzOwljYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSAzMjogbW92bnRpXzMyKGRzdCwgc3JjKTsgYnJlYWs7CiYjNDM7CWNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7IGJyZWFrOwomIzQzOwljYXNlIDY0OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBicmVhazsKJiM0MzsJY2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7CiYjNDM7CWNhc2UgOTY6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7IGJyZWFrOwomIzQzOwlkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhazsKIAl9Ci0JX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKIH0KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWwKJiM0MzsvKgomIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weQomIzQzOyAqIHByaW1pdGl2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAomIzQzOwkJc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLjY2NDBjNzUyMjgyMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI2NDQsMTIgJiM0MzsyNjQ0LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBTRUNUSU9OU19NQVNLICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQpOwogCXJldHVybiAobWRmLSZndDtmICZndDsmZ3Q7IFNFQ1RJT05TX1BHU0hJRlQpICZhbXA7IFNFQ1RJT05TX01BU0s7CiB9CiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI4NzIsOSAmIzQzOzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQogfQogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZQomIzQzOyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYQomIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYQomIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsCiYjNDM7ICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuCiYjNDM7ICogb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlIHRoZXJlLCB3aGlsZSBrZWVwaW5nIHRoZSBBUEkgdm9pZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcCiYjNDM7CSgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpCiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTEwMDAsMTMgJiM0MzsxMDAwLDkgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCXBhZ2UtJmd0O3pvbmVfZGV2aWNlX2RhdGEgPSBOVUxMOwogCiAJLyoKLQkgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkCi0JICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudAotCSAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLgotCSAqCi0JICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZQotCSAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyCi0JICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuCiYjNDM7CSAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlCiYjNDM7CSAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlCiYjNDM7CSAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC4KIAkgKi8KIAlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7CiAJY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKQEAgLTEwMjEsNiAmIzQzOzEwMTcsMTcgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzOwltZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3QKICAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG8KQEAgLTEwNTMsNiAmIzQzOzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCXVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLSZndDt2bWVtbWFwX3NoaWZ0OwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDYxLDEzICYjNDM7MTA3MCwyMyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKLQlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZSBzdGF0ZSBlc3RhYmxpc2hlZCBieQomIzQzOwkgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0IHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuCiYjNDM7CSAqLwomIzQzOwlwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOwomIzQzOwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKJiM0MzsJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzOwltZW1jcHkoJmFtcDt0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovCiYjNDM7CWZvciAocGZuID0gaGVhZF9wZm4gJiM0MzsgMjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykKJiM0MzsJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBmbl90b19wYWdlKHBmbiksIHBmbiwKJiM0MzsJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiAJcHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTsKIH0KIApAQCAtMTA4Myw2ICYjNDM7MTEwMiw4IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwogCiAJaWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKQogCQlyZXR1cm47CkBAIC0xMDk3LDEwICYjNDM7MTExOCwyOSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCQlucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CiAJfQogCi0JZm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlpZiAoIW5yX3BhZ2VzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUgZmlyc3QgcmVhbCBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVGhlIG5vcm1hbCBwYWdlLWluaXQgYW5kIHJlZmNvdW50IGhlbHBlcnMgbXVzdCBvcGVyYXRlIG9uCiYjNDM7CSAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuCiYjNDM7CSAqLwomIzQzOwlwZm4gPSBzdGFydF9wZm47CiYjNDM7CXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwomIzQzOwlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwlpZiAocGZuc19wZXJfY29tcG91bmQgIT0gMSkKJiM0MzsJCW1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsCiYjNDM7CQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7CiYjNDM7CXBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovCiYjNDM7CWZvciAoOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiYjNDM7CQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbiwKJiM0MzsJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOLXdvcnRoeSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLgoKQWxyaWdodCwgdGhlIHBhdGNoIGxvb2tzIGxpa2UgdGhpczoKCiogICBXZSYjMzk7cmUgYWRkaW5nIGlubGluZSBoZWxwZXIgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAgKGBtb3ZudGlfNGAsIGBtb3ZudGlfOGAsIGV0Yy4pIHRvIGVuaGFuY2UgYG1lbWNweV9mbHVzaGNhY2hlYC4gV2UmIzM5O3JlIG9wdGltaXppbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBieSBpbmxpbmluZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbW92bnRpXypgKSBmb3IgZml4ZWQgc2l6ZXMgKDQsIDgsIDE2LCBldGMuIGJ5dGVzKS4gVGhlcmUmIzM5O3MgYWxzbyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIG1hY3JvIGRlZmluZWQgdGhhdCBjYWxscyB0aGlzIGBtZW1jcHlfZmx1c2hjYWNoZWAuCgoqICAgV2UgaGF2ZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBBZGRpbmcgYSBoZWxwZXIgYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB1cGRhdGluZyBgc2V0X3BhZ2VfbGlua3NgIHRvIHVzZSBpdC4KCiogICBJbiBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIHRoZXJlJiMzOTtzIGEgZmFsbGJhY2sgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IGRlZmluZWQ6IGl0IHVzZXMgYSByZWd1bGFyIGBtZW1jcHlgLgoKKiAgIE5vdywgaW4gYG1tL21tX2luaXQuY2AsIHdlIHNlZSBvcHRpbWl6YXRpb25zIGZvciBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzLiBUaGV5JiMzOTtyZSB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCB0ZW1wbGF0ZSBgc3RydWN0IHBhZ2VgLCBpbml0aWFsaXplZCBieSBjb3B5aW5nIGEgcHJlLWV4aXN0aW5nIGBzdHJ1Y3QgcGFnZWAgKGBwYWdlYCksIGFuZCB0aGVuIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgdGhpcyB0ZW1wbGF0ZSB0byBvdGhlciBgc3RydWN0IHBhZ2Vgcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBydWIgLSBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHN0cnVjdCBwYWdlYCByZXR1cm5lZCBieSBgcGZuX3RvX3BhZ2UocGZuKWAgKmlzIGZ1bGx5IGluaXRpYWxpemVkKiBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgYG1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgb3BlcmF0aW9uLiBUaGlzIGlzIGNydWNpYWwhCgpMZXQmIzM5O3Mgc2VlLi4uIHdlIGhhdmU6CgpgYGBjCnN0cnVjdCBwYWdlIHRlbXBsYXRlOwpzdHJ1Y3QgcGFnZSAqcGFnZTsKLi4uCnBmbiA9IGhlYWRfcGZuICYjNDM7IDE7CnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwpfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKcHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTsKc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Cm1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKYGBgCgpTbywgYmVmb3JlIHRoZSBgbWVtY3B5YCBvZiB0aGUgYHBhZ2VgLCBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgcHJlcF9jb21wb3VuZF90YWlsYCBhbmQgYHNldF9wYWdlX2NvdW50YCBhcmUgY2FsbGVkIG9uIGl0LiBTbywgbGV0JiMzOTtzIHNlZSBob3cgYFpPTkVfREVWSUNFYCBzdHJ1Y3QgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IHVzZSBteSB0b29scyAoYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgKSB0byB0cmFjZSBob3cgdGhlIGBtZW1tYXBgIGFuZCBgWk9ORV9ERVZJQ0VgIHN0cnVjdCBwYWdlcyBhcmUgYWxsb2NhdGVkL2luaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2luaXRfem9uZV9kZXZpY2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9OTQwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy05NzctI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxubW0vbW1faW5pdC5jOjk3ODpzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG5tbS9tbV9pbml0LmMtOTc5LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4tLVxubW0vbW1faW5pdC5jPTEwNTU9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTEwODAtXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbm1tL21tX2luaXQuYzoxMDgxOlx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG5tbS9tbV9pbml0LmMtMTA4Mi1cdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tLVxubW0vbW1faW5pdC5jPTEwOTM9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTEzMC1cdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xubW0vbW1faW5pdC5jOjExMzE6XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbm1tL21tX2luaXQuYy0xMTMyLVx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL21tX2luaXQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSBwcm9ibGVtIGF0IGhhbmQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSBJIG5lZWQgdG8gc2NydXRpbml6ZSBsaWVzIHdpdGhpbiBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA5NzUgdG8gMTA0MC4gSSBrbm93IHRoaXMgZmlsZSBpbnRpbWF0ZWx5LCBzbyBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGxpa2VseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgcmFuZ2Ugb2Z0ZW4gZGVhbHMgd2l0aCBpbml0aWFsIHNldHVwcywgYm91bmRhcnkgY29uZGl0aW9uIHRlc3RzLCBvciBwZXJoYXBzIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLCBhbmQgdHJ5IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBwaWVjZXMgdGhhdCBhcmVuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgd2VlZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NzU6XHR9XG4gOTc2Olx0XG4gOTc3Olx0I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuIDk3ODpcdHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiA5Nzk6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuIDk4MDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4gOTgxOlx0e1xuIDk4MjpcdFxuIDk4MzpcdFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XG4gOTg0Olx0XG4gOTg1Olx0XHQvKlxuIDk4NjpcdFx0ICogTWFyayBwYWdlIHJlc2VydmVkIGFzIGl0IHdpbGwgbmVlZCB0byB3YWl0IGZvciBvbmxpbmluZ1xuIDk4NzpcdFx0ICogcGhhc2UgZm9yIGl0IHRvIGJlIGZ1bGx5IGFzc29jaWF0ZWQgd2l0aCBhIHpvbmUuXG4gOTg4Olx0XHQgKlxuIDk4OTpcdFx0ICogV2UgY2FuIHVzZSB0aGUgbm9uLWF0b21pYyBfX3NldF9iaXQgb3BlcmF0aW9uIGZvciBzZXR0aW5nXG4gOTkwOlx0XHQgKiB0aGUgZmxhZyBhcyB3ZSBhcmUgc3RpbGwgaW5pdGlhbGl6aW5nIHRoZSBwYWdlcy5cbiA5OTE6XHRcdCAqL1xuIDk5MjpcdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGFnZSk7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKlxuIDk5NTpcdFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVx1MDAzZWxydSB3aXRoIGEgLVx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxuIDk5NjpcdFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcbiA5OTc6XHRcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cbiA5OTg6XHRcdCAqL1xuIDk5OTpcdFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuMTAwMDpcdFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbjEwMDE6XHRcbjEwMDI6XHRcdC8qXG4xMDAzOlx0XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuMTAwNDpcdFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbjEwMDU6XHRcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cbjEwMDY6XHRcdCAqL1xuMTAwNzpcdFx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4xMDA4Olx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuMTAwOTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4xMDEwOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4xMDExOlx0XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbjEwMTI6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDEzOlx0XHRcdGJyZWFrO1xuMTAxNDpcdFxuMTAxNTpcdFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4xMDE2Olx0XHRcdGJyZWFrO1xuMTAxNzpcdFx0fVxuMTAxODpcdH1cbjEwMTk6XHRcbjEwMjA6XHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbjEwMjI6XHR7XG4xMDIzOlx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTAyNDpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTAyNTpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDI2Olx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDI3Olx0I2VuZGlmXG4xMDI4Olx0XHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuMTAyOTpcdH1cbjEwMzA6XHRcbjEwMzE6XHQvKlxuMTAzMjpcdCAqIFdpdGggY29tcG91bmQgcGFnZSBnZW9tZXRyeSBhbmQgd2hlbiBzdHJ1Y3QgcGFnZXMgYXJlIHN0b3JlZCBpbiByYW0gbW9zdFxuMTAzMzpcdCAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG9cbjEwMzQ6XHQgKiBpbml0aWFsaXplIGlzIGEgbG90IHNtYWxsZXIgdGhhdCB0aGUgdG90YWwgYW1vdW50IG9mIHN0cnVjdCBwYWdlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGFuYWx5emUgdGhpcyBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgX19pbml0X3NpbmdsZV9wYWdlYCBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmVzLCBJJiMzOTttIGFscmVhZHkgaW5mZXJyaW5nIHRoaXMgaXMgbGlrZWx5IGFuIGludGVybmFsIG9yICYjMzQ7cHJpdmF0ZSYjMzQ7IG1ldGhvZCB3aXRoaW4gYSBjbGFzcy4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93LCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBjbGFzcyB1bmxlc3MgSSAqcmVhbGx5KiBrbm93IHdoYXQgSSYjMzk7bSBkb2luZy4gTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIG9yIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlICYjMzQ7cGFnZSYjMzQ7IHdpdGhpbiBhIGxhcmdlciBkb2N1bWVudCBvciBwb3RlbnRpYWxseSBhIHdlYnNpdGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCBpdHMgaW1wbGVtZW50YXRpb24gdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGl0IHVzaW5nLCBpcyB0aGVyZSBhbiBpbmRpY2F0aW9uIHRvIGFuIEFQSSBiZWluZyBjYWxsZWQsIGFuZCB3aGF0IGRvZXMgaXQgKnJldHVybiouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX2luaXRfc2luZ2xlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBTZWFyY2gqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4gR2l2ZW4gd2hhdCB3ZSYjMzk7cmUgbGlrZWx5IHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbnMgSSYjMzk7bSBhY2N1c3RvbWVkIHRvLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyB0aGF0JiMzOTtzIHByb2JhYmx5IGEgbWV0aG9kLCBhbmQgbWF5YmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgYSBzaW5nbGUgcGFnZSB2aWV3LiBTbywgbGV0JiMzOTtzIGZpcmUgdXAgdGhlIHNlYXJjaCBhbmQgZ28gZm9yIGBfX2luaXRfc2luZ2xlX3BhZ2VgLiBJdCYjMzk7cyBhIHByZXR0eSB0YXJnZXRlZCB0ZXJtLCBidXQgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSB3aGF0IHN1cmZhY2VzLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZXhwYW5kIG9yIHJlZmluZSB0aGUgc2VhcmNoIGlmIG5lY2Vzc2FyeSwgYnV0IHRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pbml0X3NpbmdsZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zMTY4PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2ZvbGlvX2luaXRfdGFpbF92bWVtbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODQtXHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IHN0YXJ0X3BhZ2VfbnVtYmVyOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBhZ2UmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5tbS9odWdldGxiLmM6MzE4NTpcdFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgbmlkKTtcbm1tL2h1Z2V0bGIuYy0zMTg2LVx0XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIpO1xuLS1cbm1tL21tX2luaXQuYz0zNzE9c3RhdGljIHZvaWQgX19pbml0IGZpbmRfem9uZV9tb3ZhYmxlX3BmbnNfZm9yX25vZGVzKHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTU5NC1cbm1tL21tX2luaXQuYzo1OTU6dm9pZCBfX21lbWluaXQgX19pbml0X3NpbmdsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbm1tL21tX2luaXQuYy01OTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmUsIGludCBuaWQpXG4tLVxubW0vbW1faW5pdC5jPTc1Mj1zdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4tLVxubW0vbW1faW5pdC5jLTc2NS1cdH1cbm1tL21tX2luaXQuYzo3NjY6XHRfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6aWQsIG5pZCk7XG5tbS9tbV9pbml0LmMtNzY3LVxuLS1cbm1tL21tX2luaXQuYz03OTI9dm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuLS1cbm1tL21tX2luaXQuYy03OTgtICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxubW0vbW1faW5pdC5jOjc5OTogKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xubW0vbW1faW5pdC5jLTgwMC0gKiBtZW1tYXBfaW5pdF96b25lX3JhbmdlKCkuXG4tLVxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tLVxubW0vbW1faW5pdC5jLTgyNy1cdGZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHtcbm1tL21tX2luaXQuYzo4Mjg6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xubW0vbW1faW5pdC5jLTgyOS1cdFx0X19TZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7XG4tLVxubW0vbW1faW5pdC5jPTg0Nz12b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtODg5LVx0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbm1tL21tX2luaXQuYzo4OTA6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIG5pZCk7XG5tbS9tbV9pbml0LmMtODkxLVx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0hPVFBMVUcpIHtcbi0tXG5tbS9tbV9pbml0LmM9OTc4PXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtOTgyLVxubW0vbW1faW5pdC5jOjk4MzpcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xubW0vbW1faW5pdC5jLTk4NC1cbi0tXG5tbS9tbV9pbml0LmM9MTk5Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZGVmZXJyZWRfaW5pdF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMjAwNC1cdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzssIHBhZ2UmIzQzOyYjNDM7KVxubW0vbW1faW5pdC5jOjIwMDU6XHRcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHppZCwgbmlkKTtcbm1tL21tX2luaXQuYy0yMDA2LVx0cmV0dXJuIG5yX3BhZ2VzO1xuLS1cbm1tL21tX2luaXQuaD0xMTU9dm9pZCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKTtcbm1tL21tX2luaXQuaC0xMTYtXG5tbS9tbV9pbml0Lmg6MTE3OnZvaWQgX19tZW1pbml0IF9faW5pdF9zaW5nbGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG5tbS9tbV9pbml0LmgtMTE4LVx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTA5MT1zdGF0aWMgaW50IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUoc3RydWN0IHBhZ2UgKmhlYWRfcGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTExOTQtICogMS4gUGFnZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIGZvciB0aGUgZmlyc3QgdGltZSwgaW5jbHVkaW5nIGR1cmluZyBkZWZlcnJlZFxubW0vcGFnZV9hbGxvYy5jOjExOTU6ICogICAgbWVtb3J5IGluaXQ7IHNlZSB0aGUgY2FsbCB0byBwYWdlX2thc2FuX3RhZ19yZXNldCBpbiBfX2luaXRfc2luZ2xlX3BhZ2UuXG5tbS9wYWdlX2FsbG9jLmMtMTE5Ni0gKiAyLiBUaGUgYWxsb2NhdGlvbiB3YXMgbm90IHVucG9pc29uZWQgZHVlIHRvIF9fR0ZQX1NLSVBfS0FTQU4sIHdpdGggdGhlXG4tLVxubW0vcGFnZV9hbGxvYy5jPTE2MDA9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTYwNy1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6MTYwODpcdCAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1tYXAsIF9faW5pdF9zaW5nbGVfcGFnZSgpIHNldHMgdGhlIHJlZmNvdW50XG5tbS9wYWdlX2FsbG9jLmMtMTYwOS1cdCAqIG9mIGFsbCBwYWdlcyB0byAxIChcJiMzNDthbGxvY2F0ZWRcJiMzNDsvXCYjMzQ7bm90IGZyZWVcJiMzNDspLiBXZSBoYXZlIHRvIHNldCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxOTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYF9faW5pdF9zaW5nbGVfcGFnZWAgaW4gYG1tL21tX2luaXQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9faW5pdF9zaW5nbGVfcGFnZWAgd2l0aGluIHRoZSBgbW1faW5pdC5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGluaXRpYWwgbWVtb3J5IHNldHVwLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2luZ2xlIHBhZ2VzLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBtYXBwaW5nIG9mIGEgc2luZ2xlIHBoeXNpY2FsIHBhZ2UsIHByb2JhYmx5IGZvciBjcml0aWNhbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVhcmx5IGJvb3Qgc3RhZ2VzLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgaG93IHRoZSBwYWdlIHRhYmxlcyBhcmUgc2V0IHVwLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJha2VkIGludG8gaXRzIGRlc2lnbi4gSXMgaXQgb3B0aW1pemVkIGZvciBzaXplLCBzcGVlZCwgb3IgYSBiYWxhbmNlIG9mIGJvdGg/IEFuZCBob3cgZG9lcyB0aGlzIGxvdy1sZXZlbCBpbml0IGZ1bmN0aW9uIHBsYXkgd2l0aCB0aGUgbGF0ZXItc3RhZ2UgbWVtb3J5IG1hbmFnZW1lbnQ/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgaXMgYnVpbHQsIHNvIGdldHRpbmcgdGhpcyBjbGVhciBpcyBwYXJhbW91bnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRvdXQ6XG4gNTkxOlx0XHQvKiByZXN0b3JlIHRoZSBub2RlX3N0YXRlICovXG4gNTkyOlx0XHRub2RlX3N0YXRlc1tOX01FTU9SWV0gPSBzYXZlZF9ub2RlX3N0YXRlO1xuIDU5MzpcdH1cbiA1OTQ6XHRcbiA1OTU6XHR2b2lkIF9fbWVtaW5pdCBfX2luaXRfc2luZ2xlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIDU5NjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKVxuIDU5NzpcdHtcbiA1OTg6XHRcdG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSk7XG4gNTk5Olx0XHRzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7XG4gNjAwOlx0XHRpbml0X3BhZ2VfY291bnQocGFnZSk7XG4gNjAxOlx0XHRhdG9taWNfc2V0KFx1MDAyNnBhZ2UtXHUwMDNlX21hcGNvdW50LCAtMSk7XG4gNjAyOlx0XHRwYWdlX2NwdXBpZF9yZXNldF9sYXN0KHBhZ2UpO1xuIDYwMzpcdFx0cGFnZV9rYXNhbl90YWdfcmVzZXQocGFnZSk7XG4gNjA0Olx0XG4gNjA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4gNjA2Olx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4gNjA3Olx0XHQvKiBUaGUgc2hpZnQgd29uJiMzOTt0IG92ZXJmbG93IGJlY2F1c2UgWk9ORV9OT1JNQUwgaXMgYmVsb3cgNEcuICovXG4gNjA4Olx0XHRpZiAoIWlzX2hpZ2htZW1faWR4KHpvbmUpKVxuIDYwOTpcdFx0XHRzZXRfcGFnZV9hZGRyZXNzKHBhZ2UsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gNjEwOlx0I2VuZGlmXG4gNjExOlx0fVxuIDYxMjpcdFxuIDYxMzpcdCNpZmRlZiBDT05GSUdfTlVNQVxuIDYxNDpcdC8qXG4gNjE1Olx0ICogRHVyaW5nIG1lbW9yeSBpbml0IG1lbWJsb2NrcyBtYXAgcGZucyB0byBuaWRzLiBUaGUgc2VhcmNoIGlzIGV4cGVuc2l2ZSBhbmRcbiA2MTY6XHQgKiB0aGlzIGNhY2hlcyByZWNlbnQgbG9va3Vwcy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZWFybHlfcGZuX3RvX25pZFxuIDYxNzpcdCAqIHRyZWF0cyBzdGFydC9lbmQgYXMgcGZucy5cbiA2MTg6XHQgKi9cbiA2MTk6XHRzdHJ1Y3QgbW1pbml0X3Bmbm5pZF9jYWNoZSB7XG4gNjIwOlx0XHR1bnNpZ25lZCBsb25nIGxhc3Rfc3RhcnQ7XG4gNjIxOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfZW5kO1xuIDYyMjpcdFx0aW50IGxhc3RfbmlkO1xuIDYyMzpcdH07XG4gNjI0Olx0XG4gNjI1Olx0c3RhdGljIHN0cnVjdCBtbWluaXRfcGZubmlkX2NhY2hlIGVhcmx5X3Bmbm5pZF9jYWNoZSBfX21lbWluaXRkYXRhO1xuIDYyNjpcdFxuIDYyNzpcdC8qXG4gNjI4Olx0ICogUmVxdWlyZWQgYnkgU1BBUlNFTUVNLiBHaXZlbiBhIFBGTiwgcmV0dXJuIHdoYXQgbm9kZSB0aGUgUEZOIGlzIG9uLlxuIDYyOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBJbml0aWFsaXphdGlvbiBhbmQgQ2FjaGUgRmx1c2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgX19pbml0X3NpbmdsZV9wYWdlYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxpbmcgYG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSlgIGluaXRpYWxseSwgd2hpY2ggcHJlc3VtYWJseSBjbGVhcnMgdGhlIHBhZ2UmIzM5O3MgY29udGVudHMgYW5kIHNldHMgdXAgaXRzIGluaXRpYWwgZmllbGRzLiAgVGhlbiwgYSB0ZW1wbGF0ZSBpcyBjcmVhdGVkIHZpYSBhIGBtZW1jcHlgIG9mIHRoZSBpbml0aWFsIHBhZ2UuIEZvciBzdWJzZXF1ZW50IHBhZ2VzLCB0aGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyB1c2VkLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlICp0ZW1wbGF0ZSogYW5kIHRoZW4gY29waWVzIHRoZSAqdGVtcGxhdGUqIGludG8gdGhlIHBhZ2UgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhY3R1YWxseSBkb2luZyBoZXJlPyAgSSBrbm93IHRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBzY2VuYXJpb3MgbGlrZSB0aGlzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYXNzZW1ibHkgaW1wbGVtZW50YXRpb24uIFRoZSB4ODYtNjQgYXJjaGl0ZWN0dXJlIGRlZmluZXMgYG1vdm50aV8qYCBmdW5jdGlvbnMsIGFuZCBhIGBtZW1jcHlfZmx1c2hjYWNoZWAgd3JhcHBlciBmb3IgdGhlbS4KCkxldCYjMzk7cyBjaGVjayBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgOgoKVGhlIGlubGluZSBmdW5jdGlvbnMgYG1vdm50aV80YCwgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBgbW92bnRpbGAgYW5kIGBtb3ZudGlxYCBpbnN0cnVjdGlvbnMuIFRoZXNlIGFyZSBub24tdGVtcG9yYWwgc3RvcmVzLCB3aGljaCBieXBhc3MgdGhlIGNhY2hlIHRvIHdyaXRlIGRpcmVjdGx5IHRvIG1lbW9yeS4gIGBtZW1jcHlfZmx1c2hjYWNoZWAgdXNlcyB0aGVzZSBgbW92bnRpXypgIGZ1bmN0aW9ucyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgKDQsIDgsIDE2LCAzMiwgNDgsIDY0LCA4MCBhbmQgOTYgYnl0ZXMpIGFuZCBjYWxscyBgX19tZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHRoZSBvdGhlciBzaXplcy4KClRoZSBmaXhlZC1zaXplIGNhc2VzIGluIHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGltcGxlbWVudGF0aW9uIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMgb24geDg2LTY0LCBzcGVjaWZpY2FsbHkgNjQsIDgwIGFuZCA5NiBieXRlcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZXNlIGNvbW1vbiBzdHJ1Y3R1cmVzLCBvcHRpbWl6aW5nIGZvciB0aGUgbWVtb3J5IGNvcHkgaW4gdGhvc2Uga2V5IHVzZSBjYXNlcy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gV2hlcmUgYXJlIHRoZXNlIGBtZW1jcHlfZmx1c2hjYWNoZWAgY2FsbHMgKmFjdHVhbGx5KiBiZWluZyB1c2VkPyBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGl0cyB1c2FnZXMsIGFuZCBhbHNvIHRoZSB1c2FnZXMgb2YgdGhlIHVuZGVybHlpbmcgYG1vdm50aV8qYCBmdW5jdGlvbnMgYW5kIHRoZSBgX19tZW1jcHlfZmx1c2hjYWNoZWAgdGhhdCBgbWVtY3B5X2ZsdXNoY2FjaGVgIHVzZXMsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGVpciBhcHBsaWNhdGlvbiB3aWxsIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgaXMgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTExND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjEtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTIzLVx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTI0Olx0XHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyNS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjktXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMwOlx0ICogX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMxLVx0ICovXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTQwLVx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsgYnJlYWs7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNDE6XHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0Mi1cdH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xNTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTIte1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTUzOlx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTQtfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jPTQ0OD12b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYy00OTgtXHR4Y2hnKFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jOjQ5OTpcdG1lbWNweV9mbHVzaGNhY2hlKG9sZF9lbGZjb3JlaGRyLCBlbGZidWYsIGVsZnN6KTtcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTUwMC1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTgxLXtcbi0tXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6MTQzOkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MzE9c3RhdGljIHZvaWQgZnNkZXZfd3JpdGVfZGF4KHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzctXG5kcml2ZXJzL2RheC9mc2Rldi5jOjM4Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShhZGRyLCBtZW0gJiM0Mzsgb2ZmLCBjaHVuayk7XG5kcml2ZXJzL2RheC9mc2Rldi5jLTM5LVx0XHRrdW5tYXBfbG9jYWwobWVtKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jPTE3PXN0YXRpYyB2b2lkIGNhY2hlX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNS1cdGNhY2hlLVx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXHUwMDNlaW5mb19pbmRleCAmIzQzOyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MjY6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfY2FjaGVfaW5mb19hZGRyKGNhY2hlKSwgY2FjaGVfaW5mbyxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXHRcdFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9ODc9dm9pZCBjYWNoZV9wb3NfZW5jb2RlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLFxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAwLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoxMDE6XHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcdTAwMjZwb3Nfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfcG9zX29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAyLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYz0xNDA9c3RhdGljIHZvaWQgc2Jfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9kZXYgKmNhY2hlX2Rldiwgc3RydWN0IHBjYWNoZV9zYiAqc2IpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQzLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmM6MTQ0Olx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDUtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEzNz1zdGF0aWMgdm9pZCBhcHBlbmRfbGFzdF9rc2V0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgbmV4dF9zZWcpXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ1LVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTQ2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ3LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xNTE9aW50IGNhY2hlX2tzZXRfY2xvc2Uoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldCAqa3NldClcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzYtXHRcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgaW4gbmV4dCBzZWcgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE3NzpcdFx0bWVtY3B5X2ZsdXNoY2FjaGUobmV4dF9zZWctXHUwMDNlc2VnbWVudC5kYXRhLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3OC1cdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTg4LVx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBhZnRlciBjdXJyZW50IGtzZXQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE4OTpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSAmIzQzOyBrc2V0X29ubWVkaWFfc2l6ZSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xOTAtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE5MS1cdC8qIHdyaXRlIGN1cnJlbnQga3NldCBpbnRvIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE5MjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xOTMtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0yMD1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXHRzZWdfaW5mb19hZGRyID0gZ2V0X3NlZ19pbmZvX2FkZHIoY2FjaGVfc2VnKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzozMjpcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMy1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTEyNj1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfY3RybF93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjEzNzpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9zZWdfZ2VuX2FkZHIoY2FjaGVfc2VnKSwgXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTEzOC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTE4Mj1pbnQgY2FjaGVfc2VnX2luaXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBzZWdfaWQsIHUzMiBjYWNoZV9zZWdfaWQsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBzZWdtZW50ICovXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShzZWdtZW50LVx1MDAzZWRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0yMTgtXHRcdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDctXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1x0XHRcdFx0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQ4Olx0bWVtY3B5X2ZsdXNoY2FjaGUoXHUwMDI2KGRlc3QpLCBcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1x0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ5LX0gd2hpbGUgKDApXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTE5Mj1zdGF0aWMgaW50IHdyaXRlY2FjaGVfbWVzc2FnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2LFxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEtXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjEyOnN0YXRpYyB2b2lkIG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZCh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBzaXplKVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIxMy17XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cdCAqIE5PVEU6IHRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBub3cgKHdpdGggZG0td3JpdGVjYWNoZSYjMzk7cyBzaW5nbGVcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMjc6XHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI4LVx0ICogZW5hYmxlZCB0byB1c2UgbW92ZGlyNjRiIHdoaWNoIG1pZ2h0IGludmFsaWRhdGUgdGhpcyBwZXJmb3JtYW5jZVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDQtI2VuZGlmXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjQ1Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDYtfVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDg9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cdFx0XHRmbHVzaF9kY2FjaGVfcGFnZShiaW9fcGFnZShiaW8pKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzQ6XHRcdFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjc1LVx0XHR9XG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYz0yMzM9c3RhdGljIGludCBuc2lvX3J3X2J5dGVzKHN0cnVjdCBuZF9uYW1lc3BhY2VfY29tbW9uICpuZG5zLFxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc2LVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYzoyNzc6XHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVx1MDAzZWFkZHIgJiM0Mzsgb2Zmc2V0LCBidWYsIHNpemUpO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzgtXHRyZXQgPSBudmRpbW1fZmx1c2godG9fbmRfcmVnaW9uKG5kbnMtXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0xMjQ9c3RhdGljIHZvaWQgd3JpdGVfcG1lbSh2b2lkICpwbWVtX2FkZHIsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzItXHRcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTMzOlx0XHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9MTEwOT1pbnQgZ2VuZXJpY19udmRpbW1fZmx1c2goc3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyNC1cdCAqIHRoZSBwbGF0Zm9ybSBidWZmZXIgZmx1c2guIE5vdGUgdGhhdCB3ZSYjMzk7dmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzoxMTI1Olx0ICogd3JpdGVzIHRvIGF2b2lkIHRoZSBjYWNoZSB2aWEgbWVtY3B5X2ZsdXNoY2FjaGUoKS4gIFRoZSBmaW5hbFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTI2LVx0ICogd21iKCkgZW5zdXJlcyBvcmRlcmluZyBmb3IgdGhlIE5WRElNTSBmbHVzaCB3cml0ZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzQtI2lmbmRlZiBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzYte1xuLS1cbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTMwNS17XG5saWIvaW92X2l0ZXIuYzozMDY6XHRtZW1jcHlfZmx1c2hjYWNoZSh0byAmIzQzOyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xubGliL2lvdl9pdGVyLmMtMzA3LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgxCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDEyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggQW5hbHlzaXMgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGBOZWVkc0tNU0FOPXRydWVgLiBUaGlzIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UuIE15IGZvY3VzIGlzIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgS01TQU4gd291bGQgYmUgZGVzaWduZWQgdG8gZGV0ZWN0LgoKRmlyc3QsIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXM6IEl0IGludHJvZHVjZXMgYW4gb3B0aW1pemVkIGBtZW1jcHlfZmx1c2hjYWNoZWAgd2l0aCBpbmxpbmUgYXNzZW1ibHkgdXRpbGl6aW5nIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgZmFzdGVyIG5vbi10ZW1wb3JhbCB3cml0ZXMgKHg4NiksIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgcmVmYWN0b3JzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcy4KClRoZSBjcnVjaWFsIHBhcnRzIGFyZSBpbiBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBIZXJlLCByYXRoZXIgdGhhbiBpbml0aWFsaXppbmcgZWFjaCBgc3RydWN0IHBhZ2VgIGluZGl2aWR1YWxseSwgYSAmIzM0O3RlbXBsYXRlJiMzNDsgYXBwcm9hY2ggaXMgdXNlZC4gVGhlIGZpcnN0IGBwYWdlYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBfX2luaXRfem9uZV9kZXZpY2VfcGFnZWAsIHdoaWNoIGNhbGxzIGBfX2luaXRfc2luZ2xlX3BhZ2VgLiBDcml0aWNhbGx5LCBgX19pbml0X3NpbmdsZV9wYWdlYCBleHBsaWNpdGx5IHplcm9lcyB0aGUgZW50aXJlIGBzdHJ1Y3QgcGFnZWAgd2l0aCBgbW1femVyb19zdHJ1Y3RfcGFnZWAgYmVmb3JlIHNldHRpbmcgb3RoZXIgZmllbGRzLiBUaGlzIGZ1bGx5IGluaXRpYWxpemVkIHBhZ2UgaXMgdGhlbiBjb3BpZWQgdG8gYSBzdGFjayB2YXJpYWJsZSBjYWxsZWQgYHRlbXBsYXRlYC4gU3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcyBhcmUgaW5pdGlhbGl6ZWQgYnkgY29weWluZyBmcm9tIHRoaXMgdGVtcGxhdGUgYWZ0ZXIgc29tZSBmaWVsZHMgKGxpa2UgdGhlIHNlY3Rpb24pIGhhdmUgYmVlbiBhZGp1c3RlZC4gSXQmIzM5O3MgdGhlbiB0aGF0IHRoZSBzcGVjaWFsaXplZCBgbWVtY3B5X25vbnRlbXBvcmFsYCBjYWxsICh3aGljaCBpcyBhbGlhc2VkIGFzIGBtZW1jcHlfZmx1c2hjYWNoZWAgaW4gdGhlIHBhdGNoKSBpcyB1c2VkLCBtZWFuaW5nIG5vIHRlbXBvcmFsIGNhY2hlIG1pc3NlcyBhcmUgaW5jdXJyZWQgb24gbGFyZ2UgcGFnZSBjb3BpZXMuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqIE5vdCBoZXJlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwgb3V0cHV0LCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRldGVybWluaXN0aWMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkOioqIE5vdCBoZXJlLiBUaGUgYHN0cnVjdCBwYWdlYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvaW5nIGFuZCBzcGVjaWZpYyBmaWVsZCBzZXRzLiBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCBzdG9yZXMgYSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHBhZ2VgLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogTm8sIHRoZSBjb3BpZXMgdXNlIGBzaXplb2YoKnBhZ2UpYCB3aGljaCBpcyBhIGRlZmluZWQgc2l6ZSwgYW5kIHdlIHJlbHkgb24gS0FTQU4gb3IgRk9SVElGWSB0byBwaWNrIHVwIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk15IGNvbmNsdXNpb24/IEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBzZWUgKm5vKiBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgY3JlYXRlZCwgdXNlZCBpbnRlcm5hbGx5IGluIGEgcHJvYmxlbWF0aWMgd2F5LCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdGFjay1iYXNlZCBgdGVtcGxhdGVgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgY29weSBmcm9tIGEgemVyb2VkIGBzdHJ1Y3QgcGFnZWAsIHdoaWNoIGlzIHRoZW4gY29waWVkIHRvIHRoZSB0YXJnZXQgYHBhZ2VgIGluc3RhbmNlcy4gVGhlIGlubGluZSBhc3NlbWJseSBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHJlYWRzIGluaXRpYWxpemVkIHZhbHVlcyBmcm9tIGBzcmNgIHRvIGBkc3RgLCB3aGljaCBhcmUgYWxsIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgS01TQU4gd291bGQgZmluZC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gUmVndWxhciBLQVNBTi9GT1JUSUZZIG1lY2hhbmlzbXMgd291bGQgY2F0Y2ggYW55IGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgaXQgd2VyZSB0byBvY2N1ciBpbiB0aGUgY29weSBvcGVyYXRpb25zLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgbG9naWMgYXBwZWFycyBzb3VuZDsgbGV0JiMzOTtzIGNhbGwgaXQgYSBkYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBhbmQgaW50cm9kdWNlcyBvcHRpbWl6ZWQgZml4ZWQtc2l6ZSBub24tdGVtcG9yYWwgY29waWVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCAvIGBtZW1jcHlfZmx1c2hjYWNoZWApIHVzaW5nIGlubGluZSBhc3NlbWJseSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxuLSBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCAoYSBgc3RydWN0IHBhZ2VgKSBpbiBgbW0vbW1faW5pdC5jYCBpcyBpbml0aWFsaXplZCB2aWEgYG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIGZyb20gYSBzdHJ1Y3QgcGFnZSB0aGF0IHdhcyBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBfX2luaXRfc2luZ2xlX3BhZ2UoKWAgKHdoaWNoIGludm9rZXMgYG1tX3plcm9fc3RydWN0X3BhZ2UoKWApLlxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxuLSBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGluY29ycmVjdCBzdHJ1Y3QgcGFnZSBzaXplIGNvcGllcywgYWxpZ25tZW50IGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3b3VsZCBiZSBtZW1vcnkgY29ycnVwdGlvbi9PT0IgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoyNToxMS43NjU1MDY2NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA0NDcwMjU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiX19tZW1jcHlfZmx1c2hjYWNoZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXFxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI1OjExLjc2NTUxMTI4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwNDI3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGM4ZThlMDA2ZjU5NTNhMTNmMzE2N2IyZTRkOTRiNjVlOGI1NmFlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1My4uODMxZDNkZGEzYjM4MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuQEAgLTgyLDI0ICs4Miw3NyBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJtb3ZudGlsICUxLCAlMFxcXCJcXG4rXFx0XFx0ICAgICA6IFxcXCI9bVxcXCIoKih1MzIgKilkc3QpXFxuK1xcdFxcdCAgICAgOiBcXFwiclxcXCIoKihjb25zdCB1MzIgKilzcmMpXFxuK1xcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRhc20gdm9sYXRpbGUoXFxcIm1vdm50aXEgJTEsICUwXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdClcXG4rXFx0XFx0ICAgICA6IFxcXCJyXFxcIigqKGNvbnN0IHU2NCAqKXNyYylcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4re1xcbitcXHRtb3ZudGlfOChkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbiB7XFxuLVxcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XFxuLVxcdFxcdHN3aXRjaCAoY250KSB7XFxuLVxcdFxcdFxcdGNhc2UgNDpcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpbCAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHUzMiAqKWRzdCkgOiBcXFwiclxcXCIoKih1MzIgKilzcmMpKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRcXHRjYXNlIDg6XFxuLVxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0XFx0Y2FzZSAxNjpcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpcSAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHU2NCAqKWRzdCkgOiBcXFwiclxcXCIoKih1NjQgKilzcmMpKTtcXG4tXFx0XFx0XFx0XFx0YXNtIChcXFwibW92bnRpcSAlMSwgJTBcXFwiIDogXFxcIj1tXFxcIigqKHU2NCAqKShkc3QgKyA4KSkgOiBcXFwiclxcXCIoKih1NjQgKikoc3JjICsgOCkpKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuK1xcdG1vdm50aV8xNihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdG1vdm50aV8zMihkc3QgKyAzMiwgc3JjICsgMzIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxcbitcXHRcXHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUgeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOlxcbitcXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxcbitcXHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUgY2FzZXMgYmFjayB0b1xcbitcXHQgKiBfX21lbWNweV9mbHVzaGNhY2hlKCkuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKGNudCkge1xcbitcXHRjYXNlIDQ6ICBtb3ZudGlfNChkc3QsIHNyYyk7IGJyZWFrO1xcbitcXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xcbitcXHRjYXNlIDE2OiBtb3ZudGlfMTYoZHN0LCBzcmMpOyBicmVhaztcXG4rXFx0Y2FzZSAzMjogbW92bnRpXzMyKGRzdCwgc3JjKTsgYnJlYWs7XFxuK1xcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcXG4rXFx0Y2FzZSA2NDogbW92bnRpXzY0KGRzdCwgc3JjKTsgYnJlYWs7XFxuK1xcdGNhc2UgODA6IG1vdm50aV82NChkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpOyBicmVhaztcXG4rXFx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xcbitcXHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcXG4gXFx0fVxcbi1cXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xcbiB9XFxuK1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcXG4rLypcXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XFxuKyAqIHByaW1pdGl2ZS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuK1xcdFxcdHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcXG4gXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbiB9XFxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI4NzIsOSArMjg4Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxcbi1cXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XFxuLVxcdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxcbi1cXHQgKlxcbi1cXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxcbitcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbitcXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxcbitcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuIFxcdCAqL1xcbiBcXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuQEAgLTEwMjEsNiArMTAxNywxNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuK1xcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxcbitcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbitcXHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcXG4gICogdGFpbCBwYWdlcyBhcmUgcmV1c2VkLiBDb25zZXF1ZW50bHksIHRoZSBhbW91bnQgb2YgdW5pcXVlIHN0cnVjdCBwYWdlcyB0b1xcbkBAIC0xMDUzLDYgKzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVxcdTAwM2V2bWVtbWFwX3NoaWZ0O1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiBcXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXFxuIFxcdCAqL1xcbiBcXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xcbi1cXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMTsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuLVxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuLVxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbi1cXHR9XFxuK1xcdC8qXFxuK1xcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZSBzdGF0ZSBlc3RhYmxpc2hlZCBieVxcbitcXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0IHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdCAqL1xcbitcXHRwZm4gPSBoZWFkX3BmbiArIDE7XFxuK1xcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbitcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIHRhaWwgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cXG4rXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDI7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKVxcbitcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGVtcGxhdGUpO1xcbiBcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbiB9XFxuIFxcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdFxcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuK1xcdGlmICghbnJfcGFnZXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZSBmaXJzdCByZWFsIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cXG4rXFx0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4rXFx0ICovXFxuK1xcdHBmbiA9IHN0YXJ0X3BmbjtcXG4rXFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuK1xcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXFxuK1xcdFxcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuK1xcdHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZDtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBoZWFkIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXFxuK1xcdGZvciAoOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4rXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjU6MTIuMTg2ODM1OTcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTA4Mzc0MDg0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICAgIFwiX19tZW1jcHlfZmx1c2hjYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBaT05FX0RFVklDRSBwYWdlIGluaXRpYWxpemF0aW9uIGluIG1tL21tX2luaXQuYyBieSBjb3B5aW5nIGZyb20gYSB0ZW1wbGF0ZSBwYWdlIHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKG1lbWNweV9ub250ZW1wb3JhbCAvIG1lbWNweV9mbHVzaGNhY2hlKSwgY2hhbmdlcyB0aGUgaW5pdGlhbCByZWZjb3VudCBiZWhhdmlvciBmb3IgRlNfREFYIHBhZ2VzLCBhbmQgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBpbmxpbmUgbW92bnRpIHJvdXRpbmVzIGZvciBmaXhlZC1zaXplIGNvcGllcyBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgbWVtb3J5IG1hcHBpbmcgcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoREFYLCBOVkRJTU0sIEhNTSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjOGU4ZTAwNmY1OTUzYTEzZjMxNjdiMmU0ZDk0YjY1ZThiNTZhZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04MiwyNCArODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aWwgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHUzMiAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTMyICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcIm1vdm50aWwgJTEsICUwXCIgOiBcIj1tXCIoKih1MzIgKilkc3QpIDogXCJyXCIoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuK3tcbitcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbitcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4rXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbitcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChjbnQpIHtcbitcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSAxNjogbW92bnRpXzE2KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbitcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcbitcdGNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG4gXHR9XG4tXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuKyAqIHByaW1pdGl2ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0yODcyLDkgKzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuIFx0ICovXG4gXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG5AQCAtMTAyMSw2ICsxMDE3LDE3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbit9XG4rXG4gLypcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcbiAgKiB0YWlsIHBhZ2VzIGFyZSByZXVzZWQuIENvbnNlcXVlbnRseSwgdGhlIGFtb3VudCBvZiB1bmlxdWUgc3RydWN0IHBhZ2VzIHRvXG5AQCAtMTA1Myw2ICsxMDYwLDggQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5XG4rXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdCB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0ICovXG4rXHRwZm4gPSBoZWFkX3BmbiArIDE7XG4rXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbitcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcbitcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4rXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4rKylcbitcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxuK1x0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbiBcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4rXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbitcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4rXHQgKi9cbitcdHBmbiA9IHN0YXJ0X3BmbjtcbitcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuK1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4rXHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuK1x0cGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbitcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuK1x0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI1OjEyLjE4NjgzODA1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjc2NjIxMDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBwcmVzZW50cyBhbnkganVpY3kgZnV6emluZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBjb21wbGV4aXR5LCBwb3RlbnRpYWwgZm9yIG5ldyBjb2RlIHBhdGhzLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gU28sIEkgc2VlIHRoYXQgd2UndmUgZ290OlxuXG4xLiAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYDogSXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBieSBhZGRpbmcgaW5saW5lIGltcGxlbWVudGF0aW9ucyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGludGVyZXN0aW5nLiBPcHRpbWl6YXRpb24gb2Z0ZW4gbWVhbnMgdGhleSdyZSBhaW1pbmcgZm9yIHBlcmZvcm1hbmNlIGluIGhvdCBjb2RlIHBhdGhzLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBvciBhbGlnbm1lbnQgaXNzdWVzIGlmIG1pc2hhbmRsZWQuIFRoZXkndmUgYWxzbyBkZWZpbmVkIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFzIGBtZW1jcHlfZmx1c2hjYWNoZWAuXG5cbjIuICBgaW5jbHVkZS9saW51eC9tbS5oYDogV2UncmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc2VjdGlvbnMgYXJlIHNldCBhbmQgbGlua2VkLCBpbmNsdWRpbmcgYSBuZXcgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuMy4gIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYDogVGhpcyBzZWVtcyB0byBiZSBhIGZhbGxiYWNrLCB3aGVyZSBgbWVtY3B5X25vbnRlbXBvcmFsYCBmYWxscyBiYWNrIHRvIGBtZW1jcHlgLiBNYWtlcyBzZW5zZS5cblxuNC4gIGBtbS9tbV9pbml0LmNgOiBUaGlzIGlzIHRoZSBtZWF0IG9mIGl0LiBUaGVyZSBhcmUgc3Vic3RhbnRpYWwgY2hhbmdlcyBoZXJlOlxuICAgICogICBJbml0aWFsaXphdGlvbiBvZiBgWk9ORV9ERVZJQ0VgIHBhZ2VzIGhhcyBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIEZTXFxfREFYIHBhZ2VzIG5vIGxvbmdlciBnZXQgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdoeSB0aGUgY2hhbmdlPyBUaGlzIGNvdWxkIGhpbnQgYXQgc29tZSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIG1hbmFnZWQsIGFuZCBwZXJoYXBzIGEgbmV3IGNsYXNzIG9mIGJ1Zy5cbiAgICAqICAgVGhleSd2ZSBhZGRlZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgbm93IHVzZXMgYG1lbWNweV9ub250ZW1wb3JhbGAgZm9yIGluaXRpYWxpemluZyBzdHJ1Y3QgcGFnZXMgZm9yIGBaT05FX0RFVklDRWAuIFRoaXMgc291bmRzIGxpa2UgYW4gZWZmb3J0IHRvIG9wdGltaXplIGFuZCBzdGFuZGFyZGl6ZSBwYWdlIGluaXRpYWxpemF0aW9uLCBidXQgaXQgYWxzbyBicmluZ3MgaW4gbmV3IGNvZGUuIEFueSB0aW1lIHlvdSBpbnRyb2R1Y2UgbmV3IHBhZ2UgaW5pdGlhbGl6YXRpb24gY29kZSwgeW91IG9wZW4gdGhlIGRvb3IgdG8gYWxsIHNvcnRzIG9mIG9mZi1ieS1vbmUgZXJyb3JzIGFuZCBpbml0aWFsaXphdGlvbiBidWdzLlxuICAgICogICBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFyZSBub3cgdXNpbmcgdGhlc2UgdGVtcGxhdGVzIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhpcyBsaWtlbHkgaXMgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZS5cblxuTXkgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGRldGVybWluZSB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQ6XG5cbiogICBXaGVyZSBpcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGNhbGxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgY29kZSBpcyByZWFjaGVkIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZXBlbmRlbnQgb24gaXQuXG4qICAgV2hhdCBrZXJuZWwgY29uZmlncyBlbmFibGUgYFpPTkVfREVWSUNFYD8gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZXByb2R1Y2UgdGhpcyBjb2RlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWxlY3RpbmcgYSB0YXJnZXQgZm9yIHRoZSBmdXp6ZXIuXG4qICAgVXNpbmcgYGdyZXBwZXJgLCBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgY2FsbHMgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYFpPTkVfREVWSUNFYCBhbmQgc2VlIHdoYXQgZWxzZSBJIGNhbiBkaWcgdXAuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtcy5cblxuSSdtIHRoaW5raW5nIHRoYXQgYW55dGhpbmcgaW52b2x2aW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBlc3BlY2lhbGx5IGl0cyB1c2UgaW4gaW5pdGlhbGl6aW5nIHBhZ2VzLCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVmY291bnQgY2hhbmdlIGlzIGFsc28gYSByZWQgZmxhZy4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG5hcnJvdyBvdXIgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjc6MTguOTUzMDUyODU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjM4NDY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMzI0PXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMzMtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzM0OmV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzM1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjQxLVxcdCAqL1xcbm1tL21lbXJlbWFwLmM6MjQyOlxcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXFxubW0vbWVtcmVtYXAuYy0yNDMtXFx0XFx0XFx0XFx0UEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21tX2luaXQuYz0xMDU1PXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwOTItXFxubW0vbW1faW5pdC5jOjEwOTM6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tbV9pbml0LmMtMTA5NC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjc6MjEuMzc2OTExMjMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyNzMyNDY0ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUmVtYXBwaW5nIENhbGxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHNvbWUga2V5IG1lbW9yeSByZW1hcHBpbmcgZnVuY3Rpb25zLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGhvdyBgcGFnZW1hcF9yYW5nZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGFyZSBpbnRlcnR3aW5lZC4gSSdtIGhvcGluZyB0byBnZXQgYSBwaWN0dXJlIG9mICp3aGVuKiB0aGV5IGFyZSBjYWxsZWQsICp3aHkqIHRoZXkncmUgY2FsbGVkIChzcGVjaWZpY2FsbHkgd2hhdCB0aGUgdXNlIGNhc2UgaXMpLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgdXNlZCwgYXMgaXQgcHJvdmlkZXMgbWFuYWdlZCBtZW1vcnkgcmVtYXBwaW5nIGFuZCBzbyBsaWtlbHkgaGFzIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gVWx0aW1hdGVseSBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjI0LjEwOTM3OTAyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2NTU1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXJlbWFwX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0zMDc9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE4LSAgICBwYWdlbWFwLm9wcyA9IFxcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE5OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzIzLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjQ6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNS1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTQzLXR1cm4gb24gOmM6ZnVuYzpgcGZuX3RvX3BhZ2VgLCA6YzpmdW5jOmBwYWdlX3RvX3BmbmAsIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNTg6Y29tbW9uIGFsaWdubWVudCBncmFudWxhcml0eSBmb3IgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AuXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjIwPW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI0Mjrov5jmnIlkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdD0xMDc9Wk9ORV9ERVZJQ0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTEyOuaYr+mhtemdou+8jOS7peS/neaMgeWGheWtmOiiq+KAnOmUgeWumuKAneS7peS+v+S9v+eUqOOAgiBgWk9ORV9ERVZJQ0VgIO+8jOmAmui/hyA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjItOmM6ZnVuYzpgYXJjaF9hZGRfbWVtb3J5YCDvvIzljbPlhoXlrZjng63mj5Lmi5TnmoTkuIrljYrpg6jliIbjgILlrZDmrrXmlK/mjIHlhYHorrgyTULkvZzkuLpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4OS1cXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE5MDpcXHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExOTEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTk2Mz1pbnQgYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3NS1cXHQvKlxcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5NzY6XFx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzctXFx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTM4MD1zdGF0aWMgaW50IGRldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXFx0XFx0XFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXFx1MDAzZWFsaWduIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjQzNTpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM9Mjc5PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMTktXFxuZHJpdmVycy9kYXgvZnNkZXYuYzozMjA6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zMjEtXFx0aWYgKElTX0VSUihhZGRyKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY3LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcXHRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhhZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXFx0aWYgKElTX0VSUihyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XFx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmNodW5rLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMzM0LVxcdGlmIChJU19FUlIocHRyKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3OTg9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODM5LVxcdHBhZ2VtYXAtXFx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODQwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NDEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgyPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDExLVxcdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMjpcXHQgKiBDbGFtcCB0byBNQVhfRk9MSU9fT1JERVIgdG8gYXZvaWQgYSBXQVJOIGluIG1lbXJlbWFwX3BhZ2VzKCkgd2hlbiB0aGUgcmFuZ2VcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTMtXFx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjAtXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIxOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjItXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMzpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDI0LVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMyLVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTMzOlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTM0LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0NS1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU0NjpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0Ny1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy05MzgtICogc2hvdWxkIGJlIG9rIHdpdGggU1VCU0VDVElPTl9TSVpFIChzZWUgbWVtcmVtYXBfY29tcGF0X2FsaWduKCkpLlxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM9Mzc9c3RhdGljIGludCBmaWxsX2xpc3QodW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYzoxMjQ6XFx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cXHRpZiAoSVNfRVJSKHZhZGRyKSkge1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc1PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTUtXFx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTE2OlxcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExNy1cXHQgKiBpbml0aWFsaXplIGEgc3RydWN0IHJlc291cmNlIGZyb20gc2NyYXRjaCAob25seSB0aGUgc3RhcnRcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMjY6XFx0ZnMtXFx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNy1cXHRpZiAoSVNfRVJSKGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMTY6ICogQHJlZjogcmVmZXJlbmNlIGNvdW50IHRoYXQgcGlucyB0aGUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIG1hcHBpbmdcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjI3PXZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzAtdm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2NC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY4LVxcdC8qXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcXHQgKiBGYWlsIGF0dGVtcHRzIHRvIGNhbGwgZGV2bV9tZW1yZW1hcF9wYWdlcygpIHdpdGhvdXRcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVxcdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz02NjE9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTcxOC1cXHR9XFxubGliL3Rlc3RfaG1tLmM6NzE5OlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZtZW0tXFx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5saWIvdGVzdF9obW0uYy03MjAtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwND1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MjogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mjk6MjUuOTk1OTM5NDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyMjA1MTYyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUmVtYXBwaW5nIGluIFFFTVUgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1lbXJlbWFwX3BhZ2VzYCBpcyBiZWluZyB1c2VkIGFuZCwgY3JpdGljYWxseSwgaG93IHdlIGNhbiByZWFjaCB0aG9zZSBjYWxscyB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBsZXQncyBsb29rIGF0IGEgZmV3IHNwZWNpZmljIGFyZWFzIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gRm9yIHN0YXJ0ZXJzLCBJIHNob3VsZCBleGFtaW5lIGBsaWIvdGVzdF9obW0uY2Ag4oCTIHRoYXQgSE1NIHRlc3QgZGV2aWNlLCBgL2Rldi9obW1fZG1pcnJvcmAsIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYHZpcnRpb19mc2Agd2l0aCBEQVggbWlnaHQgYmUgaW52b2x2ZWQsIGFzIHdlbGwgYXMgdGhlIGludGVyYWN0aW9ucyB3aXRoIHBlcnNpc3RlbnQgbWVtb3J5IHRlY2hub2xvZ2llcyBsaWtlIGBwbWVtYCwgYG52ZGltbWAsIGFuZCBvdGhlciBEQVggY29uZmlndXJhdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSB1c2luZyB0aGlzLiBgZGF4X3BtZW1gLCBgZGV2X2RheGAsIGFuZCBgZnNkZXZfZGF4YCBhcmUgYWxzbyBnb29kIHN0YXJ0aW5nIHBvaW50cy5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgbGliL0tjb25maWdgIHRvIHNlZSBpZiBgVEVTVF9ITU1gIGlzIGVuYWJsZWQuIEl0J3MgbGlrZWx5IHRoYXQgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggdGhpbmdzIGxpa2UgYG52ZGltbWAgb3Igc2ltaWxhciBwZXJzaXN0ZW50IG1lbW9yeSBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSByZWdpb25zLCBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggYWxsIEtjb25maWcgZmlsZXMgZm9yIGBaT05FX0RFVklDRWAsIHdoaWNoIGlzIGtleSBmb3IgREFYIGFuZCBkZXZpY2UtYmFzZWQgbWVtb3J5IG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzg1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjM4LjIxNjQ1ODYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1NDE0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIyNC1cXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjI2LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjI5OjM5LjkyMTg4MTA1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzI0MDY5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBsaW5lIDEyMjUgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEknbSBub3QgZXhwZWN0aW5nIGEgZ3JvdW5kYnJlYWtpbmcgcmV2ZWxhdGlvbiwgYnV0IG9mdGVuIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgYW5kIHRoaXMgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlnIG9wdGlvbidzIGRlcGVuZGVuY2llcyBvciBjb25zdHJhaW50cyB0aGF0IEkndmUgYmVlbiBwdXp6bGluZyBvdmVyLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRocm91Z2ggdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBoYXBwZW5zIGFzIG9wdGlvbnMgY2hhbmdlLiBJIHN1c3BlY3QgdGhlcmUncyBhIHBhcnRpY3VsYXIgb3B0aW9uIEkgbmVlZCB0byBlaXRoZXIgc2V0LCBvciB1bmRlcnN0YW5kIHdoeSBpdCdzIG5vdCBiZWluZyBzZXQgY29ycmVjdGx5LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGRlZmluZWQgdGhlcmUsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzA6MjAuNjQ1OTU0NDg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjIxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIyMjpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjIzOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjI2OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI5OlxcdFxcbjEyMzA6XFx0XFx0aGVscFxcbjEyMzE6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMzI6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzM6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjM0OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjM1OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM4OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzk6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI0MDpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNDE6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjQyOlxcdFxcbjEyNDM6XFx0I1xcbjEyNDQ6XFx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXFxuMTI0NTpcXHQjIHRhYmxlcy5cXG4xMjQ2OlxcdCNcXG4xMjQ3OlxcdGNvbmZpZyBITU1fTUlSUk9SXFxuMTI0ODpcXHRcXHRib29sXFxuMTI0OTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNTA6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjEyNTE6XFx0XFxuMTI1MjpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1MzpcXHRcXHRib29sXFxuMTI1NDpcXHRcXG4xMjU1OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNTY6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNTc6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNTg6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMwOjIwLjY0NjExMTUzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0NzUxNTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyB0aGUgVUFDQ0VTUyBGbHVzaCBDYWNoZSBGbGFnKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBjcnVjaWFsLiBXZSd2ZSBnb3QgdGhpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFjY2VzcywgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgYnV0IHdlIGhhdmUgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgY29ycmVjdC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGhhbmRsaW5nIHRoZSBjYWNoZSBjb2hlcmVuY3kgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBhY2Nlc3MuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUncyBzcGVjaWZpY3MsIEkgc2hvdWxkIGdvIGFoZWFkIGFuZCBleGFtaW5lIHRoZSBtYWNybywgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgZmVhdHVyZS4gSSBrbm93IEkndmUgd29ya2VkIHdpdGggc3lzdGVtcyBiZWZvcmUgd2hlcmUgY2FjaGUgZmx1c2hlcyBhcm91bmQgdXNlci1zcGFjZSBhY2Nlc3NlcyB3ZXJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB0byBhdm9pZCBzdGFsZSBkYXRhIGlzc3VlcyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gdGVsbHMgdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIGhvdyBpdCBpbXBhY3RzIG91ciBjdXJyZW50IGNvZGUgcGF0aC4gRXNzZW50aWFsbHksICppcyogdGhlcmUgYSByZXF1aXJlbWVudCwgYnkgZGVzaWduLCB0byBmbHVzaCB0aGUgY2FjaGUsIGFuZCBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBjb25kaXRpb25hbGl6ZXMgaXRzZWxmIGFyb3VuZCB0aGlzIGZsYWcsIGFuZCB3aGV0aGVyIHRoaXMgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSBvcHRpbWl6YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0cnkgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYWJzb2x1dGUgcmVxdWlyZW1lbnQsIG9yIGlmIHRoaXMgY2FuIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCB0aGF0IGNvdWxkIGluZmx1ZW5jZSBhbnkgb3B0aW1pemF0aW9ucyB3ZSBpbnRyb2R1Y2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMDo0OS44OTM2Mjk4NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIxNjYwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xOTc2PWNvbmZpZyBBUk02NF9QTUVNXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTk3OC1cXHRzZWxlY3QgQVJDSF9IQVNfUE1FTV9BUElcXG5hcmNoL2FybTY0L0tjb25maWc6MTk3OTpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5ODAtXFx0aGVscFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaD00ND1leHRlcm4gdm9pZCAqX19tZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00NS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oOjQ2OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD00NzU9ZXh0ZXJuIF9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3Ni1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo0Nzc6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00NzgtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xcbi0tXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU9Nj1saWIteVxcdFxcdDo9IGNsZWFyX3VzZXIubyBkZWxheS5vIGNvcHlfZnJvbV91c2VyLm9cXHRcXHRcXFxcXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0xMS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZToxMjpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSArPSB1YWNjZXNzX2ZsdXNoY2FjaGUub1xcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTEzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cXHRzZWxlY3QgQVJDSF9IQVNfVElDS19CUk9BRENBU1RcXHRcXHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE1OTpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVxcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9pbnZhbGlkYXRlX3BtZW0pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtNjYtLypcXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo2NzogKiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFIHN5bWJvbHNcXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02OC0gKi9cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMDMtXFx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXFx0aWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC94ODYvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTA1LVxcdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXFx0XFx0XFx0aWYgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD04MD1pbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODI6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04My0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE3LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTktLyoqXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTA4LVxcdGZ1YSA9IG52ZGltbV9oYXNfZmx1c2gobmRfcmVnaW9uKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTA5OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSB8fCBmdWEgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxMC1cXHRcXHRkZXZfd2FybihkZXYsIFxcXCJ1bmFibGUgdG8gZ3VhcmFudGVlIHBlcnNpc3RlbmNlIG9mIHdyaXRlc1xcXFxuXFxcIik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTI2MT1ib29sIGNvcHlfZnJvbV9pdGVyX2Z1bGxfbm9jYWNoZSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjY5LVxcbmluY2x1ZGUvbGludXgvdWlvLmg6MjcwOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNzEtLypcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjczLSAqIF9jb3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKCkgdGhhbiBfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSgpIG11c3QgY2hlY2sgZm9yXFxuaW5jbHVkZS9saW51eC91aW8uaDoyNzQ6ICogSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSBiZWZvcmUgYXNzdW1pbmcgdGhhdCB0aGVcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3NS0gKiBkZXN0aW5hdGlvbiBpcyBmbHVzaGVkIGZyb20gdGhlIGNhY2hlIG9uIHJldHVybi5cXG4tLVxcbmxpYi9LY29uZmlnPTUzNj1jb25maWcgVUFDQ0VTU19NRU1DUFlcXG4tLVxcbmxpYi9LY29uZmlnLTUzOC1cXG5saWIvS2NvbmZpZzo1Mzk6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9LY29uZmlnLTU0MC1cXHRib29sXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0yOTI9RVhQT1JUX1NZTUJPTChfY29weV9mcm9tX2l0ZXJfbm9jYWNoZSk7XFxubGliL2lvdl9pdGVyLmMtMjkzLVxcbmxpYi9pb3ZfaXRlci5jOjI5NDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9pb3ZfaXRlci5jLTI5NS1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMwOjUyLjM3NTgyMjA3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzYzMzQ5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRFU1RfSE1NKipcblxuQWxyaWdodCwgc28gdGhlIGluc3RydWN0aW9uIGlzIGNvbmNpc2U6IFwiTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoIGBURVNUX0hNTWBcIi4gVGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIGEgZmV3IHRoaW5ncyB0byBtZS4gRmlyc3QsIGBURVNUX0hNTWAgbGlrZWx5IHJlZmVycyB0byBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSBleHBlcmltZW50YWwsIHBpZWNlIG9mIGNvZGUgb3IgYSBzZXQgb2YgcGFyYW1ldGVycyByZWxhdGVkIHRvIGEgSGlkZGVuIE1hcmtvdiBNb2RlbC4gVGhlIHVzZSBvZiBhbGwgY2FwcyBhbmQgdGhlIHByZXNlbmNlIG9mIFwiVEVTVFwiIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgbGlrZWx5IGEgdGVzdCBzZXR1cCwgcGVyaGFwcyBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9yIGEgc2NyaXB0IHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgZXZhbHVhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dD8gV2hhdCdzIHRoZSBnb2FsIG9mIHRoaXMgdGVzdD8gQXJlIHdlIGxvb2tpbmcgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgZWRnZSBjYXNlIGRldGVjdGlvbiwgcm9idXN0bmVzcyB2YWxpZGF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0cnVlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgdGhlIHNwZWNpZmljcy4gVGhlIHBocmFzZSBcIkxldCdzIHNlZSB3aGF0IGhhcHBlbnMuLi5cIiB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgaW4gYW4gZXhwbG9yYXRvcnkgcGhhc2UuIFdlJ3JlIHJ1bm5pbmcgdGhpcyBhbmQgd2F0Y2hpbmcgdGhlIG91dHB1dHMsIHByb2JhYmx5IGxvZ2dpbmcgdGhlbSwgYW5kIHByZXBhcmluZyB0byBhbmFseXplIHRoZSByZXN1bHRzIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbeKAmXMgYmVoYXZpb3Igd2l0aCB0aGlzIHNwZWNpZmljIG1vZGVsIHZhcmlhbnQgb3IgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGV4cGVyaW1lbnRhbCBzZXR1cCwgZXhwZWN0ZWQgcmVzdWx0cywgYW5kIHRoZSBzcGVjaWZpYyBtZXRyaWNzLiBUaGlzIGNvdWxkIG1lYW4gYSBsb3Qgb2YgdGhpbmdzLiBJJ20gcmVhZHkgdG8gZXZhbHVhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjI1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzE6MDIuMTM5MTc0NDUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MzU3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjYtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTYtICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxcbmxpYi90ZXN0X2htbV91YXBpLmgtOS1cXG4tLVxcbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oLTgwLVxcbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9NT1DT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnLTctQ09ORklHX0dVUF9URVNUPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM1LVxcdFxcdGVjaG8gXFxcIiQwOiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbDpcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g6MzY6XFx0XFx0ZWNobyBcXFwiQ09ORklHX1RFU1RfSE1NPW1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjAzLjk5MzU1NjcyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI2NTI3MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludm9jYXRpb24gb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0J3Mgc2VlLi4uIEZpcnN0LCBJJ2xsIGdvIHRvIGBtbS9tZW1yZW1hcC5jYC4gUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLCB3aGljaCB0aGVuIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFoLCBhbmQgdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGl0c2VsZiBpcyBpbnZva2VkIHdoZW4gWk9ORV9ERVZJQ0UgbWVtb3J5IGlzIGVpdGhlciBtYXBwZWQgb3IgaG90cGx1Z2dlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5Ob3csIEknbGwgZm9jdXMgb24gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpdHNlbGYuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24ncyBkZWZpbml0aW9uLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmssIEknbGwgbmF2aWdhdGUgb3ZlciB0byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgcHJvY2VzcyBwcm9wZXJseSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjE1LjI1ODgzMDEzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1faW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuMTA4MTpcXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4xMDgyOlxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuMTA4MzpcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4xMDg0OlxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSByZW1haW5pbmcgdGFpbCBwYWdlcyBmcm9tIHRlbXBsYXRlLiAqL1xcbjEwODc6XFx0XFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDI7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKVxcbjEwODg6XFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxcbjEwODk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuMTA5MDpcXHRcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbjEwOTE6XFx0fVxcbjEwOTI6XFx0XFxuMTA5MzpcXHR2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbjEwOTQ6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuMTA5NTpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICsgbnJfcGFnZXM7XFxuMTA5OTpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG4xMTAwOlxcdFxcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcXG4xMTAxOlxcdFxcdHVuc2lnbmVkIGludCBwZm5zX3Blcl9jb21wb3VuZCA9IHBnbWFwX3ZtZW1tYXBfbnIocGdtYXApO1xcbjExMDI6XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xcbjExMDM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XFxuMTEwNDpcXHRcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuMTEwNTpcXHRcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4xMTA2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXFxuMTEwOTpcXHRcXHRcXHRyZXR1cm47XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdC8qXFxuMTExMjpcXHRcXHQgKiBUaGUgY2FsbCB0byBtZW1tYXBfaW5pdCBzaG91bGQgaGF2ZSBhbHJlYWR5IHRha2VuIGNhcmVcXG4xMTEzOlxcdFxcdCAqIG9mIHRoZSBwYWdlcyByZXNlcnZlZCBmb3IgdGhlIG1lbW1hcCwgc28gd2UgY2FuIGp1c3QganVtcCB0b1xcbjExMTQ6XFx0XFx0ICogdGhlIGVuZCBvZiB0aGF0IHJlZ2lvbiBhbmQgc3RhcnQgcHJvY2Vzc2luZyB0aGUgZGV2aWNlIHBhZ2VzLlxcbjExMTU6XFx0XFx0ICovXFxuMTExNjpcXHRcXHRpZiAoYWx0bWFwKSB7XFxuMTExNzpcXHRcXHRcXHRzdGFydF9wZm4gPSBhbHRtYXAtXFx1MDAzZWJhc2VfcGZuICsgdm1lbV9hbHRtYXBfb2Zmc2V0KGFsdG1hcCk7XFxuMTExODpcXHRcXHRcXHRucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47XFxuMTExOTpcXHRcXHR9XFxuMTEyMDpcXHRcXG4xMTIxOlxcdFxcdGlmICghbnJfcGFnZXMpXFxuMTEyMjpcXHRcXHRcXHRyZXR1cm47XFxuMTEyMzpcXHRcXG4xMTI0OlxcdFxcdC8qXFxuMTEyNTpcXHRcXHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUgZmlyc3QgcmVhbCBzdHJ1Y3RcXG4xMTI2OlxcdFxcdCAqIHBhZ2UuIFRoZSBub3JtYWwgcGFnZS1pbml0IGFuZCByZWZjb3VudCBoZWxwZXJzIG11c3Qgb3BlcmF0ZSBvblxcbjExMjc6XFx0XFx0ICogYSByZWFsIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4xMTI4OlxcdFxcdCAqL1xcbjExMjk6XFx0XFx0cGZuID0gc3RhcnRfcGZuO1xcbjExMzA6XFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuMTEzMTpcXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4xMTMyOlxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbjExMzM6XFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXFxuMTEzNDpcXHRcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbjExMzU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcXG4xMTM2OlxcdFxcdHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZDtcXG4xMTM3OlxcdFxcbjExMzg6XFx0XFx0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cXG4xMTM5OlxcdFxcdGZvciAoOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4xMTQwOlxcdFxcdFxcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXFxuMTE0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuMTE0NjpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kID09IDEpXFxuMTE0OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0XFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcXG4xMTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuMTE1MzpcXHRcXHR9XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHN0YXJ0X3BmbiwgbnJfcGFnZXMsIE1JR1JBVEVfTU9WQUJMRSwgZmFsc2UpO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgaW5pdGlhbGlzZWQgJWx1IHBhZ2VzIGluICV1bXNcXFxcblxcXCIsIF9fZnVuY19fLFxcbjExNTg6XFx0XFx0XFx0bnJfcGFnZXMsIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7XFxuMTE1OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMxOjE1LjI1ODk3NjQ3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDY2ODIxNDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgaG9uZXMgaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBvcHRpbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi10ZW1wb3JhbCBhY2Nlc3MsIGFuZCB0aGVyZSdzIGEgcmVsYXRlZCB1cGRhdGUgY29uY2VybmluZyBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBkaWZmZXJlbnQgbWVtb3J5IGRldmljZSB0eXBlcy5cblxuRmlyc3QsIEkgc2VlIHRoZSBvcHRpbWl6YXRpb24gb2YgYG1lbWNweV9mbHVzaGNhY2hlYCBmb3IgeDg2LiBUaGlzIGZ1bmN0aW9uLCByZXNpZGluZyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCBpcyBub3cgc3BvcnRpbmcgaW5saW5lIGBtb3ZudGlgIGluc3RydWN0aW9ucyDigJMgdGhvc2Ugbm9uLXRlbXBvcmFsIHN0b3JlIGhpbnRzIOKAkyB0YWlsb3JlZCBmb3IgZml4ZWQtc2l6ZSBjb3BpZXM6IDQsIDgsIDE2LCAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLiBOaWNlLCB0aGlzIGlzIHRoZSBraW5kIG9mIHRhcmdldGVkIG9wdGltaXphdGlvbiBJIGFwcHJlY2lhdGUuIENsZWFybHksIHRoZSBnb2FsIGhlcmUgaXMgdG8gcmVkdWNlIGNhY2hlIHBvbGx1dGlvbiBkdXJpbmcgdGhlc2UgbWVtb3J5IGNvcGllcy5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY3B5X25vbnRlbXBvcmFsYCBhcyBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbiB0aGF0IGxldmVyYWdlcyBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9uIHg4Niwgd2l0aCBhIGZhbGxiYWNrIHRvIHRoZSBzdGFuZGFyZCBgbWVtY3B5YCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLCByZWluZm9yY2VzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFRoaXMgaXMgYSBjb21tb24gYW5kIHNlbnNpYmxlIGFwcHJvYWNoLlxuXG5Ob3csIHdlIGhhdmUgYSBjbGVhciBwYXRoIG9mIGhvdyB0aGlzIGlzIGFsbCBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBub3cgY2FsbGluZyBgbWVtY3B5X25vbnRlbXBvcmFsYCB0byBpbml0aWFsaXplIGBzdHJ1Y3QgcGFnZWAgZW50cmllcyBmcm9tIGEgdGVtcGxhdGUgYHN0cnVjdCBwYWdlYCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gIGFuZCB0aGUgcGFnZSB2aXJ0dWFsIGFkZHJlc3MuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHdlJ3JlIGV4cGVjdGluZyBwZXJmb3JtYW5jZSBnYWlucyB3aGVuIGluaXRpYWxpemluZyB0aGVzZSBwYWdlcy5cblxuRmluYWxseSwgdGhlcmUncyBhIGNoYW5nZSBpbiByZWZjb3VudCBoYW5kbGluZyB3aXRoaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIEZTX0RBWCwgd2hpY2ggSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3Mgc3VidGxlLCBidXQgY3JpdGljYWwuIFRoZSBwcmV2aW91cyBjb2RlIHN0cnVjdHVyZSBoYWQgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgaGFuZGxlZCBwYWdlIGNvdW50IGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHRoZSBgcGdtYXAtXHUwMDNldHlwZWAuIFRoZSBjaGFuZ2UgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBgTUVNT1JZX0RFVklDRV9HRU5FUklDYCB0eXBlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBwcmV2aW91c2x5IHNraXBwZWQsIGJ1dCBub3cgd2UncmUgZXhwbGljaXRseSAqbm90KiBpbml0aWFsaXppbmcgdGhlIHBhZ2UgY291bnQgZm9yIHRoaXMgdHlwZSwgd2hlcmVhcyBiZWZvcmUgaXQgd291bGQgaGF2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGNoYW5nZWQsIHNwZWNpZmljYWxseSwgaG93IHRoaXMgaW1wYWN0cyBtZW1vcnkgbWFuYWdlbWVudC4gSSB0aGluayBJJ2xsIGp1bXAgZGlyZWN0bHkgdG8gYG1tL21tX2luaXQuY2AgYW5kIGNoZWNrIGxpbmVzIDk5MC0xMDMwIHRvIGdhaW4gbW9yZSBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhbmdlIGlzIGVzc2VudGlhbCB0byBlbnN1cmluZyBjb3JyZWN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMToyOS45MjcxOTQ0NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0ICogdGhlIGZsYWcgYXMgd2UgYXJlIHN0aWxsIGluaXRpYWxpemluZyB0aGUgcGFnZXMuXFxuIDk5MTpcXHRcXHQgKi9cXG4gOTkyOlxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBhZ2UpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHQvKlxcbiA5OTU6XFx0XFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgdW5pb24gLVxcdTAwM2VscnUgd2l0aCBhIC1cXHUwMDNlcGdtYXAgYmFjayBwb2ludGVyXFxuIDk5NjpcXHRcXHQgKiBhbmQgem9uZV9kZXZpY2VfZGF0YS4gIEl0IGlzIGEgYnVnIGlmIGEgWk9ORV9ERVZJQ0UgcGFnZSBpc1xcbiA5OTc6XFx0XFx0ICogZXZlciBmcmVlZCBvciBwbGFjZWQgb24gYSBkcml2ZXItcHJpdmF0ZSBsaXN0LlxcbiA5OTg6XFx0XFx0ICovXFxuIDk5OTpcXHRcXHRwYWdlX2ZvbGlvKHBhZ2UpLVxcdTAwM2VwZ21hcCA9IHBnbWFwO1xcbjEwMDA6XFx0XFx0cGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XFxuMTAwMTpcXHRcXG4xMDAyOlxcdFxcdC8qXFxuMTAwMzpcXHRcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbjEwMDQ6XFx0XFx0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcXG4xMDA1OlxcdFxcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4xMDA2OlxcdFxcdCAqL1xcbjEwMDc6XFx0XFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbjEwMDg6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4xMDA5OlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbjEwMTA6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbjEwMTE6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuMTAxMjpcXHRcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4xMDEzOlxcdFxcdFxcdGJyZWFrO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4xMDE2OlxcdFxcdFxcdGJyZWFrO1xcbjEwMTc6XFx0XFx0fVxcbjEwMTg6XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMDIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuMTAyMjpcXHR7XFxuMTAyMzpcXHRcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbjEwMjQ6XFx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuMTAyNTpcXHRcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4xMDI2OlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMDI3OlxcdCNlbmRpZlxcbjEwMjg6XFx0XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4xMDI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzE6MjkuOTI3NDExNjQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDc3NzI1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzLCBhbmQgaXQgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgbWVtY3B5X25vbnRlbXBvcmFsYCBpcyBpbnZvbHZlZCwgYW5kIHdlIGFyZSB3b3JraW5nIGRpcmVjdGx5IG9uIGBwYWdlYCB1c2luZyBhIGB0ZW1wbGF0ZWAuIEknbSBzZWVpbmcgdGhhdCBtb2RpZnlpbmcgYHRlbXBsYXRlYCAod2hpY2ggaXMgcGFzc2VkIGJ5IHBvaW50ZXIhKSBjaGFuZ2VzIHRoZSBzaGFyZWQgdGVtcGxhdGUuIEluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgdGhlIGBwZm5gIGluY3JlbWVudHMgYW5kIHVwZGF0ZXMgYHRlbXBsYXRlYCBkdXJpbmcgaXRlcmF0aW9ucywgd2hpY2ggaXMgdGhlbiBjb3BpZWQgdG8gYHBhZ2VgIGluIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgaXQgbG9va3MgbGlrZSBhIHJlc291bmRpbmcgWUVTLiBUaGlzIGlzbid0IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nOyBpdCdzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIChgbW0vbW1faW5pdC5jYCksIGFuZCBhZmZlY3RpbmcgYFpPTkVfREVWSUNFYCBwYWdlIGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0dWZmIGxpa2UgYG1lbWNweV9mbHVzaGNhY2hlYCAod2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGApIGFuZCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYXMgd2VsbC4gVGhpcyBpbXBhY3RzIERBWCwgcG1lbSwgdGVzdF9obW0gKHZpcnR1YWwgZGV2aWNlIGZvciB0ZXN0aW5nIEhNTSAvIFpPTkVfREVWSUNFKSwgcDJwZG1hLCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGFyZWFzLlxuXG5JbXBvcnRhbnRseSwgYFpPTkVfREVWSUNFYCBtZW1vcnkgKmNhbiogYmUgdXNlZCBhbmQgdGVzdGVkIGluIFFFTVUhIFdlIGNhbiBlbXVsYXRlIHBlcnNpc3RlbnQgbWVtb3J5IChOVkRJTU0vcG1lbSkgYW5kIERBWCB1c2luZyBgLWRldmljZSBudmRpbW1gLCBvciB0aHJvdWdoIGR1bW15IG1vZHVsZXMgbGlrZSBgdGVzdF9obW0ua29gIG9yIGAvZGV2L2RheGAuIFBsdXMsIHRoZXJlJ3MgYSByZWZjb3VudCBjaGFuZ2UgaW4gYF9faW5pdF96b25lX2RldmljZV9wYWdlYCAoZnJvbSAxIHRvIDApLCBkaXJlY3RseSBhbHRlcmluZyBwYWdlIGxpZmVjeWNsZSBiZWhhdmlvci4gRnVydGhlcm1vcmUsIHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgZm9yIDQvOC8xNi8zMi80OC82NC84MC85Ni1ieXRlIGNvcGllcyBpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFmZmVjdCBjYWxsZXJzLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgISBUaGlzIHBhdGNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBzaWduaWZpY2FudCBtZW1vcnkgbWFuYWdlbWVudCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIHdhbnQgbm9uLWdlbmVyaWMsIG5vbi1ob3QtcGF0aCwgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6XG5cbkluIGBtbS9tbV9pbml0LmNgLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBtYWluIHRhcmdldCwgd2hpY2ggaXMgZXhwb3J0ZWQuIE5vdGUgdGhhdCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBhbmQgYF9faW5pdF96b25lX2RldmljZV9wYWdlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tX2luaXQuY2AsIHNvIHdpbGwgbm90IGJlIGZ1enplZCBhcyBhIGRpcmVjdCBlbnRyeSBwb2ludC5cblxuSW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCB3ZSBoYXZlIGBfX21lbWNweV9mbHVzaGNhY2hlYC4gSXQgbG9va3MgdG8gYmUgYW4gQVNNIGZ1bmN0aW9uLiBMZXQncyBtYWtlIHN1cmUgaXQncyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZC5cblxuV2hhdCBhYm91dCBvdGhlciBmdW5jdGlvbnM/IFdlIHNob3VsZCBhbHNvIGNoZWNrIGFueSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEl0IGxvb2tzIGxpa2UgYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGluIGBtbS9tZW1yZW1hcC5jYCBjYWxsIGl0LCBzbyBsZXQncyBjaGVjayB0aGVyZSB0b28sIGFuZCBhbHNvIGluIHJlbGF0ZWQgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODM4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjAxLjQwNTE0MDQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTk4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlfG1lbXJlbWFwX3BhZ2VzfGRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTc9c3RhdGljIERFRklORV9YQVJSQVkocGdtYXBfYXJyYXkpO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0xOS0vKlxcbm1tL21lbXJlbWFwLmM6MjA6ICogVGhlIG1lbXJlbWFwKCkgYW5kIG1lbXJlbWFwX3BhZ2VzKCkgaW50ZXJmYWNlcyBhcmUgYWx0ZXJuYXRlbHkgdXNlZFxcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxcbm1tL21lbXJlbWFwLmM6MjM6ICogbWVtcmVtYXAoKSBjYW4gbWFwIGluZGl2aWR1YWwgUEFHRV9TSVpFIHBhZ2VzLiBtZW1yZW1hcF9wYWdlcygpIGNhblxcbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXFxubW0vbWVtcmVtYXAuYy0yNi0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbm1tL21lbXJlbWFwLmMtMjY3LXtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzUxLX1cXG5tbS9tZW1yZW1hcC5jOjM1MjpFWFBPUlRfU1lNQk9MX0dQTChtZW1yZW1hcF9wYWdlcyk7XFxubW0vbWVtcmVtYXAuYy0zNTMtXFxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXFxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VcXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJ2xpdmUnIG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxcbm1tL21lbXJlbWFwLmMtMzY5LSAqXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG5tbS9tZW1yZW1hcC5jLTM3NS17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM3OC1cXG5tbS9tZW1yZW1hcC5jOjM3OTpcXHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XFxubW0vbWVtcmVtYXAuYy0zODAtXFx0aWYgKElTX0VSUihyZXQpKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG5tbS9tbV9pbml0LmM9MTA1NT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMDkyLVxcbm1tL21tX2luaXQuYzoxMDkzOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTEwOTQtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwND1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICpcXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MjogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDYzLSAqIGl0IGFmdGVyIGVhY2ggcmFuZ2Ugc3VjY2Vzc2Z1bCBvbmxpbmluZy4gVGh1cyB0aGUgdmFsdWUgb3IgQG5yX3JhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjAxLjU5NjM0OTI1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUzMzU4NDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hcHBpbmcgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGBtZW1yZW1hcF9wYWdlc2AsIGFuZCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9scywgYmVjYXVzZSBJIGtub3cgaG93IGVhc3kgaXQgaXMgdG8gb3Zlcmxvb2sgc29tZXRoaW5nIGluIHRoaXMgYXJlYS4gQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBmdW5jdGlvbi4gTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlIGRlZmluaXRpb24gZm9yIGBfX21lbWNweV9mbHVzaGNhY2hlYCBjYW4gYmUgZm91bmQ7IHRoYXQncyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIGNhY2hlIGJlaGF2aW9yIGR1cmluZyBtZW1vcnkgY29weSBvcGVyYXRpb25zLCBhbmQgaXQgY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6MTQuMTI5OTM3NzA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk3MzU5OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODQ6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04NS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEyMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjMtXFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjEyNDpcXHRcXHRyZXR1cm4gX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMjktXFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMzA6XFx0ICogX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzMS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0MC1cXHRjYXNlIDk2OiBtb3ZudGlfNjQoZHN0LCBzcmMpOyBtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTsgYnJlYWs7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTQxOlxcdGRlZmF1bHQ6IF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7IGJyZWFrO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE0Mi1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjE3LjEyNzMwMzYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDU3MDY0ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBJbmxpbmluZyBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hlcmUgd2UncmUgYXQgd2l0aCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGEgZmV3IGtleSBmdW5jdGlvbnMuIFJpZ2h0LCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFuZCBgbWVtY3B5X25vbnRlbXBvcmFsYCAtIGJvdGggYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgKnNob3VsZCogaW5saW5lIHRoZW0uIEdvb2QuIFRoYXQncyBhIHBvaW50IGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIC0gYm90aCBhcmUgYHN0YXRpY2Agc28gb25seSBhdmFpbGFibGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBhbHNvIGxlc3MgbGlrZWx5IHRvIGNvbnRyaWJ1dGUgdG8gY29kZSBibG9hdC5cblxuTm93LCBmb3IgdGhvc2UgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtcmVtYXBfcGFnZXNgLCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhlaXIgbG9jYWwgY29tcGlsYXRpb24gdW5pdCAtIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGFrZXMgem9uZSwgc3RhcnQgUEZOLCBudW1iZXIgb2YgcGFnZXMsIGFuZCBwYWdlIG1hcCBhcyBwYXJhbWV0ZXJzLiBJbnRlcmVzdGluZy4gYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYGRldm1fbWVtcmVtYXBfcGFnZXNgIC0gdGFrZSBhIHBhZ2UgbWFwIGFuZCBlaXRoZXIgYSBub2RlIElEIG9yIGRldmljZSBzdHJ1Y3QgcmVzcGVjdGl2ZWx5LlxuXG5OZXh0IHVwLCBJIG5lZWQgdG8ga25vdyB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIGNvZGUgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhY3RpdmF0ZWQuIFRpbWUgdG8gZGlnIGludG8gYG1tL01ha2VmaWxlYCBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYG1tX2luaXQuY2AgYW5kIGBtZW1yZW1hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjMyLjE4NDM3MTY4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTU3ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2luaXRcXFxcLm98bWVtcmVtYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NTpcXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICs9IHBlcmNwdS1zdGF0cy5vXFxubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gbWVtcmVtYXAub1xcbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfSE1NX01JUlJPUikgKz0gaG1tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6MzIuMzQwNTM1NDM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3NTI3NDYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIERldmljZSBab25lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IG1hcCBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBkZXZpY2Ugem9uZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBOb3csIEknbSBnb2luZyB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdpbGwgYmUgdGhlIGtleS4gSWYgaXQncyBwcmVzZW50IGFuZCBndWFyZGluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCB0aGVuIEknbGwga25vdyB0aGF0IHRoZSBkZXZpY2Ugem9uZSBpbml0aWFsaXphdGlvbiBpcyBjb25kaXRpb25hbCwgYW5kIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZXZlbiBnZXRzIGNhbGxlZC4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGFuZCBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0ncyBydW50aW1lIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGluZGVlZCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIHVuY29uZGl0aW9uYWxseSBleGVjdXRlZCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgZGV0YWlsIHdpbGwgaGVscCB3aXRoIGRlYnVnZ2luZyBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkyNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjQwLjA5MzI4NTYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyNDA4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgKz0gcGVyY3B1LXN0YXRzLm9cXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXFxubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz03MTA9c3RhdGljIHZvaWQgX19tZW1pbml0IHJlc2l6ZV9wZ2RhdF9yYW5nZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzIxLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6NzIyOiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyMy1zdGF0aWMgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbW1faW5pdC5jPTY3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cXG4tLVxcbm1tL21tX2luaXQuYy02NzktXFxubW0vbW1faW5pdC5jOjY4MDojaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIHx8IGRlZmluZWQoQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQpXFxubW0vbW1faW5pdC5jLTY4MS1zdGF0aWMgX19tZW1pbml0IHZvaWQgcGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9ODQ3PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTg1OC1cXG5tbS9tbV9pbml0LmM6ODU5OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtODYwLVxcdC8qXFxuLS1cXG5tbS9tbV9pbml0LmMtODkxLVxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xcbm1tL21tX2luaXQuYzo4OTI6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy04OTMtXFx0XFx0XFx0aWYgKHpvbmUgPT0gWk9ORV9ERVZJQ0UpXFxuLS1cXG5tbS9tbV9pbml0LmM9OTQwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTk3Ni1cXG5tbS9tbV9pbml0LmM6OTc3OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtOTc4LXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yNDU9Y2hhciAqIGNvbnN0IHpvbmVfbmFtZXNbTUFYX05SX1pPTkVTXSA9IHtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTYtXFx0IFxcXCJNb3ZhYmxlXFxcIixcXG5tbS9wYWdlX2FsbG9jLmM6MjU3OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9wYWdlX2FsbG9jLmMtMjU4LVxcdCBcXFwiRGV2aWNlXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jPTExNTY9aW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc3RhdC5jLTExODQtXFxubW0vdm1zdGF0LmM6MTE4NTojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxubW0vdm1zdGF0LmMtMTE4Ni0jZGVmaW5lIFRFWFRfRk9SX0RFVklDRSh4eCwgeXkpIFt4eCMjX0RFVklDRV0gPSB5eSBcXFwiX2RldmljZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMyOjQwLjIzNjUzNDcyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk4ODE1ODEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9tbV9pbml0LmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhvc2UgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmRpdGlvbmFscyBzdXJyb3VuZGluZyBgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2VgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhhdCBmbGFncyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHk7IGFueXRoaW5nIHJlbGF0ZWQgdG8gem9uZSBkZXZpY2VzIGlzIG9mdGVuIGNyaXRpY2FsIGZvciBtb2Rlcm4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgaGV0ZXJvZ2VuZW91cyBtZW1vcnkgYXJjaGl0ZWN0dXJlcy4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGF0IGV4YWN0bHkgaXMgYENPTkZJR19aT05FX0RFVklDRWAgYWxsIGFib3V0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRob3NlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuUmlnaHQsIHRpbWUgdG8gY29uc3VsdCBgbW0vS2NvbmZpZ2AuIExldCdzIHNraXAgdG8gdGhlIHJlbGV2YW50IHBhcnQsIGFyb3VuZCBsaW5lIDEyMjUuIEFoYSEgSSBzZWUgaXQ6XG5cbmBgYFxuY29uZmlnIFpPTkVfREVWSUNFXG5cdGJvb2wgXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCJcblx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG5cdHNlbGVjdCBYQVJSQVlfTVVMVElcbmBgYFxuXG5cIkRldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0LFwiIHRoYXTigJlzIHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCwgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcGVyc2lzdGVudCBtZW1vcnksIGhvc3QtbWFuYWdlZCBtZW1vcnksIGV0Yy4gVGhlIGBkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVgIGxpbmUgaXMga2V5LiBPa2F5LCBzbyBkZXZpY2UgbWVtb3J5IGlzICpkZXBlbmRlbnQqIG9uIGhvdCByZW1vdmFsIHN1cHBvcnQuIE1ha2VzIHNlbnNlLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGR5bmFtaWNhbGx5IGFkZCBhbmQgcmVtb3ZlIHRoZXNlIGRldmljZXMuIEJ1dCBsZXQncyB2ZXJpZnkgd2hhdCAqdGhhdCogZGVwZW5kcyBvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBNRU1PUllfSE9UUkVNT1ZFYCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZXh0LiBUaGlzIGlzIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIHRydWUgZm9yIHRoaXMgZW50aXJlIGZ1bmN0aW9uYWxpdHkgdG8gYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzI6NTMuMjI0Njk1NzIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU0NjUwODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxcbm1tL0tjb25maWctNTgxLVxcbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMjo1NS44NzkzNTMyNjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NDk4OTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4Mi4gVGhhdCByZWdpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbiBvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBhc3BlY3QsIGdpdmVuIHRoZSBmaWxlJ3MgbmFtZS4gSSdtIGhvcGluZyBpdCB0b3VjaGVzIG9uIHRoZSBhcmVhIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBLY29uZmlnIHN5bnRheDogYGNvbmZpZ2AsIGBib29sYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGhlbHBgLCBhbmQgc28gb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBQZXJoYXBzIGl0IGRlc2NyaWJlcyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGF0IGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCBpbnNpZ2h0cyBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6MDAuNDY0MzQ4NTE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcXG4gNTcxOlxcdFxcdCAgaG90cGx1ZyBtZW1vcnkgaW50byBaT05FX01PVkFCTEUuIFRoaXMgbWVtb3J5IHdpbGwgZ2VuZXJhbGx5XFxuIDU3MjpcXHRcXHQgIG5vdCBiZSB1dGlsaXplZCBmb3Iga2VybmVsIGRhdGEuXFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdCAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlIGFkbWluIGtub3dzIHN1ZmZpY2llbnRcXG4gNTc1OlxcdFxcdCAgWk9ORV9OT1JNQUwgbWVtb3J5IGlzIGF2YWlsYWJsZSB0byBkZXNjcmliZSBob3RwbHVnIG1lbW9yeSxcXG4gNTc2OlxcdFxcdCAgb3RoZXJ3aXNlIGhvdHBsdWcgbWVtb3J5IG1heSBmYWlsIHRvIG9ubGluZS4gRm9yIGV4YW1wbGUsXFxuIDU3NzpcXHRcXHQgIHN1ZmZpY2llbnQga2VybmVsLWNhcGFibGUgbWVtb3J5IChaT05FX05PUk1BTCkgbXVzdCBiZVxcbiA1Nzg6XFx0XFx0ICBhdmFpbGFibGUgdG8gYWxsb2NhdGUgcGFnZSBzdHJ1Y3RzIHRvIGRlc2NyaWJlIFpPTkVfTU9WQUJMRS5cXG4gNTc5OlxcdFxcbiA1ODA6XFx0ZW5kY2hvaWNlXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuIDU4MzpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDU4NTpcXHRcXG4gNTg2OlxcdGNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxcbiA1ODc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA1ODg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1ODk6XFx0XFxuIDU5MDpcXHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxuIDU5MTpcXHRcXG4gNTkyOlxcdGNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1OTM6XFx0ICAgICAgIGJvb2xcXG4gNTk0OlxcdFxcbiA1OTU6XFx0IyBIZWF2aWx5IHRocmVhZGVkIGFwcGxpY2F0aW9ucyBtYXkgYmVuZWZpdCBmcm9tIHNwbGl0dGluZyB0aGUgbW0td2lkZVxcbiA1OTY6XFx0IyBwYWdlX3RhYmxlX2xvY2ssIHNvIHRoYXQgZmF1bHRzIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgdXNlciBhZGRyZXNzXFxuIDU5NzpcXHQjIHNwYWNlIGNhbiBiZSBoYW5kbGVkIHdpdGggbGVzcyBjb250ZW50aW9uOiBzcGxpdCBpdCBhdCB0aGlzIE5SX0NQVVMuXFxuIDU5ODpcXHQjIERlZmF1bHQgdG8gNCBmb3Igd2lkZXIgdGVzdGluZywgdGhvdWdoIDggbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS5cXG4gNTk5OlxcdCMgQVJNJ3MgYWRqdXN0X3B0ZSAodW51c2VkIGlmIFZJUFQpIGRlcGVuZHMgb24gbW0td2lkZSBwYWdlX3RhYmxlX2xvY2suXFxuIDYwMDpcXHQjIFBBLVJJU0MgN3h4eCdzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxcbiA2MDE6XFx0IyBTUEFSQzMyIGFsbG9jYXRlcyBtdWx0aXBsZSBwdGUgdGFibGVzIHdpdGhpbiBhIHNpbmdsZSBwYWdlLCBhbmQgdGhlcmVmb3JlXFxuIDYwMjpcXHQjIGEgcGVyLXBhZ2UgbG9jayBsZWFkcyB0byBwcm9ibGVtcyB3aGVuIG11bHRpcGxlIHRhYmxlcyBuZWVkIHRvIGJlIGxvY2tlZFxcbiA2MDM6XFx0IyBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIGNvcHlfcGFnZV9yYW5nZSgpKS5cXG4gNjA0OlxcdCMgREVCVUdfU1BJTkxPQ0sgYW5kIERFQlVHX0xPQ0tfQUxMT0Mgc3BpbmxvY2tfdCBhbHNvIGVubGFyZ2Ugc3RydWN0IHBhZ2UuXFxuIDYwNTpcXHQjXFxuIDYwNjpcXHRjb25maWcgU1BMSVRfUFRFX1BUTE9DS1NcXG4gNjA3OlxcdFxcdGRlZl9ib29sIHlcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDYwOTpcXHRcXHRkZXBlbmRzIG9uIFNNUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMzowMC40NjQ1MzYwNzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4MzY0Njc3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwZW5kZW5jeSBXZWIgb2YgTUVNT1JZX0hPVFBMVUcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGluLiBgTUVNT1JZX0hPVFBMVUdg4oCmIHdoYXQncyB0aGUgbGF5IG9mIHRoZSBsYW5kPyBUaW1lIHRvIHVucmF2ZWwgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBuZXZlciBqdXN0IG9uZSB0aGluZywgaXMgaXQ/IEl04oCZcyBhIHdob2xlIGVjb3N5c3RlbS4gR290dGEgZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBmZWF0dXJlcywgb3IgdW5kZXJseWluZyBwaWVjZXMgb2YgdGhlIGtlcm5lbCB0aGlzIHRoaW5nIGxlYW5zIG9uLiBUaGlzIGhvdHBsdWcgbWVjaGFuaXNtIGZvciBtZW1vcnkgaXMgbGlrZWx5IGludGVydHdpbmVkIHdpdGggc2V2ZXJhbCBvdGhlciB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgYXJlIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IsIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGFuZCBob3cgdG8gdXNlIGl0IG9wdGltYWxseS4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMzOjE3LjMwMTAwOTAxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyNzM3NTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxMD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTEzLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUxNDptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MTUtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjMzOjIwLjQyODM5MTIwM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI4MTY5Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGVsZW1lbnQuIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTEwLiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHksIHNvIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGxvZ2ljIGRlZmluaW5nIHRoZSByZWxldmFudCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIG9wdGlvbiBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIG9yIHBlcmhhcHMgZXZlbiBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9mIG90aGVyIEtjb25maWcgZnJhZ21lbnRzLiBJIGFudGljaXBhdGUgZmluZGluZyBhIGRlZmluaXRpb24gb2YgYSBzeW1ib2wsIHBvc3NpYmx5IHdpdGhpbiBhbiBgaWZgIGJsb2NrLCBvciBtYXliZSBhIG1lbnUgc3RydWN0dXJlLiBJJ20gYnJhY2luZyBteXNlbGYgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwb3RlbnRpYWxseSBzcGFubmluZyBtdWx0aXBsZSBmaWxlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHN5bnRheCwgbG9va2luZyBmb3IgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgZW5kLXVzZXIgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6MjQuNTU2NTYzOTE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4gNTExOlxcdFxcdGJvb2xcXG4gNTEyOlxcdFxcbiA1MTM6XFx0IyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbiA1MTQ6XFx0bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbiA1MTU6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuIDUxNjpcXHRcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbiA1MTc6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbiA1MTg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1MTk6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbiA1MjA6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4gNTIxOlxcdFxcbiA1MjI6XFx0aWYgTUVNT1JZX0hPVFBMVUdcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0Y2hvaWNlXFxuIDUyNTpcXHRcXHRwcm9tcHQgXFxcIk1lbW9yeSBIb3RwbHVnIERlZmF1bHQgT25saW5lIFR5cGVcXFwiXFxuIDUyNjpcXHRcXHRkZWZhdWx0IE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcXG4gNTI3OlxcdFxcdGhlbHBcXG4gNTI4OlxcdFxcdCAgRGVmYXVsdCBtZW1vcnkgdHlwZSBmb3IgaG90cGx1Z2dlZCBtZW1vcnkuXFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBwb2xpY3kgc2V0dGluZyBmb3IgbWVtb3J5IGhvdHBsdWdcXG4gNTMxOlxcdFxcdCAgb25saW5pbmcgcG9saWN5ICgvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9hdXRvX29ubGluZV9ibG9ja3MpIHdoaWNoXFxuIDUzMjpcXHRcXHQgIGRldGVybWluZXMgd2hhdCBoYXBwZW5zIHRvIG5ld2x5IGFkZGVkIG1lbW9yeSByZWdpb25zLiBQb2xpY3kgc2V0dGluZ1xcbiA1MzM6XFx0XFx0ICBjYW4gYWx3YXlzIGJlIGNoYW5nZWQgYXQgcnVudGltZS5cXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ICBUaGUgZGVmYXVsdCBpcyAnb2ZmbGluZScuXFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXFxuIDUzODpcXHRcXHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXFxuIDUzOTpcXHRcXHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXFxuIDU0MDpcXHRcXHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHQgIEV4YW1wbGUga2VybmVsIHVzYWdlIHdvdWxkIGJlIHBhZ2Ugc3RydWN0cyBhbmQgcGFnZSB0YWJsZXMuXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiA1NDU6XFx0XFxuIDU0NjpcXHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbiA1NDc6XFx0XFx0Ym9vbCBcXFwib2ZmbGluZVxcXCJcXG4gNTQ4OlxcdFxcdGhlbHBcXG4gNTQ5OlxcdFxcdCAgSG90cGx1Z2dlZCBtZW1vcnkgd2lsbCBub3QgYmUgb25saW5lZCBieSBkZWZhdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozMzoyNC41NTY3NTg2NTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3NTU2MzA4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBvcnRhbnQgb25lczogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhlc2UgYXJlIGNvcmUgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkgYW5kIGRldmljZXMsIGFuZCBhbnkgc3VidGxlIGNoYW5nZSBoZXJlIGNhbiBoYXZlIHJpcHBsZSBlZmZlY3RzLiBBbmQsIGFoYSwgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgLSBpbnRlcmVzdGluZyB0aGF0IGl0J3Mgc2VsZWN0ZWQgYnkgdGhlIGJpZyB0aHJlZTogeDg2XzY0LCBBUk02NCwgYW5kIFBQQy4gRGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGluIHRlcm1zIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiZWhhdmlvcnMuXG5cblJpZ2h0LCB3aXRoIGBaT05FX0RFVklDRWAgaW4gZm9jdXMsIGxldOKAmXMgbWFrZSBzdXJlIHdlJ3ZlIHByb3Blcmx5IHRlc3RlZCB0aGUgZHJpdmVycyBhbmQgdXNlcnMuIExldCdzIGxpc3QgdGhvc2Ugb3V0OiBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBgRlNfREFYYCwgYERFVl9EQVhgLCBhbmQgb2YgY291cnNlLCBgWDg2XzY0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGludGVyYWN0aW9ucyB3aXRoIHRoZSB6b25lIGRldmljZSBhcmUgd2VsbC11bmRlcnN0b29kLiBGaW5hbGx5LCB0aW1lIHRvIGZvbGxvdyB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVEVTVF9ITU1gLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNlY3Rpb24gYXJlIGFjY291bnRlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzM6NTkuMzEyMzkzMTM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NjE3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjAyLjEyMTAzMTcyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4NzY3ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBEZWJ1Z2dpbmcgT3B0aW9ucyoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBkZWJ1Z2dpbmcgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIGtub3cgdGhhdCBmaWxlIHVzdWFsbHkgaG91c2VzIGEgbG90IG9mIHRoZSBjb3JlIGRlYnVnZ2luZyBzZXR0aW5ncywgYW5kIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMzMyNSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCB0aGF0IGFyZWEgZGVhbHMgd2l0aCBhIHBhcnRpY3VsYXIgZGVidWdnaW5nIGZlYXR1cmUgb3IgYSByZWxldmFudCBncm91cGluZyBvZiBvcHRpb25zLiBNaWdodCBiZSBhIHNwZWNpZmljIHN1YnN5c3RlbSdzIGRlYnVnIG9wdGlvbnMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbC4gVGltZSB0byBnZXQgdGhlIElERSBmaXJlZCB1cCBhbmQgaGF2ZSBhIGxvb2s7IHRoZSBkZXRhaWxzIHdpbGwgcmV2ZWFsIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MTIuNzA4NzE1Mzk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMzMyMTpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMjQ6XFx0XFxuMzMyNTpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzI2OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzMyNzpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzMyODpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzMyOTpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzMzA6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzMzE6XFx0XFx0aGVscFxcbjMzMzI6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzMzOlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzMzQ6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzMzNTpcXHRcXG4zMzM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzM3OlxcdFxcbjMzMzg6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcbjMzMzk6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgZnJlZWluZyBwYWdlc1xcXCJcXG4zMzQwOlxcdFxcdGhlbHBcXG4zMzQxOlxcdFxcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXFxuMzM0MjpcXHRcXHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cXG4zMzQzOlxcdFxcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxcbjMzNDQ6XFx0XFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXFxuMzM0NTpcXHRcXHQgIHByb2JhYmx5IE9PTSB5b3VyIHN5c3RlbS5cXG4zMzQ2OlxcdFxcbjMzNDc6XFx0Y29uZmlnIFRFU1RfRlBVXFxuMzM0ODpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGluIGtlcm5lbCBzcGFjZVxcXCJcXG4zMzQ5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfS0VSTkVMX0ZQVV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2ICFLQ09WX0lOU1RSVU1FTlRfQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjEyLjcwODkyNzYwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODYzODA3ODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGV4cHJlc3NlZCBhcyBhIHF1aWNrIG1lbnRhbCBydW5kb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBzdHJhaWdodC4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBhIGZldyBrZXkgZmVhdHVyZXM6IGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgLiBUaG9zZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB3ZSdyZSBhaW1pbmcgZm9yLlxuXG5SaWdodCwgYEZTX0RBWGAgaXMgdGhlIG9uZSB0aGF0J3MgcmVhbGx5IG5hZ2dpbmcgYXQgbWUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUgY2hlY2sgd2hlcmUgdGhhdOKAmXMgZGVmaW5lZC4gRWl0aGVyIGl0J3MgaW4gdGhlIHN0YW5kYXJkIGBmcy9LY29uZmlnYCBmaWxlIG9yLCBkZXBlbmRpbmcgb24gaG93IHRoZXnigJl2ZSBzdHJ1Y3R1cmVkIHRoZSBkcml2ZXJzIGZvciB0aGlzIHBhcnRpY3VsYXIgc2V0dXAsIGl0IG1pZ2h0IGJlIGhpZGluZyBpbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IHRoZSBLY29uZmlnIGZpbGVzIG9wZW4gYW5kIGNvbmZpcm0gdGhlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MzEuMzQ3MDA5OTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDA1MjY3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjM0LjY4NzU0MzU1NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDMxNTA4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTguIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgS2NvbmZpZyBmaWxlIHByb2JhYmx5IGRlZmluZXMgc29tZSBjcml0aWNhbCBmaWxlIHN5c3RlbSBvcHRpb25zLiBJdCBtaWdodCBiZSBhIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYSBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aGF0J3MgY2F1c2luZyBtZSBhIGhlYWRhY2hlLCBidXQgcGlucG9pbnRpbmcgdGhhdCBsaW5lIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCByZXNvbHZpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWUsIGlmIGFueS4gTGlrZWx5IHRoaXMgaXMgYSBidWlsZCBmbGFnIG9yIGEgZmVhdHVyZSBmbGFnLiBJJ20gaG9waW5nIEkgY2FuIGRlYnVnIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6MzcuMTE5MDU0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM0OjM3LjExOTEzNTQ4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTkxMjIwNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYERFVl9EQVhgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gaG93IGBERVZfREFYYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgdGhlIERpcmVjdCBBY2Nlc3MgKERBWCkgZmVhdHVyZSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IGhvdyBpdCdzIHByZXNlbnRlZCBhcyBhbiBvcHRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgaXMgYSBgYm9vbGAsIGB0cmlzdGF0ZWAgb3Igd2hhdCBvdGhlciBvcHRpb25zIGFyZSBwcm92aWRlZC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIGxheSBvdXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIHBlcnNpc3RlbnQgbWVtb3J5IHN1cHBvcnQgb3IgYSBzcGVjaWZpYyBmaWxlc3lzdGVtKSwgYW5kIGFueSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzLCBJIGNhbiBtb3JlIGVmZmljaWVudGx5IHRyb3VibGVzaG9vdCBpc3N1ZXMgb3IgY29uZmlybSBpdHMgcHJlc2VuY2UgZHVyaW5nIGEgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODU1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNDo0OC4xMTAzNTg0NTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTI5NDU5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVl9EQVhcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnPTY9aWYgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy03LVxcbmRyaXZlcnMvZGF4L0tjb25maWc6ODpjb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzQ6NTEuMTAzMzExNjU1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTY1MzQzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9kYXgvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIERBWCBjb25maWd1cmF0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBEaXJlY3QgQWNjZXNzIChEQVgpIGRyaXZlciwgZGVmaW5pbmcgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgZmlsZSB3aWxsIGxpa2VseSB0ZWxsIG1lIGhvdyBEQVggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGhvdyB0aGV5IGFyZSBtYW5hZ2VkIGF0IGJ1aWxkIHRpbWUsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIHNwZWNpZmljcyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTc3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzU6NDkuMDY4NjYwMDYyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIERBWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxcbiAgIDU6XFx0XFxuICAgNjpcXHRpZiBEQVhcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERFVl9EQVhcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgKHBlcnNpc3RlbmNlLCBiYW5kd2lkdGgsXFxuICAxMzpcXHRcXHQgIGxhdGVuY3kuLi4pIG1lbW9yeSB2aWEgYW4gbW1hcCgyKSBjYXBhYmxlIGNoYXJhY3RlclxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuICBQbGF0Zm9ybSBmaXJtd2FyZSBvciBhIGRldmljZSBkcml2ZXIgbWF5IGlkZW50aWZ5IGFcXG4gIDE1OlxcdFxcdCAgcGxhdGZvcm0gbWVtb3J5IHJlc291cmNlIHRoYXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSB0aGVcXG4gIDE2OlxcdFxcdCAgYmFzZWxpbmUgbWVtb3J5IHBvb2wuICBNYXBwaW5ncyBvZiBhIC9kZXYvZGF4WC5ZIGRldmljZSBpbXBvc2VcXG4gIDE3OlxcdFxcdCAgcmVzdHJpY3Rpb25zIHRoYXQgbWFrZSB0aGUgbWFwcGluZyBiZWhhdmlvciBkZXRlcm1pbmlzdGljLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgREVWX0RBWF9QTUVNXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG4gIDIyOlxcdFxcdGRlZmF1bHQgREVWX0RBWFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkuICBOb3RlIHRoYXQgdGhpc1xcbiAgMjU6XFx0XFx0ICBkcml2ZXIgY29uc3VtZXMgbWVtb3J5IHJhbmdlcyBhbGxvY2F0ZWQgYW5kIGV4cG9ydGVkIGJ5IHRoZVxcbiAgMjY6XFx0XFx0ICBsaWJudmRpbW0gc3ViLXN5c3RlbS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBTYXkgTSBpZiB1bnN1cmVcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIERFVl9EQVhfSE1FTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNTo0OS4wNjg3OTc4NjJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM4MjIwMjY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN5bWJvbHMgYXJlIGluIHBsYWNlLiBDaGVja2luZyBgRm9jdXNTeW1ib2xzYCwgSSBzZWUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbXJlbWFwX3BhZ2VzYCwgYGRldm1fbWVtcmVtYXBfcGFnZXNgLCBhbmQgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czogSSBuZWVkIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYFNQQVJTRU1FTV9WTUVNTUFQYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBGU19EQVhgIGVuYWJsZWQuIFllcCwgYWxsIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBpbiBvcmRlciwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgYXMgaW50ZW5kZWQuIFRoZSBsaXN0ZWQgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbnNpc3RlbnQuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsgZ2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHN1Y2ggbG93LWxldmVsIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC5cblxuVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBjb25jaXNlIGJ1dCBhY2N1cmF0ZTogSXQncyByZWZhY3RvcmluZyBgWk9ORV9ERVZJQ0VgIHBhZ2UgaW5pdGlhbGl6YXRpb24sIHV0aWxpemluZyBwYWdlIHRlbXBsYXRlcyBhbmQgbm9uLXRlbXBvcmFsIGNvcGllcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBJdCBhbHNvIHRvdWNoZXMgdXBvbiByZWZjb3VudCBpbml0aWFsaXphdGlvbiBmb3IgYE1FTU9SWV9ERVZJQ0VfRlNfREFYYCBwYWdlcyBhbmQgb3B0aW1pemVzIGZpeGVkLXNpemUgY2FjaGUtZmx1c2hpbmcgY29waWVzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIFRoZSBjaGFuZ2VzIGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgYFpPTkVfREVWSUNFYCBwYWdlcyBhcmUgc2V0IHVwLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggREFYLCBOVkRJTU0sIG9yIEhNTS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyBpdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGFuZCBlZmZpY2llbnQsIGVzcGVjaWFsbHkgaW4gdGhlc2UgZW1lcmdpbmcgdXNlIGNhc2VzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgZXZlcnl0aGluZyBzZWVtcyBzb2xpZCBhbmQgd2VsbC12ZXJpZmllZC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIG9mIGNvbmNlcm4uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gSXQgYXBwZWFycyB0aGF0IHRoaXMgcGF0Y2ggaXMgcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgxNywiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjowMi44OTA4MjkxMjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MTE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgICBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIixcbiAgICBcImRldm1fbWVtcmVtYXBfcGFnZXNcIixcbiAgICBcIl9fbWVtY3B5X2ZsdXNoY2FjaGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgWk9ORV9ERVZJQ0UgcGFnZSBpbml0aWFsaXphdGlvbiBpbiBtbS9tbV9pbml0LmMgYnkgY29weWluZyBmcm9tIGEgdGVtcGxhdGUgcGFnZSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChtZW1jcHlfbm9udGVtcG9yYWwgLyBtZW1jcHlfZmx1c2hjYWNoZSksIGNoYW5nZXMgdGhlIGluaXRpYWwgcmVmY291bnQgYmVoYXZpb3IgZm9yIEZTX0RBWCBwYWdlcywgYW5kIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgaW5saW5lIG1vdm50aSByb3V0aW5lcyBmb3IgZml4ZWQtc2l6ZSBjb3BpZXMgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmguIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIG1lbW9yeSBtYXBwaW5nIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKERBWCwgTlZESU1NLCBITU0pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjowMy4wMjQyNDg5NjlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE4ODI3MjUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjAzLjAyNDg1MjA4OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTE4NzY2Mzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHN0cnVjdCBwYWdlIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBtZW1vcnkgYW5kIGludHJvZHVjZXMgb3B0aW1pemVkIGZpeGVkLXNpemUgbm9uLXRlbXBvcmFsIGNvcGllcyAoYG1lbWNweV9ub250ZW1wb3JhbGAgLyBgbWVtY3B5X2ZsdXNoY2FjaGVgKSB1c2luZyBpbmxpbmUgYXNzZW1ibHkgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tTGVhayBBbmFseXNpcyAoS01TQU4pOlxcbi0gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgKGEgYHN0cnVjdCBwYWdlYCkgaW4gYG1tL21tX2luaXQuY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKWAgZnJvbSBhIHN0cnVjdCBwYWdlIHRoYXQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGFuZCBpbml0aWFsaXplZCB2aWEgYF9faW5pdF9zaW5nbGVfcGFnZSgpYCAod2hpY2ggaW52b2tlcyBgbW1femVyb19zdHJ1Y3RfcGFnZSgpYCkuXFxuLSBBbGwgYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdGhlIHN1YnNlcXVlbnQgYHN0cnVjdCBwYWdlYCB0YXJnZXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjIuIE91dC1vZi1ib3VuZHMgLyBNZW1vcnkgQ29ycnVwdGlvbiBBbmFseXNpcyAoS0FTQU4pOlxcbi0gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBpbmNvcnJlY3Qgc3RydWN0IHBhZ2Ugc2l6ZSBjb3BpZXMsIGFsaWdubWVudCBpc3N1ZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd291bGQgYmUgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjOGU4ZTAwNmY1OTUzYTEzZjMxNjdiMmU0ZDk0YjY1ZThiNTZhZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoyNToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTMuLjgzMWQzZGRhM2IzODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbkBAIC04MiwyNCArODIsNzcgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV80KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aWwgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHUzMiAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTMyICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuIHtcbi1cdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4tXHRcdHN3aXRjaCAoY250KSB7XG4tXHRcdFx0Y2FzZSA0OlxuLVx0XHRcdFx0YXNtIChcIm1vdm50aWwgJTEsICUwXCIgOiBcIj1tXCIoKih1MzIgKilkc3QpIDogXCJyXCIoKih1MzIgKilzcmMpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0XHRjYXNlIDg6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdGNhc2UgMTY6XG4tXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKWRzdCkgOiBcInJcIigqKHU2NCAqKXNyYykpO1xuLVx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXCJyXCIoKih1NjQgKikoc3JjICsgOCkpKTtcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuK3tcbitcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcbitcdFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZSB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6XG4rXHQgKiA2NCwgODAsIGFuZCA5NiBieXRlcy4gS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplIGNhc2VzIGJhY2sgdG9cbitcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbitcdCAqL1xuK1x0c3dpdGNoIChjbnQpIHtcbitcdGNhc2UgNDogIG1vdm50aV80KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDg6ICBtb3ZudGlfOChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSAxNjogbW92bnRpXzE2KGRzdCwgc3JjKTsgYnJlYWs7XG4rXHRjYXNlIDMyOiBtb3ZudGlfMzIoZHN0LCBzcmMpOyBicmVhaztcbitcdGNhc2UgNDg6IG1vdm50aV8zMihkc3QsIHNyYyk7IG1vdm50aV8xNihkc3QgKyAzMiwgc3JjICsgMzIpOyBicmVhaztcbitcdGNhc2UgNjQ6IG1vdm50aV82NChkc3QsIHNyYyk7IGJyZWFrO1xuK1x0Y2FzZSA4MDogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzE2KGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xuK1x0ZGVmYXVsdDogX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsgYnJlYWs7XG4gXHR9XG4tXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWxcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weVxuKyAqIHByaW1pdGl2ZS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uNjY0MGM3NTIyODIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMjY0NCwxMiArMjY0NCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbiBcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuIH1cbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0yODcyLDkgKzI4ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcbmluZGV4IDU3MDJkYWNhNDMyNmIuLjZjYjVjZGQwMTE1OGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDE1MzNhZWJhZmI2ODguLjVhNjFjMGM4M2ZhNzQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDAsMTMgKzEwMDAsOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuIFx0ICovXG4gXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG5AQCAtMTAyMSw2ICsxMDE3LDE3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbitcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuK1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuK1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbit9XG4rXG4gLypcbiAgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcbiAgKiB0YWlsIHBhZ2VzIGFyZSByZXVzZWQuIENvbnNlcXVlbnRseSwgdGhlIGFtb3VudCBvZiB1bmlxdWUgc3RydWN0IHBhZ2VzIHRvXG5AQCAtMTA1Myw2ICsxMDYwLDggQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDYxLDEzICsxMDcwLDIzIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxuIFx0ICovXG4gXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xuLVx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlIHN0YXRlIGVzdGFibGlzaGVkIGJ5XG4rXHQgKiBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2Ugb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdCB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0ICovXG4rXHRwZm4gPSBoZWFkX3BmbiArIDE7XG4rXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbitcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuK1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbitcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcbitcdC8qIEluaXRpYWxpemUgdGhlIHJlbWFpbmluZyB0YWlsIHBhZ2VzIGZyb20gdGVtcGxhdGUuICovXG4rXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4rKylcbitcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGZuX3RvX3BhZ2UocGZuKSwgcGZuLFxuK1x0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4gXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xuIH1cbiBcbkBAIC0xMDgzLDYgKzExMDIsOCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXG4gXHRcdHJldHVybjtcbkBAIC0xMDk3LDEwICsxMTE4LDI5IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdG5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiBcdH1cbiBcbi1cdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4rXHRpZiAoIW5yX3BhZ2VzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlIGZpcnN0IHJlYWwgc3RydWN0XG4rXHQgKiBwYWdlLiBUaGUgbm9ybWFsIHBhZ2UtaW5pdCBhbmQgcmVmY291bnQgaGVscGVycyBtdXN0IG9wZXJhdGUgb25cbitcdCAqIGEgcmVhbCBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4rXHQgKi9cbitcdHBmbiA9IHN0YXJ0X3BmbjtcbitcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuK1x0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0aWYgKHBmbnNfcGVyX2NvbXBvdW5kICE9IDEpXG4rXHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xuK1x0cGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGhlYWQgcGFnZXMgZnJvbSB0ZW1wbGF0ZS4gKi9cbitcdGZvciAoOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiArPSBwZm5zX3Blcl9jb21wb3VuZCkge1xuK1x0XHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjAzLjAyNDg1MzAwOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUyODg3NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOLXdvcnRoeSByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBsb29rcyBsaWtlIHRoaXM6XG5cbiogICBXZSdyZSBhZGRpbmcgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCAoYG1vdm50aV80YCwgYG1vdm50aV84YCwgZXRjLikgdG8gZW5oYW5jZSBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBXZSdyZSBvcHRpbWl6aW5nIGBtZW1jcHlfZmx1c2hjYWNoZWAgYnkgaW5saW5pbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1vdm50aV8qYCkgZm9yIGZpeGVkIHNpemVzICg0LCA4LCAxNiwgZXRjLiBieXRlcykuIFRoZXJlJ3MgYWxzbyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIG1hY3JvIGRlZmluZWQgdGhhdCBjYWxscyB0aGlzIGBtZW1jcHlfZmx1c2hjYWNoZWAuXG5cbiogICBXZSBoYXZlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAuIEFkZGluZyBhIGhlbHBlciBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAgYW5kIHVwZGF0aW5nIGBzZXRfcGFnZV9saW5rc2AgdG8gdXNlIGl0LlxuXG4qICAgSW4gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgLCB0aGVyZSdzIGEgZmFsbGJhY2sgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgIGlmIGl0J3Mgbm90IGFscmVhZHkgZGVmaW5lZDogaXQgdXNlcyBhIHJlZ3VsYXIgYG1lbWNweWAuXG5cbiogICBOb3csIGluIGBtbS9tbV9pbml0LmNgLCB3ZSBzZWUgb3B0aW1pemF0aW9ucyBmb3IgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSGVyZSdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzLiBUaGV5J3JlIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIHRlbXBsYXRlIGBzdHJ1Y3QgcGFnZWAsIGluaXRpYWxpemVkIGJ5IGNvcHlpbmcgYSBwcmUtZXhpc3RpbmcgYHN0cnVjdCBwYWdlYCAoYHBhZ2VgKSwgYW5kIHRoZW4gdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gY29weSB0aGlzIHRlbXBsYXRlIHRvIG90aGVyIGBzdHJ1Y3QgcGFnZWBzLlxuXG5CdXQgaGVyZSdzIHRoZSBydWIgLSBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYHN0cnVjdCBwYWdlYCByZXR1cm5lZCBieSBgcGZuX3RvX3BhZ2UocGZuKWAgKmlzIGZ1bGx5IGluaXRpYWxpemVkKiBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgYG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIG9wZXJhdGlvbi4gVGhpcyBpcyBjcnVjaWFsIVxuXG5MZXQncyBzZWUuLi4gd2UgaGF2ZTpcblxuYGBgY1xuc3RydWN0IHBhZ2UgdGVtcGxhdGU7XG5zdHJ1Y3QgcGFnZSAqcGFnZTtcbi4uLlxucGZuID0gaGVhZF9wZm4gKyAxO1xucGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG5fX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbnByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG5zZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbm1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG5gYGBcblxuU28sIGJlZm9yZSB0aGUgYG1lbWNweWAgb2YgdGhlIGBwYWdlYCwgYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgYHByZXBfY29tcG91bmRfdGFpbGAgYW5kIGBzZXRfcGFnZV9jb3VudGAgYXJlIGNhbGxlZCBvbiBpdC4gU28sIGxldCdzIHNlZSBob3cgYFpPTkVfREVWSUNFYCBzdHJ1Y3QgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IHVzZSBteSB0b29scyAoYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgKSB0byB0cmFjZSBob3cgdGhlIGBtZW1tYXBgIGFuZCBgWk9ORV9ERVZJQ0VgIHN0cnVjdCBwYWdlcyBhcmUgYWxsb2NhdGVkL2luaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzY6MTUuNTUzNzMyODUzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzAzMTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luaXRfem9uZV9kZXZpY2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTk0MD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy05NzctI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYzo5Nzg6c3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbm1tL21tX2luaXQuYy05NzktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbi0tXFxubW0vbW1faW5pdC5jPTEwNTU9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA4MC1cXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG5tbS9tbV9pbml0LmM6MTA4MTpcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG5tbS9tbV9pbml0LmMtMTA4Mi1cXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbi0tXFxubW0vbW1faW5pdC5jPTEwOTM9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTMwLVxcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbm1tL21tX2luaXQuYzoxMTMxOlxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbm1tL21tX2luaXQuYy0xMTMyLVxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjoxNS42NDA3ODgwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1MDE3Mjk0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL21tX2luaXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmFzZWQgb24gdGhlIHByb2JsZW0gYXQgaGFuZCwgSSB0aGluayB0aGUgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlIEkgbmVlZCB0byBzY3J1dGluaXplIGxpZXMgd2l0aGluIGBtbS9tbV9pbml0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDk3NSB0byAxMDQwLiBJIGtub3cgdGhpcyBmaWxlIGludGltYXRlbHksIHNvIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLCBsaWtlbHkgY29uY2VybmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHJhbmdlIG9mdGVuIGRlYWxzIHdpdGggaW5pdGlhbCBzZXR1cHMsIGJvdW5kYXJ5IGNvbmRpdGlvbiB0ZXN0cywgb3IgcGVyaGFwcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLCBhbmQgdHJ5IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBwaWVjZXMgdGhhdCBhcmVuJ3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGltZSB0byBnZXQgZG93biBpbnRvIHRoZSB3ZWVkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjMxLjE0MjUyMzEzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1faW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk3NTpcXHR9XFxuIDk3NjpcXHRcXG4gOTc3OlxcdCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4gOTc4OlxcdHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gOTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gOTgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcbiA5ODM6XFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdC8qXFxuIDk4NjpcXHRcXHQgKiBNYXJrIHBhZ2UgcmVzZXJ2ZWQgYXMgaXQgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIG9ubGluaW5nXFxuIDk4NzpcXHRcXHQgKiBwaGFzZSBmb3IgaXQgdG8gYmUgZnVsbHkgYXNzb2NpYXRlZCB3aXRoIGEgem9uZS5cXG4gOTg4OlxcdFxcdCAqXFxuIDk4OTpcXHRcXHQgKiBXZSBjYW4gdXNlIHRoZSBub24tYXRvbWljIF9fc2V0X2JpdCBvcGVyYXRpb24gZm9yIHNldHRpbmdcXG4gOTkwOlxcdFxcdCAqIHRoZSBmbGFnIGFzIHdlIGFyZSBzdGlsbCBpbml0aWFsaXppbmcgdGhlIHBhZ2VzLlxcbiA5OTE6XFx0XFx0ICovXFxuIDk5MjpcXHRcXHRfX1NldFBhZ2VSZXNlcnZlZChwYWdlKTtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0LypcXG4gOTk1OlxcdFxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIHVuaW9uIC1cXHUwMDNlbHJ1IHdpdGggYSAtXFx1MDAzZXBnbWFwIGJhY2sgcG9pbnRlclxcbiA5OTY6XFx0XFx0ICogYW5kIHpvbmVfZGV2aWNlX2RhdGEuICBJdCBpcyBhIGJ1ZyBpZiBhIFpPTkVfREVWSUNFIHBhZ2UgaXNcXG4gOTk3OlxcdFxcdCAqIGV2ZXIgZnJlZWQgb3IgcGxhY2VkIG9uIGEgZHJpdmVyLXByaXZhdGUgbGlzdC5cXG4gOTk4OlxcdFxcdCAqL1xcbiA5OTk6XFx0XFx0cGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXAgPSBwZ21hcDtcXG4xMDAwOlxcdFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHQvKlxcbjEwMDM6XFx0XFx0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcXG4xMDA0OlxcdFxcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuMTAwNTpcXHRcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuMTAwNjpcXHRcXHQgKi9cXG4xMDA3OlxcdFxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4xMDA4OlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuMTAwOTpcXHRcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4xMDEwOlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4xMDExOlxcdFxcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbjEwMTI6XFx0XFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuMTAxMzpcXHRcXHRcXHRicmVhaztcXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuMTAxNjpcXHRcXHRcXHRicmVhaztcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuMTAyMTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbjEwMjI6XFx0e1xcbjEwMjM6XFx0XFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4xMDI0OlxcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbjEwMjU6XFx0XFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXFxuMTAyNjpcXHRcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuMTAyNzpcXHQjZW5kaWZcXG4xMDI4OlxcdFxcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuMTAyOTpcXHR9XFxuMTAzMDpcXHRcXG4xMDMxOlxcdC8qXFxuMTAzMjpcXHQgKiBXaXRoIGNvbXBvdW5kIHBhZ2UgZ2VvbWV0cnkgYW5kIHdoZW4gc3RydWN0IHBhZ2VzIGFyZSBzdG9yZWQgaW4gcmFtIG1vc3RcXG4xMDMzOlxcdCAqIHRhaWwgcGFnZXMgYXJlIHJldXNlZC4gQ29uc2VxdWVudGx5LCB0aGUgYW1vdW50IG9mIHVuaXF1ZSBzdHJ1Y3QgcGFnZXMgdG9cXG4xMDM0OlxcdCAqIGluaXRpYWxpemUgaXMgYSBsb3Qgc21hbGxlciB0aGF0IHRoZSB0b3RhbCBhbW91bnQgb2Ygc3RydWN0IHBhZ2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjMxLjE0Mjg3NDQ3NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODM3MjA1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBhbmFseXplIHRoaXMgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZXMsIEknbSBhbHJlYWR5IGluZmVycmluZyB0aGlzIGlzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBtZXRob2Qgd2l0aGluIGEgY2xhc3MuIFRoYXQgaW1wbGllcyBpdCdzIHByb2JhYmx5IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93LCBhbmQgc2hvdWxkbid0IGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGNsYXNzIHVubGVzcyBJICpyZWFsbHkqIGtub3cgd2hhdCBJJ20gZG9pbmcuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkYXRhIG9yIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIFwicGFnZVwiIHdpdGhpbiBhIGxhcmdlciBkb2N1bWVudCBvciBwb3RlbnRpYWxseSBhIHdlYnNpdGUuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpdCB1c2luZywgaXMgdGhlcmUgYW4gaW5kaWNhdGlvbiB0byBhbiBBUEkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBkb2VzIGl0ICpyZXR1cm4qLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjozMy45ODAwODI1NDlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzI3NzY1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX2luaXRfc2luZ2xlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjozNjozNC41MzMzNjc4MDdaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE4ODc2MDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBJbml0aWFsIFNlYXJjaCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLiBHaXZlbiB3aGF0IHdlJ3JlIGxpa2VseSB3b3JraW5nIHdpdGgsIGFuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIEknbSBhY2N1c3RvbWVkIHRvLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyB0aGF0J3MgcHJvYmFibHkgYSBtZXRob2QsIGFuZCBtYXliZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBhIHNpbmdsZSBwYWdlIHZpZXcuIFNvLCBsZXQncyBmaXJlIHVwIHRoZSBzZWFyY2ggYW5kIGdvIGZvciBgX19pbml0X3NpbmdsZV9wYWdlYC4gSXQncyBhIHByZXR0eSB0YXJnZXRlZCB0ZXJtLCBidXQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgc3VyZmFjZXMuIEZyb20gdGhlcmUsIHdlIGNhbiBleHBhbmQgb3IgcmVmaW5lIHRoZSBzZWFyY2ggaWYgbmVjZXNzYXJ5LCBidXQgdGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MzY6NDMuNzIyMTMwMzE2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMDc0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pbml0X3NpbmdsZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzE2OD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3RhaWxfdm1lbW1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMxODQtXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIHN0YXJ0X3BhZ2VfbnVtYmVyOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwYWdlKyssIHBmbisrKSB7XFxubW0vaHVnZXRsYi5jOjMxODU6XFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgbmlkKTtcXG5tbS9odWdldGxiLmMtMzE4Ni1cXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9tbV9pbml0LmM9MzcxPXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX3pvbmVfbW92YWJsZV9wZm5zX2Zvcl9ub2Rlcyh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTU5NC1cXG5tbS9tbV9pbml0LmM6NTk1OnZvaWQgX19tZW1pbml0IF9faW5pdF9zaW5nbGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxubW0vbW1faW5pdC5jLTU5Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmUsIGludCBuaWQpXFxuLS1cXG5tbS9tbV9pbml0LmM9NzUyPXN0YXRpYyB2b2lkIF9fbWVtaW5pdCBfX2luaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcXG4tLVxcbm1tL21tX2luaXQuYy03NjUtXFx0fVxcbm1tL21tX2luaXQuYzo3NjY6XFx0X19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgemlkLCBuaWQpO1xcbm1tL21tX2luaXQuYy03NjctXFxuLS1cXG5tbS9tbV9pbml0LmM9NzkyPXZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcXG4tLVxcbm1tL21tX2luaXQuYy03OTgtICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxcbm1tL21tX2luaXQuYzo3OTk6ICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5tbS9tbV9pbml0LmMtODAwLSAqIG1lbW1hcF9pbml0X3pvbmVfcmFuZ2UoKS5cXG4tLVxcbm1tL21tX2luaXQuYz04MjA9c3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTgyNy1cXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XFxubW0vbW1faW5pdC5jOjgyODpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6b25lLCBub2RlKTtcXG5tbS9tbV9pbml0LmMtODI5LVxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpO1xcbi0tXFxubW0vbW1faW5pdC5jPTg0Nz12b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy04ODktXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxubW0vbW1faW5pdC5jOjg5MDpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lLCBuaWQpO1xcbm1tL21tX2luaXQuYy04OTEtXFx0XFx0aWYgKGNvbnRleHQgPT0gTUVNSU5JVF9IT1RQTFVHKSB7XFxuLS1cXG5tbS9tbV9pbml0LmM9OTc4PXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21tX2luaXQuYy05ODItXFxubW0vbW1faW5pdC5jOjk4MzpcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcXG5tbS9tbV9pbml0LmMtOTg0LVxcbi0tXFxubW0vbW1faW5pdC5jPTE5OTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGRlZmVycmVkX2luaXRfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMjAwNC1cXHRmb3IgKDsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyssIHBhZ2UrKylcXG5tbS9tbV9pbml0LmM6MjAwNTpcXHRcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6aWQsIG5pZCk7XFxubW0vbW1faW5pdC5jLTIwMDYtXFx0cmV0dXJuIG5yX3BhZ2VzO1xcbi0tXFxubW0vbW1faW5pdC5oPTExNT12b2lkIG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpO1xcbm1tL21tX2luaXQuaC0xMTYtXFxubW0vbW1faW5pdC5oOjExNzp2b2lkIF9fbWVtaW5pdCBfX2luaXRfc2luZ2xlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbm1tL21tX2luaXQuaC0xMTgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lLCBpbnQgbmlkKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMDkxPXN0YXRpYyBpbnQgZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqaGVhZF9wYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTk0LSAqIDEuIFBhZ2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBmb3IgdGhlIGZpcnN0IHRpbWUsIGluY2x1ZGluZyBkdXJpbmcgZGVmZXJyZWRcXG5tbS9wYWdlX2FsbG9jLmM6MTE5NTogKiAgICBtZW1vcnkgaW5pdDsgc2VlIHRoZSBjYWxsIHRvIHBhZ2Vfa2FzYW5fdGFnX3Jlc2V0IGluIF9faW5pdF9zaW5nbGVfcGFnZS5cXG5tbS9wYWdlX2FsbG9jLmMtMTE5Ni0gKiAyLiBUaGUgYWxsb2NhdGlvbiB3YXMgbm90IHVucG9pc29uZWQgZHVlIHRvIF9fR0ZQX1NLSVBfS0FTQU4sIHdpdGggdGhlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTYwMD12b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE2MDctXFx0LypcXG5tbS9wYWdlX2FsbG9jLmM6MTYwODpcXHQgKiBXaGVuIGluaXRpYWxpemluZyB0aGUgbWVtbWFwLCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBzZXRzIHRoZSByZWZjb3VudFxcbm1tL3BhZ2VfYWxsb2MuYy0xNjA5LVxcdCAqIG9mIGFsbCBwYWdlcyB0byAxIChcXFwiYWxsb2NhdGVkXFxcIi9cXFwibm90IGZyZWVcXFwiKS4gV2UgaGF2ZSB0byBzZXQgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQzLjg5MTM0NDUzM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzczMzA3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgX19pbml0X3NpbmdsZV9wYWdlYCBpbiBgbW0vbW1faW5pdC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBmb2N1c2luZyBvbiBgX19pbml0X3NpbmdsZV9wYWdlYCB3aXRoaW4gdGhlIGBtbV9pbml0LmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaW5pdGlhbCBtZW1vcnkgc2V0dXAsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBzaW5nbGUgcGFnZXMsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbCBtYXBwaW5nIG9mIGEgc2luZ2xlIHBoeXNpY2FsIHBhZ2UsIHByb2JhYmx5IGZvciBjcml0aWNhbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVhcmx5IGJvb3Qgc3RhZ2VzLiBJJ20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBob3cgdGhlIHBhZ2UgdGFibGVzIGFyZSBzZXQgdXAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIElzIGl0IG9wdGltaXplZCBmb3Igc2l6ZSwgc3BlZWQsIG9yIGEgYmFsYW5jZSBvZiBib3RoPyBBbmQgaG93IGRvZXMgdGhpcyBsb3ctbGV2ZWwgaW5pdCBmdW5jdGlvbiBwbGF5IHdpdGggdGhlIGxhdGVyLXN0YWdlIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIGlzIGJ1aWx0LCBzbyBnZXR0aW5nIHRoaXMgY2xlYXIgaXMgcGFyYW1vdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQ4LjI2NDY1NTFaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTA6XFx0b3V0OlxcbiA1OTE6XFx0XFx0LyogcmVzdG9yZSB0aGUgbm9kZV9zdGF0ZSAqL1xcbiA1OTI6XFx0XFx0bm9kZV9zdGF0ZXNbTl9NRU1PUlldID0gc2F2ZWRfbm9kZV9zdGF0ZTtcXG4gNTkzOlxcdH1cXG4gNTk0OlxcdFxcbiA1OTU6XFx0dm9pZCBfX21lbWluaXQgX19pbml0X3NpbmdsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gNTk2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgem9uZSwgaW50IG5pZClcXG4gNTk3OlxcdHtcXG4gNTk4OlxcdFxcdG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSk7XFxuIDU5OTpcXHRcXHRzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7XFxuIDYwMDpcXHRcXHRpbml0X3BhZ2VfY291bnQocGFnZSk7XFxuIDYwMTpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwYWdlLVxcdTAwM2VfbWFwY291bnQsIC0xKTtcXG4gNjAyOlxcdFxcdHBhZ2VfY3B1cGlkX3Jlc2V0X2xhc3QocGFnZSk7XFxuIDYwMzpcXHRcXHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlKTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBhZ2UtXFx1MDAzZWxydSk7XFxuIDYwNjpcXHQjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcXG4gNjA3OlxcdFxcdC8qIFRoZSBzaGlmdCB3b24ndCBvdmVyZmxvdyBiZWNhdXNlIFpPTkVfTk9STUFMIGlzIGJlbG93IDRHLiAqL1xcbiA2MDg6XFx0XFx0aWYgKCFpc19oaWdobWVtX2lkeCh6b25lKSlcXG4gNjA5OlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3MocGFnZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbiA2MTA6XFx0I2VuZGlmXFxuIDYxMTpcXHR9XFxuIDYxMjpcXHRcXG4gNjEzOlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbiA2MTQ6XFx0LypcXG4gNjE1OlxcdCAqIER1cmluZyBtZW1vcnkgaW5pdCBtZW1ibG9ja3MgbWFwIHBmbnMgdG8gbmlkcy4gVGhlIHNlYXJjaCBpcyBleHBlbnNpdmUgYW5kXFxuIDYxNjpcXHQgKiB0aGlzIGNhY2hlcyByZWNlbnQgbG9va3Vwcy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZWFybHlfcGZuX3RvX25pZFxcbiA2MTc6XFx0ICogdHJlYXRzIHN0YXJ0L2VuZCBhcyBwZm5zLlxcbiA2MTg6XFx0ICovXFxuIDYxOTpcXHRzdHJ1Y3QgbW1pbml0X3Bmbm5pZF9jYWNoZSB7XFxuIDYyMDpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3Rfc3RhcnQ7XFxuIDYyMTpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfZW5kO1xcbiA2MjI6XFx0XFx0aW50IGxhc3RfbmlkO1xcbiA2MjM6XFx0fTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0c3RhdGljIHN0cnVjdCBtbWluaXRfcGZubmlkX2NhY2hlIGVhcmx5X3Bmbm5pZF9jYWNoZSBfX21lbWluaXRkYXRhO1xcbiA2MjY6XFx0XFxuIDYyNzpcXHQvKlxcbiA2Mjg6XFx0ICogUmVxdWlyZWQgYnkgU1BBUlNFTUVNLiBHaXZlbiBhIFBGTiwgcmV0dXJuIHdoYXQgbm9kZSB0aGUgUEZOIGlzIG9uLlxcbiA2Mjk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM2OjQ4LjI2NDk5MjAyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjU5MTgzODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIEluaXRpYWxpemF0aW9uIGFuZCBDYWNoZSBGbHVzaGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgX19pbml0X3NpbmdsZV9wYWdlYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxpbmcgYG1tX3plcm9fc3RydWN0X3BhZ2UocGFnZSlgIGluaXRpYWxseSwgd2hpY2ggcHJlc3VtYWJseSBjbGVhcnMgdGhlIHBhZ2UncyBjb250ZW50cyBhbmQgc2V0cyB1cCBpdHMgaW5pdGlhbCBmaWVsZHMuICBUaGVuLCBhIHRlbXBsYXRlIGlzIGNyZWF0ZWQgdmlhIGEgYG1lbWNweWAgb2YgdGhlIGluaXRpYWwgcGFnZS4gRm9yIHN1YnNlcXVlbnQgcGFnZXMsIHRoZSBmdW5jdGlvbiBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGlzIHVzZWQuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgdGhpcyBmdW5jdGlvbiBtb2RpZmllcyB0aGUgKnRlbXBsYXRlKiBhbmQgdGhlbiBjb3BpZXMgdGhlICp0ZW1wbGF0ZSogaW50byB0aGUgcGFnZSB1c2luZyBgbWVtY3B5X25vbnRlbXBvcmFsYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhY3R1YWxseSBkb2luZyBoZXJlPyAgSSBrbm93IHRoYXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIHNjZW5hcmlvcyBsaWtlIHRoaXMuIFNvLCBsZXQncyBkaXZlIGludG8gdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uLiBUaGUgeDg2LTY0IGFyY2hpdGVjdHVyZSBkZWZpbmVzIGBtb3ZudGlfKmAgZnVuY3Rpb25zLCBhbmQgYSBgbWVtY3B5X2ZsdXNoY2FjaGVgIHdyYXBwZXIgZm9yIHRoZW0uXG5cbkxldCdzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGA6XG5cblRoZSBpbmxpbmUgZnVuY3Rpb25zIGBtb3ZudGlfNGAsIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYG1vdm50aWxgIGFuZCBgbW92bnRpcWAgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBhcmUgbm9uLXRlbXBvcmFsIHN0b3Jlcywgd2hpY2ggYnlwYXNzIHRoZSBjYWNoZSB0byB3cml0ZSBkaXJlY3RseSB0byBtZW1vcnkuICBgbWVtY3B5X2ZsdXNoY2FjaGVgIHVzZXMgdGhlc2UgYG1vdm50aV8qYCBmdW5jdGlvbnMgZm9yIGZpeGVkLXNpemUgY29waWVzICg0LCA4LCAxNiwgMzIsIDQ4LCA2NCwgODAgYW5kIDk2IGJ5dGVzKSBhbmQgY2FsbHMgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciB0aGUgb3RoZXIgc2l6ZXMuXG5cblRoZSBmaXhlZC1zaXplIGNhc2VzIGluIHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGltcGxlbWVudGF0aW9uIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgc2l6ZXMgb24geDg2LTY0LCBzcGVjaWZpY2FsbHkgNjQsIDgwIGFuZCA5NiBieXRlcy4gSSdtIGd1ZXNzaW5nIHRoaXMgb3B0aW1pemF0aW9uIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2UgY29tbW9uIHN0cnVjdHVyZXMsIG9wdGltaXppbmcgZm9yIHRoZSBtZW1vcnkgY29weSBpbiB0aG9zZSBrZXkgdXNlIGNhc2VzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIFdoZXJlIGFyZSB0aGVzZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGNhbGxzICphY3R1YWxseSogYmVpbmcgdXNlZD8gTXkgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciBpdHMgdXNhZ2VzLCBhbmQgYWxzbyB0aGUgdXNhZ2VzIG9mIHRoZSB1bmRlcmx5aW5nIGBtb3ZudGlfKmAgZnVuY3Rpb25zIGFuZCB0aGUgYF9fbWVtY3B5X2ZsdXNoY2FjaGVgIHRoYXQgYG1lbWNweV9mbHVzaGNhY2hlYCB1c2VzLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlaXIgYXBwbGljYXRpb24gd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBpZiB0aGUgYmVoYXZpb3Igb2YgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIGlzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjM3OjM2LjUyNDIyMDEyMVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0ODc4ODczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jcHlfZmx1c2hjYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg6NDg6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00OS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTktXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MTA6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XFxuLS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xOS19XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTIxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg6Mjk6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmgtMzAtXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYz02OT1zaXplX3QgY29weV9mcm9tX3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODE6dm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTgyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTg3LX1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4ODpFWFBPUlRfU1lNQk9MKG1lbWNweV9mbHVzaGNhY2hlKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjg0OnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMjA6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEyMS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY250KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTIzLVxcdGlmICghX19idWlsdGluX2NvbnN0YW50X3AoY250KSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxMjQ6XFx0XFx0cmV0dXJuIF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI1LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTI5LVxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZSBjYXNlcyBiYWNrIHRvXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMwOlxcdCAqIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzEtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDAtXFx0Y2FzZSA5NjogbW92bnRpXzY0KGRzdCwgc3JjKTsgbW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7IGJyZWFrO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE0MTpcXHRkZWZhdWx0OiBfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOyBicmVhaztcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNDItXFx0fVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTIte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1MzpcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTQtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NDQ4PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNDk4LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYzo0OTk6XFx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTUwMC1cXHR4Y2hnKFxcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM9NDY9c2l6ZV90IGNvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy03OS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzo4MDp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqX2RzdCwgY29uc3Qgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQyLX1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTQ0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM3LVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9kYXgvZnNkZXYuYy0zOS1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjUtXFx0Y2FjaGUtXFx1MDAzZWluZm9faW5kZXggPSAoY2FjaGUtXFx1MDAzZWluZm9faW5kZXggKyAxKSAlIFBDQUNIRV9NRVRBX0lOREVYX01BWDtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjI2OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMjctXFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfaW5mbykpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMC1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcXHRtZW1jcHlfZmx1c2hjYWNoZShwb3Nfb25tZWRpYV9hZGRyLCBcXHUwMDI2cG9zX29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX3Bvc19vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0My1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2JfYWRkciwgc2IsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NiKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQ1LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMzc9c3RhdGljIHZvaWQgYXBwZW5kX2xhc3Rfa3NldChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIG5leHRfc2VnKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTQ1LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE0NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFxcdTAwMjZrc2V0X29ubWVkaWEsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE0Ny1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTUxPWludCBjYWNoZV9rc2V0X2Nsb3NlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXQgKmtzZXQpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzYtXFx0XFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jOjE3NzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cXHUwMDNlc2VnbWVudC5kYXRhLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTc4LVxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTg4LVxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgYWZ0ZXIgY3VycmVudCBrc2V0ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTg5OlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSArIGtzZXRfb25tZWRpYV9zaXplLCBcXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTkwLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE5MS1cXHQvKiB3cml0ZSBjdXJyZW50IGtzZXQgaW50byBzZWdtZW50ICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTkyOlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwga3NldF9vbm1lZGlhLCBrc2V0X29ubWVkaWFfc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTkzLVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MjA9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2luZm9fd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzEtXFx0c2VnX2luZm9fYWRkciA9IGdldF9zZWdfaW5mb19hZGRyKGNhY2hlX3NlZyk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ19pbmZvX2FkZHIsIHNlZ19pbmZvLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9zZWdtZW50X2luZm8pKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMzMtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xMjY9c3RhdGljIHZvaWQgY2FjaGVfc2VnX2N0cmxfd3JpdGUoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdtZW50ICpjYWNoZV9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM2LVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoxMzc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcXHUwMDI2Y2FjaGVfc2VnX2dlbiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnX2dlbikpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzgtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0xODI9aW50IGNhY2hlX3NlZ19pbml0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgc2VnX2lkLCB1MzIgY2FjaGVfc2VnX2lkLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxNi1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MjE3OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXFx1MDAzZWRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cXHRcXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9NDY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcXHRtZW1jcHlfZmx1c2hjYWNoZShcXHUwMDI2KGRlc3QpLCBcXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTI9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEtXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMjpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjEzLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXFx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJ3Mgc2luZ2xlXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNzpcXHQgKiB0aHJlYWRlZCBtb2RlbCkgYnV0IHJlLWV2YWx1YXRlIHRoaXMgb25jZSBtZW1jcHlfZmx1c2hjYWNoZSgpIGlzXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyOC1cXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LSNlbmRpZlxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDU6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZGVzdCwgc291cmNlLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ2LX1cXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTEyNDg9c3RhdGljIHZvaWQgYmlvX2NvcHlfYmxvY2soc3RydWN0IGRtX3dyaXRlY2FjaGUgKndjLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjczLVxcdFxcdFxcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNzQ6XFx0XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKGRhdGEsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3Ni1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcXHRtZW1jcHlfZmx1c2hjYWNoZShuc2lvLVxcdTAwM2VhZGRyICsgb2Zmc2V0LCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc4LVxcdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cXHUwMDNlZGV2LnBhcmVudCksIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTMyLVxcdFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEzMzpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShwbWVtX2FkZHIsIG1lbSArIG9mZiwgY2h1bmspO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzQtXFx0XFx0a3VubWFwX2xvY2FsKG1lbSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTExMDk9aW50IGdlbmVyaWNfbnZkaW1tX2ZsdXNoKHN0cnVjdCBuZF9yZWdpb24gKm5kX3JlZ2lvbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtMTEyNC1cXHQgKiB0aGUgcGxhdGZvcm0gYnVmZmVyIGZsdXNoLiBOb3RlIHRoYXQgd2UndmUgYWxyZWFkeSBhcnJhbmdlZCBmb3IgcG1lbVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6MTEyNTpcXHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTI2LVxcdCAqIHdtYigpIGVuc3VyZXMgb3JkZXJpbmcgZm9yIHRoZSBOVkRJTU0gZmx1c2ggd3JpdGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oPTI3Mj1leHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaDoyNzU6c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc2LXtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTMwMz1zaXplX3QgbWVtY3B5X2Zyb21faXRlcl9mbHVzaGNhY2hlKHZvaWQgKml0ZXJfZnJvbSwgc2l6ZV90IHByb2dyZXNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMzA1LXtcXG5saWIvaW92X2l0ZXIuYzozMDY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUodG8gKyBwcm9ncmVzcywgaXRlcl9mcm9tLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTMwNy1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6Mzc6MzkuODczMDIwOTI2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjMzOTQ2NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uOiBQYXRjaCBBbmFseXNpcyBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGBOZWVkc0tNU0FOPXRydWVgLiBUaGlzIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN0cnVjdCBwYWdlYCBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UuIE15IGZvY3VzIGlzIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgS01TQU4gd291bGQgYmUgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5GaXJzdCwgbGV0J3Mgc3VtbWFyaXplIHRoZSBwYXRjaCdzIGNoYW5nZXM6IEl0IGludHJvZHVjZXMgYW4gb3B0aW1pemVkIGBtZW1jcHlfZmx1c2hjYWNoZWAgd2l0aCBpbmxpbmUgYXNzZW1ibHkgdXRpbGl6aW5nIGBtb3ZudGlgIGluc3RydWN0aW9ucyBmb3IgZmFzdGVyIG5vbi10ZW1wb3JhbCB3cml0ZXMgKHg4NiksIGFkZHMgYSBoZWxwZXIgZnVuY3Rpb24gYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgcmVmYWN0b3JzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBvZiBgc3RydWN0IHBhZ2VgIGluc3RhbmNlcy5cblxuVGhlIGNydWNpYWwgcGFydHMgYXJlIGluIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEhlcmUsIHJhdGhlciB0aGFuIGluaXRpYWxpemluZyBlYWNoIGBzdHJ1Y3QgcGFnZWAgaW5kaXZpZHVhbGx5LCBhIFwidGVtcGxhdGVcIiBhcHByb2FjaCBpcyB1c2VkLiBUaGUgZmlyc3QgYHBhZ2VgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYF9faW5pdF96b25lX2RldmljZV9wYWdlYCwgd2hpY2ggY2FsbHMgYF9faW5pdF9zaW5nbGVfcGFnZWAuIENyaXRpY2FsbHksIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBlbnRpcmUgYHN0cnVjdCBwYWdlYCB3aXRoIGBtbV96ZXJvX3N0cnVjdF9wYWdlYCBiZWZvcmUgc2V0dGluZyBvdGhlciBmaWVsZHMuIFRoaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcGFnZSBpcyB0aGVuIGNvcGllZCB0byBhIHN0YWNrIHZhcmlhYmxlIGNhbGxlZCBgdGVtcGxhdGVgLiBTdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBieSBjb3B5aW5nIGZyb20gdGhpcyB0ZW1wbGF0ZSBhZnRlciBzb21lIGZpZWxkcyAobGlrZSB0aGUgc2VjdGlvbikgaGF2ZSBiZWVuIGFkanVzdGVkLiBJdCdzIHRoZW4gdGhhdCB0aGUgc3BlY2lhbGl6ZWQgYG1lbWNweV9ub250ZW1wb3JhbGAgY2FsbCAod2hpY2ggaXMgYWxpYXNlZCBhcyBgbWVtY3B5X2ZsdXNoY2FjaGVgIGluIHRoZSBwYXRjaCkgaXMgdXNlZCwgbWVhbmluZyBubyB0ZW1wb3JhbCBjYWNoZSBtaXNzZXMgYXJlIGluY3VycmVkIG9uIGxhcmdlIHBhZ2UgY29waWVzLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm90IGhlcmUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBpbnZvbHZlZC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRldGVybWluaXN0aWMuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZDoqKiBOb3QgaGVyZS4gVGhlIGBzdHJ1Y3QgcGFnZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIHdpdGggemVyb2luZyBhbmQgc3BlY2lmaWMgZmllbGQgc2V0cy4gVGhlIHN0YWNrIHZhcmlhYmxlIGB0ZW1wbGF0ZWAgc3RvcmVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBwYWdlYC5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhlIGNvcGllcyB1c2UgYHNpemVvZigqcGFnZSlgIHdoaWNoIGlzIGEgZGVmaW5lZCBzaXplLCBhbmQgd2UgcmVseSBvbiBLQVNBTiBvciBGT1JUSUZZIHRvIHBpY2sgdXAgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5NeSBjb25jbHVzaW9uPyBCYXNlZCBvbiB0aGUgYW5hbHlzaXMsIEkgc2VlICpubyogcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGNyZWF0ZWQsIHVzZWQgaW50ZXJuYWxseSBpbiBhIHByb2JsZW1hdGljIHdheSwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgc3RhY2stYmFzZWQgYHRlbXBsYXRlYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkgZnJvbSBhIHplcm9lZCBgc3RydWN0IHBhZ2VgLCB3aGljaCBpcyB0aGVuIGNvcGllZCB0byB0aGUgdGFyZ2V0IGBwYWdlYCBpbnN0YW5jZXMuIFRoZSBpbmxpbmUgYXNzZW1ibHkgaW4gYG1lbWNweV9mbHVzaGNhY2hlYCByZWFkcyBpbml0aWFsaXplZCB2YWx1ZXMgZnJvbSBgc3JjYCB0byBgZHN0YCwgd2hpY2ggYXJlIGFsbCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgYW5kIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBLTVNBTiB3b3VsZCBmaW5kLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFJlZ3VsYXIgS0FTQU4vRk9SVElGWSBtZWNoYW5pc21zIHdvdWxkIGNhdGNoIGFueSBidWZmZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIGl0IHdlcmUgdG8gb2NjdXIgaW4gdGhlIGNvcHkgb3BlcmF0aW9ucy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgbG9naWMgYXBwZWFycyBzb3VuZDsgbGV0J3MgY2FsbCBpdCBhIGRheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODEsIk91dHB1dFRva2VucyI6Mjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MDoxMi4yMTI0ODkyOTVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBzdHJ1Y3QgcGFnZSBpbml0aWFsaXphdGlvbiBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IGFuZCBpbnRyb2R1Y2VzIG9wdGltaXplZCBmaXhlZC1zaXplIG5vbi10ZW1wb3JhbCBjb3BpZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgIC8gYG1lbWNweV9mbHVzaGNhY2hlYCkgdXNpbmcgaW5saW5lIGFzc2VtYmx5IGBtb3ZudGlgIGluc3RydWN0aW9ucyBvbiB4ODZfNjQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLUxlYWsgQW5hbHlzaXMgKEtNU0FOKTpcXG4tIFRoZSBzdGFjayB2YXJpYWJsZSBgdGVtcGxhdGVgIChhIGBzdHJ1Y3QgcGFnZWApIGluIGBtbS9tbV9pbml0LmNgIGlzIGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSlgIGZyb20gYSBzdHJ1Y3QgcGFnZSB0aGF0IHdhcyBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBfX2luaXRfc2luZ2xlX3BhZ2UoKWAgKHdoaWNoIGludm9rZXMgYG1tX3plcm9fc3RydWN0X3BhZ2UoKWApLlxcbi0gQWxsIGJ5dGVzIGluY2x1ZGluZyBwYWRkaW5nIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHRoZSBzdWJzZXF1ZW50IGBzdHJ1Y3QgcGFnZWAgdGFyZ2V0cy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG5cXG4yLiBPdXQtb2YtYm91bmRzIC8gTWVtb3J5IENvcnJ1cHRpb24gQW5hbHlzaXMgKEtBU0FOKTpcXG4tIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgaW5jb3JyZWN0IHN0cnVjdCBwYWdlIHNpemUgY29waWVzLCBhbGlnbm1lbnQgaXNzdWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdvdWxkIGJlIG1lbW9yeSBjb3JydXB0aW9uL09PQiBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2luZyB0b29scy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgc3RydWN0IHBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSBhbmQgaW50cm9kdWNlcyBvcHRpbWl6ZWQgZml4ZWQtc2l6ZSBub24tdGVtcG9yYWwgY29waWVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCAvIGBtZW1jcHlfZmx1c2hjYWNoZWApIHVzaW5nIGlubGluZSBhc3NlbWJseSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1MZWFrIEFuYWx5c2lzIChLTVNBTik6XFxuLSBUaGUgc3RhY2sgdmFyaWFibGUgYHRlbXBsYXRlYCAoYSBgc3RydWN0IHBhZ2VgKSBpbiBgbW0vbW1faW5pdC5jYCBpcyBpbml0aWFsaXplZCB2aWEgYG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpYCBmcm9tIGEgc3RydWN0IHBhZ2UgdGhhdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgX19pbml0X3NpbmdsZV9wYWdlKClgICh3aGljaCBpbnZva2VzIGBtbV96ZXJvX3N0cnVjdF9wYWdlKClgKS5cXG4tIEFsbCBieXRlcyBpbmNsdWRpbmcgcGFkZGluZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB0aGUgc3Vic2VxdWVudCBgc3RydWN0IHBhZ2VgIHRhcmdldHMuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMi4gT3V0LW9mLWJvdW5kcyAvIE1lbW9yeSBDb3JydXB0aW9uIEFuYWx5c2lzIChLQVNBTik6XFxuLSBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGluY29ycmVjdCBzdHJ1Y3QgcGFnZSBzaXplIGNvcGllcywgYWxpZ25tZW50IGlzc3Vlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3b3VsZCBiZSBtZW1vcnkgY29ycnVwdGlvbi9PT0IgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdpt6c[1] Phase: Succeeded StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 12:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 12:40:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2] Phase: Succeeded StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 12:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 12:40:24 +0000 UTC FinishedAt: 2026-08-31 12:40:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-convert-artifact-2079377356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 12:40:45 +0000 UTC FinishedAt: 2026-08-31 13:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 12:40:45 +0000 UTC FinishedAt: 2026-08-31 13:00:18 +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:*0e1b7259-9528-4dee-8b06-da4ee7f00b82,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-workflowdpt6c/series-workflowdpt6c-convert-artifact-2079377356/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": "c3b00007-428b-49c8-ad17-727c4dcf7d37", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-1908327930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 12:40:45 +0000 UTC FinishedAt: 2026-08-31 12:59:55 +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:*0e1b7259-9528-4dee-8b06-da4ee7f00b82,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-workflowdpt6c/series-workflowdpt6c-convert-artifact-2079377356/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": "c3b00007-428b-49c8-ad17-727c4dcf7d37", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-1908327930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 13:00:18 +0000 UTC FinishedAt: 2026-08-31 13:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 13:00:19 +0000 UTC FinishedAt: 2026-08-31 13:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 13:00:19 +0000 UTC FinishedAt: 2026-08-31 13:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 13:00:19 +0000 UTC FinishedAt: 2026-08-31 13:00:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-convert-artifact-892492299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 13:00:30 +0000 UTC FinishedAt: 2026-08-31 13:02:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 13:00:30 +0000 UTC FinishedAt: 2026-08-31 13:02:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c3b00007-428b-49c8-ad17-727c4dcf7d37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-1908327930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 13:02:26 +0000 UTC FinishedAt: 2026-08-31 13:02:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 13:02:26 +0000 UTC FinishedAt: 2026-08-31 13:02:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 13:02:26 +0000 UTC FinishedAt: 2026-08-31 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 13:02:26 +0000 UTC FinishedAt: 2026-08-31 13:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0e1b7259-9528-4dee-8b06-da4ee7f00b82,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-workflowdpt6c/series-workflowdpt6c-convert-artifact-892492299/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": "e110092b-506c-4fb3-a9ca-6d6509c282d4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-3561814191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 13:02:26 +0000 UTC FinishedAt: 2026-08-31 13:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0e1b7259-9528-4dee-8b06-da4ee7f00b82,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-workflowdpt6c/series-workflowdpt6c-convert-artifact-892492299/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": "e110092b-506c-4fb3-a9ca-6d6509c282d4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-3561814191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 13:22:20 +0000 UTC FinishedAt: 2026-08-31 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 13:22:20 +0000 UTC FinishedAt: 2026-08-31 13:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 13:22:20 +0000 UTC FinishedAt: 2026-08-31 13:24:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 13:22:20 +0000 UTC FinishedAt: 2026-08-31 13:24:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e110092b-506c-4fb3-a9ca-6d6509c282d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-3561814191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c3b00007-428b-49c8-ad17-727c4dcf7d37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e110092b-506c-4fb3-a9ca-6d6509c282d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-1908327930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-3561814191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 13:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 13:24:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},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-workflowdpt6c/series-workflowdpt6c-convert-artifact-2648506020/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 13:24:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 13:24:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 13:24:15 +0000 UTC FinishedAt: 2026-08-31 13:24:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 13:24:25 +0000 UTC FinishedAt: 2026-08-31 16:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpt6c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages","devm_memremap_pages","__memcpy_flushcache"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9542b56cd42cf145b763258075dca774daa0cb0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","SPARSEMEM_VMEMMAP","DEVICE_PRIVATE","FS_DAX"],"series_id":"0f04c229-b1a9-40fb-bc2d-4edb88804df8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 13:24:25 +0000 UTC FinishedAt: 2026-08-31 16:29:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c3b00007-428b-49c8-ad17-727c4dcf7d37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e110092b-506c-4fb3-a9ca-6d6509c282d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-1908327930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-build-action-3561814191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpt6c/series-workflowdpt6c-convert-artifact-2648506020/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}