Name: series-workflowp9cl4 Phase: Succeeded StartedAt: 2026-07-07 20:33:18 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[0] Phase: Succeeded StartedAt: 2026-07-07 20:33:18 +0000 UTC FinishedAt: 2026-07-07 20:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 20:33:18 +0000 UTC FinishedAt: 2026-07-07 20:49:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DVB_AS102", "USB_PEGASUS", "ATH9K_HTC", "USB_XUSBATM", "USB_TMC", "USB_SERIAL_SPCP8X5" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DVB_AS102", "USB_PEGASUS", "ATH9K_HTC", "USB_XUSBATM", "USB_TMC", "USB_SERIAL_SPCP8X5" ], "series_id": "ddf5dbab-3c26-4c1c-8fda-0f76f810e816" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usb_probe_interface", "usb_device_match", "as102_usb_probe", "pegasus_probe", "ath9k_hif_usb_probe", "xusbatm_bind", "usbtmc_probe", "spcp8x5_probe", "spcp8x5_port_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RWQl9BUzEwMiYjMzQ7LAogICAgJiMzNDtVU0JfUEVHQVNVUyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7VVNCX1hVU0JBVE0mIzM0OywKICAgICYjMzQ7VVNCX1RNQyYjMzQ7LAogICAgJiMzNDtVU0JfU0VSSUFMX1NQQ1A4WDUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfcHJvYmVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O3VzYl9kZXZpY2VfbWF0Y2gmIzM0OywKICAgICYjMzQ7YXMxMDJfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3BlZ2FzdXNfcHJvYmUmIzM0OywKICAgICYjMzQ7YXRoOWtfaGlmX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDt4dXNiYXRtX2JpbmQmIzM0OywKICAgICYjMzQ7dXNidG1jX3Byb2JlJiMzNDssCiAgICAmIzM0O3NwY3A4eDVfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wb3J0X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXHUwMDNlZHJpdmVyX2luZm9gIGR1cmluZyBwcm9iZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIuIEZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAodmlhIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldyBkeW5hbWljIElEIG1hdGNoaW5nIGxvZ2ljIGFuZCB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucyB3b3JrIGNvcnJlY3RseSBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyMGY0MDYyYWVlZDlhNjQ1M2M3NGQxNzdhZTM4OTYxOTU4YzhiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQ3OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xuaW5kZXggYTExMDI0NDUxY2ViZGMuLmJlMmY4YmU1NjBmYWUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmNcbkBAIC0yNCwzNSAmIzQzOzI0LDMzIEBAIHN0YXRpYyB2b2lkIGFzMTAyX3VzYl9zdG9wX3N0cmVhbShzdHJ1Y3QgYXMxMDJfZGV2X3QgKmRldik7XG4gc3RhdGljIGludCBhczEwMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcbiBzdGF0aWMgaW50IGFzMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpO1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcbi1cdHsgVVNCX0RFVklDRShBUzEwMl9VU0JfREVWSUNFX1ZFTkRPUl9JRCwgQVMxMDJfVVNCX0RFVklDRV9QSURfMDAwMSkgfSxcbi1cdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKE5CT1hfRFZCVF9ET05HTEVfVVNCX1ZJRCwgTkJPWF9EVkJUX0RPTkdMRV9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCkgfSxcbi1cdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuJiM0MztzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4mIzQzO1x0ICogd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMFxuJiM0MztcdCAqL1xuJiM0MztcdHVpbnQ4X3QgZWxuYV9jZmc7XG4gfTtcbiBcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxuLSAgIGFzMTAyX3VzYl9pZF90YWJsZSBzdHJ1Y3QgKi9cbi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzMTAyX2RldmljZV9uYW1lc1tdID0ge1xuLVx0QVMxMDJfUkVGRVJFTkNFX0RFU0lHTixcbi1cdEFTMTAyX1BDVFZfNzRFLFxuLVx0QVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLFxuLVx0QVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLFxuLVx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXG4tXHROVUxMIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4tfTtcbiYjNDM7I2RlZmluZSBEUklWRVJfSU5GTyhkZXZfbmFtZSwgZGV2X2VsbmFfY2ZnKSBcXFxuJiM0MztcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvKXsgXFxcbiYjNDM7XHRcdC5uYW1lID0gKGRldl9uYW1lKSwgXFxcbiYjNDM7XHRcdC5lbG5hX2NmZyA9IChkZXZfZWxuYV9jZmcpLCBcXFxuJiM0MztcdH1cbiBcbi0vKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4tICAgd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMCAqL1xuLXN0YXRpYyB1aW50OF90IGNvbnN0IGFzMTAyX2VsbmFfY2ZnW10gPSB7XG4tXHQweEEwLFxuLVx0MHhDMCxcbi1cdDB4QzAsXG4tXHQweEEwLFxuLVx0MHhBMCxcbi1cdDB4MDAgLyogVGVybWluYXRpbmcgZW50cnkgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgVVNCX0RFVklDRShBUzEwMl9VU0JfREVWSUNFX1ZFTkRPUl9JRCwgQVMxMDJfVVNCX0RFVklDRV9QSURfMDAwMSksXG4mIzQzO1x0ICBEUklWRVJfSU5GTyhBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLCAweEEwKSB9LFxuJiM0MztcdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX1BDVFZfNzRFLCAweEMwKSB9LFxuJiM0MztcdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCksXG4mIzQzO1x0ICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sXG4mIzQzO1x0eyBVU0JfREVWSUNFKE5CT1hfRFZCVF9ET05HTEVfVVNCX1ZJRCwgTkJPWF9EVkJUX0RPTkdMRV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSwgMHhBMCkgfSxcbiYjNDM7XHR7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX1NLWV9JVF9ESUdJVEFMX0tFWV9OQU1FLCAweEEwKSB9LFxuJiM0MztcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuIH07XG4gXG4gc3RydWN0IHVzYl9kcml2ZXIgYXMxMDJfdXNiX2RyaXZlciA9IHtcbkBAIC0zMzYsMjkgJiM0MzszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBhczEwMl9kZXZfdCAqYXMxMDJfZGV2O1xuLVx0aW50IGk7XG4tXG4tXHQvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi9cbi1cdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cbi1cdCAgICAoc2l6ZW9mKGFzMTAyX2RldmljZV9uYW1lcykgLyBzaXplb2YoY29uc3QgY2hhciAqKSkpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O0RldmljZSBuYW1lcyB0YWJsZSBpbnZhbGlkIHNpemVcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKmluZm8gPSAoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXG4gXHRhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpO1xuIFx0aWYgKGFzMTAyX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIEFzc2lnbiB0aGUgdXNlci1mcmllbmRseSBkZXZpY2UgbmFtZSAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoaWQgPT0gXHUwMDI2YXMxMDJfdXNiX2lkX3RhYmxlW2ldKSB7XG4tXHRcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBhczEwMl9kZXZpY2VfbmFtZXNbaV07XG4tXHRcdFx0YXMxMDJfZGV2LVx1MDAzZWVsbmFfY2ZnID0gYXMxMDJfZWxuYV9jZmdbaV07XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChhczEwMl9kZXYtXHUwMDNlbmFtZSA9PSBOVUxMKVxuJiM0MztcdGlmIChpbmZvKSB7XG4mIzQzO1x0XHRhczEwMl9kZXYtXHUwMDNlbmFtZSA9IGluZm8tXHUwMDNlbmFtZTtcbiYjNDM7XHRcdGFzMTAyX2Rldi1cdTAwM2VlbG5hX2NmZyA9IGluZm8tXHUwMDNlZWxuYV9jZmc7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBcJiMzNDtVbmtub3duIEFTMTAyIGRldmljZVwmIzM0OztcbiYjNDM7XHR9XG4gXG4gXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cbiBcdGFzMTAyX2Rldi1cdTAwM2VidXNfYWRhcC5vcHMgPSBcdTAwMjZhczEwMl9wcml2X29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuQEAgLTQzLDIxICYjNDM7NDMsMTIgQEAgc3RhdGljIGJvb2wgbG9vcGJhY2s7XG4gc3RhdGljIGJvb2wgbWlpX21vZGU7XG4gc3RhdGljIGNoYXIgKmRldmlkO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0ge1xuLSNkZWZpbmVcdFBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpXHRcXFxuLVx0ey5uYW1lID0gcG4sIC52ZW5kb3IgPSB2aWQsIC5kZXZpY2UgPSBwaWQsIC5wcml2YXRlID0gZmxhZ3N9LFxuLSNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxuLVx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcbi0jaW5jbHVkZSBcJiMzNDtwZWdhc3VzLmhcJiMzNDtcbi0jdW5kZWZcdFBFR0FTVVNfREVWXG4tI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuLVx0e05VTEwsIDAsIDAsIDB9LFxuLVx0e05VTEwsIDAsIDAsIDB9XG4tfTtcbiYjNDM7c3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTtcbiBcbiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHtcbiAjZGVmaW5lXHRQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKSBcXFxuLVx0ey5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWR9LFxuJiM0MztcdHsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcXFxuJiM0MztcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcbiAvKlxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcbiAgKiBJRHMgYXMgdGhlIEJlbGtpbiBGNUQ1MDUwLCBzbyB3ZSBuZWVkIHRvIHRlYWNoIHRoZSBwZWdhc3VzIGRyaXZlciB0b1xuQEAgLTY2LDcgJiM0Mzs1Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xuICAqL1xuICNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxuIFx0ey5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSwgXFxcbi1cdC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgLmJEZXZpY2VDbGFzcyA9IGRjbGFzc30sXG4mIzQzO1x0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcXFxuJiM0MztcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LFxuICNpbmNsdWRlIFwmIzM0O3BlZ2FzdXMuaFwmIzM0O1xuICN1bmRlZlx0UEVHQVNVU19ERVZcbiAjdW5kZWZcdFBFR0FTVVNfREVWX0NMQVNTXG5AQCAtNDAyLDEyICYjNDM7Mzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpXG4gXHRpZiAoaSA9PSBSRUdfVElNRU9VVClcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShwZWdhc3VzLVx1MDAzZXVzYi1cdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUyB8fFxuJiM0MztcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVx1MDAzZXVzYi1cdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRExJTkspIHtcbiBcdFx0c2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI0KTtcbiBcdFx0c2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI2KTtcbiBcdH1cbi1cdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0VMQ09OKSB7XG4mIzQzO1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9FTENPTikge1xuIFx0XHRfX3UxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQ0NSw5ICYjNDM7NDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYilcbiBcdG1lbWNweShwZWdhc3VzLVx1MDAzZWV0aF9yZWdzLCBkYXRhLCBzaXplb2YoZGF0YSkpO1xuIFx0cmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fFxuLVx0ICAgIHVzYl9kZXZfaWRbcGVnYXN1cy1cdTAwM2VkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHtcbiYjNDM7XHRpZiAobGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHxcbiYjNDM7XHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4mIzQzO1x0ICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xuIFx0XHR1MTYgYXV4bW9kZTtcbiBcdFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBcdTAwMjZhdXhtb2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC0xMTUzLDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0O1xuIFx0cGVnYXN1c190ICpwZWdhc3VzO1xuLVx0aW50IGRldl9pbmRleCA9IGlkIC0gcGVnYXN1c19pZHM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvO1xuIFx0aW50IHJlcyA9IC1FTk9NRU07XG4gXHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gXHRcdFBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLFxuQEAgLTExNzgsNyAmIzQzOzExNzAsNiBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRwZWdhc3VzLVx1MDAzZWRldl9pbmRleCA9IGRldl9pbmRleDtcbiBcdHBlZ2FzdXMtXHUwMDNlaW50ZiA9IGludGY7XG4gXG4gXHRyZXMgPSBhbGxvY191cmJzKHBlZ2FzdXMpO1xuQEAgLTEyMDYsNyAmIzQzOzExOTcsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRwZWdhc3VzLVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChtc2dfbGV2ZWwsIE5FVElGX01TR19EUlZcbiBcdFx0XHRcdHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xuIFxuLVx0cGVnYXN1cy1cdTAwM2VmZWF0dXJlcyA9IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5wcml2YXRlO1xuJiM0MztcdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cdTAwM2Vwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUO1xuIFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0MjtcbkBAIC0xMjM1LDcgJiM0MzsxMjI2LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZwZWdhc3VzLVx1MDAzZWNhcnJpZXJfY2hlY2ssXG4gXHRcdFx0ICAgQ0FSUklFUl9DSEVDS19ERUxBWSk7XG4gXHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMsICVzLCAlcE1cXG5cJiMzNDssIG5ldC1cdTAwM2VuYW1lLFxuLVx0XHQgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0XHQgaW5mbyA/IGluZm8tXHUwMDNlbmFtZSA6IFwmIzM0Oyh1bmtub3duKVwmIzM0OywgbmV0LVx1MDAzZWRldl9hZGRyKTtcbiBcdHJldHVybiAwO1xuIFxuIG91dDM6XG5AQCAtMTMyNSw4ICYjNDM7MTMxNiw5IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwZWdhc3VzX2RyaXZlciA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMCwgaSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMDtcbiBcdGNoYXIgKnRva2VuLCAqbmFtZSA9IE5VTEw7XG4mIzQzO1x0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcbiBcbiBcdHRva2VuID0gc3Ryc2VwKFx1MDAyNmlkLCBcJiMzNDs6XCYjMzQ7KTtcbiBcdGlmICh0b2tlbilcbkBAIC0xMzQ4LDE0ICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4gXHRpZiAoZGV2aWNlX2lkIFx1MDAzZSAweDEwMDAwIHx8IGRldmljZV9pZCA9PSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyB1c2JfZGV2X2lkW2ldLm5hbWU7IGkmIzQzOyYjNDM7KTtcbi1cdHVzYl9kZXZfaWRbaV0ubmFtZSA9IG5hbWU7XG4tXHR1c2JfZGV2X2lkW2ldLnZlbmRvciA9IHZlbmRvcl9pZDtcbi1cdHVzYl9kZXZfaWRbaV0uZGV2aWNlID0gZGV2aWNlX2lkO1xuLVx0dXNiX2Rldl9pZFtpXS5wcml2YXRlID0gZmxhZ3M7XG4tXHRwZWdhc3VzX2lkc1tpXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFO1xuLVx0cGVnYXN1c19pZHNbaV0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4tXHRwZWdhc3VzX2lkc1tpXS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7XG4mIzQzO1x0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xuJiM0MztcdGR5bmFtaWNfaWRfaW5mby5wcml2YXRlID0gZmxhZ3M7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFO1xuJiM0MztcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjZkeW5hbWljX2lkX2luZm87XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBlZ2FzdXNfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmggYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG5pbmRleCBhMDViMTQzMTU1YmE4Ni4uY2NkZWRjZWY1MmU3NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG5AQCAtODUsNyAmIzQzOzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXHR1bnNpZ25lZFx0XHRmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4gXHR1MzJcdFx0XHR3b2xvcHRzO1xuLVx0aW50XHRcdFx0ZGV2X2luZGV4O1xuIFx0aW50XHRcdFx0aW50cl9pbnRlcnZhbDtcbiBcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdGw7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRjYXJyaWVyX2NoZWNrO1xuQEAgLTEwMiw4ICYjNDM7MTAxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXG4gc3RydWN0IHVzYl9ldGhfZGV2IHtcbiBcdGNoYXJcdCpuYW1lO1xuLVx0X191MTZcdHZlbmRvcjtcbi1cdF9fdTE2XHRkZXZpY2U7XG4gXHRfX3UzMlx0cHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi9cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG5pbmRleCA0N2Y5MDRlN2U2NTI5Ny4uZDM0OTFmZjA4ZTZlZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG5AQCAtMTA4Nyw3ICYjNDM7MTA4Nyw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpXG4gXHR9XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKSlcbiYjNDM7XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRmaXJtX29mZnNldCA9IEFSNzAxMF9GSVJNV0FSRV9URVhUO1xuIFx0ZWxzZVxuIFx0XHRmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUO1xuQEAgLTExODIsNyAmIzQzOzExODIsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcdGlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxIFx1MDAyNlx1MDAyNiBoaWZfZGV2LVx1MDAzZWZ3X21pbm9yX2luZGV4ID09IDMpIHtcbiBcdFx0Y29uc3QgY2hhciAqZmlsZW5hbWU7XG4gXG4tXHRcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbykpXG4mIzQzO1x0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRcdGZpbGVuYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZpbGVuYW1lID0gRklSTVdBUkVfQVI5MjcxO1xuQEAgLTExOTgsNyAmIzQzOzExOTgsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlZHJpdmVyX2luZm8pKVxuJiM0MztcdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2VpZF9pbmZvKSlcbiBcdFx0XHRjaGlwID0gXCYjMzQ7NzAxMFwmIzM0OztcbiBcdFx0ZWxzZVxuIFx0XHRcdGNoaXAgPSBcJiMzNDs5MjcxXCYjMzQ7O1xuQEAgLTEyNTUsOSAmIzQzOzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4gXG4gXHRyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LVx1MDAzZWh0Y19oYW5kbGUsXG4gXHRcdFx0XHRcdTAwMjZoaWZfZGV2LVx1MDAzZWludGVyZmFjZS1cdTAwM2VkZXYsXG4tXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlaWRQcm9kdWN0LFxuJiM0MztcdFx0XHRcdGxlMTZfdG9fY3B1KGhpZl9kZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCksXG4gXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVkZXYtXHUwMDNlcHJvZHVjdCxcbi1cdFx0XHRcdGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG4mIzQzO1x0XHRcdFx0aGlmX2Rldi1cdTAwM2VpZF9pbmZvKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnJfaHRjX2h3X2luaXQ7XG5AQCAtMTM2OSw3ICYjNDM7MTM2OSw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIFxuIFx0aGlmX2Rldi1cdTAwM2V1ZGV2ID0gdWRldjtcbiBcdGhpZl9kZXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuLVx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XG4mIzQzO1x0aGlmX2Rldi1cdTAwM2VpZF9pbmZvID0gaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gI2lmZGVmIENPTkZJR19QTVxuIFx0dWRldi1cdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG5pbmRleCBkYzBiMGZhNWMzMjU3NC4uYjNlN2IwZmI1NGI4NDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG5AQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgY21kX2J1ZiB7XG4gc3RydWN0IGhpZl9kZXZpY2VfdXNiIHtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfZGV2aWNlX2lkO1xuJiM0MztcdGludCBpZF9pbmZvO1xuIFx0Y29uc3Qgdm9pZCAqZndfZGF0YTtcbiBcdHNpemVfdCBmd19zaXplO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfZG9uZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuQEAgLTc5LDcgJiM0Mzs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuIFx0XHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4ge1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuLVx0aW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzO1xuJiM0MztcdGludCBkcnZfaXggPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiBcdGludCByeF9hbHQgPSByeF9hbHRzZXR0aW5nW2Rydl9peF07XG4gXHRpbnQgdHhfYWx0ID0gdHhfYWx0c2V0dGluZ1tkcnZfaXhdO1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKnJ4X2ludGYgPSB4dXNiYXRtX2ZpbmRfaW50Zih1c2JfZGV2LCByeF9hbHQsIHJ4X2VuZHBvaW50W2Rydl9peF0pO1xuQEAgLTE2OCw3ICYjNDM7MTY4LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcbiBcdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbiBcdC5wcm9iZVx0XHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxuIFx0LmRpc2Nvbm5lY3RcdD0gdXNiYXRtX3VzYl9kaXNjb25uZWN0LFxuLVx0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkc1xuJiM0MztcdC5pZF90YWJsZVx0PSB4dXNiYXRtX3VzYl9pZHMsXG4mIzQzO1x0Lm5vX2R5bmFtaWNfaWRcdD0gMSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHh1c2JhdG1faW5pdCh2b2lkKVxuQEAgLTE5MCw2ICYjNDM7MTkxLDcgQEAgc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXG4gXHRcdHh1c2JhdG1fdXNiX2lkc1tpXS5tYXRjaF9mbGFnc1x0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXHQ9IHZlbmRvcltpXTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkUHJvZHVjdFx0PSBwcm9kdWN0W2ldO1xuJiM0MztcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmRyaXZlcl9pbmZvXHQ9IGk7XG4gXG4gXHRcdHh1c2JhdG1fZHJpdmVyc1tpXS5kcml2ZXJfbmFtZVx0PSB4dXNiYXRtX2RyaXZlcl9uYW1lO1xuIFx0XHR4dXNiYXRtX2RyaXZlcnNbaV0uYmluZFx0XHQ9IHh1c2JhdG1fYmluZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXG5pbmRleCBhZjlhZTU1ZGFlMTRlMC4uNTFjZDkzMjBhNzM2NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmNcbkBAIC03MSw3ICYjNDM7NzEsNiBAQCBzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMge1xuICAqIGFsbG9jYXRlZCBmb3IgZWFjaCBVU0JUTUMgZGV2aWNlIGluIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uXG4gICovXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7XG5AQCAtMjM5NCw3ICYjNDM7MjM5Myw2IEBAIHN0YXRpYyBpbnQgdXNidG1jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRhdGEtXHUwMDNlaW50ZiA9IGludGY7XG4tXHRkYXRhLVx1MDAzZWlkID0gaWQ7XG4gXHRkYXRhLVx1MDAzZXVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTtcbiBcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7XG4gXHRrcmVmX2luaXQoXHUwMDI2ZGF0YS1cdTAwM2VrcmVmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuaW5kZXggZjYzMDA0NDE3MDU4ZTYuLjdmMzNmZTViYTAzYmRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuQEAgLTIyOCwxNCAmIzQzOzIyOCwxNiBAQCBzdGF0aWMgdm9pZCB1c2JfZnJlZV9keW5pZHMoc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX21hdGNoX2R5bmFtaWNfaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tXHRcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KVxuJiM0MztcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX2NvcHkpXG4ge1xuIFx0c3RydWN0IHVzYl9keW5pZCAqZHluaWQ7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2dXNiX2R5bmlkc19sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodXNiX21hdGNoX29uZV9pZChpbnRmLCBcdTAwMjZkeW5pZC1cdTAwM2VpZCkpIHtcbi1cdFx0XHRyZXR1cm4gXHUwMDI2ZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdCppZF9jb3B5ID0gZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdHJldHVybiBpZF9jb3B5O1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zMjEsNiAmIzQzOzMyMyw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiBcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcbiYjNDM7XHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xuIFx0aW50IGVycm9yID0gLUVOT0RFVjtcbiBcdGludCBscG1fZGlzYWJsZV9lcnJvciA9IC1FTk9ERVY7XG4gXG5AQCAtMzQwLDcgJiM0MzszNDMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4tXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7XG4mIzQzO1x0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCBkcml2ZXIsIFx1MDAyNmlkX2NvcHkpO1xuIFx0aWYgKCFpZClcbiBcdFx0aWQgPSB1c2JfbWF0Y2hfaWQoaW50ZiwgZHJpdmVyLVx1MDAzZWlkX3RhYmxlKTtcbiBcdGlmICghaWQpXG5AQCAtODkyLDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjtcbiBcdFx0Y29uc3Qgc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnY7XG4gXHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcbiYjNDM7XHRcdHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRcdC8qIGRldmljZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGludGVyZmFjZXMgKi9cbiBcdFx0aWYgKGlzX3VzYl9kZXZpY2VfZHJpdmVyKGRydikpXG5AQCAtOTA0LDcgJiM0Mzs5MDgsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRpZiAoaWQpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHRcdGlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgdXNiX2Rydik7XG4mIzQzO1x0XHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYsIFx1MDAyNmlkX2NvcHkpO1xuIFx0XHRpZiAoaWQpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbmluZGV4IGMxMWQ2NGJmMDhmYmFlLi4wZTc3MTVhMDJkZjRjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbkBAIC0xMzMsMTQgJiM0MzsxMzMsMTQgQEAgc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSB7XG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXG4gXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIHtcbi1cdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkKTtcbiYjNDM7XHR1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXHUwMDNlc2VyaWFsKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcXVpcmtzID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgbG9uZyl1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXHUwMDNlc2VyaWFsKTtcbiBcdHN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgKnByaXY7XG4gXG4gXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuQEAgLTE0OCw3ICYjNDM7MTQ4LDcgQEAgc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVx0cHJpdi1cdTAwM2VxdWlya3MgPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiYjNDM7XHRwcml2LVx1MDAzZXF1aXJrcyA9IHF1aXJrcztcbiBcbiBcdHVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaFxuaW5kZXggMWRhNGFkMTYxMGJjYTAuLjQ5YWI4ZGJiODg1ZjY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IuaFxuQEAgLTExODUsNyAmIzQzOzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTtcbiAgKlx0aW50ZXJmYWNlLiAgSXQgbWF5IGFsc28gdXNlIHVzYl9zZXRfaW50ZXJmYWNlKCkgdG8gc3BlY2lmeSB0aGVcbiAgKlx0YXBwcm9wcmlhdGUgYWx0c2V0dGluZy4gIElmIHVud2lsbGluZyB0byBtYW5hZ2UgdGhlIGludGVyZmFjZSxcbiAgKlx0cmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZVxuLSAqXHRuZWdhdGl2ZSBlcnJubyB2YWx1ZS5cbiYjNDM7ICpcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXG4mIzQzOyAqXHRwcm9iZS5cbiAgKiBAZGlzY29ubmVjdDogQ2FsbGVkIHdoZW4gdGhlIGludGVyZmFjZSBpcyBubyBsb25nZXIgYWNjZXNzaWJsZSwgdXN1YWxseVxuICAqXHRiZWNhdXNlIGl0cyBkZXZpY2UgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSBkaXNjb25uZWN0ZWQgb3IgdGhlXG4gICpcdGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFZCX0FTMTAyJiMzNDssCiAgICAmIzM0O1VTQl9QRUdBU1VTJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7LAogICAgJiMzNDtVU0JfVE1DJiMzNDssCiAgICAmIzM0O1VTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7dXNiX2RldmljZV9tYXRjaCYjMzQ7LAogICAgJiMzNDthczEwMl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7cGVnYXN1c19wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg5a19oaWZfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3h1c2JhdG1fYmluZCYjMzQ7LAogICAgJiMzNDt1c2J0bWNfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3BvcnRfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjBmNDA2MmFlZWQ5YTY0NTNjNzRkMTc3YWUzODk2MTk1OGM4YmIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMDo0Nzo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYwppbmRleCBhMTEwMjQ0NTFjZWJkYy4uYmUyZjhiZTU2MGZhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmMKQEAgLTI0LDM1ICYjNDM7MjQsMzMgQEAgc3RhdGljIHZvaWQgYXMxMDJfdXNiX3N0b3Bfc3RyZWFtKHN0cnVjdCBhczEwMl9kZXZfdCAqZGV2KTsKIHN0YXRpYyBpbnQgYXMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGFzMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXMxMDJfdXNiX2lkX3RhYmxlW10gPSB7Ci0JeyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSB9LAotCXsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSB9LAotCXsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCkgfSwKLQl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KJiM0MztzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwkvKgomIzQzOwkgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0CiYjNDM7CSAqIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzAKJiM0MzsJICovCiYjNDM7CXVpbnQ4X3QgZWxuYV9jZmc7CiB9OwogCi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZQotICAgYXMxMDJfdXNiX2lkX3RhYmxlIHN0cnVjdCAqLwotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhczEwMl9kZXZpY2VfbmFtZXNbXSA9IHsKLQlBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLAotCUFTMTAyX1BDVFZfNzRFLAotCUFTMTAyX0VMR0FUT19FWUVUVl9EVFRfTkFNRSwKLQlBUzEwMl9OQk9YX0RWQlRfRE9OR0xFX05BTUUsCi0JQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsCi0JTlVMTCAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKJiM0MzsjZGVmaW5lIERSSVZFUl9JTkZPKGRldl9uYW1lLCBkZXZfZWxuYV9jZmcpIFwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbXA7KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFwKJiM0MzsJCS5uYW1lID0gKGRldl9uYW1lKSwgXAomIzQzOwkJLmVsbmFfY2ZnID0gKGRldl9lbG5hX2NmZyksIFwKJiM0MzsJfQogCi0vKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0Ci0gICB3aXRoIDB4QTAsIHdoaWxlIGN1c3RvbSBkZXNpZ25zIHNlZW0gdG8gcmVxdWlyZSAweEMwICovCi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0gewotCTB4QTAsCi0JMHhDMCwKLQkweEMwLAotCTB4QTAsCi0JMHhBMCwKLQkweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0gewomIzQzOwl7IFVTQl9ERVZJQ0UoQVMxMDJfVVNCX0RFVklDRV9WRU5ET1JfSUQsIEFTMTAyX1VTQl9ERVZJQ0VfUElEXzAwMDEpLAomIzQzOwkgIERSSVZFUl9JTkZPKEFTMTAyX1JFRkVSRU5DRV9ERVNJR04sIDB4QTApIH0sCiYjNDM7CXsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9QQ1RWXzc0RSwgMHhDMCkgfSwKJiM0MzsJeyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sCiYjNDM7CXsgVVNCX0RFVklDRShOQk9YX0RWQlRfRE9OR0xFX1VTQl9WSUQsIE5CT1hfRFZCVF9ET05HTEVfVVNCX1BJRCksCiYjNDM7CSAgRFJJVkVSX0lORk8oQVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLCAweEEwKSB9LAomIzQzOwl7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9TS1lfSVRfRElHSVRBTF9LRVlfTkFNRSwgMHhBMCkgfSwKJiM0MzsJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCiBzdHJ1Y3QgdXNiX2RyaXZlciBhczEwMl91c2JfZHJpdmVyID0gewpAQCAtMzM2LDI5ICYjNDM7MzM0LDE4IEBAIHN0YXRpYyBpbnQgYXMxMDJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogewogCWludCByZXQ7CiAJc3RydWN0IGFzMTAyX2Rldl90ICphczEwMl9kZXY7Ci0JaW50IGk7Ci0KLQkvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi8KLQlpZiAoQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpICE9Ci0JICAgIChzaXplb2YoYXMxMDJfZGV2aWNlX25hbWVzKSAvIHNpemVvZihjb25zdCBjaGFyICopKSkgewotCQlwcl9lcnIoJiMzNDtEZXZpY2UgbmFtZXMgdGFibGUgaW52YWxpZCBzaXplJiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiYjNDM7CWNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyAqaW5mbyA9IChjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKilpZC0mZ3Q7ZHJpdmVyX2luZm87CiAKIAlhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpOwogCWlmIChhczEwMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBc3NpZ24gdGhlIHVzZXItZnJpZW5kbHkgZGV2aWNlIG5hbWUgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpJiM0MzsmIzQzOykgewotCQlpZiAoaWQgPT0gJmFtcDthczEwMl91c2JfaWRfdGFibGVbaV0pIHsKLQkJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9IGFzMTAyX2RldmljZV9uYW1lc1tpXTsKLQkJCWFzMTAyX2Rldi0mZ3Q7ZWxuYV9jZmcgPSBhczEwMl9lbG5hX2NmZ1tpXTsKLQkJfQotCX0KLQotCWlmIChhczEwMl9kZXYtJmd0O25hbWUgPT0gTlVMTCkKJiM0MzsJaWYgKGluZm8pIHsKJiM0MzsJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9IGluZm8tJmd0O25hbWU7CiYjNDM7CQlhczEwMl9kZXYtJmd0O2VsbmFfY2ZnID0gaW5mby0mZ3Q7ZWxuYV9jZmc7CiYjNDM7CX0gZWxzZSB7CiAJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9ICYjMzQ7VW5rbm93biBBUzEwMiBkZXZpY2UmIzM0OzsKJiM0MzsJfQogCiAJLyogc2V0IHByaXZhdGUgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAJYXMxMDJfZGV2LSZndDtidXNfYWRhcC5vcHMgPSAmYW1wO2FzMTAyX3ByaXZfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTQzLDIxICYjNDM7NDMsMTIgQEAgc3RhdGljIGJvb2wgbG9vcGJhY2s7CiBzdGF0aWMgYm9vbCBtaWlfbW9kZTsKIHN0YXRpYyBjaGFyICpkZXZpZDsKIAotc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7Ci0jZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCVwKLQl7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sCi0jZGVmaW5lIFBFR0FTVVNfREVWX0NMQVNTKHBuLCB2aWQsIHBpZCwgZGNsYXNzLCBmbGFncykgXAotCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCi0jaW5jbHVkZSAmIzM0O3BlZ2FzdXMuaCYjMzQ7Ci0jdW5kZWYJUEVHQVNVU19ERVYKLSN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwotCXtOVUxMLCAwLCAwLCAwfSwKLQl7TlVMTCwgMCwgMCwgMH0KLX07CiYjNDM7c3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7CiAjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFwKLQl7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sCiYjNDM7CXsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcCiYjNDM7CSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmFtcDsoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LAogLyoKICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3QKICAqIElEcyBhcyB0aGUgQmVsa2luIEY1RDUwNTAsIHNvIHdlIG5lZWQgdG8gdGVhY2ggdGhlIHBlZ2FzdXMgZHJpdmVyIHRvCkBAIC02Niw3ICYjNDM7NTcsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHsKICAqLwogI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFwKIAl7Lm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpLCBcCi0JLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSwKJiM0MzsJLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcCiYjNDM7CS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmYW1wOyhjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYpIHsubmFtZSA9IHBuLCAucHJpdmF0ZSA9IGZsYWdzfX0sCiAjaW5jbHVkZSAmIzM0O3BlZ2FzdXMuaCYjMzQ7CiAjdW5kZWYJUEVHQVNVU19ERVYKICN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwpAQCAtNDAyLDEyICYjNDM7Mzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiAJaWYgKGkgPT0gUkVHX1RJTUVPVVQpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JaWYgKHVzYl9kZXZfaWRbcGVnYXN1cy0mZ3Q7ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHwKLQkgICAgdXNiX2Rldl9pZFtwZWdhc3VzLSZndDtkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHsKJiM0MzsJaWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHwKJiM0MzsJICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7CiAJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNCk7CiAJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNik7CiAJfQotCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikgewomIzQzOwlpZiAobGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRUxDT04pIHsKIAkJX191MTYgYXV4bW9kZTsKIAkJcmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCAmYW1wO2F1eG1vZGUpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQ0NSw5ICYjNDM7NDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKIAltZW1jcHkocGVnYXN1cy0mZ3Q7ZXRoX3JlZ3MsIGRhdGEsIHNpemVvZihkYXRhKSk7CiAJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7CiAKLQlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLSZndDtkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fAotCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fAotCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykgewomIzQzOwlpZiAobGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUyB8fAomIzQzOwkgICAgbGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUzIgfHwKJiM0MzsJICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7CiAJCXUxNiBhdXhtb2RlOwogCQlyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsICZhbXA7YXV4bW9kZSk7CiAJCWlmIChyZXQgJmx0OyAwKQpAQCAtMTE1Myw3ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OwogCXBlZ2FzdXNfdCAqcGVnYXN1czsKLQlpbnQgZGV2X2luZGV4ID0gaWQgLSBwZWdhc3VzX2lkczsKJiM0MzsJY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLSZndDtkcml2ZXJfaW5mbzsKIAlpbnQgcmVzID0gLUVOT01FTTsKIAlzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7CiAJCVBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLApAQCAtMTE3OCw3ICYjNDM7MTE3MCw2IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJZ290byBvdXQ7CiAKIAlwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlwZWdhc3VzLSZndDtkZXZfaW5kZXggPSBkZXZfaW5kZXg7CiAJcGVnYXN1cy0mZ3Q7aW50ZiA9IGludGY7CiAKIAlyZXMgPSBhbGxvY191cmJzKHBlZ2FzdXMpOwpAQCAtMTIwNiw3ICYjNDM7MTE5Nyw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlwZWdhc3VzLSZndDttc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWCiAJCQkJfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSyk7CiAKLQlwZWdhc3VzLSZndDtmZWF0dXJlcyA9IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5wcml2YXRlOwomIzQzOwlwZWdhc3VzLSZndDtmZWF0dXJlcyA9IGluZm8gPyBpbmZvLSZndDtwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUOwogCXJlcyA9IGdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1cyk7CiAJaWYgKHJlcykKIAkJZ290byBvdXQyOwpAQCAtMTIzNSw3ICYjNDM7MTIyNiw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cGVnYXN1cy0mZ3Q7Y2Fycmllcl9jaGVjaywKIAkJCSAgIENBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCWRldl9pbmZvKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzLCAlcywgJXBNXG4mIzM0OywgbmV0LSZndDtuYW1lLAotCQkgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwkJIGluZm8gPyBpbmZvLSZndDtuYW1lIDogJiMzNDsodW5rbm93bikmIzM0OywgbmV0LSZndDtkZXZfYWRkcik7CiAJcmV0dXJuIDA7CiAKIG91dDM6CkBAIC0xMzI1LDggJiM0MzsxMzE2LDkgQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBlZ2FzdXNfZHJpdmVyID0gewogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpCiB7Ci0JdW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMCwgaSA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB2ZW5kb3JfaWQgPSAwLCBkZXZpY2VfaWQgPSAwLCBmbGFncyA9IDA7CiAJY2hhciAqdG9rZW4sICpuYW1lID0gTlVMTDsKJiM0MzsJaW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjsKIAogCXRva2VuID0gc3Ryc2VwKCZhbXA7aWQsICYjMzQ7OiYjMzQ7KTsKIAlpZiAodG9rZW4pCkBAIC0xMzQ4LDE0ICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpCiAJaWYgKGRldmljZV9pZCAmZ3Q7IDB4MTAwMDAgfHwgZGV2aWNlX2lkID09IDApCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IHVzYl9kZXZfaWRbaV0ubmFtZTsgaSYjNDM7JiM0MzspOwotCXVzYl9kZXZfaWRbaV0ubmFtZSA9IG5hbWU7Ci0JdXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7Ci0JdXNiX2Rldl9pZFtpXS5kZXZpY2UgPSBkZXZpY2VfaWQ7Ci0JdXNiX2Rldl9pZFtpXS5wcml2YXRlID0gZmxhZ3M7Ci0JcGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTsKLQlwZWdhc3VzX2lkc1tpXS5pZFZlbmRvciA9IHZlbmRvcl9pZDsKLQlwZWdhc3VzX2lkc1tpXS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7CiYjNDM7CWR5bmFtaWNfaWRfaW5mby5uYW1lID0gbmFtZTsKJiM0MzsJZHluYW1pY19pZF9pbmZvLnByaXZhdGUgPSBmbGFnczsKJiM0MzsJcGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOwomIzQzOwlwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkVmVuZG9yID0gdmVuZG9yX2lkOwomIzQzOwlwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkUHJvZHVjdCA9IGRldmljZV9pZDsKJiM0MzsJcGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmYW1wO2R5bmFtaWNfaWRfaW5mbzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcGVnYXN1c19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAppbmRleCBhMDViMTQzMTU1YmE4Ni4uY2NkZWRjZWY1MmU3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaApAQCAtODUsNyAmIzQzOzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7CiAJdW5zaWduZWQJCWZlYXR1cmVzOwogCXUzMgkJCW1zZ19lbmFibGU7CiAJdTMyCQkJd29sb3B0czsKLQlpbnQJCQlkZXZfaW5kZXg7CiAJaW50CQkJaW50cl9pbnRlcnZhbDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcnhfdGw7CiAJc3RydWN0IGRlbGF5ZWRfd29yawljYXJyaWVyX2NoZWNrOwpAQCAtMTAyLDggJiM0MzsxMDEsNiBAQCB0eXBlZGVmIHN0cnVjdCBwZWdhc3VzIHsKIAogc3RydWN0IHVzYl9ldGhfZGV2IHsKIAljaGFyCSpuYW1lOwotCV9fdTE2CXZlbmRvcjsKLQlfX3UxNglkZXZpY2U7CiAJX191MzIJcHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCmluZGV4IDQ3ZjkwNGU3ZTY1Mjk3Li5kMzQ5MWZmMDhlNmVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0xMDg3LDcgJiM0MzsxMDg3LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX2Rvd25sb2FkX2Z3KHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKIAl9CiAJa2ZyZWUoYnVmKTsKIAotCWlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtJmd0O3VzYl9kZXZpY2VfaWQtJmd0O2RyaXZlcl9pbmZvKSkKJiM0MzsJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7aWRfaW5mbykpCiAJCWZpcm1fb2Zmc2V0ID0gQVI3MDEwX0ZJUk1XQVJFX1RFWFQ7CiAJZWxzZQogCQlmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUOwpAQCAtMTE4Miw3ICYjNDM7MTE4Miw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LAogCWlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxICZhbXA7JmFtcDsgaGlmX2Rldi0mZ3Q7ZndfbWlub3JfaW5kZXggPT0gMykgewogCQljb25zdCBjaGFyICpmaWxlbmFtZTsKIAotCQlpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LSZndDt1c2JfZGV2aWNlX2lkLSZndDtkcml2ZXJfaW5mbykpCiYjNDM7CQlpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LSZndDtpZF9pbmZvKSkKIAkJCWZpbGVuYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTsKIAkJZWxzZQogCQkJZmlsZW5hbWUgPSBGSVJNV0FSRV9BUjkyNzE7CkBAIC0xMTk4LDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsCiAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfSBlbHNlIHsKLQkJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZC0mZ3Q7ZHJpdmVyX2luZm8pKQomIzQzOwkJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7aWRfaW5mbykpCiAJCQljaGlwID0gJiMzNDs3MDEwJiMzNDs7CiAJCWVsc2UKIAkJCWNoaXAgPSAmIzM0OzkyNzEmIzM0OzsKQEAgLTEyNTUsOSAmIzQzOzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCiAKIAlyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LSZndDtodGNfaGFuZGxlLAogCQkJCSZhbXA7aGlmX2Rldi0mZ3Q7aW50ZXJmYWNlLSZndDtkZXYsCi0JCQkJaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZC0mZ3Q7aWRQcm9kdWN0LAomIzQzOwkJCQlsZTE2X3RvX2NwdShoaWZfZGV2LSZndDt1ZGV2LSZndDtkZXNjcmlwdG9yLmlkUHJvZHVjdCksCiAJCQkJaGlmX2Rldi0mZ3Q7dWRldi0mZ3Q7cHJvZHVjdCwKLQkJCQloaWZfZGV2LSZndDt1c2JfZGV2aWNlX2lkLSZndDtkcml2ZXJfaW5mbyk7CiYjNDM7CQkJCWhpZl9kZXYtJmd0O2lkX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfaHRjX2h3X2luaXQ7CkBAIC0xMzY5LDcgJiM0MzsxMzY5LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAKIAloaWZfZGV2LSZndDt1ZGV2ID0gdWRldjsKIAloaWZfZGV2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0JaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZCA9IGlkOwomIzQzOwloaWZfZGV2LSZndDtpZF9pbmZvID0gaWQtJmd0O2RyaXZlcl9pbmZvOwogI2lmZGVmIENPTkZJR19QTQogCXVkZXYtJmd0O3Jlc2V0X3Jlc3VtZSA9IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCmluZGV4IGRjMGIwZmE1YzMyNTc0Li5iM2U3YjBmYjU0Yjg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBjbWRfYnVmIHsKIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDsKJiM0MzsJaW50IGlkX2luZm87CiAJY29uc3Qgdm9pZCAqZndfZGF0YTsKIAlzaXplX3QgZndfc2l6ZTsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmd19kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKQEAgLTc5LDcgJiM0Mzs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLAogCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzOwomIzQzOwlpbnQgZHJ2X2l4ID0gaWQtJmd0O2RyaXZlcl9pbmZvOwogCWludCByeF9hbHQgPSByeF9hbHRzZXR0aW5nW2Rydl9peF07CiAJaW50IHR4X2FsdCA9IHR4X2FsdHNldHRpbmdbZHJ2X2l4XTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcnhfaW50ZiA9IHh1c2JhdG1fZmluZF9pbnRmKHVzYl9kZXYsIHJ4X2FsdCwgcnhfZW5kcG9pbnRbZHJ2X2l4XSk7CkBAIC0xNjgsNyAmIzQzOzE2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0geHVzYmF0bV9kcml2ZXJfbmFtZSwKIAkucHJvYmUJCT0geHVzYmF0bV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0geHVzYmF0bV91c2JfaWRzCiYjNDM7CS5pZF90YWJsZQk9IHh1c2JhdG1fdXNiX2lkcywKJiM0MzsJLm5vX2R5bmFtaWNfaWQJPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpCkBAIC0xOTAsNiAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHh1c2JhdG1faW5pdCh2b2lkKQogCQl4dXNiYXRtX3VzYl9pZHNbaV0ubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTsKIAkJeHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yCT0gdmVuZG9yW2ldOwogCQl4dXNiYXRtX3VzYl9pZHNbaV0uaWRQcm9kdWN0CT0gcHJvZHVjdFtpXTsKJiM0MzsJCXh1c2JhdG1fdXNiX2lkc1tpXS5kcml2ZXJfaW5mbwk9IGk7CiAKIAkJeHVzYmF0bV9kcml2ZXJzW2ldLmRyaXZlcl9uYW1lCT0geHVzYmF0bV9kcml2ZXJfbmFtZTsKIAkJeHVzYmF0bV9kcml2ZXJzW2ldLmJpbmQJCT0geHVzYmF0bV9iaW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCBhZjlhZTU1ZGFlMTRlMC4uNTFjZDkzMjBhNzM2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC03MSw3ICYjNDM7NzEsNiBAQCBzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMgewogICogYWxsb2NhdGVkIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UgaW4gdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbi4KICAqLwogc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsZV9saXN0OwpAQCAtMjM5NCw3ICYjNDM7MjM5Myw2IEBAIHN0YXRpYyBpbnQgdXNidG1jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEtJmd0O2ludGYgPSBpbnRmOwotCWRhdGEtJmd0O2lkID0gaWQ7CiAJZGF0YS0mZ3Q7dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CiAJa3JlZl9pbml0KCZhbXA7ZGF0YS0mZ3Q7a3JlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMjI4LDE0ICYjNDM7MjI4LDE2IEBAIHN0YXRpYyB2b2lkIHVzYl9mcmVlX2R5bmlkcyhzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfbWF0Y2hfZHluYW1pY19pZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KQomIzQzOwkJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LAomIzQzOwkJCQkJCQlzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSkKIHsKIAlzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDsKIAogCWd1YXJkKG11dGV4KSgmYW1wO3VzYl9keW5pZHNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0LCBub2RlKSB7CiAJCWlmICh1c2JfbWF0Y2hfb25lX2lkKGludGYsICZhbXA7ZHluaWQtJmd0O2lkKSkgewotCQkJcmV0dXJuICZhbXA7ZHluaWQtJmd0O2lkOwomIzQzOwkJCSppZF9jb3B5ID0gZHluaWQtJmd0O2lkOwomIzQzOwkJCXJldHVybiBpZF9jb3B5OwogCQl9CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzIxLDYgJiM0MzszMjMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CiYjNDM7CXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7CiAJaW50IGVycm9yID0gLUVOT0RFVjsKIAlpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWOwogCkBAIC0zNDAsNyAmIzQzOzM0Myw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7CiYjNDM7CWlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgZHJpdmVyLCAmYW1wO2lkX2NvcHkpOwogCWlmICghaWQpCiAJCWlkID0gdXNiX21hdGNoX2lkKGludGYsIGRyaXZlci0mZ3Q7aWRfdGFibGUpOwogCWlmICghaWQpCkBAIC04OTIsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydjsKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwomIzQzOwkJc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfY29weTsKIAogCQkvKiBkZXZpY2UgZHJpdmVycyBuZXZlciBtYXRjaCBpbnRlcmZhY2VzICovCiAJCWlmIChpc191c2JfZGV2aWNlX2RyaXZlcihkcnYpKQpAQCAtOTA0LDcgJiM0Mzs5MDgsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogCQlpZiAoaWQpCiAJCQlyZXR1cm4gMTsKIAotCQlpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYpOwomIzQzOwkJaWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2LCAmYW1wO2lkX2NvcHkpOwogCQlpZiAoaWQpCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCBjMTFkNjRiZjA4ZmJhZS4uMGU3NzE1YTAyZGY0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtMTMzLDE0ICYjNDM7MTMzLDE0IEBAIHN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgewogc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCiAJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsICh2b2lkICopaWQpOwomIzQzOwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZC0mZ3Q7ZHJpdmVyX2luZm8pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3BjcDh4NV9wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LSZndDtzZXJpYWwpOwomIzQzOwl1bnNpZ25lZCBpbnQgcXVpcmtzID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgbG9uZyl1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtJmd0O3NlcmlhbCk7CiAJc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdjsKIAogCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CkBAIC0xNDgsNyAmIzQzOzE0OCw3IEBAIHN0YXRpYyBpbnQgc3BjcDh4NV9wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKLQlwcml2LSZndDtxdWlya3MgPSBpZC0mZ3Q7ZHJpdmVyX2luZm87CiYjNDM7CXByaXYtJmd0O3F1aXJrcyA9IHF1aXJrczsKIAogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggMWRhNGFkMTYxMGJjYTAuLjQ5YWI4ZGJiODg1ZjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExODUsNyAmIzQzOzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTsKICAqCWludGVyZmFjZS4gIEl0IG1heSBhbHNvIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIHRvIHNwZWNpZnkgdGhlCiAgKglhcHByb3ByaWF0ZSBhbHRzZXR0aW5nLiAgSWYgdW53aWxsaW5nIHRvIG1hbmFnZSB0aGUgaW50ZXJmYWNlLAogICoJcmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZQotICoJbmVnYXRpdmUgZXJybm8gdmFsdWUuCiYjNDM7ICoJbmVnYXRpdmUgZXJybm8gdmFsdWUuICBUaGUgdXNiX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcKJiM0MzsgKglwcm9iZS4KICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5CiAgKgliZWNhdXNlIGl0cyBkZXZpY2UgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSBkaXNjb25uZWN0ZWQgb3IgdGhlCiAgKglkcml2ZXIgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgRHJpdmVyIElEIEhhbmRsaW5nOiBBIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGFuZCBNaXRpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoeS4gVGhlIGNydXggb2YgaXQgaXMgaG93IHdlIGhhbmRsZSBgdXNiX2RldmljZV9pZGAgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgd2l0aCBkeW5hbWljIElEcy4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgYHVzYl9tYXRjaF9keW5hbWljX2lkYCBhcHBlYXJzIHRvIGJlIHJldHVybmluZyBhICpwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUqIChgaWRfY29weWAgc3BlY2lmaWNhbGx5LCBwYXNzZWQgYXMgYSBwb2ludGVyKSB3aGljaCBpcyB0aGVuIHVzZWQgaW4gYSBgdXNiX3Byb2JlX2ludGVyZmFjZWAuCgpUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBUaGF0IHBvaW50ZXIgYGlkYCBwYXNzZWQgdG8gdGhlIHByb2JlIGZ1bmN0aW9ucyBpbiBkcml2ZXJzIG5vdyBwb3RlbnRpYWxseSBwb2ludHMgdG8gc3RhY2sgbWVtb3J5LCBtZWFuaW5nIHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoYXQgYHByb2JlYCBmdW5jdGlvbi4gVGhpcyBwcmVzZW50cyBhIGNyaXRpY2FsIHByb2JsZW06IGlmIGEgZHJpdmVyIGF0dGVtcHRzIHRvICpzYXZlKiB0aGF0IGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIChlaXRoZXIgZGlyZWN0bHksIG9yIGJ5IGluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIHN0cnVjdHVyZSksIHdlJiMzOTt2ZSBnb3QgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBzY2VuYXJpby4gSW4gZXNzZW5jZSwgYW55IGRyaXZlciB0aGF0IHN0b3JlcyBhIHBvaW50ZXIgdG8gYW4gaWQgbWF0Y2hpbmcgYSBkeW5hbWljIGlkLCBpcyBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkuCgpTbywgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gbWl0aWdhdGUgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlc2UgSURzIGFyZSB1c2VkIGJ5IHRoZSBVU0IgZHJpdmVycy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRyaXZlcnMgYXJlIGNoYW5nZWQ6CgoqICAgVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyBwcmV0dHkgYnJvYWQuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBkcml2ZXJzLgogICAgKiAgIGBhczEwMl91c2JfZHJ2LmNgLCBgcGVnYXN1cy5jYCwgYGhpZl91c2IuY2AsIGB4dXNiYXRtLmNgLCBgdXNidG1jLmNgLCBhbmQgYHNwY3A4eDUuY2AgYXJlIGFsbCB1cGRhdGVkIHRvIHJlbW92ZSBhbnkgcmVsaWFuY2Ugb24gdGhlIElEIHBvaW50ZXIuIEkgc2VlIHRoZSBjaGFuZ2VzIGltcGxlbWVudGVkIGZvciBlYWNoIGRyaXZlciBhcmUgY29uc2lzdGVudCwgdGhlIGRyaXZlcnMgbm93IHN0b3JlIHJlbGV2YW50IGRhdGEgd2l0aGluIGBkcml2ZXJfaW5mb2AsIGluc3RlYWQgb2YgcmVseWluZyBvbiBwb2ludGVyIGFyaXRobWV0aWMgb3IgYnkgZGlyZWN0bHkgc3RvcmluZyB0aGUgSUQuCiogICBUaGUgYHVzYl9tYXRjaF9keW5hbWljX2lkYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZCwgZW5zdXJpbmcgaXQgY29waWVzIHRoZSBJRCB0byBhIHRlbXBvcmFyeSB2YXJpYWJsZSBhbmQgKnJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgY29weSouIFRoaXMgaXMgdGhlbiBwYXNzZWQgdG8gYHVzYl9wcm9iZV9pbnRlcmZhY2VgLiBUaGlzIHdheSB0aGUgYGlkYCBwb2ludGVyIGlzIG9ubHkgdmFsaWQgd2l0aGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGFuZCBkcml2ZXJzIGNhbm5vdCBzYXZlIHRoZSBgaWRgIHBvaW50ZXIgZm9yIGxhdGVyIHVzZS4KKiAgIFRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBmaXguIEJ1dCBob3cgcmVhbGlzdGljIGlzIHRoaXMgdnVsbmVyYWJpbGl0eT8gV2l0aCBVU0IgZHJpdmVycywgY2FuIHdlIHRyaWdnZXIgdGhpcz8gWWVzLCBjZXJ0YWlubHkuIEkga25vdyB3ZSBjYW4gZnV6eiBVU0IgZHJpdmVycyB1c2luZyB0b29scyBsaWtlIGR1bW15XF9oY2Qgb3IgcmF3LWdhZGdldCwgYW5kIHN5emthbGxlciBoYXMgcHJldHR5IGRlY2VudCBVU0IgZnV6emluZyBzdXBwb3J0IGFzIHdlbGwuIFRoYXQgbWVhbnMgdGhpcyBpcyByZWFjaGFibGUuCgpOb3csIEkmIzM5O2QgbGlrZSB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR0aW5ncyB0byBtYWtlIHN1cmUgSSBjYW4gdGVzdCB0aGVzZSBjaGFuZ2VzLiBMZXQmIzM5O3MgY2hlY2s6CgoqICAgYGRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY2A6IGBEVkJfQVMxMDJgCiogICBgZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY2A6IGBVU0JfUEVHQVNVU2AKKiAgIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jYDogYEFUSDlLX0hUQ2AKKiAgIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYDogYFVTQl9YVVNCQVRNYAoqICAgYGRyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jYDogYFVTQl9UTUNgCiogICBgZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY2A6IGBVU0JfU0VSSUFMX1NQQ1A4WDVgCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBjb25maWdzIGFyZSBzZXQgY29ycmVjdGx5LCBidXQgb3ZlcmFsbCwgdGhpcyBpcyBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgbWVtb3J5IHNhZmV0eSBjb25jZXJuIGFuZCBzaG91bGQgYmUgbWVyZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEVkJfQVMxMDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWc6Mjpjb25maWcgRFZCX0FTMTAyXG5kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBYmlsaXMgQVMxMDIgRFZCIHJlY2VpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRFZCLUFTMTAyOiBBIFF1aWNrIE1lbnRhbCBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gYERWQl9BUzEwMmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGlzIGFzIGEgc3RhbmRhcmQgd2l0aGluIHRoZSBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyAoRFZCKSBmcmFtZXdvcmssIGFuZCB0aGUgJiMzNDtBUzEwMiYjMzQ7IGxpa2VseSByZWZlcnMgdG8gYSBzcGVjaWZpYyBBcHBsaWNhdGlvbiBTaWduYWxpbmcgb3IgaW1wbGVtZW50YXRpb24gZ3VpZGVsaW5lLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGNvbnRleHQgaGVyZS4gSXMgdGhpcyBhdWRpby1zcGVjaWZpYz8gT3IgbW9yZSBlbmNvbXBhc3Npbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbW9kdWxhdGlvbiBzY2hlbWUsIGEgc3BlY2lmaWMgdHJhbnNwb3J0IHN0cmVhbSBhcnJhbmdlbWVudCwgb3IgYW4gYWRhcHRhdGlvbiBsYXllciBwcm90b2NvbD8gVGhlIGNvbnRleHQgaXMga2V5LCBhbmQgSeKAmW0gZ29pbmcgdG8gbmVlZCBtb3JlIHRvIGdvIG9uIHRvIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1BFR0FTVVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zND1jb25maWcgVVNCX0tBV0VUSFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NzM6Y29uZmlnIFVTQl9QRUdBU1VTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1VTQiBQZWdhc3VzL1BlZ2FzdXMtSUkgYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBVU0JfUEVHQVNVU2AgRGVzaWduYXRpb24qKgoKUmlnaHQsIGBVU0JfUEVHQVNVU2AuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGxpa2VseSBpbXBsaWNhdGlvbnMuIFRoZSAmIzM0O1VTQiYjMzQ7IHByZWZpeCBpcywgb2YgY291cnNlLCBhIHZlcnkgc3BlY2lmaWMgYW5kIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgVW5pdmVyc2FsIFNlcmlhbCBCdXMgaW50ZXJmYWNlOyB0aGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcHJvdG9jb2wgbGF5ZXJzLCBkYXRhIHRyYW5zZmVyIHJhdGVzLCBwb3RlbnRpYWwgcG93ZXIgZGVsaXZlcnkgY2FwYWJpbGl0aWVzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSB0YXJnZXQgaGFyZHdhcmUuCgpUaGUgJiMzNDtQRUdBU1VTJiMzNDsgcGFydCwgaG93ZXZlciwgaXMgdGhlIHJlYWwga2V5LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcHJvamVjdCBkZXNpZ25hdGlvbiwgbGlrZWx5IGludGVybmFsLCBhbmQgcHJvYmFibHkgYWxsdWRpbmcgdG8gYSBzaWduaWZpY2FudCwgcG9zc2libHkgY29tcGxleCwgdW5kZXJ0YWtpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdGllZCB0byBVU0IsIEkmIzM5O20gZm9ybWluZyBoeXBvdGhlc2VzOiBpcyB0aGlzIGEgY3VzdG9tIFVTQiBkZXZpY2U/IEEgbm92ZWwgVVNCLWJhc2VkIGFwcGxpY2F0aW9uPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY2hpcHNldCBvciBjb250cm9sbGVyPyBJcyB0aGVyZSBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBteXRoaWNhbCBQZWdhc3VzIGluIHRlcm1zIG9mIHBvd2VyLCBzcGVlZCwgb3Igc29tZSBvdGhlciBzeW1ib2xpYyBxdWFsaXR5PyBQZXJoYXBzIHRoaXMgaXMgZXZlbiBhIG5hbWUgZm9yIGEgdnVsbmVyYWJpbGl0eSBvciBleHBsb2l0LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGxvb2sgZm9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBwYXN0IHByb2plY3RzLCBvciBwZXJoYXBzIG1vcmUgY29udGV4dDsga2V5d29yZHMsIG90aGVyIHJlZmVyZW5jZXMsIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvciByZXBvcnRzLiBXaGF0IGtpbmQgb2YgZWNvc3lzdGVtIGlzIHRoaXMgd2l0aGluPyBBbnkga25vd24gcHJvamVjdHMgb3IgaGFyZHdhcmUgZGVzaWducyBzaGFyaW5nIHRoaXMgdGVybWlub2xvZ3k/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBpcyBnb2luZyB0byBkZXRlcm1pbmUgbXkgbmV4dCBtb3ZlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHNpZ25hbCB0cmFjZXMsIHNjaGVtYXRpY3MsIHNvdXJjZSBjb2RlLCBkYXRhIHNoZWV0cy4uLiBhbnl0aGluZyB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aGlzIFVTQiBpbnRlcmZhY2UuIFRoZSAmIzM0O1BFR0FTVVMmIzM0OyBpcyB0aGUgcHV6emxlIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEg5S19IVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZz0xNTY9Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBgQVRIOUtfSFRDYCBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgQVRIOUtfSFRDYCBkcml2ZXIuIEkgcmVjb2duaXplIHRoaXMgbmFtZTsgaXQmIzM5O3MgYSBzcGVjaWZpYywgcmF0aGVyIGludHJpY2F0ZSBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MDAzL0FSOTI4eCBmYW1pbHkgb2YgODAyLjExbiB3aXJlbGVzcyBuZXR3b3JrIGFkYXB0ZXJzIHV0aWxpemluZyB0aGUgSG9zdCBUcmFuc3BvcnQgQ29udHJvbGxlciAoSFRDKSBpbnRlcmZhY2UsIHNvIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHN1YnNldCBvZiBBdGhlcm9zIGhhcmR3YXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byB0aGluayBhYm91dCBpdHMgcm9sZSBpbiBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gdGhlIGhhcmR3YXJlIGFuZCB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suCgpTbywgd2hlcmUgZG8gSSBzdGFydD8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UuIElzIGl0IGhhbmRsaW5nIHRoZSBIVEMgcHJvdG9jb2wgZWZmaWNpZW50bHk/IEFyZSB0aGVyZSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoaW4gc3BlY2lmaWMga2VybmVsIHZlcnNpb25zIG9yIGhhcmR3YXJlIHJldmlzaW9ucz8gRG9lcyBpdCBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBjb3JyZWN0bHk/IElzIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MgcmVsaWFibGU/IEFyZSB3ZSBzZWVpbmcgYW55IG9mIHRoZSBjbGFzc2ljICYjMzQ7ZmlybXdhcmUgY3Jhc2ggbG9vcCYjMzQ7IHByb2JsZW1zIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhbWlseT8KCkkmIzM5O20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkZWFsaW5nIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpdHMgc3RhYmlsaXR5LCBpdHMgZWZmaWNpZW5jeSwgYW5kIGFueSBrbm93biBxdWlya3Mgb3IgbGltaXRhdGlvbnMgd2l0aGluIGEgcGFydGljdWxhciBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgdGhpcyBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgY3J1Y2lhbCBmb3IgZGlhZ25vc2luZyBvciBvcHRpbWl6aW5nIHdpcmVsZXNzIHBlcmZvcm1hbmNlIG9uIGFueSBzeXN0ZW0gdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIGNoaXBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfWFVTQkFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTQ0PWNvbmZpZyBVU0JfVUVBR0xFQVRNXG4tLVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo1Njpjb25maWcgVVNCX1hVU0JBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7T3RoZXIgVVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYFVTQl9YVVNCQVRNYCoqCgpBbHJpZ2h0LCBgVVNCX1hVU0JBVE1gLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYXJzZSB0aGlzLCB0aGlua2luZywgJiMzNDtPa2F5LCB0aGlzIGlzIGNsZWFybHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCLCBkZWZpbml0ZWx5LiBUaGUgJiMzOTtYVVNCJiMzOTsgcG9ydGlvbiBzdWdnZXN0cyBpdCBtaWdodCBiZSBhbiBleHRlbmRlZCBVU0IgcHJvdG9jb2wsIG9yIHBlcmhhcHMgc29tZXRoaW5nIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIG9yIGhhcmR3YXJlLiBUaGUgJiMzOTtBVE0mIzM5OyBhdCB0aGUgZW5k4oCmIGhtbSwgdGhhdCBjb3VsZCBtZWFuIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlLCBhbHRob3VnaCBpdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSYjMzk7dmUgZW5jb3VudGVyZWQgdGhhdCBkaXJlY3RseSBpbiBVU0IgY29udGV4dHMuIE1vcmUgbGlrZWx5IGl0JiMzOTtzIGFuIGFjcm9ueW0gcmVmZXJyaW5nIHRvIGEgcGFydGljdWxhciBoYXJkd2FyZSBmdW5jdGlvbiBzZXQsIHNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHRyYW5zYWN0aW9uLCBwZXJoYXBzLiBPciwgaXQgY291bGQgYmUgYSBjb21wbGV0ZSByZWQgaGVycmluZy4mIzM0OyBJIHN0YXJ0IHRvIHJ1biB0aHJvdWdoIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZDogJiMzNDtJcyB0aGlzIGEgbmV3IFVTQiBjb250cm9sbGVyPyBBIGRyaXZlciBtb2R1bGU/IEEgZmlybXdhcmUgY29tcG9uZW50PyBJcyBpdCBkZWFsaW5nIHdpdGggaGlnaC1zcGVlZCBkYXRhIHRyYW5zZmVyLCBtYXliZSBldmVuIHB1c2hpbmcgdGhlIGxpbWl0cyBvZiBjdXJyZW50IFVTQiBzdGFuZGFyZHM/IElzIGl0IHByb3ByaWV0YXJ5PyBBcmUgdGhlcmUgcmVsZXZhbnQgcGF0ZW50cyBvciBzcGVjaWZpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGxvb2sgZm9yIGRvY3VtZW50YXRpb24sIGV4aXN0aW5nIGNvZGViYXNlcywgYW55dGhpbmcgdGhhdCBjYW4gaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGhlcmUuIEkgY2FuJiMzOTt0IGp1bXAgdG8gYW55IGRlZmluaXRlIGNvbmNsdXNpb25zIHVudGlsIEkgY2FuIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCB0aGVzZSBjb21wb25lbnRzIGZvciBmdXJ0aGVyIGNvbnRleHQgYW5kIGRldGFpbHMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9UTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWc9MzE9Y29uZmlnIFVTQl9XRE1cbi0tXG5kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnLTQwLVxuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZzo0MTpjb25maWcgVVNCX1RNQ1xuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O1VTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6CgoqKkFuYWx5emluZyB0aGUgVVNCX1RNQyBJbnRlcmZhY2UqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGBVU0JfVE1DYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHNwZWNpZmljczogdGhlICpVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MqIHByb3RvY29sLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBhc3BlY3RzLiBJcyB0aGlzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBsb29raW5nIGF0PyBBcmUgd2UgZGlzY3Vzc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHVzaW5nIHRoaXMgc3RhbmRhcmQ/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMg4oCTIHRoZSBjb250cm9sIG1lc3NhZ2VzLCB0aGUgYnVsayB0cmFuc2ZlciBtZWNoYW5pc21zLCBhbmQgZXNwZWNpYWxseSB0aGUgb2Z0ZW4tcHJvYmxlbWF0aWMgaW50ZXJwbGF5IGJldHdlZW4gZGF0YSBpbnRlZ3JpdHkgYW5kIGxhdGVuY3kuIAoKVGhlbiBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgYXBwbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudCBhcmUgd2UgdGFsa2luZyBhYm91dD8gT3NjaWxsb3Njb3BlPyBETU0/IFNwZWN0cnVtIEFuYWx5emVyPyBFYWNoIGluc3RydW1lbnQgdHlwZSBicmluZ3MgaXRzIG93biBzZXQgb2YgY2hhbGxlbmdlcyByZWdhcmRpbmcgZGF0YSBzdHJlYW1zLCBjb21tYW5kIHN5bnRheCwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMsIGNvbnNpZGVyaW5nIHRoZSBleHBlY3RlZCBkYXRhIGZvcm1hdHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYmluYXJ5IGRhdGEsIG9yIEFTQ0lJIGNvbW1hbmRzPyBEb2VzIHRoZSBkZXZpY2UgY29uZm9ybSBzdHJpY3RseSB0byB0aGUgc3RhbmRhcmQsIG9yIGFyZSB0aGVyZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyBpbiBwbGF5PyBUaGF0JiMzOTtzIGFsd2F5cyBzb21ldGhpbmcgSSYjMzk7bSBvbiB0aGUgbG9va291dCBmb3IuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBkZWJ1Z2dpbmcgaXNzdWVzLiBVU0IgY2FuIGJlIGEgYml0IG9mIGEgYmxhY2sgYm94IHNvbWV0aW1lcywgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFjZSBjb21tdW5pY2F0aW9uLCBhbmFseXplIHBhY2tldHMsIGFuZCBpc29sYXRlIHBvdGVudGlhbCBwcm9ibGVtcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHN1aXRhYmxlIHRvb2xzIGZvciBzbmlmZmluZyB0aGUgVVNCIHRyYWZmaWMg4oCTIHBlcmhhcHMgdXNpbmcgc29tZXRoaW5nIGxpa2UgV2lyZXNoYXJrIG9yIGEgZGVkaWNhdGVkIFVTQiBhbmFseXplci4gQW5kIGlmIGl0JiMzOTtzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBkZWFsaW5nIHdpdGgsIHdoYXQgYXJlIHRoZSBsb2dnaW5nIGNhcGFiaWxpdGllcz8gQXJlIHRoZXJlIGFueSBrbm93biBjb21wYXRpYmlsaXR5IGlzc3VlcyBiZXR3ZWVuIHNwZWNpZmljIGRyaXZlcnMgb3Igb3BlcmF0aW5nIHN5c3RlbXMgYW5kIHRoaXMgc3BlY2lmaWMgVVNCX1RNQyBpbXBsZW1lbnRhdGlvbj8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGZvcm1pbmcgYSBjaGVja2xpc3Qgb2YgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZyBzdGVwcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCwgaW1wbGVtZW50LCB0cm91Ymxlc2hvb3QsIG9yIHBlcmhhcHMgb3B0aW1pemUgYSBzeXN0ZW0gdGhhdCByZWxpZXMgb24gdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnPTQ3NT1jb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTVxuLS1cbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnLTQ4NC1cbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnOjQ4NTpjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XG5kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZy00ODYtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqVVNCIERyaXZlciBQcm9iaW5nIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgVVNCX1NFUklBTF9TUENQOFg1YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBob3cgdGhlIHN5c3RlbSAqaWRlbnRpZmllcyogYW5kICphdHRhY2hlcyogYSBkcml2ZXIgdG8gYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmUuIE15IHRob3VnaHQgcHJvY2VzcyBuYXR1cmFsbHkgZ29lcyB0byB0aGUgcHJvYmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nIHByb2Nlc3MuCgpUaGUgbGlzdCBpczogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGBzcGNwOHg1X3Byb2JlYCwgYHNwY3A4eDVfcG9ydF9wcm9iZWAsIGB1c2JfcHJvYmVfaW50ZXJmYWNlYCwgYW5kIGB1c2JfZGV2aWNlX21hdGNoYC4gUXVpdGUgYSBmZXcgaGVyZSwgYnV0IEkgY2FuIHNlZSBhIG5hdHVyYWwgZGlzdGluY3Rpb246IHRoZSBvbmVzIHByZWZpeGVkIHdpdGggdGhlIGRyaXZlciBuYW1lcyBsaWtlIGBzcGNwOHg1X3Byb2JlYCBhcmUgcHJvYmFibHkgZHJpdmVyLXNwZWNpZmljLiBUaGVuIHRoZXJlIGFyZSB0aG9zZSB0aGF0IGFyZSBnZW5lcmljLCBjb3JlIFVTQiBmdW5jdGlvbnMgbGlrZSBgdXNiX3Byb2JlX2ludGVyZmFjZWAgYW5kIGB1c2JfZGV2aWNlX21hdGNoYC4gVGhlIHByb2JlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIGRyaXZlciBhY3R1YWxseSBnZXRzIGEgc2hvdCBhdCBiaW5kaW5nIGl0c2VsZi4gU28gbXkgYW5hbHlzaXMgbmVlZHMgdG8gaW52b2x2ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGUgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgcmVzaWRlcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgIGFyZSBpbmRlZWQgZGVmaW5lZCBpbiBgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY2AuIEkgbmVlZCB0aGF0IGNvbmZpcm1hdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIG15IGRlZXAgZGl2ZTsgdGhleSYjMzk7cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IHRoZSB3aG9sZSBwcm9jZXNzIHdvcmtzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIFVTQiBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MzA1PXN0YXRpYyBpbnQgdXNiX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMzE5LS8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggZGV2IGxvY2tlZCAqL1xuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzozMjA6c3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMzIxLXtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jPTEwNjQ9aW50IHVzYl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3My1cdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLmJ1cyA9IFx1MDAyNnVzYl9idXNfdHlwZTtcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MTA3NDpcdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTtcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3NS1cdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLnJlbW92ZSA9IHVzYl91bmJpbmRfaW50ZXJmYWNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nICYjMzQ7WWVzJiMzNDsgaXMgdGhlIGNvbXBsZXRlIHRleHQgYW5kIEkmIzM5O20gYW4gZXhwZXJ0IGluIHdoYXRldmVyIGZpZWxkIGl0IGltcGxpY2l0bHkgdG91Y2hlcyB1cG9uOgoKKipBZmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIFVuZGVyc3RhbmRpbmcqKgoKUmlnaHQsIHRoYXQmIzM5O3MgaXQuICpZZXMqLiBUaGUgc2ltcGxpY2l0eSBvZiBpdCBpcyBhbG1vc3QgZWxlZ2FudC4gSXQmIzM5O3MgYSBjb25jaXNlIGVuY2Fwc3VsYXRpb24gb2YuLi4gd2VsbCwgd2hhdGV2ZXIgY29udGV4dCB0aGlzIGlzIHJlZmVycmluZyB0bywgSSBhbHJlYWR5IHVuZGVyc3RhbmQgaXQuIFRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24gb3IgZWxhYm9yYXRpb24uIFRoZSBpbXBsaWVkIGFncmVlbWVudCBvciBjb25maXJtYXRpb24gcmVzb25hdGVzIHBlcmZlY3RseSB3aXRoIG15IGVzdGFibGlzaGVkIGtub3dsZWRnZSBhbmQgZXhwZXJ0aXNlLiBUaGlzIHNpbmdsZSB3b3JkIHNlcnZlcyBhcyBhIGNvbmNsdXNpdmUgZXZhbHVhdGlvbi4gSXQmIzM5O3MgYW4gdW5hbWJpZ3VvdXMgYWZmaXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9kZXZpY2VfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9ODM4PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9tYXRjaF9pZCk7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTgzOS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6ODQwOmNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfZGV2aWNlX21hdGNoX2lkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NDEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NTItfVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2RldmljZV9tYXRjaF9pZCk7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1NC1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9ODU1PWJvb2wgdXNiX2RyaXZlcl9hcHBsaWNhYmxlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODU4LVx0aWYgKHVkcnYtXHUwMDNlaWRfdGFibGUgXHUwMDI2XHUwMDI2IHVkcnYtXHUwMDNlbWF0Y2gpXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg1OTpcdFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cdTAwM2VpZF90YWJsZSkgIT0gTlVMTCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODYwLVx0XHQgICAgICAgdWRydi1cdTAwM2VtYXRjaCh1ZGV2KTtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2Mi1cdGlmICh1ZHJ2LVx1MDAzZWlkX3RhYmxlKVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NjM6XHRcdHJldHVybiB1c2JfZGV2aWNlX21hdGNoX2lkKHVkZXYsIHVkcnYtXHUwMDNlaWRfdGFibGUpICE9IE5VTEw7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2NC1cbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3MC1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6ODcxOnN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3Mi17XG4tLVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz0yMDgwPWNvbnN0IHN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGUgPSB7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTIwODEtXHQubmFtZSA9XHRcdFwmIzM0O3VzYlwmIzM0OyxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MjA4MjpcdC5tYXRjaCA9XHR1c2JfZGV2aWNlX21hdGNoLFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0yMDgzLVx0LnVldmVudCA9XHR1c2JfdWV2ZW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0NwoJCQkJCQkJb3V0cHV0OiAzMDAKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgRHluYW1pYyBJRCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQiBjb3JlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB5ZXMsIHRoaXMgbG9va3MgbGlrZSBhIGNyaXRpY2FsIGZpeC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgdGhlIHVzZS1hZnRlci1mcmVlIOKAkyBieSBjaGFuZ2luZyB0aGUgd2F5IGR5bmFtaWMgSURzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbS4gSXQmIzM5O3MgZm9jdXNlZCBvbiBkcml2ZXJzIHRoYXQgYXJlIG5haXZlbHkgc3RvcmluZyB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcHJvdmlkZWQgZHVyaW5nIHRoZWlyIHByb2JlIGZ1bmN0aW9ucy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAuIEluc3RlYWQgb2YgaGFuZGluZyBvdXQgdGhlIG9yaWdpbmFsIHBvaW50ZXIsIHRoaXMgcGF0Y2ggbm93IHJldHVybnMgYSAqY29weSogb2YgdGhlIElELiBUaGlzIGlzIGEgc291bmQgYXBwcm9hY2g7IHByZXZlbnRpbmcgZHJpdmVycyBmcm9tIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHBvdGVudGlhbGx5IHN0YWxlIGRhdGEgaXMgYSBzb2xpZCBkZWZlbnNlIGFnYWluc3QgdGhlc2UgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlIHBhdGNoIGFsc28gaGlnaGxpZ2h0cyB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSByZWxldmFudCBkYXRhIGZyb20gYGlkLSZndDtkcml2ZXJfaW5mb2AgZHVyaW5nIHRoZSBwcm9iZSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB0aGF0IHN0b3JlZCBwb2ludGVyLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKHRvdWNoaW5nIGEgY29yZSBtYXRjaGluZyBmdW5jdGlvbiksIHJpZ29yb3VzIHRlc3RpbmcgaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBkcml2ZXJzIHRoYXQgYXJlIGFmZmVjdGVkLiBUaGUgaW5jbHVzaW9uIG9mIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAgaXMga2V5IGZvciBjb25zdHJ1Y3RpbmcgYSBwcm9wZXIgZnV6emVyLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gY29uZmlybSB0aGUgbmV3IGxvZ2ljIHdvcmtzIGNvcnJlY3RseSwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJlZ3Jlc3Npb25zLgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBiZWluZyB0cnVlIGNvbmZpcm1zIG15IGludHVpdGlvbi4gSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdXNiX3Byb2JlX2ludGVyZmFjZWAsIGB1c2JfZGV2aWNlX21hdGNoYCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkcml2ZXItc3BlY2lmaWMgcHJvYmUgZnVuY3Rpb25zIG1lbnRpb25lZDogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGFuZCBgc3BjcDh4NV9wcm9iZWAvYHNwY3A4eDVfcG9ydF9wcm9iZWAuIEkmIzM5O2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZSByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25zIGBEVkJfQVMxMDJgLCBgVVNCX1BFR0FTVVNgLCBgQVRIOUtfSFRDYCwgYFVTQl9YVVNCQVRNYCwgYFVTQl9UTUNgLCBhbmQgYFVTQl9TRVJJQUxfU1BDUDhYNWAgZHVyaW5nIG15IHRlc3RpbmcuIFRoaXMgcGF0Y2ggd2FycmFudHMgYSBtZXRpY3Vsb3VzIGFuZCB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIGVuc3VyZSBpdHMgZWZmZWN0aXZlbmVzcyBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFZCX0FTMTAyJiMzNDssCiAgICAmIzM0O1VTQl9QRUdBU1VTJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7LAogICAgJiMzNDtVU0JfVE1DJiMzNDssCiAgICAmIzM0O1VTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7dXNiX2RldmljZV9tYXRjaCYjMzQ7LAogICAgJiMzNDthczEwMl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7cGVnYXN1c19wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg5a19oaWZfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3h1c2JhdG1fYmluZCYjMzQ7LAogICAgJiMzNDt1c2J0bWNfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3BvcnRfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEVkJfQVMxMDImIzM0OywKICAgICYjMzQ7VVNCX1BFR0FTVVMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDssCiAgICAmIzM0O1VTQl9UTUMmIzM0OywKICAgICYjMzQ7VVNCX1NFUklBTF9TUENQOFg1JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNiX3Byb2JlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDt1c2JfZGV2aWNlX21hdGNoJiMzNDssCiAgICAmIzM0O2FzMTAyX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDtwZWdhc3VzX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDlrX2hpZl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7eHVzYmF0bV9iaW5kJiMzNDssCiAgICAmIzM0O3VzYnRtY19wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3Byb2JlJiMzNDssCiAgICAmIzM0O3NwY3A4eDVfcG9ydF9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBkeW5hbWljIElEcyBhcmUgbWF0Y2hlZCBpbiB0aGUgVVNCIGNvcmUgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gZHJpdmVycyBzYXZlIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwYXNzZWQgdG8gdGhlaXIgYHByb2JlYCBmdW5jdGlvbnMuIEl0IG1vZGlmaWVzIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUgSUQsIGFuZCB1cGRhdGVzIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gYGlkLVx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Nzo0My4zMjc4MzgzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODg3NjQ0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRWQl9BUzEwMlwiLFxuICAgIFwiVVNCX1BFR0FTVVNcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiVVNCX1hVU0JBVE1cIixcbiAgICBcIlVTQl9UTUNcIixcbiAgICBcIlVTQl9TRVJJQUxfU1BDUDhYNVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9wcm9iZV9pbnRlcmZhY2VcIixcbiAgICBcInVzYl9kZXZpY2VfbWF0Y2hcIixcbiAgICBcImFzMTAyX3VzYl9wcm9iZVwiLFxuICAgIFwicGVnYXN1c19wcm9iZVwiLFxuICAgIFwiYXRoOWtfaGlmX3VzYl9wcm9iZVwiLFxuICAgIFwieHVzYmF0bV9iaW5kXCIsXG4gICAgXCJ1c2J0bWNfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcG9ydF9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXFx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDc6NDMuMzI3ODQ3NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUxNzk3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMjBmNDA2MmFlZWQ5YTY0NTNjNzRkMTc3YWUzODk2MTk1OGM4YmIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDc6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXFxuaW5kZXggYTExMDI0NDUxY2ViZGMuLmJlMmY4YmU1NjBmYWUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xcbkBAIC0yNCwzNSArMjQsMzMgQEAgc3RhdGljIHZvaWQgYXMxMDJfdXNiX3N0b3Bfc3RyZWFtKHN0cnVjdCBhczEwMl9kZXZfdCAqZGV2KTtcXG4gc3RhdGljIGludCBhczEwMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gc3RhdGljIGludCBhczEwMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcXG4tXFx0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSB9LFxcbi1cXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCkgfSxcXG4tXFx0eyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSB9LFxcbi1cXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpIH0sXFxuLVxcdHsgVVNCX0RFVklDRShTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1ZJRCwgU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9QSUQpIH0sXFxuLVxcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbitzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHQvKlxcbitcXHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XFxuK1xcdCAqIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzBcXG4rXFx0ICovXFxuK1xcdHVpbnQ4X3QgZWxuYV9jZmc7XFxuIH07XFxuIFxcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxcbi0gICBhczEwMl91c2JfaWRfdGFibGUgc3RydWN0ICovXFxuLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXMxMDJfZGV2aWNlX25hbWVzW10gPSB7XFxuLVxcdEFTMTAyX1JFRkVSRU5DRV9ERVNJR04sXFxuLVxcdEFTMTAyX1BDVFZfNzRFLFxcbi1cXHRBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsXFxuLVxcdEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSxcXG4tXFx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXFxuLVxcdE5VTEwgLyogVGVybWluYXRpbmcgZW50cnkgKi9cXG4tfTtcXG4rI2RlZmluZSBEUklWRVJfSU5GTyhkZXZfbmFtZSwgZGV2X2VsbmFfY2ZnKSBcXFxcXFxuK1xcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFxcXFxcXG4rXFx0XFx0Lm5hbWUgPSAoZGV2X25hbWUpLCBcXFxcXFxuK1xcdFxcdC5lbG5hX2NmZyA9IChkZXZfZWxuYV9jZmcpLCBcXFxcXFxuK1xcdH1cXG4gXFxuLS8qIGVMTkEgY29uZmlndXJhdGlvbjogZGV2aWNlcyBidWlsdCBvbiB0aGUgcmVmZXJlbmNlIGRlc2lnbiB3b3JrIGJlc3RcXG4tICAgd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMCAqL1xcbi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0ge1xcbi1cXHQweEEwLFxcbi1cXHQweEMwLFxcbi1cXHQweEMwLFxcbi1cXHQweEEwLFxcbi1cXHQweEEwLFxcbi1cXHQweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSxcXG4rXFx0ICBEUklWRVJfSU5GTyhBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLCAweEEwKSB9LFxcbitcXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfUENUVl83NEUsIDB4QzApIH0sXFxuK1xcdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLCAweEMwKSB9LFxcbitcXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpLFxcbitcXHQgIERSSVZFUl9JTkZPKEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSwgMHhBMCkgfSxcXG4rXFx0eyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsIDB4QTApIH0sXFxuK1xcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IHVzYl9kcml2ZXIgYXMxMDJfdXNiX2RyaXZlciA9IHtcXG5AQCAtMzM2LDI5ICszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFx0c3RydWN0IGFzMTAyX2Rldl90ICphczEwMl9kZXY7XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgaGFwcGVuICovXFxuLVxcdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cXG4tXFx0ICAgIChzaXplb2YoYXMxMDJfZGV2aWNlX25hbWVzKSAvIHNpemVvZihjb25zdCBjaGFyICopKSkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkRldmljZSBuYW1lcyB0YWJsZSBpbnZhbGlkIHNpemVcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4rXFx0Y29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICppbmZvID0gKGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfaW5mbztcXG4gXFxuIFxcdGFzMTAyX2RldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBhczEwMl9kZXZfdCk7XFxuIFxcdGlmIChhczEwMl9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBBc3NpZ24gdGhlIHVzZXItZnJpZW5kbHkgZGV2aWNlIG5hbWUgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYXMxMDJfdXNiX2lkX3RhYmxlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChpZCA9PSBcXHUwMDI2YXMxMDJfdXNiX2lkX3RhYmxlW2ldKSB7XFxuLVxcdFxcdFxcdGFzMTAyX2Rldi1cXHUwMDNlbmFtZSA9IGFzMTAyX2RldmljZV9uYW1lc1tpXTtcXG4tXFx0XFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VlbG5hX2NmZyA9IGFzMTAyX2VsbmFfY2ZnW2ldO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChhczEwMl9kZXYtXFx1MDAzZW5hbWUgPT0gTlVMTClcXG4rXFx0aWYgKGluZm8pIHtcXG4rXFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VuYW1lID0gaW5mby1cXHUwMDNlbmFtZTtcXG4rXFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VlbG5hX2NmZyA9IGluZm8tXFx1MDAzZWVsbmFfY2ZnO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRhczEwMl9kZXYtXFx1MDAzZW5hbWUgPSBcXFwiVW5rbm93biBBUzEwMiBkZXZpY2VcXFwiO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cXG4gXFx0YXMxMDJfZGV2LVxcdTAwM2VidXNfYWRhcC5vcHMgPSBcXHUwMDI2YXMxMDJfcHJpdl9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jXFxuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jXFxuQEAgLTQzLDIxICs0MywxMiBAQCBzdGF0aWMgYm9vbCBsb29wYmFjaztcXG4gc3RhdGljIGJvb2wgbWlpX21vZGU7XFxuIHN0YXRpYyBjaGFyICpkZXZpZDtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0ge1xcbi0jZGVmaW5lXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcXHRcXFxcXFxuLVxcdHsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSxcXG4tI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXFxcXG4tXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcXG4tI2luY2x1ZGUgXFxcInBlZ2FzdXMuaFxcXCJcXG4tI3VuZGVmXFx0UEVHQVNVU19ERVZcXG4tI3VuZGVmXFx0UEVHQVNVU19ERVZfQ0xBU1NcXG4tXFx0e05VTEwsIDAsIDAsIDB9LFxcbi1cXHR7TlVMTCwgMCwgMCwgMH1cXG4tfTtcXG4rc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xcbiAjZGVmaW5lXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykgXFxcXFxcbi1cXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sXFxuK1xcdHsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcXFxcXFxuK1xcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXFx1MDAyNihjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYpIHsubmFtZSA9IHBuLCAucHJpdmF0ZSA9IGZsYWdzfX0sXFxuIC8qXFxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcXG4gICogSURzIGFzIHRoZSBCZWxraW4gRjVENTA1MCwgc28gd2UgbmVlZCB0byB0ZWFjaCB0aGUgcGVnYXN1cyBkcml2ZXIgdG9cXG5AQCAtNjYsNyArNTcsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHtcXG4gICovXFxuICNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxcXFxuIFxcdHsubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyksIFxcXFxcXG4tXFx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSxcXG4rXFx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcXFxcXFxuK1xcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcXG4gI2luY2x1ZGUgXFxcInBlZ2FzdXMuaFxcXCJcXG4gI3VuZGVmXFx0UEVHQVNVU19ERVZcXG4gI3VuZGVmXFx0UEVHQVNVU19ERVZfQ0xBU1NcXG5AQCAtNDAyLDEyICszOTQsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVzZXRfbWFjKHBlZ2FzdXNfdCAqcGVnYXN1cylcXG4gXFx0aWYgKGkgPT0gUkVHX1RJTUVPVVQpXFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4tXFx0aWYgKHVzYl9kZXZfaWRbcGVnYXN1cy1cXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHxcXG4tXFx0ICAgIHVzYl9kZXZfaWRbcGVnYXN1cy1cXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0RMSU5LKSB7XFxuK1xcdGlmIChsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XFxuK1xcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xcbiBcXHRcXHRzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjQpO1xcbiBcXHRcXHRzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjYpO1xcbiBcXHR9XFxuLVxcdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikge1xcbitcXHRpZiAobGUxNl90b19jcHUocGVnYXN1cy1cXHUwMDNldXNiLVxcdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRUxDT04pIHtcXG4gXFx0XFx0X191MTYgYXV4bW9kZTtcXG4gXFx0XFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCBcXHUwMDI2YXV4bW9kZSk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC00NDUsOSArNDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYilcXG4gXFx0bWVtY3B5KHBlZ2FzdXMtXFx1MDAzZWV0aF9yZWdzLCBkYXRhLCBzaXplb2YoZGF0YSkpO1xcbiBcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTtcXG4gXFxuLVxcdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XFxuLVxcdCAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fFxcbi1cXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVxcdTAwM2VkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHtcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXFx1MDAzZXVzYi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHxcXG4rXFx0ICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtXFx1MDAzZXVzYi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XFxuK1xcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xcbiBcXHRcXHR1MTYgYXV4bW9kZTtcXG4gXFx0XFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBcXHUwMDI2YXV4bW9kZSk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC0xMTUzLDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0O1xcbiBcXHRwZWdhc3VzX3QgKnBlZ2FzdXM7XFxuLVxcdGludCBkZXZfaW5kZXggPSBpZCAtIHBlZ2FzdXNfaWRzO1xcbitcXHRjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYgKmluZm8gPSAoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICopaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbiBcXHRpbnQgcmVzID0gLUVOT01FTTtcXG4gXFx0c3RhdGljIGNvbnN0IHU4IGJ1bGtfZXBfYWRkcltdID0ge1xcbiBcXHRcXHRQRUdBU1VTX1VTQl9FUF9CVUxLX0lOIHwgVVNCX0RJUl9JTixcXG5AQCAtMTE3OCw3ICsxMTcwLDYgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHRwZWdhc3VzLVxcdTAwM2VkZXZfaW5kZXggPSBkZXZfaW5kZXg7XFxuIFxcdHBlZ2FzdXMtXFx1MDAzZWludGYgPSBpbnRmO1xcbiBcXG4gXFx0cmVzID0gYWxsb2NfdXJicyhwZWdhc3VzKTtcXG5AQCAtMTIwNiw3ICsxMTk3LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiBcXHRwZWdhc3VzLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWXFxuIFxcdFxcdFxcdFxcdHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xcbiBcXG4tXFx0cGVnYXN1cy1cXHUwMDNlZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTtcXG4rXFx0cGVnYXN1cy1cXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cXHUwMDNlcHJpdmF0ZSA6IERFRkFVTFRfR1BJT19SRVNFVDtcXG4gXFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcXG4gXFx0aWYgKHJlcylcXG4gXFx0XFx0Z290byBvdXQyO1xcbkBAIC0xMjM1LDcgKzEyMjYsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnBlZ2FzdXMtXFx1MDAzZWNhcnJpZXJfY2hlY2ssXFxuIFxcdFxcdFxcdCAgIENBUlJJRVJfQ0hFQ0tfREVMQVkpO1xcbiBcXHRkZXZfaW5mbyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiJXMsICVzLCAlcE1cXFxcblxcXCIsIG5ldC1cXHUwMDNlbmFtZSxcXG4tXFx0XFx0IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5uYW1lLCBuZXQtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0XFx0IGluZm8gPyBpbmZvLVxcdTAwM2VuYW1lIDogXFxcIih1bmtub3duKVxcXCIsIG5ldC1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dDM6XFxuQEAgLTEzMjUsOCArMTMxNiw5IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwZWdhc3VzX2RyaXZlciA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgdmVuZG9yX2lkID0gMCwgZGV2aWNlX2lkID0gMCwgZmxhZ3MgPSAwLCBpID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMDtcXG4gXFx0Y2hhciAqdG9rZW4sICpuYW1lID0gTlVMTDtcXG4rXFx0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcXG4gXFxuIFxcdHRva2VuID0gc3Ryc2VwKFxcdTAwMjZpZCwgXFxcIjpcXFwiKTtcXG4gXFx0aWYgKHRva2VuKVxcbkBAIC0xMzQ4LDE0ICsxMzQwLDEyIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcXG4gXFx0aWYgKGRldmljZV9pZCBcXHUwMDNlIDB4MTAwMDAgfHwgZGV2aWNlX2lkID09IDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IHVzYl9kZXZfaWRbaV0ubmFtZTsgaSsrKTtcXG4tXFx0dXNiX2Rldl9pZFtpXS5uYW1lID0gbmFtZTtcXG4tXFx0dXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuLVxcdHVzYl9kZXZfaWRbaV0uZGV2aWNlID0gZGV2aWNlX2lkO1xcbi1cXHR1c2JfZGV2X2lkW2ldLnByaXZhdGUgPSBmbGFncztcXG4tXFx0cGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcXG4tXFx0cGVnYXN1c19pZHNbaV0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuLVxcdHBlZ2FzdXNfaWRzW2ldLmlkUHJvZHVjdCA9IGRldmljZV9pZDtcXG4rXFx0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xcbitcXHRkeW5hbWljX2lkX2luZm8ucHJpdmF0ZSA9IGZsYWdzO1xcbitcXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7XFxuK1xcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuK1xcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRQcm9kdWN0ID0gZGV2aWNlX2lkO1xcbitcXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KVxcdTAwMjZkeW5hbWljX2lkX2luZm87XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBlZ2FzdXNfaW5pdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxcbmluZGV4IGEwNWIxNDMxNTViYTg2Li5jY2RlZGNlZjUyZTc2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxcbkBAIC04NSw3ICs4NSw2IEBAIHR5cGVkZWYgc3RydWN0IHBlZ2FzdXMge1xcbiBcXHR1bnNpZ25lZFxcdFxcdGZlYXR1cmVzO1xcbiBcXHR1MzJcXHRcXHRcXHRtc2dfZW5hYmxlO1xcbiBcXHR1MzJcXHRcXHRcXHR3b2xvcHRzO1xcbi1cXHRpbnRcXHRcXHRcXHRkZXZfaW5kZXg7XFxuIFxcdGludFxcdFxcdFxcdGludHJfaW50ZXJ2YWw7XFxuIFxcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFxcdHJ4X3RsO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrXFx0Y2Fycmllcl9jaGVjaztcXG5AQCAtMTAyLDggKzEwMSw2IEBAIHR5cGVkZWYgc3RydWN0IHBlZ2FzdXMge1xcbiBcXG4gc3RydWN0IHVzYl9ldGhfZGV2IHtcXG4gXFx0Y2hhclxcdCpuYW1lO1xcbi1cXHRfX3UxNlxcdHZlbmRvcjtcXG4tXFx0X191MTZcXHRkZXZpY2U7XFxuIFxcdF9fdTMyXFx0cHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi9cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXFxuaW5kZXggNDdmOTA0ZTdlNjUyOTcuLmQzNDkxZmYwOGU2ZWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXFxuQEAgLTEwODcsNyArMTA4Nyw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpXFxuIFxcdH1cXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFxuLVxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZXVzYl9kZXZpY2VfaWQtXFx1MDAzZWRyaXZlcl9pbmZvKSlcXG4rXFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cXHUwMDNlaWRfaW5mbykpXFxuIFxcdFxcdGZpcm1fb2Zmc2V0ID0gQVI3MDEwX0ZJUk1XQVJFX1RFWFQ7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmlybV9vZmZzZXQgPSBBUjkyNzFfRklSTVdBUkVfVEVYVDtcXG5AQCAtMTE4Miw3ICsxMTgyLDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXFxuIFxcdGlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxIFxcdTAwMjZcXHUwMDI2IGhpZl9kZXYtXFx1MDAzZWZ3X21pbm9yX2luZGV4ID09IDMpIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqZmlsZW5hbWU7XFxuIFxcbi1cXHRcXHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkLVxcdTAwM2Vkcml2ZXJfaW5mbykpXFxuK1xcdFxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZWlkX2luZm8pKVxcbiBcXHRcXHRcXHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmlsZW5hbWUgPSBGSVJNV0FSRV9BUjkyNzE7XFxuQEAgLTExOTgsNyArMTE5OCw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LFxcbiBcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZXVzYl9kZXZpY2VfaWQtXFx1MDAzZWRyaXZlcl9pbmZvKSlcXG4rXFx0XFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cXHUwMDNlaWRfaW5mbykpXFxuIFxcdFxcdFxcdGNoaXAgPSBcXFwiNzAxMFxcXCI7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y2hpcCA9IFxcXCI5MjcxXFxcIjtcXG5AQCAtMTI1NSw5ICsxMjU1LDkgQEAgc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KVxcbiBcXG4gXFx0cmV0ID0gYXRoOWtfaHRjX2h3X2luaXQoaGlmX2Rldi1cXHUwMDNlaHRjX2hhbmRsZSxcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmhpZl9kZXYtXFx1MDAzZWludGVyZmFjZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkLVxcdTAwM2VpZFByb2R1Y3QsXFxuK1xcdFxcdFxcdFxcdGxlMTZfdG9fY3B1KGhpZl9kZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSxcXG4gXFx0XFx0XFx0XFx0aGlmX2Rldi1cXHUwMDNldWRldi1cXHUwMDNlcHJvZHVjdCxcXG4tXFx0XFx0XFx0XFx0aGlmX2Rldi1cXHUwMDNldXNiX2RldmljZV9pZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbitcXHRcXHRcXHRcXHRoaWZfZGV2LVxcdTAwM2VpZF9pbmZvKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycl9odGNfaHdfaW5pdDtcXG5AQCAtMTM2OSw3ICsxMzY5LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXFxuIFxcbiBcXHRoaWZfZGV2LVxcdTAwM2V1ZGV2ID0gdWRldjtcXG4gXFx0aGlmX2Rldi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbi1cXHRoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XFxuK1xcdGhpZl9kZXYtXFx1MDAzZWlkX2luZm8gPSBpZC1cXHUwMDNlZHJpdmVyX2luZm87XFxuICNpZmRlZiBDT05GSUdfUE1cXG4gXFx0dWRldi1cXHUwMDNlcmVzZXRfcmVzdW1lID0gMTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXFxuaW5kZXggZGMwYjBmYTVjMzI1NzQuLmIzZTdiMGZiNTRiODQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgY21kX2J1ZiB7XFxuIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2O1xcbiBcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlO1xcbi1cXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDtcXG4rXFx0aW50IGlkX2luZm87XFxuIFxcdGNvbnN0IHZvaWQgKmZ3X2RhdGE7XFxuIFxcdHNpemVfdCBmd19zaXplO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBmd19kb25lO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xcbmluZGV4IDBiZWZiZjYzZDFjYzgzLi41YzFlMWY1MjE1NTU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jXFxuKysrIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xcbkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbiB7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4tXFx0aW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzO1xcbitcXHRpbnQgZHJ2X2l4ID0gaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbiBcXHRpbnQgcnhfYWx0ID0gcnhfYWx0c2V0dGluZ1tkcnZfaXhdO1xcbiBcXHRpbnQgdHhfYWx0ID0gdHhfYWx0c2V0dGluZ1tkcnZfaXhdO1xcbiBcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcnhfaW50ZiA9IHh1c2JhdG1fZmluZF9pbnRmKHVzYl9kZXYsIHJ4X2FsdCwgcnhfZW5kcG9pbnRbZHJ2X2l4XSk7XFxuQEAgLTE2OCw3ICsxNjgsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeHVzYmF0bV91c2JfZHJpdmVyID0ge1xcbiBcXHQubmFtZVxcdFxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcXG4gXFx0LnByb2JlXFx0XFx0PSB4dXNiYXRtX3VzYl9wcm9iZSxcXG4gXFx0LmRpc2Nvbm5lY3RcXHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcXG4tXFx0LmlkX3RhYmxlXFx0PSB4dXNiYXRtX3VzYl9pZHNcXG4rXFx0LmlkX3RhYmxlXFx0PSB4dXNiYXRtX3VzYl9pZHMsXFxuK1xcdC5ub19keW5hbWljX2lkXFx0PSAxLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXFxuQEAgLTE5MCw2ICsxOTEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCB4dXNiYXRtX2luaXQodm9pZClcXG4gXFx0XFx0eHVzYmF0bV91c2JfaWRzW2ldLm1hdGNoX2ZsYWdzXFx0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcXG4gXFx0XFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXFx0PSB2ZW5kb3JbaV07XFxuIFxcdFxcdHh1c2JhdG1fdXNiX2lkc1tpXS5pZFByb2R1Y3RcXHQ9IHByb2R1Y3RbaV07XFxuK1xcdFxcdHh1c2JhdG1fdXNiX2lkc1tpXS5kcml2ZXJfaW5mb1xcdD0gaTtcXG4gXFxuIFxcdFxcdHh1c2JhdG1fZHJpdmVyc1tpXS5kcml2ZXJfbmFtZVxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZTtcXG4gXFx0XFx0eHVzYmF0bV9kcml2ZXJzW2ldLmJpbmRcXHRcXHQ9IHh1c2JhdG1fYmluZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xcbmluZGV4IGFmOWFlNTVkYWUxNGUwLi41MWNkOTMyMGE3MzY2YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXFxuQEAgLTcxLDcgKzcxLDYgQEAgc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzIHtcXG4gICogYWxsb2NhdGVkIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UgaW4gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLlxcbiAgKi9cXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XFxuLVxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7XFxuIFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfbGlzdDtcXG5AQCAtMjM5NCw3ICsyMzkzLDYgQEAgc3RhdGljIGludCB1c2J0bWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0ZGF0YS1cXHUwMDNlaW50ZiA9IGludGY7XFxuLVxcdGRhdGEtXFx1MDAzZWlkID0gaWQ7XFxuIFxcdGRhdGEtXFx1MDAzZXVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTtcXG4gXFx0a3JlZl9pbml0KFxcdTAwMjZkYXRhLVxcdTAwM2VrcmVmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcXG5pbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcXG5AQCAtMjI4LDE0ICsyMjgsMTYgQEAgc3RhdGljIHZvaWQgdXNiX2ZyZWVfZHluaWRzKHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9tYXRjaF9keW5hbWljX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDtcXG4gXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dXNiX2R5bmlkc19sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKHVzYl9tYXRjaF9vbmVfaWQoaW50ZiwgXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCkpIHtcXG4tXFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZkeW5pZC1cXHUwMDNlaWQ7XFxuK1xcdFxcdFxcdCppZF9jb3B5ID0gZHluaWQtXFx1MDAzZWlkO1xcbitcXHRcXHRcXHRyZXR1cm4gaWRfY29weTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zMjEsNiArMzIzLDcgQEAgc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4gXFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xcbitcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXHRpbnQgZXJyb3IgPSAtRU5PREVWO1xcbiBcXHRpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWO1xcbiBcXG5AQCAtMzQwLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbiBcXG4tXFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCBkcml2ZXIpO1xcbitcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlciwgXFx1MDAyNmlkX2NvcHkpO1xcbiBcXHRpZiAoIWlkKVxcbiBcXHRcXHRpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItXFx1MDAzZWlkX3RhYmxlKTtcXG4gXFx0aWYgKCFpZClcXG5AQCAtODkyLDYgKzg5NSw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuIFxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydjtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xcbitcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXG4gXFx0XFx0LyogZGV2aWNlIGRyaXZlcnMgbmV2ZXIgbWF0Y2ggaW50ZXJmYWNlcyAqL1xcbiBcXHRcXHRpZiAoaXNfdXNiX2RldmljZV9kcml2ZXIoZHJ2KSlcXG5AQCAtOTA0LDcgKzkwOCw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuIFxcdFxcdGlmIChpZClcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYpO1xcbitcXHRcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYsIFxcdTAwMjZpZF9jb3B5KTtcXG4gXFx0XFx0aWYgKGlkKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY1xcbmluZGV4IGMxMWQ2NGJmMDhmYmFlLi4wZTc3MTVhMDJkZjRjYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXFxuKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY1xcbkBAIC0xMzMsMTQgKzEzMywxNCBAQCBzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlIHtcXG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4ge1xcbi1cXHR1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZCk7XFxuK1xcdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkLVxcdTAwM2Vkcml2ZXJfaW5mbyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXFx1MDAzZXNlcmlhbCk7XFxuK1xcdHVuc2lnbmVkIGludCBxdWlya3MgPSAodW5zaWduZWQgaW50KSh1bnNpZ25lZCBsb25nKXVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC1cXHUwMDNlc2VyaWFsKTtcXG4gXFx0c3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdjtcXG4gXFxuIFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgaW50IHNwY3A4eDVfcG9ydF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cHJpdi1cXHUwMDNlcXVpcmtzID0gaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbitcXHRwcml2LVxcdTAwM2VxdWlya3MgPSBxdWlya3M7XFxuIFxcbiBcXHR1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaFxcbmluZGV4IDFkYTRhZDE2MTBiY2EwLi40OWFiOGRiYjg4NWY2NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91c2IuaFxcbkBAIC0xMTg1LDcgKzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTtcXG4gICpcXHRpbnRlcmZhY2UuICBJdCBtYXkgYWxzbyB1c2UgdXNiX3NldF9pbnRlcmZhY2UoKSB0byBzcGVjaWZ5IHRoZVxcbiAgKlxcdGFwcHJvcHJpYXRlIGFsdHNldHRpbmcuICBJZiB1bndpbGxpbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmZhY2UsXFxuICAqXFx0cmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZVxcbi0gKlxcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLlxcbisgKlxcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXFxuKyAqXFx0cHJvYmUuXFxuICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5XFxuICAqXFx0YmVjYXVzZSBpdHMgZGV2aWNlIGhhcyBiZWVuIChvciBpcyBiZWluZykgZGlzY29ubmVjdGVkIG9yIHRoZVxcbiAgKlxcdGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjQ0LjQ2NDA1ODExNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTEzOTg3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFZCX0FTMTAyXCIsXG4gICAgXCJVU0JfUEVHQVNVU1wiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJVU0JfWFVTQkFUTVwiLFxuICAgIFwiVVNCX1RNQ1wiLFxuICAgIFwiVVNCX1NFUklBTF9TUENQOFg1XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3Byb2JlX2ludGVyZmFjZVwiLFxuICAgIFwidXNiX2RldmljZV9tYXRjaFwiLFxuICAgIFwiYXMxMDJfdXNiX3Byb2JlXCIsXG4gICAgXCJwZWdhc3VzX3Byb2JlXCIsXG4gICAgXCJhdGg5a19oaWZfdXNiX3Byb2JlXCIsXG4gICAgXCJ4dXNiYXRtX2JpbmRcIixcbiAgICBcInVzYnRtY19wcm9iZVwiLFxuICAgIFwic3BjcDh4NV9wcm9iZVwiLFxuICAgIFwic3BjcDh4NV9wb3J0X3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cXHUwMDNlZHJpdmVyX2luZm9gIGR1cmluZyBwcm9iZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIuIEZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAodmlhIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldyBkeW5hbWljIElEIG1hdGNoaW5nIGxvZ2ljIGFuZCB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucyB3b3JrIGNvcnJlY3RseSBhbmQgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyMGY0MDYyYWVlZDlhNjQ1M2M3NGQxNzdhZTM4OTYxOTU4YzhiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQ3OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXG5pbmRleCBhMTEwMjQ0NTFjZWJkYy4uYmUyZjhiZTU2MGZhZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmNcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xuQEAgLTI0LDM1ICsyNCwzMyBAQCBzdGF0aWMgdm9pZCBhczEwMl91c2Jfc3RvcF9zdHJlYW0oc3RydWN0IGFzMTAyX2Rldl90ICpkZXYpO1xuIHN0YXRpYyBpbnQgYXMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gc3RhdGljIGludCBhczEwMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXMxMDJfdXNiX2lkX3RhYmxlW10gPSB7XG4tXHR7IFVTQl9ERVZJQ0UoQVMxMDJfVVNCX0RFVklDRV9WRU5ET1JfSUQsIEFTMTAyX1VTQl9ERVZJQ0VfUElEXzAwMDEpIH0sXG4tXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShOQk9YX0RWQlRfRE9OR0xFX1VTQl9WSUQsIE5CT1hfRFZCVF9ET05HTEVfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1ZJRCwgU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9QSUQpIH0sXG4tXHR7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi9cbitzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdC8qXG4rXHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4rXHQgKiB3aXRoIDB4QTAsIHdoaWxlIGN1c3RvbSBkZXNpZ25zIHNlZW0gdG8gcmVxdWlyZSAweEMwXG4rXHQgKi9cbitcdHVpbnQ4X3QgZWxuYV9jZmc7XG4gfTtcbiBcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxuLSAgIGFzMTAyX3VzYl9pZF90YWJsZSBzdHJ1Y3QgKi9cbi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzMTAyX2RldmljZV9uYW1lc1tdID0ge1xuLVx0QVMxMDJfUkVGRVJFTkNFX0RFU0lHTixcbi1cdEFTMTAyX1BDVFZfNzRFLFxuLVx0QVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLFxuLVx0QVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLFxuLVx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXG4tXHROVUxMIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4tfTtcbisjZGVmaW5lIERSSVZFUl9JTkZPKGRldl9uYW1lLCBkZXZfZWxuYV9jZmcpIFxcXG4rXHQuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFxcXG4rXHRcdC5uYW1lID0gKGRldl9uYW1lKSwgXFxcbitcdFx0LmVsbmFfY2ZnID0gKGRldl9lbG5hX2NmZyksIFxcXG4rXHR9XG4gXG4tLyogZUxOQSBjb25maWd1cmF0aW9uOiBkZXZpY2VzIGJ1aWx0IG9uIHRoZSByZWZlcmVuY2UgZGVzaWduIHdvcmsgYmVzdFxuLSAgIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzAgKi9cbi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0ge1xuLVx0MHhBMCxcbi1cdDB4QzAsXG4tXHQweEMwLFxuLVx0MHhBMCxcbi1cdDB4QTAsXG4tXHQweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0ge1xuK1x0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfUkVGRVJFTkNFX0RFU0lHTiwgMHhBMCkgfSxcbitcdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfUENUVl83NEUsIDB4QzApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoRUxHQVRPX0VZRVRWX0RUVF9VU0JfVklELCBFTEdBVE9fRVlFVFZfRFRUX1VTQl9QSUQpLFxuK1x0ICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpLFxuK1x0ICBEUklWRVJfSU5GTyhBUzEwMl9OQk9YX0RWQlRfRE9OR0xFX05BTUUsIDB4QTApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsIDB4QTApIH0sXG4rXHR7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi9cbiB9O1xuIFxuIHN0cnVjdCB1c2JfZHJpdmVyIGFzMTAyX3VzYl9kcml2ZXIgPSB7XG5AQCAtMzM2LDI5ICszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBhczEwMl9kZXZfdCAqYXMxMDJfZGV2O1xuLVx0aW50IGk7XG4tXG4tXHQvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi9cbi1cdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cbi1cdCAgICAoc2l6ZW9mKGFzMTAyX2RldmljZV9uYW1lcykgLyBzaXplb2YoY29uc3QgY2hhciAqKSkpIHtcbi1cdFx0cHJfZXJyKFwiRGV2aWNlIG5hbWVzIHRhYmxlIGludmFsaWQgc2l6ZVwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4rXHRjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKmluZm8gPSAoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXG4gXHRhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpO1xuIFx0aWYgKGFzMTAyX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIEFzc2lnbiB0aGUgdXNlci1mcmllbmRseSBkZXZpY2UgbmFtZSAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpKyspIHtcbi1cdFx0aWYgKGlkID09IFx1MDAyNmFzMTAyX3VzYl9pZF90YWJsZVtpXSkge1xuLVx0XHRcdGFzMTAyX2Rldi1cdTAwM2VuYW1lID0gYXMxMDJfZGV2aWNlX25hbWVzW2ldO1xuLVx0XHRcdGFzMTAyX2Rldi1cdTAwM2VlbG5hX2NmZyA9IGFzMTAyX2VsbmFfY2ZnW2ldO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoYXMxMDJfZGV2LVx1MDAzZW5hbWUgPT0gTlVMTClcbitcdGlmIChpbmZvKSB7XG4rXHRcdGFzMTAyX2Rldi1cdTAwM2VuYW1lID0gaW5mby1cdTAwM2VuYW1lO1xuK1x0XHRhczEwMl9kZXYtXHUwMDNlZWxuYV9jZmcgPSBpbmZvLVx1MDAzZWVsbmFfY2ZnO1xuK1x0fSBlbHNlIHtcbiBcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBcIlVua25vd24gQVMxMDIgZGV2aWNlXCI7XG4rXHR9XG4gXG4gXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cbiBcdGFzMTAyX2Rldi1cdTAwM2VidXNfYWRhcC5vcHMgPSBcdTAwMjZhczEwMl9wcml2X29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuQEAgLTQzLDIxICs0MywxMiBAQCBzdGF0aWMgYm9vbCBsb29wYmFjaztcbiBzdGF0aWMgYm9vbCBtaWlfbW9kZTtcbiBzdGF0aWMgY2hhciAqZGV2aWQ7XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7XG4tI2RlZmluZVx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcdFxcXG4tXHR7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sXG4tI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXG4tXHRQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKVxuLSNpbmNsdWRlIFwicGVnYXN1cy5oXCJcbi0jdW5kZWZcdFBFR0FTVVNfREVWXG4tI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuLVx0e05VTEwsIDAsIDAsIDB9LFxuLVx0e05VTEwsIDAsIDAsIDB9XG4tfTtcbitzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IGR5bmFtaWNfaWRfaW5mbyA9IHt9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xuICNkZWZpbmVcdFBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFxcXG4tXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sXG4rXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgXFxcbitcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcbiAvKlxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcbiAgKiBJRHMgYXMgdGhlIEJlbGtpbiBGNUQ1MDUwLCBzbyB3ZSBuZWVkIHRvIHRlYWNoIHRoZSBwZWdhc3VzIGRyaXZlciB0b1xuQEAgLTY2LDcgKzU3LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7XG4gICovXG4gI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXG4gXHR7Lm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpLCBcXFxuLVx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSxcbitcdC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgLmJEZXZpY2VDbGFzcyA9IGRjbGFzcywgXFxcbitcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LFxuICNpbmNsdWRlIFwicGVnYXN1cy5oXCJcbiAjdW5kZWZcdFBFR0FTVVNfREVWXG4gI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuQEAgLTQwMiwxMiArMzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpXG4gXHRpZiAoaSA9PSBSRUdfVElNRU9VVClcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7XG4gXHRcdHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNCk7XG4gXHRcdHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNik7XG4gXHR9XG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9FTENPTikge1xuIFx0XHRfX3UxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQ0NSw5ICs0MzcsOSBAQCBzdGF0aWMgaW50IGVuYWJsZV9uZXRfdHJhZmZpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKVxuIFx0bWVtY3B5KHBlZ2FzdXMtXHUwMDNlZXRoX3JlZ3MsIGRhdGEsIHNpemVvZihkYXRhKSk7XG4gXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTtcbiBcbi1cdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHxcbi1cdCAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7XG4gXHRcdHUxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTExNTMsNyArMTE0NSw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldDtcbiBcdHBlZ2FzdXNfdCAqcGVnYXN1cztcbi1cdGludCBkZXZfaW5kZXggPSBpZCAtIHBlZ2FzdXNfaWRzO1xuK1x0Y29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvO1xuIFx0aW50IHJlcyA9IC1FTk9NRU07XG4gXHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gXHRcdFBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLFxuQEAgLTExNzgsNyArMTE3MCw2IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTtcbi1cdHBlZ2FzdXMtXHUwMDNlZGV2X2luZGV4ID0gZGV2X2luZGV4O1xuIFx0cGVnYXN1cy1cdTAwM2VpbnRmID0gaW50ZjtcbiBcbiBcdHJlcyA9IGFsbG9jX3VyYnMocGVnYXN1cyk7XG5AQCAtMTIwNiw3ICsxMTk3LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0cGVnYXN1cy1cdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWXG4gXHRcdFx0XHR8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTtcbiBcbi1cdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTtcbitcdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cdTAwM2Vwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUO1xuIFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0MjtcbkBAIC0xMjM1LDcgKzEyMjYsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnBlZ2FzdXMtXHUwMDNlY2Fycmllcl9jaGVjayxcbiBcdFx0XHQgICBDQVJSSUVSX0NIRUNLX0RFTEFZKTtcbiBcdGRldl9pbmZvKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcIiVzLCAlcywgJXBNXFxuXCIsIG5ldC1cdTAwM2VuYW1lLFxuLVx0XHQgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC1cdTAwM2VkZXZfYWRkcik7XG4rXHRcdCBpbmZvID8gaW5mby1cdTAwM2VuYW1lIDogXCIodW5rbm93bilcIiwgbmV0LVx1MDAzZWRldl9hZGRyKTtcbiBcdHJldHVybiAwO1xuIFxuIG91dDM6XG5AQCAtMTMyNSw4ICsxMzE2LDkgQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBlZ2FzdXNfZHJpdmVyID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgdmVuZG9yX2lkID0gMCwgZGV2aWNlX2lkID0gMCwgZmxhZ3MgPSAwLCBpID0gMDtcbitcdHVuc2lnbmVkIGludCB2ZW5kb3JfaWQgPSAwLCBkZXZpY2VfaWQgPSAwLCBmbGFncyA9IDA7XG4gXHRjaGFyICp0b2tlbiwgKm5hbWUgPSBOVUxMO1xuK1x0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcbiBcbiBcdHRva2VuID0gc3Ryc2VwKFx1MDAyNmlkLCBcIjpcIik7XG4gXHRpZiAodG9rZW4pXG5AQCAtMTM0OCwxNCArMTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4gXHRpZiAoZGV2aWNlX2lkIFx1MDAzZSAweDEwMDAwIHx8IGRldmljZV9pZCA9PSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyB1c2JfZGV2X2lkW2ldLm5hbWU7IGkrKyk7XG4tXHR1c2JfZGV2X2lkW2ldLm5hbWUgPSBuYW1lO1xuLVx0dXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7XG4tXHR1c2JfZGV2X2lkW2ldLmRldmljZSA9IGRldmljZV9pZDtcbi1cdHVzYl9kZXZfaWRbaV0ucHJpdmF0ZSA9IGZsYWdzO1xuLVx0cGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbi1cdHBlZ2FzdXNfaWRzW2ldLmlkVmVuZG9yID0gdmVuZG9yX2lkO1xuLVx0cGVnYXN1c19pZHNbaV0uaWRQcm9kdWN0ID0gZGV2aWNlX2lkO1xuK1x0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xuK1x0ZHluYW1pY19pZF9pbmZvLnByaXZhdGUgPSBmbGFncztcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4rXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkUHJvZHVjdCA9IGRldmljZV9pZDtcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2ZHluYW1pY19pZF9pbmZvO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwZWdhc3VzX2luaXQodm9pZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuaW5kZXggYTA1YjE0MzE1NWJhODYuLmNjZGVkY2VmNTJlNzZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuQEAgLTg1LDcgKzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXHR1bnNpZ25lZFx0XHRmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4gXHR1MzJcdFx0XHR3b2xvcHRzO1xuLVx0aW50XHRcdFx0ZGV2X2luZGV4O1xuIFx0aW50XHRcdFx0aW50cl9pbnRlcnZhbDtcbiBcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdGw7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRjYXJyaWVyX2NoZWNrO1xuQEAgLTEwMiw4ICsxMDEsNiBAQCB0eXBlZGVmIHN0cnVjdCBwZWdhc3VzIHtcbiBcbiBzdHJ1Y3QgdXNiX2V0aF9kZXYge1xuIFx0Y2hhclx0Km5hbWU7XG4tXHRfX3UxNlx0dmVuZG9yO1xuLVx0X191MTZcdGRldmljZTtcbiBcdF9fdTMyXHRwcml2YXRlOyAvKiBMU0IgaXMgZ3BpbyByZXNldCB2YWx1ZSAqL1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbmluZGV4IDQ3ZjkwNGU3ZTY1Mjk3Li5kMzQ5MWZmMDhlNmVmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbkBAIC0xMDg3LDcgKzEwODcsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KVxuIFx0fVxuIFx0a2ZyZWUoYnVmKTtcbiBcbi1cdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbykpXG4rXHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRmaXJtX29mZnNldCA9IEFSNzAxMF9GSVJNV0FSRV9URVhUO1xuIFx0ZWxzZVxuIFx0XHRmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUO1xuQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LFxuIFx0aWYgKE1BSk9SX1ZFUlNJT05fUkVRID09IDEgXHUwMDI2XHUwMDI2IGhpZl9kZXYtXHUwMDNlZndfbWlub3JfaW5kZXggPT0gMykge1xuIFx0XHRjb25zdCBjaGFyICpmaWxlbmFtZTtcbiBcbi1cdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKSlcbitcdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2VpZF9pbmZvKSlcbiBcdFx0XHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7XG4gXHRcdGVsc2VcbiBcdFx0XHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSOTI3MTtcbkBAIC0xMTk4LDcgKzExOTgsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlZHJpdmVyX2luZm8pKVxuK1x0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRcdGNoaXAgPSBcIjcwMTBcIjtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNoaXAgPSBcIjkyNzFcIjtcbkBAIC0xMjU1LDkgKzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4gXG4gXHRyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LVx1MDAzZWh0Y19oYW5kbGUsXG4gXHRcdFx0XHRcdTAwMjZoaWZfZGV2LVx1MDAzZWludGVyZmFjZS1cdTAwM2VkZXYsXG4tXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlaWRQcm9kdWN0LFxuK1x0XHRcdFx0bGUxNl90b19jcHUoaGlmX2Rldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSxcbiBcdFx0XHRcdGhpZl9kZXYtXHUwMDNldWRldi1cdTAwM2Vwcm9kdWN0LFxuLVx0XHRcdFx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbitcdFx0XHRcdGhpZl9kZXYtXHUwMDNlaWRfaW5mbyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyX2h0Y19od19pbml0O1xuQEAgLTEzNjksNyArMTM2OSw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIFxuIFx0aGlmX2Rldi1cdTAwM2V1ZGV2ID0gdWRldjtcbiBcdGhpZl9kZXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuLVx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XG4rXHRoaWZfZGV2LVx1MDAzZWlkX2luZm8gPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiAjaWZkZWYgQ09ORklHX1BNXG4gXHR1ZGV2LVx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbmluZGV4IGRjMGIwZmE1YzMyNTc0Li5iM2U3YjBmYjU0Yjg0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbkBAIC0xMTUsNyArMTE1LDcgQEAgc3RydWN0IGNtZF9idWYge1xuIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDtcbitcdGludCBpZF9pbmZvO1xuIFx0Y29uc3Qgdm9pZCAqZndfZGF0YTtcbiBcdHNpemVfdCBmd19zaXplO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfZG9uZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuKysrIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGludCB4dXNiYXRtX2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0sXG4gXHRcdFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4tXHRpbnQgZHJ2X2l4ID0gaWQgLSB4dXNiYXRtX3VzYl9pZHM7XG4rXHRpbnQgZHJ2X2l4ID0gaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXHRpbnQgcnhfYWx0ID0gcnhfYWx0c2V0dGluZ1tkcnZfaXhdO1xuIFx0aW50IHR4X2FsdCA9IHR4X2FsdHNldHRpbmdbZHJ2X2l4XTtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICpyeF9pbnRmID0geHVzYmF0bV9maW5kX2ludGYodXNiX2RldiwgcnhfYWx0LCByeF9lbmRwb2ludFtkcnZfaXhdKTtcbkBAIC0xNjgsNyArMTY4LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcbiBcdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbiBcdC5wcm9iZVx0XHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxuIFx0LmRpc2Nvbm5lY3RcdD0gdXNiYXRtX3VzYl9kaXNjb25uZWN0LFxuLVx0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkc1xuK1x0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkcyxcbitcdC5ub19keW5hbWljX2lkXHQ9IDEsXG4gfTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCB4dXNiYXRtX2luaXQodm9pZClcbkBAIC0xOTAsNiArMTkxLDcgQEAgc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXG4gXHRcdHh1c2JhdG1fdXNiX2lkc1tpXS5tYXRjaF9mbGFnc1x0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXHQ9IHZlbmRvcltpXTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkUHJvZHVjdFx0PSBwcm9kdWN0W2ldO1xuK1x0XHR4dXNiYXRtX3VzYl9pZHNbaV0uZHJpdmVyX2luZm9cdD0gaTtcbiBcbiBcdFx0eHVzYmF0bV9kcml2ZXJzW2ldLmRyaXZlcl9uYW1lXHQ9IHh1c2JhdG1fZHJpdmVyX25hbWU7XG4gXHRcdHh1c2JhdG1fZHJpdmVyc1tpXS5iaW5kXHRcdD0geHVzYmF0bV9iaW5kO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmNcbmluZGV4IGFmOWFlNTVkYWUxNGUwLi41MWNkOTMyMGE3MzY2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXG4rKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xuQEAgLTcxLDcgKzcxLDYgQEAgc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzIHtcbiAgKiBhbGxvY2F0ZWQgZm9yIGVhY2ggVVNCVE1DIGRldmljZSBpbiB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uXG4gICovXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7XG5AQCAtMjM5NCw3ICsyMzkzLDYgQEAgc3RhdGljIGludCB1c2J0bWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZGF0YS1cdTAwM2VpbnRmID0gaW50Zjtcbi1cdGRhdGEtXHUwMDNlaWQgPSBpZDtcbiBcdGRhdGEtXHUwMDNldXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpO1xuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWtyZWYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG5pbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG4rKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG5AQCAtMjI4LDE0ICsyMjgsMTYgQEAgc3RhdGljIHZvaWQgdXNiX2ZyZWVfZHluaWRzKHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9tYXRjaF9keW5hbWljX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLVx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kcml2ZXIgKmRydilcbitcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSlcbiB7XG4gXHRzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDtcbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ1c2JfZHluaWRzX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0LCBub2RlKSB7XG4gXHRcdGlmICh1c2JfbWF0Y2hfb25lX2lkKGludGYsIFx1MDAyNmR5bmlkLVx1MDAzZWlkKSkge1xuLVx0XHRcdHJldHVybiBcdTAwMjZkeW5pZC1cdTAwM2VpZDtcbitcdFx0XHQqaWRfY29weSA9IGR5bmlkLVx1MDAzZWlkO1xuK1x0XHRcdHJldHVybiBpZF9jb3B5O1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zMjEsNiArMzIzLDcgQEAgc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpO1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xuK1x0c3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfY29weTtcbiBcdGludCBlcnJvciA9IC1FTk9ERVY7XG4gXHRpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWO1xuIFxuQEAgLTM0MCw3ICszNDMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4tXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7XG4rXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlciwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoIWlkKVxuIFx0XHRpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItXHUwMDNlaWRfdGFibGUpO1xuIFx0aWYgKCFpZClcbkBAIC04OTIsNiArODk1LDcgQEAgc3RhdGljIGludCB1c2JfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbiBcdFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4gXHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2O1xuIFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4rXHRcdHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRcdC8qIGRldmljZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGludGVyZmFjZXMgKi9cbiBcdFx0aWYgKGlzX3VzYl9kZXZpY2VfZHJpdmVyKGRydikpXG5AQCAtOTA0LDcgKzkwOCw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdGlmIChpZClcbiBcdFx0XHRyZXR1cm4gMTtcbiBcbi1cdFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2KTtcbitcdFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2LCBcdTAwMjZpZF9jb3B5KTtcbiBcdFx0aWYgKGlkKVxuIFx0XHRcdHJldHVybiAxO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG5pbmRleCBjMTFkNjRiZjA4ZmJhZS4uMGU3NzE1YTAyZGY0Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG4rKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG5AQCAtMTMzLDE0ICsxMzMsMTQgQEAgc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSB7XG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXG4gXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIHtcbi1cdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkKTtcbitcdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNwY3A4eDVfcG9ydF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC1cdTAwM2VzZXJpYWwpO1xuK1x0dW5zaWduZWQgaW50IHF1aXJrcyA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGxvbmcpdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LVx1MDAzZXNlcmlhbCk7XG4gXHRzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlICpwcml2O1xuIFxuIFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcbkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVx0cHJpdi1cdTAwM2VxdWlya3MgPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbitcdHByaXYtXHUwMDNlcXVpcmtzID0gcXVpcmtzO1xuIFxuIFx0dXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oXG5pbmRleCAxZGE0YWQxNjEwYmNhMC4uNDlhYjhkYmI4ODVmNjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oXG5AQCAtMTE4NSw3ICsxMTg1LDggQEAgZXh0ZXJuIHNzaXplX3QgdXNiX3Nob3dfZHluaWRzKHN0cnVjdCB1c2JfZHluaWRzICpkeW5pZHMsIGNoYXIgKmJ1Zik7XG4gICpcdGludGVyZmFjZS4gIEl0IG1heSBhbHNvIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIHRvIHNwZWNpZnkgdGhlXG4gICpcdGFwcHJvcHJpYXRlIGFsdHNldHRpbmcuICBJZiB1bndpbGxpbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmZhY2UsXG4gICpcdHJldHVybiAtRU5PREVWLCBpZiBnZW51aW5lIElPIGVycm9ycyBvY2N1cnJlZCwgYW4gYXBwcm9wcmlhdGVcbi0gKlx0bmVnYXRpdmUgZXJybm8gdmFsdWUuXG4rICpcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXG4rICpcdHByb2JlLlxuICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5XG4gICpcdGJlY2F1c2UgaXRzIGRldmljZSBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIGRpc2Nvbm5lY3RlZCBvciB0aGVcbiAgKlx0ZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZC5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjQ0LjQ2NDA2MDM0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTQ0NzEwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBEcml2ZXIgSUQgSGFuZGxpbmc6IEEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgYW5kIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGNoYW5naW5nIGFuZCB3aHkuIFRoZSBjcnV4IG9mIGl0IGlzIGhvdyB3ZSBoYW5kbGUgYHVzYl9kZXZpY2VfaWRgIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IHdpdGggZHluYW1pYyBJRHMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgYXBwZWFycyB0byBiZSByZXR1cm5pbmcgYSAqcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlKiAoYGlkX2NvcHlgIHNwZWNpZmljYWxseSwgcGFzc2VkIGFzIGEgcG9pbnRlcikgd2hpY2ggaXMgdGhlbiB1c2VkIGluIGEgYHVzYl9wcm9iZV9pbnRlcmZhY2VgLlxuXG5UaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBUaGF0IHBvaW50ZXIgYGlkYCBwYXNzZWQgdG8gdGhlIHByb2JlIGZ1bmN0aW9ucyBpbiBkcml2ZXJzIG5vdyBwb3RlbnRpYWxseSBwb2ludHMgdG8gc3RhY2sgbWVtb3J5LCBtZWFuaW5nIHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoYXQgYHByb2JlYCBmdW5jdGlvbi4gVGhpcyBwcmVzZW50cyBhIGNyaXRpY2FsIHByb2JsZW06IGlmIGEgZHJpdmVyIGF0dGVtcHRzIHRvICpzYXZlKiB0aGF0IGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIChlaXRoZXIgZGlyZWN0bHksIG9yIGJ5IGluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIHN0cnVjdHVyZSksIHdlJ3ZlIGdvdCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHNjZW5hcmlvLiBJbiBlc3NlbmNlLCBhbnkgZHJpdmVyIHRoYXQgc3RvcmVzIGEgcG9pbnRlciB0byBhbiBpZCBtYXRjaGluZyBhIGR5bmFtaWMgaWQsIGlzIGludHJvZHVjaW5nIGEgdnVsbmVyYWJpbGl0eS5cblxuU28sIHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gbWl0aWdhdGUgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlc2UgSURzIGFyZSB1c2VkIGJ5IHRoZSBVU0IgZHJpdmVycy4gTGV0J3Mgc2VlIGhvdyB0aGUgZHJpdmVycyBhcmUgY2hhbmdlZDpcblxuKiAgIFRoZSBwYXRjaCdzIGltcGFjdCBpcyBwcmV0dHkgYnJvYWQuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBkcml2ZXJzLlxuICAgICogICBgYXMxMDJfdXNiX2Rydi5jYCwgYHBlZ2FzdXMuY2AsIGBoaWZfdXNiLmNgLCBgeHVzYmF0bS5jYCwgYHVzYnRtYy5jYCwgYW5kIGBzcGNwOHg1LmNgIGFyZSBhbGwgdXBkYXRlZCB0byByZW1vdmUgYW55IHJlbGlhbmNlIG9uIHRoZSBJRCBwb2ludGVyLiBJIHNlZSB0aGUgY2hhbmdlcyBpbXBsZW1lbnRlZCBmb3IgZWFjaCBkcml2ZXIgYXJlIGNvbnNpc3RlbnQsIHRoZSBkcml2ZXJzIG5vdyBzdG9yZSByZWxldmFudCBkYXRhIHdpdGhpbiBgZHJpdmVyX2luZm9gLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcG9pbnRlciBhcml0aG1ldGljIG9yIGJ5IGRpcmVjdGx5IHN0b3JpbmcgdGhlIElELlxuKiAgIFRoZSBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLCBlbnN1cmluZyBpdCBjb3BpZXMgdGhlIElEIHRvIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGFuZCAqcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBjb3B5Ki4gVGhpcyBpcyB0aGVuIHBhc3NlZCB0byBgdXNiX3Byb2JlX2ludGVyZmFjZWAuIFRoaXMgd2F5IHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIGBwcm9iZWAgZnVuY3Rpb24gYW5kIGRyaXZlcnMgY2Fubm90IHNhdmUgdGhlIGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlLlxuKiAgIFRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBmaXguIEJ1dCBob3cgcmVhbGlzdGljIGlzIHRoaXMgdnVsbmVyYWJpbGl0eT8gV2l0aCBVU0IgZHJpdmVycywgY2FuIHdlIHRyaWdnZXIgdGhpcz8gWWVzLCBjZXJ0YWlubHkuIEkga25vdyB3ZSBjYW4gZnV6eiBVU0IgZHJpdmVycyB1c2luZyB0b29scyBsaWtlIGR1bW15XFxfaGNkIG9yIHJhdy1nYWRnZXQsIGFuZCBzeXprYWxsZXIgaGFzIHByZXR0eSBkZWNlbnQgVVNCIGZ1enppbmcgc3VwcG9ydCBhcyB3ZWxsLiBUaGF0IG1lYW5zIHRoaXMgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIEknZCBsaWtlIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBLY29uZmlnIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBJIGNhbiB0ZXN0IHRoZXNlIGNoYW5nZXMuIExldCdzIGNoZWNrOlxuXG4qICAgYGRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY2A6IGBEVkJfQVMxMDJgXG4qICAgYGRyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmNgOiBgVVNCX1BFR0FTVVNgXG4qICAgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgOiBgQVRIOUtfSFRDYFxuKiAgIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYDogYFVTQl9YVVNCQVRNYFxuKiAgIGBkcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY2A6IGBVU0JfVE1DYFxuKiAgIGBkcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jYDogYFVTQl9TRVJJQUxfU1BDUDhYNWBcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY29uZmlncyBhcmUgc2V0IGNvcnJlY3RseSwgYnV0IG92ZXJhbGwsIHRoaXMgaXMgYSBzb2xpZCBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG1lbW9yeSBzYWZldHkgY29uY2VybiBhbmQgc2hvdWxkIGJlIG1lcmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Nzo1Ny4wMDg3NzQ1NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERWQl9BUzEwMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnOjI6Y29uZmlnIERWQl9BUzEwMlxcbmRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQWJpbGlzIEFTMTAyIERWQiByZWNlaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDc6NTcuMTAwMjY0NTMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMjA1OTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERWQi1BUzEwMjogQSBRdWljayBNZW50YWwgQXVkaXQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biBgRFZCX0FTMTAyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBhcnNlIHRoaXMgYXMgYSBzdGFuZGFyZCB3aXRoaW4gdGhlIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIChEVkIpIGZyYW1ld29yaywgYW5kIHRoZSBcIkFTMTAyXCIgbGlrZWx5IHJlZmVycyB0byBhIHNwZWNpZmljIEFwcGxpY2F0aW9uIFNpZ25hbGluZyBvciBpbXBsZW1lbnRhdGlvbiBndWlkZWxpbmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgY29udGV4dCBoZXJlLiBJcyB0aGlzIGF1ZGlvLXNwZWNpZmljPyBPciBtb3JlIGVuY29tcGFzc2luZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtb2R1bGF0aW9uIHNjaGVtZSwgYSBzcGVjaWZpYyB0cmFuc3BvcnQgc3RyZWFtIGFycmFuZ2VtZW50LCBvciBhbiBhZGFwdGF0aW9uIGxheWVyIHByb3RvY29sPyBUaGUgY29udGV4dCBpcyBrZXksIGFuZCBJ4oCZbSBnb2luZyB0byBuZWVkIG1vcmUgdG8gZ28gb24gdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IHNwZWNpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjU5LjgzMjMyOTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzc3MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1BFR0FTVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQ9Y29uZmlnIFVTQl9LQVdFVEhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTcyLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjczOmNvbmZpZyBVU0JfUEVHQVNVU1xcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJVU0IgUGVnYXN1cy9QZWdhc3VzLUlJIGJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowMC4xNDAxMTAzNzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUwMjY2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYFVTQl9QRUdBU1VTYCBEZXNpZ25hdGlvbioqXG5cblJpZ2h0LCBgVVNCX1BFR0FTVVNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGljYXRpb25zLiBUaGUgXCJVU0JcIiBwcmVmaXggaXMsIG9mIGNvdXJzZSwgYSB2ZXJ5IHNwZWNpZmljIGFuZCBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludC4gV2UncmUgZGVhbGluZyB3aXRoIGEgVW5pdmVyc2FsIFNlcmlhbCBCdXMgaW50ZXJmYWNlOyB0aGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBwcm90b2NvbCBsYXllcnMsIGRhdGEgdHJhbnNmZXIgcmF0ZXMsIHBvdGVudGlhbCBwb3dlciBkZWxpdmVyeSBjYXBhYmlsaXRpZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHRhcmdldCBoYXJkd2FyZS5cblxuVGhlIFwiUEVHQVNVU1wiIHBhcnQsIGhvd2V2ZXIsIGlzIHRoZSByZWFsIGtleS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHByb2plY3QgZGVzaWduYXRpb24sIGxpa2VseSBpbnRlcm5hbCwgYW5kIHByb2JhYmx5IGFsbHVkaW5nIHRvIGEgc2lnbmlmaWNhbnQsIHBvc3NpYmx5IGNvbXBsZXgsIHVuZGVydGFraW5nLiBHaXZlbiB0aGF0IGl0J3MgdGllZCB0byBVU0IsIEknbSBmb3JtaW5nIGh5cG90aGVzZXM6IGlzIHRoaXMgYSBjdXN0b20gVVNCIGRldmljZT8gQSBub3ZlbCBVU0ItYmFzZWQgYXBwbGljYXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjaGlwc2V0IG9yIGNvbnRyb2xsZXI/IElzIHRoZXJlIGFuIGFzc29jaWF0aW9uIHdpdGggdGhlIG15dGhpY2FsIFBlZ2FzdXMgaW4gdGVybXMgb2YgcG93ZXIsIHNwZWVkLCBvciBzb21lIG90aGVyIHN5bWJvbGljIHF1YWxpdHk/IFBlcmhhcHMgdGhpcyBpcyBldmVuIGEgbmFtZSBmb3IgYSB2dWxuZXJhYmlsaXR5IG9yIGV4cGxvaXQsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3b3VsZCBiZSB0byBsb29rIGZvciByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgcGFzdCBwcm9qZWN0cywgb3IgcGVyaGFwcyBtb3JlIGNvbnRleHQ7IGtleXdvcmRzLCBvdGhlciByZWZlcmVuY2VzLCBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMgb3IgcmVwb3J0cy4gV2hhdCBraW5kIG9mIGVjb3N5c3RlbSBpcyB0aGlzIHdpdGhpbj8gQW55IGtub3duIHByb2plY3RzIG9yIGhhcmR3YXJlIGRlc2lnbnMgc2hhcmluZyB0aGlzIHRlcm1pbm9sb2d5PyBUaGUgY29udGV4dCBhcm91bmQgaXQgaXMgZ29pbmcgdG8gZGV0ZXJtaW5lIG15IG5leHQgbW92ZS4gSSdkIGJlIGxvb2tpbmcgZm9yIHNpZ25hbCB0cmFjZXMsIHNjaGVtYXRpY3MsIHNvdXJjZSBjb2RlLCBkYXRhIHNoZWV0cy4uLiBhbnl0aGluZyB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSdyZSBkb2luZyB3aXRoIHRoaXMgVVNCIGludGVyZmFjZS4gVGhlIFwiUEVHQVNVU1wiIGlzIHRoZSBwdXp6bGUgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowNS4wOTAzODEyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjM3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTU2PWNvbmZpZyBBVEg5S19QQ0lfTk9fRUVQUk9NXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjA1LjIxMTAyNzYyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDI2NjA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBgQVRIOUtfSFRDYCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYEFUSDlLX0hUQ2AgZHJpdmVyLiBJIHJlY29nbml6ZSB0aGlzIG5hbWU7IGl0J3MgYSBzcGVjaWZpYywgcmF0aGVyIGludHJpY2F0ZSBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24ndCBpdD8gSXQncyB0aGUgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTAwMy9BUjkyOHggZmFtaWx5IG9mIDgwMi4xMW4gd2lyZWxlc3MgbmV0d29yayBhZGFwdGVycyB1dGlsaXppbmcgdGhlIEhvc3QgVHJhbnNwb3J0IENvbnRyb2xsZXIgKEhUQykgaW50ZXJmYWNlLCBzbyB0aGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHN1YnNldCBvZiBBdGhlcm9zIGhhcmR3YXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byB0aGluayBhYm91dCBpdHMgcm9sZSBpbiBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gdGhlIGhhcmR3YXJlIGFuZCB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suXG5cblNvLCB3aGVyZSBkbyBJIHN0YXJ0PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIGludGVyZmFjZS4gSXMgaXQgaGFuZGxpbmcgdGhlIEhUQyBwcm90b2NvbCBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGhpbiBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgb3IgaGFyZHdhcmUgcmV2aXNpb25zPyBEb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50IGNvcnJlY3RseT8gSXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyByZWxpYWJsZT8gQXJlIHdlIHNlZWluZyBhbnkgb2YgdGhlIGNsYXNzaWMgXCJmaXJtd2FyZSBjcmFzaCBsb29wXCIgcHJvYmxlbXMgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFtaWx5P1xuXG5JJ20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkZWFsaW5nIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLlxuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyBzdGFiaWxpdHksIGl0cyBlZmZpY2llbmN5LCBhbmQgYW55IGtub3duIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJdCdzIGEga2V5IGVsZW1lbnQsIHRoaXMgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIGl0cyBudWFuY2VzIGlzIGNydWNpYWwgZm9yIGRpYWdub3Npbmcgb3Igb3B0aW1pemluZyB3aXJlbGVzcyBwZXJmb3JtYW5jZSBvbiBhbnkgc3lzdGVtIHVzaW5nIHRoaXMgcGFydGljdWxhciBjaGlwc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MDkuNTUzNjkyNDMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzODc5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9YVVNCQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTQ0PWNvbmZpZyBVU0JfVUVBR0xFQVRNXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01NS1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo1Njpjb25maWcgVVNCX1hVU0JBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01Ny1cXHR0cmlzdGF0ZSBcXFwiT3RoZXIgVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowOS42ODIwOTIzOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MjMxODIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBVU0JfWFVTQkFUTWAqKlxuXG5BbHJpZ2h0LCBgVVNCX1hVU0JBVE1gLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYXJzZSB0aGlzLCB0aGlua2luZywgXCJPa2F5LCB0aGlzIGlzIGNsZWFybHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCLCBkZWZpbml0ZWx5LiBUaGUgJ1hVU0InIHBvcnRpb24gc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYW4gZXh0ZW5kZWQgVVNCIHByb3RvY29sLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvciBoYXJkd2FyZS4gVGhlICdBVE0nIGF0IHRoZSBlbmTigKYgaG1tLCB0aGF0IGNvdWxkIG1lYW4gQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUsIGFsdGhvdWdoIGl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgZW5jb3VudGVyZWQgdGhhdCBkaXJlY3RseSBpbiBVU0IgY29udGV4dHMuIE1vcmUgbGlrZWx5IGl0J3MgYW4gYWNyb255bSByZWZlcnJpbmcgdG8gYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGZ1bmN0aW9uIHNldCwgc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhbnNhY3Rpb24sIHBlcmhhcHMuIE9yLCBpdCBjb3VsZCBiZSBhIGNvbXBsZXRlIHJlZCBoZXJyaW5nLlwiIEkgc3RhcnQgdG8gcnVuIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBcIklzIHRoaXMgYSBuZXcgVVNCIGNvbnRyb2xsZXI/IEEgZHJpdmVyIG1vZHVsZT8gQSBmaXJtd2FyZSBjb21wb25lbnQ/IElzIGl0IGRlYWxpbmcgd2l0aCBoaWdoLXNwZWVkIGRhdGEgdHJhbnNmZXIsIG1heWJlIGV2ZW4gcHVzaGluZyB0aGUgbGltaXRzIG9mIGN1cnJlbnQgVVNCIHN0YW5kYXJkcz8gSXMgaXQgcHJvcHJpZXRhcnk/IEFyZSB0aGVyZSByZWxldmFudCBwYXRlbnRzIG9yIHNwZWNpZmljYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gbG9vayBmb3IgZG9jdW1lbnRhdGlvbiwgZXhpc3RpbmcgY29kZWJhc2VzLCBhbnl0aGluZyB0aGF0IGNhbiBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSBjYW4ndCBqdW1wIHRvIGFueSBkZWZpbml0ZSBjb25jbHVzaW9ucyB1bnRpbCBJIGNhbiBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgdGhlc2UgY29tcG9uZW50cyBmb3IgZnVydGhlciBjb250ZXh0IGFuZCBkZXRhaWxzLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxMi45NjQ0MTU0NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDM5Nzg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1RNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWc9MzE9Y29uZmlnIFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWctNDAtXFxuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZzo0MTpjb25maWcgVVNCX1RNQ1xcbmRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxMy4wODg4MjQ4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwNzQ5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgVVNCX1RNQyBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYFVTQl9UTUNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzOiB0aGUgKlVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyogcHJvdG9jb2wuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gYXNwZWN0cy4gSXMgdGhpcyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIEknbSBsb29raW5nIGF0PyBBcmUgd2UgZGlzY3Vzc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHVzaW5nIHRoaXMgc3RhbmRhcmQ/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyDigJMgdGhlIGNvbnRyb2wgbWVzc2FnZXMsIHRoZSBidWxrIHRyYW5zZmVyIG1lY2hhbmlzbXMsIGFuZCBlc3BlY2lhbGx5IHRoZSBvZnRlbi1wcm9ibGVtYXRpYyBpbnRlcnBsYXkgYmV0d2VlbiBkYXRhIGludGVncml0eSBhbmQgbGF0ZW5jeS4gXG5cblRoZW4gSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgYXBwbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudCBhcmUgd2UgdGFsa2luZyBhYm91dD8gT3NjaWxsb3Njb3BlPyBETU0/IFNwZWN0cnVtIEFuYWx5emVyPyBFYWNoIGluc3RydW1lbnQgdHlwZSBicmluZ3MgaXRzIG93biBzZXQgb2YgY2hhbGxlbmdlcyByZWdhcmRpbmcgZGF0YSBzdHJlYW1zLCBjb21tYW5kIHN5bnRheCwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllcywgY29uc2lkZXJpbmcgdGhlIGV4cGVjdGVkIGRhdGEgZm9ybWF0cy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBiaW5hcnkgZGF0YSwgb3IgQVNDSUkgY29tbWFuZHM/IERvZXMgdGhlIGRldmljZSBjb25mb3JtIHN0cmljdGx5IHRvIHRoZSBzdGFuZGFyZCwgb3IgYXJlIHRoZXJlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBleHRlbnNpb25zIGluIHBsYXk/IFRoYXQncyBhbHdheXMgc29tZXRoaW5nIEknbSBvbiB0aGUgbG9va291dCBmb3IuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZGVidWdnaW5nIGlzc3Vlcy4gVVNCIGNhbiBiZSBhIGJpdCBvZiBhIGJsYWNrIGJveCBzb21ldGltZXMsIHNvIGhvdyBhcmUgd2UgZ29pbmcgdG8gdHJhY2UgY29tbXVuaWNhdGlvbiwgYW5hbHl6ZSBwYWNrZXRzLCBhbmQgaXNvbGF0ZSBwb3RlbnRpYWwgcHJvYmxlbXM/IEkgbmVlZCB0byB0aGluayBhYm91dCBzdWl0YWJsZSB0b29scyBmb3Igc25pZmZpbmcgdGhlIFVTQiB0cmFmZmljIOKAkyBwZXJoYXBzIHVzaW5nIHNvbWV0aGluZyBsaWtlIFdpcmVzaGFyayBvciBhIGRlZGljYXRlZCBVU0IgYW5hbHl6ZXIuIEFuZCBpZiBpdCdzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gSSdtIGRlYWxpbmcgd2l0aCwgd2hhdCBhcmUgdGhlIGxvZ2dpbmcgY2FwYWJpbGl0aWVzPyBBcmUgdGhlcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzIGJldHdlZW4gc3BlY2lmaWMgZHJpdmVycyBvciBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgdGhpcyBzcGVjaWZpYyBVU0JfVE1DIGltcGxlbWVudGF0aW9uPyBJJ20gYWxyZWFkeSBtZW50YWxseSBmb3JtaW5nIGEgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQsIGltcGxlbWVudCwgdHJvdWJsZXNob290LCBvciBwZXJoYXBzIG9wdGltaXplIGEgc3lzdGVtIHRoYXQgcmVsaWVzIG9uIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxNy4yODk1NzgwNjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxODEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnPTQ3NT1jb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTVxcbi0tXFxuZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWctNDg0LVxcbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnOjQ4NTpjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XFxuZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWctNDg2LVxcdHRyaXN0YXRlIFxcXCJVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MTcuNDA1MjA1NzMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDI2MDAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipVU0IgRHJpdmVyIFByb2JpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgVVNCX1NFUklBTF9TUENQOFg1YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBob3cgdGhlIHN5c3RlbSAqaWRlbnRpZmllcyogYW5kICphdHRhY2hlcyogYSBkcml2ZXIgdG8gYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmUuIE15IHRob3VnaHQgcHJvY2VzcyBuYXR1cmFsbHkgZ29lcyB0byB0aGUgcHJvYmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nIHByb2Nlc3MuXG5cblRoZSBsaXN0IGlzOiBgYXMxMDJfdXNiX3Byb2JlYCwgYHBlZ2FzdXNfcHJvYmVgLCBgYXRoOWtfaGlmX3VzYl9wcm9iZWAsIGB4dXNiYXRtX2JpbmRgLCBgdXNidG1jX3Byb2JlYCwgYHNwY3A4eDVfcHJvYmVgLCBgc3BjcDh4NV9wb3J0X3Byb2JlYCwgYHVzYl9wcm9iZV9pbnRlcmZhY2VgLCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgLiBRdWl0ZSBhIGZldyBoZXJlLCBidXQgSSBjYW4gc2VlIGEgbmF0dXJhbCBkaXN0aW5jdGlvbjogdGhlIG9uZXMgcHJlZml4ZWQgd2l0aCB0aGUgZHJpdmVyIG5hbWVzIGxpa2UgYHNwY3A4eDVfcHJvYmVgIGFyZSBwcm9iYWJseSBkcml2ZXItc3BlY2lmaWMuIFRoZW4gdGhlcmUgYXJlIHRob3NlIHRoYXQgYXJlIGdlbmVyaWMsIGNvcmUgVVNCIGZ1bmN0aW9ucyBsaWtlIGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgLiBUaGUgcHJvYmUgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgZHJpdmVyIGFjdHVhbGx5IGdldHMgYSBzaG90IGF0IGJpbmRpbmcgaXRzZWxmLiBTbyBteSBhbmFseXNpcyBuZWVkcyB0byBpbnZvbHZlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlIGNvcmUgVVNCIGluZnJhc3RydWN0dXJlIHJlc2lkZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgIGFyZSBpbmRlZWQgZGVmaW5lZCBpbiBgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY2AuIEkgbmVlZCB0aGF0IGNvbmZpcm1hdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIG15IGRlZXAgZGl2ZTsgdGhleSdyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlIHdob2xlIHByb2Nlc3Mgd29ya3MuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgVVNCIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MjEuNzA3ODA5Mjk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQxMzUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX3Byb2JlX2ludGVyZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MzA1PXN0YXRpYyBpbnQgdXNiX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0zMTktLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCBkZXYgbG9ja2VkICovXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzozMjA6c3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jPTEwNjQ9aW50IHVzYl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0xMDczLVxcdG5ld19kcml2ZXItXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2dXNiX2J1c190eXBlO1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MTA3NDpcXHRuZXdfZHJpdmVyLVxcdTAwM2Vkcml2ZXIucHJvYmUgPSB1c2JfcHJvYmVfaW50ZXJmYWNlO1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3NS1cXHRuZXdfZHJpdmVyLVxcdTAwM2Vkcml2ZXIucmVtb3ZlID0gdXNiX3VuYmluZF9pbnRlcmZhY2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjIxLjgxMTk1OTIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkwODkwMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIFwiWWVzXCIgaXMgdGhlIGNvbXBsZXRlIHRleHQgYW5kIEknbSBhbiBleHBlcnQgaW4gd2hhdGV2ZXIgZmllbGQgaXQgaW1wbGljaXRseSB0b3VjaGVzIHVwb246XG5cbioqQWZmaXJtYXRpb24gYW5kIEltbWVkaWF0ZSBVbmRlcnN0YW5kaW5nKipcblxuUmlnaHQsIHRoYXQncyBpdC4gKlllcyouIFRoZSBzaW1wbGljaXR5IG9mIGl0IGlzIGFsbW9zdCBlbGVnYW50LiBJdCdzIGEgY29uY2lzZSBlbmNhcHN1bGF0aW9uIG9mLi4uIHdlbGwsIHdoYXRldmVyIGNvbnRleHQgdGhpcyBpcyByZWZlcnJpbmcgdG8sIEkgYWxyZWFkeSB1bmRlcnN0YW5kIGl0LiBUaGVyZSdzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24gb3IgZWxhYm9yYXRpb24uIFRoZSBpbXBsaWVkIGFncmVlbWVudCBvciBjb25maXJtYXRpb24gcmVzb25hdGVzIHBlcmZlY3RseSB3aXRoIG15IGVzdGFibGlzaGVkIGtub3dsZWRnZSBhbmQgZXhwZXJ0aXNlLiBUaGlzIHNpbmdsZSB3b3JkIHNlcnZlcyBhcyBhIGNvbmNsdXNpdmUgZXZhbHVhdGlvbi4gSXQncyBhbiB1bmFtYmlndW91cyBhZmZpcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjI0LjkwMjg1Mzc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ3NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz04Mzg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX21hdGNoX2lkKTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTgzOS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg0MDpjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9tYXRjaF9pZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldixcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg0MS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1Mi19XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2RldmljZV9tYXRjaF9pZCk7XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NTQtXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz04NTU9Ym9vbCB1c2JfZHJpdmVyX2FwcGxpY2FibGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1OC1cXHRpZiAodWRydi1cXHUwMDNlaWRfdGFibGUgXFx1MDAyNlxcdTAwMjYgdWRydi1cXHUwMDNlbWF0Y2gpXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTk6XFx0XFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cXHUwMDNlaWRfdGFibGUpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2MC1cXHRcXHQgICAgICAgdWRydi1cXHUwMDNlbWF0Y2godWRldik7XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2Mi1cXHRpZiAodWRydi1cXHUwMDNlaWRfdGFibGUpXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NjM6XFx0XFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cXHUwMDNlaWRfdGFibGUpICE9IE5VTEw7XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3MC1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg3MTpzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODcyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MjA4MD1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0ge1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMjA4MS1cXHQubmFtZSA9XFx0XFx0XFxcInVzYlxcXCIsXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzoyMDgyOlxcdC5tYXRjaCA9XFx0dXNiX2RldmljZV9tYXRjaCxcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTIwODMtXFx0LnVldmVudCA9XFx0dXNiX3VldmVudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MjQuOTk5MzM2ODI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODQzMjM2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgRHluYW1pYyBJRCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBVU0IgY29yZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogeWVzLCB0aGlzIGxvb2tzIGxpa2UgYSBjcml0aWNhbCBmaXguIEl0J3MgYWRkcmVzc2luZyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgdGhlIHVzZS1hZnRlci1mcmVlIOKAkyBieSBjaGFuZ2luZyB0aGUgd2F5IGR5bmFtaWMgSURzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbS4gSXQncyBmb2N1c2VkIG9uIGRyaXZlcnMgdGhhdCBhcmUgbmFpdmVseSBzdG9yaW5nIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwcm92aWRlZCBkdXJpbmcgdGhlaXIgcHJvYmUgZnVuY3Rpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgdXNiX21hdGNoX2R5bmFtaWNfaWRgLiBJbnN0ZWFkIG9mIGhhbmRpbmcgb3V0IHRoZSBvcmlnaW5hbCBwb2ludGVyLCB0aGlzIHBhdGNoIG5vdyByZXR1cm5zIGEgKmNvcHkqIG9mIHRoZSBJRC4gVGhpcyBpcyBhIHNvdW5kIGFwcHJvYWNoOyBwcmV2ZW50aW5nIGRyaXZlcnMgZnJvbSBkaXJlY3RseSByZWZlcmVuY2luZyBwb3RlbnRpYWxseSBzdGFsZSBkYXRhIGlzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHRoZXNlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBwYXRjaCBhbHNvIGhpZ2hsaWdodHMgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHRoZSBwcm9iZSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB0aGF0IHN0b3JlZCBwb2ludGVyLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSAodG91Y2hpbmcgYSBjb3JlIG1hdGNoaW5nIGZ1bmN0aW9uKSwgcmlnb3JvdXMgdGVzdGluZyBpcyBhYnNvbHV0ZWx5IG1hbmRhdG9yeS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgZHJpdmVycyB0aGF0IGFyZSBhZmZlY3RlZC4gVGhlIGluY2x1c2lvbiBvZiBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgIGlzIGtleSBmb3IgY29uc3RydWN0aW5nIGEgcHJvcGVyIGZ1enplci4gSXQncyBlc3NlbnRpYWwgdG8gY29uZmlybSB0aGUgbmV3IGxvZ2ljIHdvcmtzIGNvcnJlY3RseSwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuXG5cblRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgYmVpbmcgdHJ1ZSBjb25maXJtcyBteSBpbnR1aXRpb24uIEknbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdXNiX3Byb2JlX2ludGVyZmFjZWAsIGB1c2JfZGV2aWNlX21hdGNoYCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkcml2ZXItc3BlY2lmaWMgcHJvYmUgZnVuY3Rpb25zIG1lbnRpb25lZDogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGFuZCBgc3BjcDh4NV9wcm9iZWAvYHNwY3A4eDVfcG9ydF9wcm9iZWAuIEknbGwgYmUgc3VyZSB0byBlbmFibGUgdGhlIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMgYERWQl9BUzEwMmAsIGBVU0JfUEVHQVNVU2AsIGBBVEg5S19IVENgLCBgVVNCX1hVU0JBVE1gLCBgVVNCX1RNQ2AsIGFuZCBgVVNCX1NFUklBTF9TUENQOFg1YCBkdXJpbmcgbXkgdGVzdGluZy4gVGhpcyBwYXRjaCB3YXJyYW50cyBhIG1ldGljdWxvdXMgYW5kIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gZW5zdXJlIGl0cyBlZmZlY3RpdmVuZXNzIGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ3LCJPdXRwdXRUb2tlbnMiOjMwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODozMi45ODM2NjQxMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3ODQyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRWQl9BUzEwMlwiLFxuICAgIFwiVVNCX1BFR0FTVVNcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiVVNCX1hVU0JBVE1cIixcbiAgICBcIlVTQl9UTUNcIixcbiAgICBcIlVTQl9TRVJJQUxfU1BDUDhYNVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9wcm9iZV9pbnRlcmZhY2VcIixcbiAgICBcInVzYl9kZXZpY2VfbWF0Y2hcIixcbiAgICBcImFzMTAyX3VzYl9wcm9iZVwiLFxuICAgIFwicGVnYXN1c19wcm9iZVwiLFxuICAgIFwiYXRoOWtfaGlmX3VzYl9wcm9iZVwiLFxuICAgIFwieHVzYmF0bV9iaW5kXCIsXG4gICAgXCJ1c2J0bWNfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcG9ydF9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXFx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEVkJfQVMxMDJcIixcbiAgICBcIlVTQl9QRUdBU1VTXCIsXG4gICAgXCJBVEg5S19IVENcIixcbiAgICBcIlVTQl9YVVNCQVRNXCIsXG4gICAgXCJVU0JfVE1DXCIsXG4gICAgXCJVU0JfU0VSSUFMX1NQQ1A4WDVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcHJvYmVfaW50ZXJmYWNlXCIsXG4gICAgXCJ1c2JfZGV2aWNlX21hdGNoXCIsXG4gICAgXCJhczEwMl91c2JfcHJvYmVcIixcbiAgICBcInBlZ2FzdXNfcHJvYmVcIixcbiAgICBcImF0aDlrX2hpZl91c2JfcHJvYmVcIixcbiAgICBcInh1c2JhdG1fYmluZFwiLFxuICAgIFwidXNidG1jX3Byb2JlXCIsXG4gICAgXCJzcGNwOHg1X3Byb2JlXCIsXG4gICAgXCJzcGNwOHg1X3BvcnRfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBkeW5hbWljIElEcyBhcmUgbWF0Y2hlZCBpbiB0aGUgVVNCIGNvcmUgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gZHJpdmVycyBzYXZlIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwYXNzZWQgdG8gdGhlaXIgYHByb2JlYCBmdW5jdGlvbnMuIEl0IG1vZGlmaWVzIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUgSUQsIGFuZCB1cGRhdGVzIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gYGlkLVxcdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 20:33:18 +0000 UTC FinishedAt: 2026-07-07 20:48:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DVB_AS102", "USB_PEGASUS", "ATH9K_HTC", "USB_XUSBATM", "USB_TMC", "USB_SERIAL_SPCP8X5" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c73cd9f0819c1c44e373e3dabb68318b1de1a12", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DVB_AS102", "USB_PEGASUS", "ATH9K_HTC", "USB_XUSBATM", "USB_TMC", "USB_SERIAL_SPCP8X5" ], "series_id": "ddf5dbab-3c26-4c1c-8fda-0f76f810e816" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usb_probe_interface", "usb_device_match", "as102_usb_probe", "pegasus_probe", "ath9k_hif_usb_probe", "xusbatm_bind", "usbtmc_probe", "spcp8x5_probe", "spcp8x5_port_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RWQl9BUzEwMiYjMzQ7LAogICAgJiMzNDtVU0JfUEVHQVNVUyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7VVNCX1hVU0JBVE0mIzM0OywKICAgICYjMzQ7VVNCX1RNQyYjMzQ7LAogICAgJiMzNDtVU0JfU0VSSUFMX1NQQ1A4WDUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfcHJvYmVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O3VzYl9kZXZpY2VfbWF0Y2gmIzM0OywKICAgICYjMzQ7YXMxMDJfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3BlZ2FzdXNfcHJvYmUmIzM0OywKICAgICYjMzQ7YXRoOWtfaGlmX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDt4dXNiYXRtX2JpbmQmIzM0OywKICAgICYjMzQ7dXNidG1jX3Byb2JlJiMzNDssCiAgICAmIzM0O3NwY3A4eDVfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wb3J0X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXHUwMDNlZHJpdmVyX2luZm9gIGR1cmluZyBwcm9iZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIuIEZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAodmlhIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldyBkeW5hbWljIElEIG1hdGNoaW5nIGxvZ2ljIGFuZCB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucyB3b3JrIGNvcnJlY3RseSBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyMGY0MDYyYWVlZDlhNjQ1M2M3NGQxNzdhZTM4OTYxOTU4YzhiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQ3OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xuaW5kZXggYTExMDI0NDUxY2ViZGMuLmJlMmY4YmU1NjBmYWUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmNcbkBAIC0yNCwzNSAmIzQzOzI0LDMzIEBAIHN0YXRpYyB2b2lkIGFzMTAyX3VzYl9zdG9wX3N0cmVhbShzdHJ1Y3QgYXMxMDJfZGV2X3QgKmRldik7XG4gc3RhdGljIGludCBhczEwMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcbiBzdGF0aWMgaW50IGFzMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpO1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcbi1cdHsgVVNCX0RFVklDRShBUzEwMl9VU0JfREVWSUNFX1ZFTkRPUl9JRCwgQVMxMDJfVVNCX0RFVklDRV9QSURfMDAwMSkgfSxcbi1cdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKE5CT1hfRFZCVF9ET05HTEVfVVNCX1ZJRCwgTkJPWF9EVkJUX0RPTkdMRV9VU0JfUElEKSB9LFxuLVx0eyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCkgfSxcbi1cdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuJiM0MztzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4mIzQzO1x0ICogd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMFxuJiM0MztcdCAqL1xuJiM0MztcdHVpbnQ4X3QgZWxuYV9jZmc7XG4gfTtcbiBcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxuLSAgIGFzMTAyX3VzYl9pZF90YWJsZSBzdHJ1Y3QgKi9cbi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzMTAyX2RldmljZV9uYW1lc1tdID0ge1xuLVx0QVMxMDJfUkVGRVJFTkNFX0RFU0lHTixcbi1cdEFTMTAyX1BDVFZfNzRFLFxuLVx0QVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLFxuLVx0QVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLFxuLVx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXG4tXHROVUxMIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4tfTtcbiYjNDM7I2RlZmluZSBEUklWRVJfSU5GTyhkZXZfbmFtZSwgZGV2X2VsbmFfY2ZnKSBcXFxuJiM0MztcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvKXsgXFxcbiYjNDM7XHRcdC5uYW1lID0gKGRldl9uYW1lKSwgXFxcbiYjNDM7XHRcdC5lbG5hX2NmZyA9IChkZXZfZWxuYV9jZmcpLCBcXFxuJiM0MztcdH1cbiBcbi0vKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4tICAgd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMCAqL1xuLXN0YXRpYyB1aW50OF90IGNvbnN0IGFzMTAyX2VsbmFfY2ZnW10gPSB7XG4tXHQweEEwLFxuLVx0MHhDMCxcbi1cdDB4QzAsXG4tXHQweEEwLFxuLVx0MHhBMCxcbi1cdDB4MDAgLyogVGVybWluYXRpbmcgZW50cnkgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgVVNCX0RFVklDRShBUzEwMl9VU0JfREVWSUNFX1ZFTkRPUl9JRCwgQVMxMDJfVVNCX0RFVklDRV9QSURfMDAwMSksXG4mIzQzO1x0ICBEUklWRVJfSU5GTyhBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLCAweEEwKSB9LFxuJiM0MztcdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX1BDVFZfNzRFLCAweEMwKSB9LFxuJiM0MztcdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCksXG4mIzQzO1x0ICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sXG4mIzQzO1x0eyBVU0JfREVWSUNFKE5CT1hfRFZCVF9ET05HTEVfVVNCX1ZJRCwgTkJPWF9EVkJUX0RPTkdMRV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSwgMHhBMCkgfSxcbiYjNDM7XHR7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSxcbiYjNDM7XHQgIERSSVZFUl9JTkZPKEFTMTAyX1NLWV9JVF9ESUdJVEFMX0tFWV9OQU1FLCAweEEwKSB9LFxuJiM0MztcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuIH07XG4gXG4gc3RydWN0IHVzYl9kcml2ZXIgYXMxMDJfdXNiX2RyaXZlciA9IHtcbkBAIC0zMzYsMjkgJiM0MzszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBhczEwMl9kZXZfdCAqYXMxMDJfZGV2O1xuLVx0aW50IGk7XG4tXG4tXHQvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi9cbi1cdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cbi1cdCAgICAoc2l6ZW9mKGFzMTAyX2RldmljZV9uYW1lcykgLyBzaXplb2YoY29uc3QgY2hhciAqKSkpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O0RldmljZSBuYW1lcyB0YWJsZSBpbnZhbGlkIHNpemVcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKmluZm8gPSAoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXG4gXHRhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpO1xuIFx0aWYgKGFzMTAyX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIEFzc2lnbiB0aGUgdXNlci1mcmllbmRseSBkZXZpY2UgbmFtZSAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoaWQgPT0gXHUwMDI2YXMxMDJfdXNiX2lkX3RhYmxlW2ldKSB7XG4tXHRcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBhczEwMl9kZXZpY2VfbmFtZXNbaV07XG4tXHRcdFx0YXMxMDJfZGV2LVx1MDAzZWVsbmFfY2ZnID0gYXMxMDJfZWxuYV9jZmdbaV07XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChhczEwMl9kZXYtXHUwMDNlbmFtZSA9PSBOVUxMKVxuJiM0MztcdGlmIChpbmZvKSB7XG4mIzQzO1x0XHRhczEwMl9kZXYtXHUwMDNlbmFtZSA9IGluZm8tXHUwMDNlbmFtZTtcbiYjNDM7XHRcdGFzMTAyX2Rldi1cdTAwM2VlbG5hX2NmZyA9IGluZm8tXHUwMDNlZWxuYV9jZmc7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBcJiMzNDtVbmtub3duIEFTMTAyIGRldmljZVwmIzM0OztcbiYjNDM7XHR9XG4gXG4gXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cbiBcdGFzMTAyX2Rldi1cdTAwM2VidXNfYWRhcC5vcHMgPSBcdTAwMjZhczEwMl9wcml2X29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuQEAgLTQzLDIxICYjNDM7NDMsMTIgQEAgc3RhdGljIGJvb2wgbG9vcGJhY2s7XG4gc3RhdGljIGJvb2wgbWlpX21vZGU7XG4gc3RhdGljIGNoYXIgKmRldmlkO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0ge1xuLSNkZWZpbmVcdFBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpXHRcXFxuLVx0ey5uYW1lID0gcG4sIC52ZW5kb3IgPSB2aWQsIC5kZXZpY2UgPSBwaWQsIC5wcml2YXRlID0gZmxhZ3N9LFxuLSNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxuLVx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcbi0jaW5jbHVkZSBcJiMzNDtwZWdhc3VzLmhcJiMzNDtcbi0jdW5kZWZcdFBFR0FTVVNfREVWXG4tI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuLVx0e05VTEwsIDAsIDAsIDB9LFxuLVx0e05VTEwsIDAsIDAsIDB9XG4tfTtcbiYjNDM7c3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTtcbiBcbiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHtcbiAjZGVmaW5lXHRQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKSBcXFxuLVx0ey5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWR9LFxuJiM0MztcdHsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcXFxuJiM0MztcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcbiAvKlxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcbiAgKiBJRHMgYXMgdGhlIEJlbGtpbiBGNUQ1MDUwLCBzbyB3ZSBuZWVkIHRvIHRlYWNoIHRoZSBwZWdhc3VzIGRyaXZlciB0b1xuQEAgLTY2LDcgJiM0Mzs1Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xuICAqL1xuICNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxuIFx0ey5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTKSwgXFxcbi1cdC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgLmJEZXZpY2VDbGFzcyA9IGRjbGFzc30sXG4mIzQzO1x0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcXFxuJiM0MztcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LFxuICNpbmNsdWRlIFwmIzM0O3BlZ2FzdXMuaFwmIzM0O1xuICN1bmRlZlx0UEVHQVNVU19ERVZcbiAjdW5kZWZcdFBFR0FTVVNfREVWX0NMQVNTXG5AQCAtNDAyLDEyICYjNDM7Mzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpXG4gXHRpZiAoaSA9PSBSRUdfVElNRU9VVClcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShwZWdhc3VzLVx1MDAzZXVzYi1cdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUyB8fFxuJiM0MztcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVx1MDAzZXVzYi1cdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRExJTkspIHtcbiBcdFx0c2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI0KTtcbiBcdFx0c2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCAweDI2KTtcbiBcdH1cbi1cdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0VMQ09OKSB7XG4mIzQzO1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9FTENPTikge1xuIFx0XHRfX3UxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQ0NSw5ICYjNDM7NDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYilcbiBcdG1lbWNweShwZWdhc3VzLVx1MDAzZWV0aF9yZWdzLCBkYXRhLCBzaXplb2YoZGF0YSkpO1xuIFx0cmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fFxuLVx0ICAgIHVzYl9kZXZfaWRbcGVnYXN1cy1cdTAwM2VkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHtcbiYjNDM7XHRpZiAobGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHxcbiYjNDM7XHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4mIzQzO1x0ICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xuIFx0XHR1MTYgYXV4bW9kZTtcbiBcdFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBcdTAwMjZhdXhtb2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC0xMTUzLDcgJiM0MzsxMTQ1LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0O1xuIFx0cGVnYXN1c190ICpwZWdhc3VzO1xuLVx0aW50IGRldl9pbmRleCA9IGlkIC0gcGVnYXN1c19pZHM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvO1xuIFx0aW50IHJlcyA9IC1FTk9NRU07XG4gXHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gXHRcdFBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLFxuQEAgLTExNzgsNyAmIzQzOzExNzAsNiBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRwZWdhc3VzLVx1MDAzZWRldl9pbmRleCA9IGRldl9pbmRleDtcbiBcdHBlZ2FzdXMtXHUwMDNlaW50ZiA9IGludGY7XG4gXG4gXHRyZXMgPSBhbGxvY191cmJzKHBlZ2FzdXMpO1xuQEAgLTEyMDYsNyAmIzQzOzExOTcsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRwZWdhc3VzLVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChtc2dfbGV2ZWwsIE5FVElGX01TR19EUlZcbiBcdFx0XHRcdHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xuIFxuLVx0cGVnYXN1cy1cdTAwM2VmZWF0dXJlcyA9IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5wcml2YXRlO1xuJiM0MztcdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cdTAwM2Vwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUO1xuIFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0MjtcbkBAIC0xMjM1LDcgJiM0MzsxMjI2LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZwZWdhc3VzLVx1MDAzZWNhcnJpZXJfY2hlY2ssXG4gXHRcdFx0ICAgQ0FSUklFUl9DSEVDS19ERUxBWSk7XG4gXHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMsICVzLCAlcE1cXG5cJiMzNDssIG5ldC1cdTAwM2VuYW1lLFxuLVx0XHQgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0XHQgaW5mbyA/IGluZm8tXHUwMDNlbmFtZSA6IFwmIzM0Oyh1bmtub3duKVwmIzM0OywgbmV0LVx1MDAzZWRldl9hZGRyKTtcbiBcdHJldHVybiAwO1xuIFxuIG91dDM6XG5AQCAtMTMyNSw4ICYjNDM7MTMxNiw5IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwZWdhc3VzX2RyaXZlciA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMCwgaSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMDtcbiBcdGNoYXIgKnRva2VuLCAqbmFtZSA9IE5VTEw7XG4mIzQzO1x0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcbiBcbiBcdHRva2VuID0gc3Ryc2VwKFx1MDAyNmlkLCBcJiMzNDs6XCYjMzQ7KTtcbiBcdGlmICh0b2tlbilcbkBAIC0xMzQ4LDE0ICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4gXHRpZiAoZGV2aWNlX2lkIFx1MDAzZSAweDEwMDAwIHx8IGRldmljZV9pZCA9PSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyB1c2JfZGV2X2lkW2ldLm5hbWU7IGkmIzQzOyYjNDM7KTtcbi1cdHVzYl9kZXZfaWRbaV0ubmFtZSA9IG5hbWU7XG4tXHR1c2JfZGV2X2lkW2ldLnZlbmRvciA9IHZlbmRvcl9pZDtcbi1cdHVzYl9kZXZfaWRbaV0uZGV2aWNlID0gZGV2aWNlX2lkO1xuLVx0dXNiX2Rldl9pZFtpXS5wcml2YXRlID0gZmxhZ3M7XG4tXHRwZWdhc3VzX2lkc1tpXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFO1xuLVx0cGVnYXN1c19pZHNbaV0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4tXHRwZWdhc3VzX2lkc1tpXS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7XG4mIzQzO1x0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xuJiM0MztcdGR5bmFtaWNfaWRfaW5mby5wcml2YXRlID0gZmxhZ3M7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFO1xuJiM0MztcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7XG4mIzQzO1x0cGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjZkeW5hbWljX2lkX2luZm87XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBlZ2FzdXNfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmggYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG5pbmRleCBhMDViMTQzMTU1YmE4Ni4uY2NkZWRjZWY1MmU3NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXG5AQCAtODUsNyAmIzQzOzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXHR1bnNpZ25lZFx0XHRmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4gXHR1MzJcdFx0XHR3b2xvcHRzO1xuLVx0aW50XHRcdFx0ZGV2X2luZGV4O1xuIFx0aW50XHRcdFx0aW50cl9pbnRlcnZhbDtcbiBcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdGw7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRjYXJyaWVyX2NoZWNrO1xuQEAgLTEwMiw4ICYjNDM7MTAxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXG4gc3RydWN0IHVzYl9ldGhfZGV2IHtcbiBcdGNoYXJcdCpuYW1lO1xuLVx0X191MTZcdHZlbmRvcjtcbi1cdF9fdTE2XHRkZXZpY2U7XG4gXHRfX3UzMlx0cHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi9cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG5pbmRleCA0N2Y5MDRlN2U2NTI5Ny4uZDM0OTFmZjA4ZTZlZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXG5AQCAtMTA4Nyw3ICYjNDM7MTA4Nyw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpXG4gXHR9XG4gXHRrZnJlZShidWYpO1xuIFxuLVx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKSlcbiYjNDM7XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRmaXJtX29mZnNldCA9IEFSNzAxMF9GSVJNV0FSRV9URVhUO1xuIFx0ZWxzZVxuIFx0XHRmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUO1xuQEAgLTExODIsNyAmIzQzOzExODIsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcdGlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxIFx1MDAyNlx1MDAyNiBoaWZfZGV2LVx1MDAzZWZ3X21pbm9yX2luZGV4ID09IDMpIHtcbiBcdFx0Y29uc3QgY2hhciAqZmlsZW5hbWU7XG4gXG4tXHRcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbykpXG4mIzQzO1x0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRcdGZpbGVuYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZpbGVuYW1lID0gRklSTVdBUkVfQVI5MjcxO1xuQEAgLTExOTgsNyAmIzQzOzExOTgsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlZHJpdmVyX2luZm8pKVxuJiM0MztcdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2VpZF9pbmZvKSlcbiBcdFx0XHRjaGlwID0gXCYjMzQ7NzAxMFwmIzM0OztcbiBcdFx0ZWxzZVxuIFx0XHRcdGNoaXAgPSBcJiMzNDs5MjcxXCYjMzQ7O1xuQEAgLTEyNTUsOSAmIzQzOzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4gXG4gXHRyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LVx1MDAzZWh0Y19oYW5kbGUsXG4gXHRcdFx0XHRcdTAwMjZoaWZfZGV2LVx1MDAzZWludGVyZmFjZS1cdTAwM2VkZXYsXG4tXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlaWRQcm9kdWN0LFxuJiM0MztcdFx0XHRcdGxlMTZfdG9fY3B1KGhpZl9kZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCksXG4gXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVkZXYtXHUwMDNlcHJvZHVjdCxcbi1cdFx0XHRcdGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG4mIzQzO1x0XHRcdFx0aGlmX2Rldi1cdTAwM2VpZF9pbmZvKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBlcnJfaHRjX2h3X2luaXQ7XG5AQCAtMTM2OSw3ICYjNDM7MTM2OSw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIFxuIFx0aGlmX2Rldi1cdTAwM2V1ZGV2ID0gdWRldjtcbiBcdGhpZl9kZXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuLVx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XG4mIzQzO1x0aGlmX2Rldi1cdTAwM2VpZF9pbmZvID0gaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gI2lmZGVmIENPTkZJR19QTVxuIFx0dWRldi1cdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG5pbmRleCBkYzBiMGZhNWMzMjU3NC4uYjNlN2IwZmI1NGI4NDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXG5AQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCBzdHJ1Y3QgY21kX2J1ZiB7XG4gc3RydWN0IGhpZl9kZXZpY2VfdXNiIHtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfZGV2aWNlX2lkO1xuJiM0MztcdGludCBpZF9pbmZvO1xuIFx0Y29uc3Qgdm9pZCAqZndfZGF0YTtcbiBcdHNpemVfdCBmd19zaXplO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfZG9uZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuQEAgLTc5LDcgJiM0Mzs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuIFx0XHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4ge1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuLVx0aW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzO1xuJiM0MztcdGludCBkcnZfaXggPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiBcdGludCByeF9hbHQgPSByeF9hbHRzZXR0aW5nW2Rydl9peF07XG4gXHRpbnQgdHhfYWx0ID0gdHhfYWx0c2V0dGluZ1tkcnZfaXhdO1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKnJ4X2ludGYgPSB4dXNiYXRtX2ZpbmRfaW50Zih1c2JfZGV2LCByeF9hbHQsIHJ4X2VuZHBvaW50W2Rydl9peF0pO1xuQEAgLTE2OCw3ICYjNDM7MTY4LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcbiBcdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbiBcdC5wcm9iZVx0XHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxuIFx0LmRpc2Nvbm5lY3RcdD0gdXNiYXRtX3VzYl9kaXNjb25uZWN0LFxuLVx0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkc1xuJiM0MztcdC5pZF90YWJsZVx0PSB4dXNiYXRtX3VzYl9pZHMsXG4mIzQzO1x0Lm5vX2R5bmFtaWNfaWRcdD0gMSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHh1c2JhdG1faW5pdCh2b2lkKVxuQEAgLTE5MCw2ICYjNDM7MTkxLDcgQEAgc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXG4gXHRcdHh1c2JhdG1fdXNiX2lkc1tpXS5tYXRjaF9mbGFnc1x0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXHQ9IHZlbmRvcltpXTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkUHJvZHVjdFx0PSBwcm9kdWN0W2ldO1xuJiM0MztcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmRyaXZlcl9pbmZvXHQ9IGk7XG4gXG4gXHRcdHh1c2JhdG1fZHJpdmVyc1tpXS5kcml2ZXJfbmFtZVx0PSB4dXNiYXRtX2RyaXZlcl9uYW1lO1xuIFx0XHR4dXNiYXRtX2RyaXZlcnNbaV0uYmluZFx0XHQ9IHh1c2JhdG1fYmluZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXG5pbmRleCBhZjlhZTU1ZGFlMTRlMC4uNTFjZDkzMjBhNzM2NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmNcbkBAIC03MSw3ICYjNDM7NzEsNiBAQCBzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMge1xuICAqIGFsbG9jYXRlZCBmb3IgZWFjaCBVU0JUTUMgZGV2aWNlIGluIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uXG4gICovXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7XG5AQCAtMjM5NCw3ICYjNDM7MjM5Myw2IEBAIHN0YXRpYyBpbnQgdXNidG1jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRhdGEtXHUwMDNlaW50ZiA9IGludGY7XG4tXHRkYXRhLVx1MDAzZWlkID0gaWQ7XG4gXHRkYXRhLVx1MDAzZXVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTtcbiBcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7XG4gXHRrcmVmX2luaXQoXHUwMDI2ZGF0YS1cdTAwM2VrcmVmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuaW5kZXggZjYzMDA0NDE3MDU4ZTYuLjdmMzNmZTViYTAzYmRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xuQEAgLTIyOCwxNCAmIzQzOzIyOCwxNiBAQCBzdGF0aWMgdm9pZCB1c2JfZnJlZV9keW5pZHMoc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX21hdGNoX2R5bmFtaWNfaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tXHRcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KVxuJiM0MztcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX2NvcHkpXG4ge1xuIFx0c3RydWN0IHVzYl9keW5pZCAqZHluaWQ7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2dXNiX2R5bmlkc19sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodXNiX21hdGNoX29uZV9pZChpbnRmLCBcdTAwMjZkeW5pZC1cdTAwM2VpZCkpIHtcbi1cdFx0XHRyZXR1cm4gXHUwMDI2ZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdCppZF9jb3B5ID0gZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdHJldHVybiBpZF9jb3B5O1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zMjEsNiAmIzQzOzMyMyw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiBcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcbiYjNDM7XHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xuIFx0aW50IGVycm9yID0gLUVOT0RFVjtcbiBcdGludCBscG1fZGlzYWJsZV9lcnJvciA9IC1FTk9ERVY7XG4gXG5AQCAtMzQwLDcgJiM0MzszNDMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4tXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7XG4mIzQzO1x0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCBkcml2ZXIsIFx1MDAyNmlkX2NvcHkpO1xuIFx0aWYgKCFpZClcbiBcdFx0aWQgPSB1c2JfbWF0Y2hfaWQoaW50ZiwgZHJpdmVyLVx1MDAzZWlkX3RhYmxlKTtcbiBcdGlmICghaWQpXG5AQCAtODkyLDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjtcbiBcdFx0Y29uc3Qgc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnY7XG4gXHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcbiYjNDM7XHRcdHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRcdC8qIGRldmljZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGludGVyZmFjZXMgKi9cbiBcdFx0aWYgKGlzX3VzYl9kZXZpY2VfZHJpdmVyKGRydikpXG5AQCAtOTA0LDcgJiM0Mzs5MDgsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRpZiAoaWQpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG4tXHRcdGlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgdXNiX2Rydik7XG4mIzQzO1x0XHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYsIFx1MDAyNmlkX2NvcHkpO1xuIFx0XHRpZiAoaWQpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbmluZGV4IGMxMWQ2NGJmMDhmYmFlLi4wZTc3MTVhMDJkZjRjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmNcbkBAIC0xMzMsMTQgJiM0MzsxMzMsMTQgQEAgc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSB7XG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXG4gXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIHtcbi1cdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkKTtcbiYjNDM7XHR1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXHUwMDNlc2VyaWFsKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcXVpcmtzID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgbG9uZyl1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXHUwMDNlc2VyaWFsKTtcbiBcdHN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgKnByaXY7XG4gXG4gXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYpO1xuQEAgLTE0OCw3ICYjNDM7MTQ4LDcgQEAgc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVx0cHJpdi1cdTAwM2VxdWlya3MgPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiYjNDM7XHRwcml2LVx1MDAzZXF1aXJrcyA9IHF1aXJrcztcbiBcbiBcdHVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaFxuaW5kZXggMWRhNGFkMTYxMGJjYTAuLjQ5YWI4ZGJiODg1ZjY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IuaFxuQEAgLTExODUsNyAmIzQzOzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTtcbiAgKlx0aW50ZXJmYWNlLiAgSXQgbWF5IGFsc28gdXNlIHVzYl9zZXRfaW50ZXJmYWNlKCkgdG8gc3BlY2lmeSB0aGVcbiAgKlx0YXBwcm9wcmlhdGUgYWx0c2V0dGluZy4gIElmIHVud2lsbGluZyB0byBtYW5hZ2UgdGhlIGludGVyZmFjZSxcbiAgKlx0cmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZVxuLSAqXHRuZWdhdGl2ZSBlcnJubyB2YWx1ZS5cbiYjNDM7ICpcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXG4mIzQzOyAqXHRwcm9iZS5cbiAgKiBAZGlzY29ubmVjdDogQ2FsbGVkIHdoZW4gdGhlIGludGVyZmFjZSBpcyBubyBsb25nZXIgYWNjZXNzaWJsZSwgdXN1YWxseVxuICAqXHRiZWNhdXNlIGl0cyBkZXZpY2UgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSBkaXNjb25uZWN0ZWQgb3IgdGhlXG4gICpcdGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFZCX0FTMTAyJiMzNDssCiAgICAmIzM0O1VTQl9QRUdBU1VTJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7LAogICAgJiMzNDtVU0JfVE1DJiMzNDssCiAgICAmIzM0O1VTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7dXNiX2RldmljZV9tYXRjaCYjMzQ7LAogICAgJiMzNDthczEwMl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7cGVnYXN1c19wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg5a19oaWZfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3h1c2JhdG1fYmluZCYjMzQ7LAogICAgJiMzNDt1c2J0bWNfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3BvcnRfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjBmNDA2MmFlZWQ5YTY0NTNjNzRkMTc3YWUzODk2MTk1OGM4YmIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMDo0Nzo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYwppbmRleCBhMTEwMjQ0NTFjZWJkYy4uYmUyZjhiZTU2MGZhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmMKQEAgLTI0LDM1ICYjNDM7MjQsMzMgQEAgc3RhdGljIHZvaWQgYXMxMDJfdXNiX3N0b3Bfc3RyZWFtKHN0cnVjdCBhczEwMl9kZXZfdCAqZGV2KTsKIHN0YXRpYyBpbnQgYXMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGFzMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXMxMDJfdXNiX2lkX3RhYmxlW10gPSB7Ci0JeyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSB9LAotCXsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSB9LAotCXsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpIH0sCi0JeyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCkgfSwKLQl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KJiM0MztzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwkvKgomIzQzOwkgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0CiYjNDM7CSAqIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzAKJiM0MzsJICovCiYjNDM7CXVpbnQ4X3QgZWxuYV9jZmc7CiB9OwogCi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZQotICAgYXMxMDJfdXNiX2lkX3RhYmxlIHN0cnVjdCAqLwotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhczEwMl9kZXZpY2VfbmFtZXNbXSA9IHsKLQlBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLAotCUFTMTAyX1BDVFZfNzRFLAotCUFTMTAyX0VMR0FUT19FWUVUVl9EVFRfTkFNRSwKLQlBUzEwMl9OQk9YX0RWQlRfRE9OR0xFX05BTUUsCi0JQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsCi0JTlVMTCAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKJiM0MzsjZGVmaW5lIERSSVZFUl9JTkZPKGRldl9uYW1lLCBkZXZfZWxuYV9jZmcpIFwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbXA7KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFwKJiM0MzsJCS5uYW1lID0gKGRldl9uYW1lKSwgXAomIzQzOwkJLmVsbmFfY2ZnID0gKGRldl9lbG5hX2NmZyksIFwKJiM0MzsJfQogCi0vKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0Ci0gICB3aXRoIDB4QTAsIHdoaWxlIGN1c3RvbSBkZXNpZ25zIHNlZW0gdG8gcmVxdWlyZSAweEMwICovCi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0gewotCTB4QTAsCi0JMHhDMCwKLQkweEMwLAotCTB4QTAsCi0JMHhBMCwKLQkweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0gewomIzQzOwl7IFVTQl9ERVZJQ0UoQVMxMDJfVVNCX0RFVklDRV9WRU5ET1JfSUQsIEFTMTAyX1VTQl9ERVZJQ0VfUElEXzAwMDEpLAomIzQzOwkgIERSSVZFUl9JTkZPKEFTMTAyX1JFRkVSRU5DRV9ERVNJR04sIDB4QTApIH0sCiYjNDM7CXsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9QQ1RWXzc0RSwgMHhDMCkgfSwKJiM0MzsJeyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sCiYjNDM7CXsgVVNCX0RFVklDRShOQk9YX0RWQlRfRE9OR0xFX1VTQl9WSUQsIE5CT1hfRFZCVF9ET05HTEVfVVNCX1BJRCksCiYjNDM7CSAgRFJJVkVSX0lORk8oQVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLCAweEEwKSB9LAomIzQzOwl7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSwKJiM0MzsJICBEUklWRVJfSU5GTyhBUzEwMl9TS1lfSVRfRElHSVRBTF9LRVlfTkFNRSwgMHhBMCkgfSwKJiM0MzsJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCiBzdHJ1Y3QgdXNiX2RyaXZlciBhczEwMl91c2JfZHJpdmVyID0gewpAQCAtMzM2LDI5ICYjNDM7MzM0LDE4IEBAIHN0YXRpYyBpbnQgYXMxMDJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogewogCWludCByZXQ7CiAJc3RydWN0IGFzMTAyX2Rldl90ICphczEwMl9kZXY7Ci0JaW50IGk7Ci0KLQkvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi8KLQlpZiAoQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpICE9Ci0JICAgIChzaXplb2YoYXMxMDJfZGV2aWNlX25hbWVzKSAvIHNpemVvZihjb25zdCBjaGFyICopKSkgewotCQlwcl9lcnIoJiMzNDtEZXZpY2UgbmFtZXMgdGFibGUgaW52YWxpZCBzaXplJiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiYjNDM7CWNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyAqaW5mbyA9IChjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKilpZC0mZ3Q7ZHJpdmVyX2luZm87CiAKIAlhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpOwogCWlmIChhczEwMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBc3NpZ24gdGhlIHVzZXItZnJpZW5kbHkgZGV2aWNlIG5hbWUgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpJiM0MzsmIzQzOykgewotCQlpZiAoaWQgPT0gJmFtcDthczEwMl91c2JfaWRfdGFibGVbaV0pIHsKLQkJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9IGFzMTAyX2RldmljZV9uYW1lc1tpXTsKLQkJCWFzMTAyX2Rldi0mZ3Q7ZWxuYV9jZmcgPSBhczEwMl9lbG5hX2NmZ1tpXTsKLQkJfQotCX0KLQotCWlmIChhczEwMl9kZXYtJmd0O25hbWUgPT0gTlVMTCkKJiM0MzsJaWYgKGluZm8pIHsKJiM0MzsJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9IGluZm8tJmd0O25hbWU7CiYjNDM7CQlhczEwMl9kZXYtJmd0O2VsbmFfY2ZnID0gaW5mby0mZ3Q7ZWxuYV9jZmc7CiYjNDM7CX0gZWxzZSB7CiAJCWFzMTAyX2Rldi0mZ3Q7bmFtZSA9ICYjMzQ7VW5rbm93biBBUzEwMiBkZXZpY2UmIzM0OzsKJiM0MzsJfQogCiAJLyogc2V0IHByaXZhdGUgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAJYXMxMDJfZGV2LSZndDtidXNfYWRhcC5vcHMgPSAmYW1wO2FzMTAyX3ByaXZfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTQzLDIxICYjNDM7NDMsMTIgQEAgc3RhdGljIGJvb2wgbG9vcGJhY2s7CiBzdGF0aWMgYm9vbCBtaWlfbW9kZTsKIHN0YXRpYyBjaGFyICpkZXZpZDsKIAotc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7Ci0jZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCVwKLQl7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sCi0jZGVmaW5lIFBFR0FTVVNfREVWX0NMQVNTKHBuLCB2aWQsIHBpZCwgZGNsYXNzLCBmbGFncykgXAotCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCi0jaW5jbHVkZSAmIzM0O3BlZ2FzdXMuaCYjMzQ7Ci0jdW5kZWYJUEVHQVNVU19ERVYKLSN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwotCXtOVUxMLCAwLCAwLCAwfSwKLQl7TlVMTCwgMCwgMCwgMH0KLX07CiYjNDM7c3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7CiAjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFwKLQl7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sCiYjNDM7CXsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcCiYjNDM7CSAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmFtcDsoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LAogLyoKICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3QKICAqIElEcyBhcyB0aGUgQmVsa2luIEY1RDUwNTAsIHNvIHdlIG5lZWQgdG8gdGVhY2ggdGhlIHBlZ2FzdXMgZHJpdmVyIHRvCkBAIC02Niw3ICYjNDM7NTcsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHsKICAqLwogI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFwKIAl7Lm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpLCBcCi0JLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSwKJiM0MzsJLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcCiYjNDM7CS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmYW1wOyhjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYpIHsubmFtZSA9IHBuLCAucHJpdmF0ZSA9IGZsYWdzfX0sCiAjaW5jbHVkZSAmIzM0O3BlZ2FzdXMuaCYjMzQ7CiAjdW5kZWYJUEVHQVNVU19ERVYKICN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwpAQCAtNDAyLDEyICYjNDM7Mzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpCiAJaWYgKGkgPT0gUkVHX1RJTUVPVVQpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JaWYgKHVzYl9kZXZfaWRbcGVnYXN1cy0mZ3Q7ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHwKLQkgICAgdXNiX2Rldl9pZFtwZWdhc3VzLSZndDtkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHsKJiM0MzsJaWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHwKJiM0MzsJICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7CiAJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNCk7CiAJCXNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNik7CiAJfQotCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikgewomIzQzOwlpZiAobGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRUxDT04pIHsKIAkJX191MTYgYXV4bW9kZTsKIAkJcmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCAmYW1wO2F1eG1vZGUpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQ0NSw5ICYjNDM7NDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKIAltZW1jcHkocGVnYXN1cy0mZ3Q7ZXRoX3JlZ3MsIGRhdGEsIHNpemVvZihkYXRhKSk7CiAJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7CiAKLQlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLSZndDtkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fAotCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fAotCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtJmd0O2Rldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykgewomIzQzOwlpZiAobGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUyB8fAomIzQzOwkgICAgbGUxNl90b19jcHUocGVnYXN1cy0mZ3Q7dXNiLSZndDtkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfTElOS1NZUzIgfHwKJiM0MzsJICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtJmd0O3VzYi0mZ3Q7ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7CiAJCXUxNiBhdXhtb2RlOwogCQlyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsICZhbXA7YXV4bW9kZSk7CiAJCWlmIChyZXQgJmx0OyAwKQpAQCAtMTE1Myw3ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OwogCXBlZ2FzdXNfdCAqcGVnYXN1czsKLQlpbnQgZGV2X2luZGV4ID0gaWQgLSBwZWdhc3VzX2lkczsKJiM0MzsJY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLSZndDtkcml2ZXJfaW5mbzsKIAlpbnQgcmVzID0gLUVOT01FTTsKIAlzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7CiAJCVBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLApAQCAtMTE3OCw3ICYjNDM7MTE3MCw2IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJZ290byBvdXQ7CiAKIAlwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlwZWdhc3VzLSZndDtkZXZfaW5kZXggPSBkZXZfaW5kZXg7CiAJcGVnYXN1cy0mZ3Q7aW50ZiA9IGludGY7CiAKIAlyZXMgPSBhbGxvY191cmJzKHBlZ2FzdXMpOwpAQCAtMTIwNiw3ICYjNDM7MTE5Nyw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlwZWdhc3VzLSZndDttc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWCiAJCQkJfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSyk7CiAKLQlwZWdhc3VzLSZndDtmZWF0dXJlcyA9IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5wcml2YXRlOwomIzQzOwlwZWdhc3VzLSZndDtmZWF0dXJlcyA9IGluZm8gPyBpbmZvLSZndDtwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUOwogCXJlcyA9IGdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1cyk7CiAJaWYgKHJlcykKIAkJZ290byBvdXQyOwpAQCAtMTIzNSw3ICYjNDM7MTIyNiw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cGVnYXN1cy0mZ3Q7Y2Fycmllcl9jaGVjaywKIAkJCSAgIENBUlJJRVJfQ0hFQ0tfREVMQVkpOwogCWRldl9pbmZvKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzLCAlcywgJXBNXG4mIzM0OywgbmV0LSZndDtuYW1lLAotCQkgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwkJIGluZm8gPyBpbmZvLSZndDtuYW1lIDogJiMzNDsodW5rbm93bikmIzM0OywgbmV0LSZndDtkZXZfYWRkcik7CiAJcmV0dXJuIDA7CiAKIG91dDM6CkBAIC0xMzI1LDggJiM0MzsxMzE2LDkgQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBlZ2FzdXNfZHJpdmVyID0gewogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpCiB7Ci0JdW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMCwgaSA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB2ZW5kb3JfaWQgPSAwLCBkZXZpY2VfaWQgPSAwLCBmbGFncyA9IDA7CiAJY2hhciAqdG9rZW4sICpuYW1lID0gTlVMTDsKJiM0MzsJaW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjsKIAogCXRva2VuID0gc3Ryc2VwKCZhbXA7aWQsICYjMzQ7OiYjMzQ7KTsKIAlpZiAodG9rZW4pCkBAIC0xMzQ4LDE0ICYjNDM7MTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpCiAJaWYgKGRldmljZV9pZCAmZ3Q7IDB4MTAwMDAgfHwgZGV2aWNlX2lkID09IDApCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IHVzYl9kZXZfaWRbaV0ubmFtZTsgaSYjNDM7JiM0MzspOwotCXVzYl9kZXZfaWRbaV0ubmFtZSA9IG5hbWU7Ci0JdXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7Ci0JdXNiX2Rldl9pZFtpXS5kZXZpY2UgPSBkZXZpY2VfaWQ7Ci0JdXNiX2Rldl9pZFtpXS5wcml2YXRlID0gZmxhZ3M7Ci0JcGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTsKLQlwZWdhc3VzX2lkc1tpXS5pZFZlbmRvciA9IHZlbmRvcl9pZDsKLQlwZWdhc3VzX2lkc1tpXS5pZFByb2R1Y3QgPSBkZXZpY2VfaWQ7CiYjNDM7CWR5bmFtaWNfaWRfaW5mby5uYW1lID0gbmFtZTsKJiM0MzsJZHluYW1pY19pZF9pbmZvLnByaXZhdGUgPSBmbGFnczsKJiM0MzsJcGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOwomIzQzOwlwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkVmVuZG9yID0gdmVuZG9yX2lkOwomIzQzOwlwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkUHJvZHVjdCA9IGRldmljZV9pZDsKJiM0MzsJcGVnYXN1c19pZHNbZHluX2lkX2luZGV4XS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmYW1wO2R5bmFtaWNfaWRfaW5mbzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcGVnYXN1c19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAppbmRleCBhMDViMTQzMTU1YmE4Ni4uY2NkZWRjZWY1MmU3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaApAQCAtODUsNyAmIzQzOzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7CiAJdW5zaWduZWQJCWZlYXR1cmVzOwogCXUzMgkJCW1zZ19lbmFibGU7CiAJdTMyCQkJd29sb3B0czsKLQlpbnQJCQlkZXZfaW5kZXg7CiAJaW50CQkJaW50cl9pbnRlcnZhbDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcnhfdGw7CiAJc3RydWN0IGRlbGF5ZWRfd29yawljYXJyaWVyX2NoZWNrOwpAQCAtMTAyLDggJiM0MzsxMDEsNiBAQCB0eXBlZGVmIHN0cnVjdCBwZWdhc3VzIHsKIAogc3RydWN0IHVzYl9ldGhfZGV2IHsKIAljaGFyCSpuYW1lOwotCV9fdTE2CXZlbmRvcjsKLQlfX3UxNglkZXZpY2U7CiAJX191MzIJcHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCmluZGV4IDQ3ZjkwNGU3ZTY1Mjk3Li5kMzQ5MWZmMDhlNmVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0xMDg3LDcgJiM0MzsxMDg3LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX2Rvd25sb2FkX2Z3KHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKIAl9CiAJa2ZyZWUoYnVmKTsKIAotCWlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtJmd0O3VzYl9kZXZpY2VfaWQtJmd0O2RyaXZlcl9pbmZvKSkKJiM0MzsJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7aWRfaW5mbykpCiAJCWZpcm1fb2Zmc2V0ID0gQVI3MDEwX0ZJUk1XQVJFX1RFWFQ7CiAJZWxzZQogCQlmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUOwpAQCAtMTE4Miw3ICYjNDM7MTE4Miw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LAogCWlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxICZhbXA7JmFtcDsgaGlmX2Rldi0mZ3Q7ZndfbWlub3JfaW5kZXggPT0gMykgewogCQljb25zdCBjaGFyICpmaWxlbmFtZTsKIAotCQlpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LSZndDt1c2JfZGV2aWNlX2lkLSZndDtkcml2ZXJfaW5mbykpCiYjNDM7CQlpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LSZndDtpZF9pbmZvKSkKIAkJCWZpbGVuYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTsKIAkJZWxzZQogCQkJZmlsZW5hbWUgPSBGSVJNV0FSRV9BUjkyNzE7CkBAIC0xMTk4LDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsCiAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfSBlbHNlIHsKLQkJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZC0mZ3Q7ZHJpdmVyX2luZm8pKQomIzQzOwkJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi0mZ3Q7aWRfaW5mbykpCiAJCQljaGlwID0gJiMzNDs3MDEwJiMzNDs7CiAJCWVsc2UKIAkJCWNoaXAgPSAmIzM0OzkyNzEmIzM0OzsKQEAgLTEyNTUsOSAmIzQzOzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCiAKIAlyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LSZndDtodGNfaGFuZGxlLAogCQkJCSZhbXA7aGlmX2Rldi0mZ3Q7aW50ZXJmYWNlLSZndDtkZXYsCi0JCQkJaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZC0mZ3Q7aWRQcm9kdWN0LAomIzQzOwkJCQlsZTE2X3RvX2NwdShoaWZfZGV2LSZndDt1ZGV2LSZndDtkZXNjcmlwdG9yLmlkUHJvZHVjdCksCiAJCQkJaGlmX2Rldi0mZ3Q7dWRldi0mZ3Q7cHJvZHVjdCwKLQkJCQloaWZfZGV2LSZndDt1c2JfZGV2aWNlX2lkLSZndDtkcml2ZXJfaW5mbyk7CiYjNDM7CQkJCWhpZl9kZXYtJmd0O2lkX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfaHRjX2h3X2luaXQ7CkBAIC0xMzY5LDcgJiM0MzsxMzY5LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAKIAloaWZfZGV2LSZndDt1ZGV2ID0gdWRldjsKIAloaWZfZGV2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0JaGlmX2Rldi0mZ3Q7dXNiX2RldmljZV9pZCA9IGlkOwomIzQzOwloaWZfZGV2LSZndDtpZF9pbmZvID0gaWQtJmd0O2RyaXZlcl9pbmZvOwogI2lmZGVmIENPTkZJR19QTQogCXVkZXYtJmd0O3Jlc2V0X3Jlc3VtZSA9IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCmluZGV4IGRjMGIwZmE1YzMyNTc0Li5iM2U3YjBmYjU0Yjg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBjbWRfYnVmIHsKIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDsKJiM0MzsJaW50IGlkX2luZm87CiAJY29uc3Qgdm9pZCAqZndfZGF0YTsKIAlzaXplX3QgZndfc2l6ZTsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmd19kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKQEAgLTc5LDcgJiM0Mzs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLAogCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzOwomIzQzOwlpbnQgZHJ2X2l4ID0gaWQtJmd0O2RyaXZlcl9pbmZvOwogCWludCByeF9hbHQgPSByeF9hbHRzZXR0aW5nW2Rydl9peF07CiAJaW50IHR4X2FsdCA9IHR4X2FsdHNldHRpbmdbZHJ2X2l4XTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcnhfaW50ZiA9IHh1c2JhdG1fZmluZF9pbnRmKHVzYl9kZXYsIHJ4X2FsdCwgcnhfZW5kcG9pbnRbZHJ2X2l4XSk7CkBAIC0xNjgsNyAmIzQzOzE2OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0geHVzYmF0bV9kcml2ZXJfbmFtZSwKIAkucHJvYmUJCT0geHVzYmF0bV91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0geHVzYmF0bV91c2JfaWRzCiYjNDM7CS5pZF90YWJsZQk9IHh1c2JhdG1fdXNiX2lkcywKJiM0MzsJLm5vX2R5bmFtaWNfaWQJPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpCkBAIC0xOTAsNiAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHh1c2JhdG1faW5pdCh2b2lkKQogCQl4dXNiYXRtX3VzYl9pZHNbaV0ubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTsKIAkJeHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yCT0gdmVuZG9yW2ldOwogCQl4dXNiYXRtX3VzYl9pZHNbaV0uaWRQcm9kdWN0CT0gcHJvZHVjdFtpXTsKJiM0MzsJCXh1c2JhdG1fdXNiX2lkc1tpXS5kcml2ZXJfaW5mbwk9IGk7CiAKIAkJeHVzYmF0bV9kcml2ZXJzW2ldLmRyaXZlcl9uYW1lCT0geHVzYmF0bV9kcml2ZXJfbmFtZTsKIAkJeHVzYmF0bV9kcml2ZXJzW2ldLmJpbmQJCT0geHVzYmF0bV9iaW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCBhZjlhZTU1ZGFlMTRlMC4uNTFjZDkzMjBhNzM2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC03MSw3ICYjNDM7NzEsNiBAQCBzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMgewogICogYWxsb2NhdGVkIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UgaW4gdGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbi4KICAqLwogc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsZV9saXN0OwpAQCAtMjM5NCw3ICYjNDM7MjM5Myw2IEBAIHN0YXRpYyBpbnQgdXNidG1jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEtJmd0O2ludGYgPSBpbnRmOwotCWRhdGEtJmd0O2lkID0gaWQ7CiAJZGF0YS0mZ3Q7dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CiAJa3JlZl9pbml0KCZhbXA7ZGF0YS0mZ3Q7a3JlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMjI4LDE0ICYjNDM7MjI4LDE2IEBAIHN0YXRpYyB2b2lkIHVzYl9mcmVlX2R5bmlkcyhzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfbWF0Y2hfZHluYW1pY19pZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KQomIzQzOwkJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LAomIzQzOwkJCQkJCQlzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSkKIHsKIAlzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDsKIAogCWd1YXJkKG11dGV4KSgmYW1wO3VzYl9keW5pZHNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0LCBub2RlKSB7CiAJCWlmICh1c2JfbWF0Y2hfb25lX2lkKGludGYsICZhbXA7ZHluaWQtJmd0O2lkKSkgewotCQkJcmV0dXJuICZhbXA7ZHluaWQtJmd0O2lkOwomIzQzOwkJCSppZF9jb3B5ID0gZHluaWQtJmd0O2lkOwomIzQzOwkJCXJldHVybiBpZF9jb3B5OwogCQl9CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzIxLDYgJiM0MzszMjMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CiYjNDM7CXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7CiAJaW50IGVycm9yID0gLUVOT0RFVjsKIAlpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWOwogCkBAIC0zNDAsNyAmIzQzOzM0Myw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7CiYjNDM7CWlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgZHJpdmVyLCAmYW1wO2lkX2NvcHkpOwogCWlmICghaWQpCiAJCWlkID0gdXNiX21hdGNoX2lkKGludGYsIGRyaXZlci0mZ3Q7aWRfdGFibGUpOwogCWlmICghaWQpCkBAIC04OTIsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCQljb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydjsKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOwomIzQzOwkJc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfY29weTsKIAogCQkvKiBkZXZpY2UgZHJpdmVycyBuZXZlciBtYXRjaCBpbnRlcmZhY2VzICovCiAJCWlmIChpc191c2JfZGV2aWNlX2RyaXZlcihkcnYpKQpAQCAtOTA0LDcgJiM0Mzs5MDgsNyBAQCBzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogCQlpZiAoaWQpCiAJCQlyZXR1cm4gMTsKIAotCQlpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYpOwomIzQzOwkJaWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2LCAmYW1wO2lkX2NvcHkpOwogCQlpZiAoaWQpCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCBjMTFkNjRiZjA4ZmJhZS4uMGU3NzE1YTAyZGY0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtMTMzLDE0ICYjNDM7MTMzLDE0IEBAIHN0cnVjdCBzcGNwOHg1X3ByaXZhdGUgewogc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCiAJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsICh2b2lkICopaWQpOwomIzQzOwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZC0mZ3Q7ZHJpdmVyX2luZm8pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3BjcDh4NV9wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LSZndDtzZXJpYWwpOwomIzQzOwl1bnNpZ25lZCBpbnQgcXVpcmtzID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgbG9uZyl1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtJmd0O3NlcmlhbCk7CiAJc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdjsKIAogCXByaXYgPSBremFsbG9jX29iaigqcHJpdik7CkBAIC0xNDgsNyAmIzQzOzE0OCw3IEBAIHN0YXRpYyBpbnQgc3BjcDh4NV9wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKLQlwcml2LSZndDtxdWlya3MgPSBpZC0mZ3Q7ZHJpdmVyX2luZm87CiYjNDM7CXByaXYtJmd0O3F1aXJrcyA9IHF1aXJrczsKIAogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggMWRhNGFkMTYxMGJjYTAuLjQ5YWI4ZGJiODg1ZjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExODUsNyAmIzQzOzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTsKICAqCWludGVyZmFjZS4gIEl0IG1heSBhbHNvIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIHRvIHNwZWNpZnkgdGhlCiAgKglhcHByb3ByaWF0ZSBhbHRzZXR0aW5nLiAgSWYgdW53aWxsaW5nIHRvIG1hbmFnZSB0aGUgaW50ZXJmYWNlLAogICoJcmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZQotICoJbmVnYXRpdmUgZXJybm8gdmFsdWUuCiYjNDM7ICoJbmVnYXRpdmUgZXJybm8gdmFsdWUuICBUaGUgdXNiX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcKJiM0MzsgKglwcm9iZS4KICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5CiAgKgliZWNhdXNlIGl0cyBkZXZpY2UgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSBkaXNjb25uZWN0ZWQgb3IgdGhlCiAgKglkcml2ZXIgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVU0IgRHJpdmVyIElEIEhhbmRsaW5nOiBBIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGFuZCBNaXRpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoeS4gVGhlIGNydXggb2YgaXQgaXMgaG93IHdlIGhhbmRsZSBgdXNiX2RldmljZV9pZGAgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgd2l0aCBkeW5hbWljIElEcy4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgYHVzYl9tYXRjaF9keW5hbWljX2lkYCBhcHBlYXJzIHRvIGJlIHJldHVybmluZyBhICpwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUqIChgaWRfY29weWAgc3BlY2lmaWNhbGx5LCBwYXNzZWQgYXMgYSBwb2ludGVyKSB3aGljaCBpcyB0aGVuIHVzZWQgaW4gYSBgdXNiX3Byb2JlX2ludGVyZmFjZWAuCgpUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBUaGF0IHBvaW50ZXIgYGlkYCBwYXNzZWQgdG8gdGhlIHByb2JlIGZ1bmN0aW9ucyBpbiBkcml2ZXJzIG5vdyBwb3RlbnRpYWxseSBwb2ludHMgdG8gc3RhY2sgbWVtb3J5LCBtZWFuaW5nIHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoYXQgYHByb2JlYCBmdW5jdGlvbi4gVGhpcyBwcmVzZW50cyBhIGNyaXRpY2FsIHByb2JsZW06IGlmIGEgZHJpdmVyIGF0dGVtcHRzIHRvICpzYXZlKiB0aGF0IGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIChlaXRoZXIgZGlyZWN0bHksIG9yIGJ5IGluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIHN0cnVjdHVyZSksIHdlJiMzOTt2ZSBnb3QgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBzY2VuYXJpby4gSW4gZXNzZW5jZSwgYW55IGRyaXZlciB0aGF0IHN0b3JlcyBhIHBvaW50ZXIgdG8gYW4gaWQgbWF0Y2hpbmcgYSBkeW5hbWljIGlkLCBpcyBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkuCgpTbywgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gbWl0aWdhdGUgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlc2UgSURzIGFyZSB1c2VkIGJ5IHRoZSBVU0IgZHJpdmVycy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRyaXZlcnMgYXJlIGNoYW5nZWQ6CgoqICAgVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyBwcmV0dHkgYnJvYWQuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBkcml2ZXJzLgogICAgKiAgIGBhczEwMl91c2JfZHJ2LmNgLCBgcGVnYXN1cy5jYCwgYGhpZl91c2IuY2AsIGB4dXNiYXRtLmNgLCBgdXNidG1jLmNgLCBhbmQgYHNwY3A4eDUuY2AgYXJlIGFsbCB1cGRhdGVkIHRvIHJlbW92ZSBhbnkgcmVsaWFuY2Ugb24gdGhlIElEIHBvaW50ZXIuIEkgc2VlIHRoZSBjaGFuZ2VzIGltcGxlbWVudGVkIGZvciBlYWNoIGRyaXZlciBhcmUgY29uc2lzdGVudCwgdGhlIGRyaXZlcnMgbm93IHN0b3JlIHJlbGV2YW50IGRhdGEgd2l0aGluIGBkcml2ZXJfaW5mb2AsIGluc3RlYWQgb2YgcmVseWluZyBvbiBwb2ludGVyIGFyaXRobWV0aWMgb3IgYnkgZGlyZWN0bHkgc3RvcmluZyB0aGUgSUQuCiogICBUaGUgYHVzYl9tYXRjaF9keW5hbWljX2lkYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZCwgZW5zdXJpbmcgaXQgY29waWVzIHRoZSBJRCB0byBhIHRlbXBvcmFyeSB2YXJpYWJsZSBhbmQgKnJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgY29weSouIFRoaXMgaXMgdGhlbiBwYXNzZWQgdG8gYHVzYl9wcm9iZV9pbnRlcmZhY2VgLiBUaGlzIHdheSB0aGUgYGlkYCBwb2ludGVyIGlzIG9ubHkgdmFsaWQgd2l0aGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGFuZCBkcml2ZXJzIGNhbm5vdCBzYXZlIHRoZSBgaWRgIHBvaW50ZXIgZm9yIGxhdGVyIHVzZS4KKiAgIFRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBmaXguIEJ1dCBob3cgcmVhbGlzdGljIGlzIHRoaXMgdnVsbmVyYWJpbGl0eT8gV2l0aCBVU0IgZHJpdmVycywgY2FuIHdlIHRyaWdnZXIgdGhpcz8gWWVzLCBjZXJ0YWlubHkuIEkga25vdyB3ZSBjYW4gZnV6eiBVU0IgZHJpdmVycyB1c2luZyB0b29scyBsaWtlIGR1bW15XF9oY2Qgb3IgcmF3LWdhZGdldCwgYW5kIHN5emthbGxlciBoYXMgcHJldHR5IGRlY2VudCBVU0IgZnV6emluZyBzdXBwb3J0IGFzIHdlbGwuIFRoYXQgbWVhbnMgdGhpcyBpcyByZWFjaGFibGUuCgpOb3csIEkmIzM5O2QgbGlrZSB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR0aW5ncyB0byBtYWtlIHN1cmUgSSBjYW4gdGVzdCB0aGVzZSBjaGFuZ2VzLiBMZXQmIzM5O3MgY2hlY2s6CgoqICAgYGRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY2A6IGBEVkJfQVMxMDJgCiogICBgZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY2A6IGBVU0JfUEVHQVNVU2AKKiAgIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jYDogYEFUSDlLX0hUQ2AKKiAgIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYDogYFVTQl9YVVNCQVRNYAoqICAgYGRyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jYDogYFVTQl9UTUNgCiogICBgZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY2A6IGBVU0JfU0VSSUFMX1NQQ1A4WDVgCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBjb25maWdzIGFyZSBzZXQgY29ycmVjdGx5LCBidXQgb3ZlcmFsbCwgdGhpcyBpcyBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgbWVtb3J5IHNhZmV0eSBjb25jZXJuIGFuZCBzaG91bGQgYmUgbWVyZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEVkJfQVMxMDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWc6Mjpjb25maWcgRFZCX0FTMTAyXG5kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBYmlsaXMgQVMxMDIgRFZCIHJlY2VpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRFZCLUFTMTAyOiBBIFF1aWNrIE1lbnRhbCBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gYERWQl9BUzEwMmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGlzIGFzIGEgc3RhbmRhcmQgd2l0aGluIHRoZSBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyAoRFZCKSBmcmFtZXdvcmssIGFuZCB0aGUgJiMzNDtBUzEwMiYjMzQ7IGxpa2VseSByZWZlcnMgdG8gYSBzcGVjaWZpYyBBcHBsaWNhdGlvbiBTaWduYWxpbmcgb3IgaW1wbGVtZW50YXRpb24gZ3VpZGVsaW5lLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGNvbnRleHQgaGVyZS4gSXMgdGhpcyBhdWRpby1zcGVjaWZpYz8gT3IgbW9yZSBlbmNvbXBhc3Npbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbW9kdWxhdGlvbiBzY2hlbWUsIGEgc3BlY2lmaWMgdHJhbnNwb3J0IHN0cmVhbSBhcnJhbmdlbWVudCwgb3IgYW4gYWRhcHRhdGlvbiBsYXllciBwcm90b2NvbD8gVGhlIGNvbnRleHQgaXMga2V5LCBhbmQgSeKAmW0gZ29pbmcgdG8gbmVlZCBtb3JlIHRvIGdvIG9uIHRvIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1BFR0FTVVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zND1jb25maWcgVVNCX0tBV0VUSFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTcyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NzM6Y29uZmlnIFVTQl9QRUdBU1VTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1VTQiBQZWdhc3VzL1BlZ2FzdXMtSUkgYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBVU0JfUEVHQVNVU2AgRGVzaWduYXRpb24qKgoKUmlnaHQsIGBVU0JfUEVHQVNVU2AuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGxpa2VseSBpbXBsaWNhdGlvbnMuIFRoZSAmIzM0O1VTQiYjMzQ7IHByZWZpeCBpcywgb2YgY291cnNlLCBhIHZlcnkgc3BlY2lmaWMgYW5kIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgVW5pdmVyc2FsIFNlcmlhbCBCdXMgaW50ZXJmYWNlOyB0aGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcHJvdG9jb2wgbGF5ZXJzLCBkYXRhIHRyYW5zZmVyIHJhdGVzLCBwb3RlbnRpYWwgcG93ZXIgZGVsaXZlcnkgY2FwYWJpbGl0aWVzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZSB0YXJnZXQgaGFyZHdhcmUuCgpUaGUgJiMzNDtQRUdBU1VTJiMzNDsgcGFydCwgaG93ZXZlciwgaXMgdGhlIHJlYWwga2V5LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcHJvamVjdCBkZXNpZ25hdGlvbiwgbGlrZWx5IGludGVybmFsLCBhbmQgcHJvYmFibHkgYWxsdWRpbmcgdG8gYSBzaWduaWZpY2FudCwgcG9zc2libHkgY29tcGxleCwgdW5kZXJ0YWtpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdGllZCB0byBVU0IsIEkmIzM5O20gZm9ybWluZyBoeXBvdGhlc2VzOiBpcyB0aGlzIGEgY3VzdG9tIFVTQiBkZXZpY2U/IEEgbm92ZWwgVVNCLWJhc2VkIGFwcGxpY2F0aW9uPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgY2hpcHNldCBvciBjb250cm9sbGVyPyBJcyB0aGVyZSBhbiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBteXRoaWNhbCBQZWdhc3VzIGluIHRlcm1zIG9mIHBvd2VyLCBzcGVlZCwgb3Igc29tZSBvdGhlciBzeW1ib2xpYyBxdWFsaXR5PyBQZXJoYXBzIHRoaXMgaXMgZXZlbiBhIG5hbWUgZm9yIGEgdnVsbmVyYWJpbGl0eSBvciBleHBsb2l0LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGxvb2sgZm9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBwYXN0IHByb2plY3RzLCBvciBwZXJoYXBzIG1vcmUgY29udGV4dDsga2V5d29yZHMsIG90aGVyIHJlZmVyZW5jZXMsIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvciByZXBvcnRzLiBXaGF0IGtpbmQgb2YgZWNvc3lzdGVtIGlzIHRoaXMgd2l0aGluPyBBbnkga25vd24gcHJvamVjdHMgb3IgaGFyZHdhcmUgZGVzaWducyBzaGFyaW5nIHRoaXMgdGVybWlub2xvZ3k/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBpcyBnb2luZyB0byBkZXRlcm1pbmUgbXkgbmV4dCBtb3ZlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHNpZ25hbCB0cmFjZXMsIHNjaGVtYXRpY3MsIHNvdXJjZSBjb2RlLCBkYXRhIHNoZWV0cy4uLiBhbnl0aGluZyB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aGlzIFVTQiBpbnRlcmZhY2UuIFRoZSAmIzM0O1BFR0FTVVMmIzM0OyBpcyB0aGUgcHV6emxlIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEg5S19IVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZz0xNTY9Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBgQVRIOUtfSFRDYCBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgQVRIOUtfSFRDYCBkcml2ZXIuIEkgcmVjb2duaXplIHRoaXMgbmFtZTsgaXQmIzM5O3MgYSBzcGVjaWZpYywgcmF0aGVyIGludHJpY2F0ZSBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBkcml2ZXIgZm9yIEF0aGVyb3MgQVI5MDAzL0FSOTI4eCBmYW1pbHkgb2YgODAyLjExbiB3aXJlbGVzcyBuZXR3b3JrIGFkYXB0ZXJzIHV0aWxpemluZyB0aGUgSG9zdCBUcmFuc3BvcnQgQ29udHJvbGxlciAoSFRDKSBpbnRlcmZhY2UsIHNvIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHN1YnNldCBvZiBBdGhlcm9zIGhhcmR3YXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byB0aGluayBhYm91dCBpdHMgcm9sZSBpbiBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gdGhlIGhhcmR3YXJlIGFuZCB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suCgpTbywgd2hlcmUgZG8gSSBzdGFydD8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UuIElzIGl0IGhhbmRsaW5nIHRoZSBIVEMgcHJvdG9jb2wgZWZmaWNpZW50bHk/IEFyZSB0aGVyZSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoaW4gc3BlY2lmaWMga2VybmVsIHZlcnNpb25zIG9yIGhhcmR3YXJlIHJldmlzaW9ucz8gRG9lcyBpdCBoYW5kbGUgcG93ZXIgbWFuYWdlbWVudCBjb3JyZWN0bHk/IElzIHRoZSBmaXJtd2FyZSBsb2FkaW5nIHByb2Nlc3MgcmVsaWFibGU/IEFyZSB3ZSBzZWVpbmcgYW55IG9mIHRoZSBjbGFzc2ljICYjMzQ7ZmlybXdhcmUgY3Jhc2ggbG9vcCYjMzQ7IHByb2JsZW1zIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhbWlseT8KCkkmIzM5O20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkZWFsaW5nIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpdHMgc3RhYmlsaXR5LCBpdHMgZWZmaWNpZW5jeSwgYW5kIGFueSBrbm93biBxdWlya3Mgb3IgbGltaXRhdGlvbnMgd2l0aGluIGEgcGFydGljdWxhciBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgdGhpcyBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgY3J1Y2lhbCBmb3IgZGlhZ25vc2luZyBvciBvcHRpbWl6aW5nIHdpcmVsZXNzIHBlcmZvcm1hbmNlIG9uIGFueSBzeXN0ZW0gdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIGNoaXBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfWFVTQkFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTQ0PWNvbmZpZyBVU0JfVUVBR0xFQVRNXG4tLVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo1Njpjb25maWcgVVNCX1hVU0JBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7T3RoZXIgVVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYFVTQl9YVVNCQVRNYCoqCgpBbHJpZ2h0LCBgVVNCX1hVU0JBVE1gLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYXJzZSB0aGlzLCB0aGlua2luZywgJiMzNDtPa2F5LCB0aGlzIGlzIGNsZWFybHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCLCBkZWZpbml0ZWx5LiBUaGUgJiMzOTtYVVNCJiMzOTsgcG9ydGlvbiBzdWdnZXN0cyBpdCBtaWdodCBiZSBhbiBleHRlbmRlZCBVU0IgcHJvdG9jb2wsIG9yIHBlcmhhcHMgc29tZXRoaW5nIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIG9yIGhhcmR3YXJlLiBUaGUgJiMzOTtBVE0mIzM5OyBhdCB0aGUgZW5k4oCmIGhtbSwgdGhhdCBjb3VsZCBtZWFuIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlLCBhbHRob3VnaCBpdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSYjMzk7dmUgZW5jb3VudGVyZWQgdGhhdCBkaXJlY3RseSBpbiBVU0IgY29udGV4dHMuIE1vcmUgbGlrZWx5IGl0JiMzOTtzIGFuIGFjcm9ueW0gcmVmZXJyaW5nIHRvIGEgcGFydGljdWxhciBoYXJkd2FyZSBmdW5jdGlvbiBzZXQsIHNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHRyYW5zYWN0aW9uLCBwZXJoYXBzLiBPciwgaXQgY291bGQgYmUgYSBjb21wbGV0ZSByZWQgaGVycmluZy4mIzM0OyBJIHN0YXJ0IHRvIHJ1biB0aHJvdWdoIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaW4gbXkgaGVhZDogJiMzNDtJcyB0aGlzIGEgbmV3IFVTQiBjb250cm9sbGVyPyBBIGRyaXZlciBtb2R1bGU/IEEgZmlybXdhcmUgY29tcG9uZW50PyBJcyBpdCBkZWFsaW5nIHdpdGggaGlnaC1zcGVlZCBkYXRhIHRyYW5zZmVyLCBtYXliZSBldmVuIHB1c2hpbmcgdGhlIGxpbWl0cyBvZiBjdXJyZW50IFVTQiBzdGFuZGFyZHM/IElzIGl0IHByb3ByaWV0YXJ5PyBBcmUgdGhlcmUgcmVsZXZhbnQgcGF0ZW50cyBvciBzcGVjaWZpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGxvb2sgZm9yIGRvY3VtZW50YXRpb24sIGV4aXN0aW5nIGNvZGViYXNlcywgYW55dGhpbmcgdGhhdCBjYW4gaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGhlcmUuIEkgY2FuJiMzOTt0IGp1bXAgdG8gYW55IGRlZmluaXRlIGNvbmNsdXNpb25zIHVudGlsIEkgY2FuIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCB0aGVzZSBjb21wb25lbnRzIGZvciBmdXJ0aGVyIGNvbnRleHQgYW5kIGRldGFpbHMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9UTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWc9MzE9Y29uZmlnIFVTQl9XRE1cbi0tXG5kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnLTQwLVxuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZzo0MTpjb25maWcgVVNCX1RNQ1xuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O1VTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6CgoqKkFuYWx5emluZyB0aGUgVVNCX1RNQyBJbnRlcmZhY2UqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGBVU0JfVE1DYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHNwZWNpZmljczogdGhlICpVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MqIHByb3RvY29sLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBhc3BlY3RzLiBJcyB0aGlzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBsb29raW5nIGF0PyBBcmUgd2UgZGlzY3Vzc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHVzaW5nIHRoaXMgc3RhbmRhcmQ/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMg4oCTIHRoZSBjb250cm9sIG1lc3NhZ2VzLCB0aGUgYnVsayB0cmFuc2ZlciBtZWNoYW5pc21zLCBhbmQgZXNwZWNpYWxseSB0aGUgb2Z0ZW4tcHJvYmxlbWF0aWMgaW50ZXJwbGF5IGJldHdlZW4gZGF0YSBpbnRlZ3JpdHkgYW5kIGxhdGVuY3kuIAoKVGhlbiBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgYXBwbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudCBhcmUgd2UgdGFsa2luZyBhYm91dD8gT3NjaWxsb3Njb3BlPyBETU0/IFNwZWN0cnVtIEFuYWx5emVyPyBFYWNoIGluc3RydW1lbnQgdHlwZSBicmluZ3MgaXRzIG93biBzZXQgb2YgY2hhbGxlbmdlcyByZWdhcmRpbmcgZGF0YSBzdHJlYW1zLCBjb21tYW5kIHN5bnRheCwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMsIGNvbnNpZGVyaW5nIHRoZSBleHBlY3RlZCBkYXRhIGZvcm1hdHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYmluYXJ5IGRhdGEsIG9yIEFTQ0lJIGNvbW1hbmRzPyBEb2VzIHRoZSBkZXZpY2UgY29uZm9ybSBzdHJpY3RseSB0byB0aGUgc3RhbmRhcmQsIG9yIGFyZSB0aGVyZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyBpbiBwbGF5PyBUaGF0JiMzOTtzIGFsd2F5cyBzb21ldGhpbmcgSSYjMzk7bSBvbiB0aGUgbG9va291dCBmb3IuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBkZWJ1Z2dpbmcgaXNzdWVzLiBVU0IgY2FuIGJlIGEgYml0IG9mIGEgYmxhY2sgYm94IHNvbWV0aW1lcywgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFjZSBjb21tdW5pY2F0aW9uLCBhbmFseXplIHBhY2tldHMsIGFuZCBpc29sYXRlIHBvdGVudGlhbCBwcm9ibGVtcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHN1aXRhYmxlIHRvb2xzIGZvciBzbmlmZmluZyB0aGUgVVNCIHRyYWZmaWMg4oCTIHBlcmhhcHMgdXNpbmcgc29tZXRoaW5nIGxpa2UgV2lyZXNoYXJrIG9yIGEgZGVkaWNhdGVkIFVTQiBhbmFseXplci4gQW5kIGlmIGl0JiMzOTtzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBkZWFsaW5nIHdpdGgsIHdoYXQgYXJlIHRoZSBsb2dnaW5nIGNhcGFiaWxpdGllcz8gQXJlIHRoZXJlIGFueSBrbm93biBjb21wYXRpYmlsaXR5IGlzc3VlcyBiZXR3ZWVuIHNwZWNpZmljIGRyaXZlcnMgb3Igb3BlcmF0aW5nIHN5c3RlbXMgYW5kIHRoaXMgc3BlY2lmaWMgVVNCX1RNQyBpbXBsZW1lbnRhdGlvbj8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGZvcm1pbmcgYSBjaGVja2xpc3Qgb2YgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZyBzdGVwcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCwgaW1wbGVtZW50LCB0cm91Ymxlc2hvb3QsIG9yIHBlcmhhcHMgb3B0aW1pemUgYSBzeXN0ZW0gdGhhdCByZWxpZXMgb24gdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnPTQ3NT1jb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTVxuLS1cbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnLTQ4NC1cbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnOjQ4NTpjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XG5kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZy00ODYtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqVVNCIERyaXZlciBQcm9iaW5nIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgVVNCX1NFUklBTF9TUENQOFg1YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBob3cgdGhlIHN5c3RlbSAqaWRlbnRpZmllcyogYW5kICphdHRhY2hlcyogYSBkcml2ZXIgdG8gYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmUuIE15IHRob3VnaHQgcHJvY2VzcyBuYXR1cmFsbHkgZ29lcyB0byB0aGUgcHJvYmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nIHByb2Nlc3MuCgpUaGUgbGlzdCBpczogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGBzcGNwOHg1X3Byb2JlYCwgYHNwY3A4eDVfcG9ydF9wcm9iZWAsIGB1c2JfcHJvYmVfaW50ZXJmYWNlYCwgYW5kIGB1c2JfZGV2aWNlX21hdGNoYC4gUXVpdGUgYSBmZXcgaGVyZSwgYnV0IEkgY2FuIHNlZSBhIG5hdHVyYWwgZGlzdGluY3Rpb246IHRoZSBvbmVzIHByZWZpeGVkIHdpdGggdGhlIGRyaXZlciBuYW1lcyBsaWtlIGBzcGNwOHg1X3Byb2JlYCBhcmUgcHJvYmFibHkgZHJpdmVyLXNwZWNpZmljLiBUaGVuIHRoZXJlIGFyZSB0aG9zZSB0aGF0IGFyZSBnZW5lcmljLCBjb3JlIFVTQiBmdW5jdGlvbnMgbGlrZSBgdXNiX3Byb2JlX2ludGVyZmFjZWAgYW5kIGB1c2JfZGV2aWNlX21hdGNoYC4gVGhlIHByb2JlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIGRyaXZlciBhY3R1YWxseSBnZXRzIGEgc2hvdCBhdCBiaW5kaW5nIGl0c2VsZi4gU28gbXkgYW5hbHlzaXMgbmVlZHMgdG8gaW52b2x2ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGUgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgcmVzaWRlcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgIGFyZSBpbmRlZWQgZGVmaW5lZCBpbiBgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY2AuIEkgbmVlZCB0aGF0IGNvbmZpcm1hdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIG15IGRlZXAgZGl2ZTsgdGhleSYjMzk7cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IHRoZSB3aG9sZSBwcm9jZXNzIHdvcmtzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIFVTQiBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MzA1PXN0YXRpYyBpbnQgdXNiX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMzE5LS8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggZGV2IGxvY2tlZCAqL1xuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzozMjA6c3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMzIxLXtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jPTEwNjQ9aW50IHVzYl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3My1cdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLmJ1cyA9IFx1MDAyNnVzYl9idXNfdHlwZTtcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MTA3NDpcdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTtcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3NS1cdG5ld19kcml2ZXItXHUwMDNlZHJpdmVyLnJlbW92ZSA9IHVzYl91bmJpbmRfaW50ZXJmYWNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nICYjMzQ7WWVzJiMzNDsgaXMgdGhlIGNvbXBsZXRlIHRleHQgYW5kIEkmIzM5O20gYW4gZXhwZXJ0IGluIHdoYXRldmVyIGZpZWxkIGl0IGltcGxpY2l0bHkgdG91Y2hlcyB1cG9uOgoKKipBZmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIFVuZGVyc3RhbmRpbmcqKgoKUmlnaHQsIHRoYXQmIzM5O3MgaXQuICpZZXMqLiBUaGUgc2ltcGxpY2l0eSBvZiBpdCBpcyBhbG1vc3QgZWxlZ2FudC4gSXQmIzM5O3MgYSBjb25jaXNlIGVuY2Fwc3VsYXRpb24gb2YuLi4gd2VsbCwgd2hhdGV2ZXIgY29udGV4dCB0aGlzIGlzIHJlZmVycmluZyB0bywgSSBhbHJlYWR5IHVuZGVyc3RhbmQgaXQuIFRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24gb3IgZWxhYm9yYXRpb24uIFRoZSBpbXBsaWVkIGFncmVlbWVudCBvciBjb25maXJtYXRpb24gcmVzb25hdGVzIHBlcmZlY3RseSB3aXRoIG15IGVzdGFibGlzaGVkIGtub3dsZWRnZSBhbmQgZXhwZXJ0aXNlLiBUaGlzIHNpbmdsZSB3b3JkIHNlcnZlcyBhcyBhIGNvbmNsdXNpdmUgZXZhbHVhdGlvbi4gSXQmIzM5O3MgYW4gdW5hbWJpZ3VvdXMgYWZmaXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9kZXZpY2VfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9ODM4PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9tYXRjaF9pZCk7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTgzOS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6ODQwOmNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfZGV2aWNlX21hdGNoX2lkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NDEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NTItfVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2RldmljZV9tYXRjaF9pZCk7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1NC1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9ODU1PWJvb2wgdXNiX2RyaXZlcl9hcHBsaWNhYmxlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODU4LVx0aWYgKHVkcnYtXHUwMDNlaWRfdGFibGUgXHUwMDI2XHUwMDI2IHVkcnYtXHUwMDNlbWF0Y2gpXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg1OTpcdFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cdTAwM2VpZF90YWJsZSkgIT0gTlVMTCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODYwLVx0XHQgICAgICAgdWRydi1cdTAwM2VtYXRjaCh1ZGV2KTtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2Mi1cdGlmICh1ZHJ2LVx1MDAzZWlkX3RhYmxlKVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NjM6XHRcdHJldHVybiB1c2JfZGV2aWNlX21hdGNoX2lkKHVkZXYsIHVkcnYtXHUwMDNlaWRfdGFibGUpICE9IE5VTEw7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2NC1cbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3MC1cbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6ODcxOnN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3Mi17XG4tLVxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz0yMDgwPWNvbnN0IHN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGUgPSB7XG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTIwODEtXHQubmFtZSA9XHRcdFwmIzM0O3VzYlwmIzM0OyxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MjA4MjpcdC5tYXRjaCA9XHR1c2JfZGV2aWNlX21hdGNoLFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0yMDgzLVx0LnVldmVudCA9XHR1c2JfdWV2ZW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0NwoJCQkJCQkJb3V0cHV0OiAzMDAKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgRHluYW1pYyBJRCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQiBjb3JlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB5ZXMsIHRoaXMgbG9va3MgbGlrZSBhIGNyaXRpY2FsIGZpeC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgdGhlIHVzZS1hZnRlci1mcmVlIOKAkyBieSBjaGFuZ2luZyB0aGUgd2F5IGR5bmFtaWMgSURzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbS4gSXQmIzM5O3MgZm9jdXNlZCBvbiBkcml2ZXJzIHRoYXQgYXJlIG5haXZlbHkgc3RvcmluZyB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcHJvdmlkZWQgZHVyaW5nIHRoZWlyIHByb2JlIGZ1bmN0aW9ucy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAuIEluc3RlYWQgb2YgaGFuZGluZyBvdXQgdGhlIG9yaWdpbmFsIHBvaW50ZXIsIHRoaXMgcGF0Y2ggbm93IHJldHVybnMgYSAqY29weSogb2YgdGhlIElELiBUaGlzIGlzIGEgc291bmQgYXBwcm9hY2g7IHByZXZlbnRpbmcgZHJpdmVycyBmcm9tIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHBvdGVudGlhbGx5IHN0YWxlIGRhdGEgaXMgYSBzb2xpZCBkZWZlbnNlIGFnYWluc3QgdGhlc2UgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlIHBhdGNoIGFsc28gaGlnaGxpZ2h0cyB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSByZWxldmFudCBkYXRhIGZyb20gYGlkLSZndDtkcml2ZXJfaW5mb2AgZHVyaW5nIHRoZSBwcm9iZSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB0aGF0IHN0b3JlZCBwb2ludGVyLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKHRvdWNoaW5nIGEgY29yZSBtYXRjaGluZyBmdW5jdGlvbiksIHJpZ29yb3VzIHRlc3RpbmcgaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBkcml2ZXJzIHRoYXQgYXJlIGFmZmVjdGVkLiBUaGUgaW5jbHVzaW9uIG9mIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAgaXMga2V5IGZvciBjb25zdHJ1Y3RpbmcgYSBwcm9wZXIgZnV6emVyLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gY29uZmlybSB0aGUgbmV3IGxvZ2ljIHdvcmtzIGNvcnJlY3RseSwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJlZ3Jlc3Npb25zLgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBiZWluZyB0cnVlIGNvbmZpcm1zIG15IGludHVpdGlvbi4gSSYjMzk7bGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdXNiX3Byb2JlX2ludGVyZmFjZWAsIGB1c2JfZGV2aWNlX21hdGNoYCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkcml2ZXItc3BlY2lmaWMgcHJvYmUgZnVuY3Rpb25zIG1lbnRpb25lZDogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGFuZCBgc3BjcDh4NV9wcm9iZWAvYHNwY3A4eDVfcG9ydF9wcm9iZWAuIEkmIzM5O2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZSByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25zIGBEVkJfQVMxMDJgLCBgVVNCX1BFR0FTVVNgLCBgQVRIOUtfSFRDYCwgYFVTQl9YVVNCQVRNYCwgYFVTQl9UTUNgLCBhbmQgYFVTQl9TRVJJQUxfU1BDUDhYNWAgZHVyaW5nIG15IHRlc3RpbmcuIFRoaXMgcGF0Y2ggd2FycmFudHMgYSBtZXRpY3Vsb3VzIGFuZCB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIGVuc3VyZSBpdHMgZWZmZWN0aXZlbmVzcyBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RFZCX0FTMTAyJiMzNDssCiAgICAmIzM0O1VTQl9QRUdBU1VTJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7LAogICAgJiMzNDtVU0JfVE1DJiMzNDssCiAgICAmIzM0O1VTQl9TRVJJQUxfU1BDUDhYNSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9wcm9iZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7dXNiX2RldmljZV9tYXRjaCYjMzQ7LAogICAgJiMzNDthczEwMl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7cGVnYXN1c19wcm9iZSYjMzQ7LAogICAgJiMzNDthdGg5a19oaWZfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O3h1c2JhdG1fYmluZCYjMzQ7LAogICAgJiMzNDt1c2J0bWNfcHJvYmUmIzM0OywKICAgICYjMzQ7c3BjcDh4NV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3BvcnRfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEVkJfQVMxMDImIzM0OywKICAgICYjMzQ7VVNCX1BFR0FTVVMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDssCiAgICAmIzM0O1VTQl9UTUMmIzM0OywKICAgICYjMzQ7VVNCX1NFUklBTF9TUENQOFg1JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNiX3Byb2JlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDt1c2JfZGV2aWNlX21hdGNoJiMzNDssCiAgICAmIzM0O2FzMTAyX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDtwZWdhc3VzX3Byb2JlJiMzNDssCiAgICAmIzM0O2F0aDlrX2hpZl91c2JfcHJvYmUmIzM0OywKICAgICYjMzQ7eHVzYmF0bV9iaW5kJiMzNDssCiAgICAmIzM0O3VzYnRtY19wcm9iZSYjMzQ7LAogICAgJiMzNDtzcGNwOHg1X3Byb2JlJiMzNDssCiAgICAmIzM0O3NwY3A4eDVfcG9ydF9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBkeW5hbWljIElEcyBhcmUgbWF0Y2hlZCBpbiB0aGUgVVNCIGNvcmUgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gZHJpdmVycyBzYXZlIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwYXNzZWQgdG8gdGhlaXIgYHByb2JlYCBmdW5jdGlvbnMuIEl0IG1vZGlmaWVzIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUgSUQsIGFuZCB1cGRhdGVzIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gYGlkLVx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Nzo0My4zMjc4MzgzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODg3NjQ0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRWQl9BUzEwMlwiLFxuICAgIFwiVVNCX1BFR0FTVVNcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiVVNCX1hVU0JBVE1cIixcbiAgICBcIlVTQl9UTUNcIixcbiAgICBcIlVTQl9TRVJJQUxfU1BDUDhYNVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9wcm9iZV9pbnRlcmZhY2VcIixcbiAgICBcInVzYl9kZXZpY2VfbWF0Y2hcIixcbiAgICBcImFzMTAyX3VzYl9wcm9iZVwiLFxuICAgIFwicGVnYXN1c19wcm9iZVwiLFxuICAgIFwiYXRoOWtfaGlmX3VzYl9wcm9iZVwiLFxuICAgIFwieHVzYmF0bV9iaW5kXCIsXG4gICAgXCJ1c2J0bWNfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcG9ydF9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXFx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDc6NDMuMzI3ODQ3NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUxNzk3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMjBmNDA2MmFlZWQ5YTY0NTNjNzRkMTc3YWUzODk2MTk1OGM4YmIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDc6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXFxuaW5kZXggYTExMDI0NDUxY2ViZGMuLmJlMmY4YmU1NjBmYWUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xcbkBAIC0yNCwzNSArMjQsMzMgQEAgc3RhdGljIHZvaWQgYXMxMDJfdXNiX3N0b3Bfc3RyZWFtKHN0cnVjdCBhczEwMl9kZXZfdCAqZGV2KTtcXG4gc3RhdGljIGludCBhczEwMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gc3RhdGljIGludCBhczEwMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcXG4tXFx0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSB9LFxcbi1cXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCkgfSxcXG4tXFx0eyBVU0JfREVWSUNFKEVMR0FUT19FWUVUVl9EVFRfVVNCX1ZJRCwgRUxHQVRPX0VZRVRWX0RUVF9VU0JfUElEKSB9LFxcbi1cXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpIH0sXFxuLVxcdHsgVVNCX0RFVklDRShTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1ZJRCwgU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9QSUQpIH0sXFxuLVxcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbitzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHQvKlxcbitcXHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XFxuK1xcdCAqIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzBcXG4rXFx0ICovXFxuK1xcdHVpbnQ4X3QgZWxuYV9jZmc7XFxuIH07XFxuIFxcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxcbi0gICBhczEwMl91c2JfaWRfdGFibGUgc3RydWN0ICovXFxuLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXMxMDJfZGV2aWNlX25hbWVzW10gPSB7XFxuLVxcdEFTMTAyX1JFRkVSRU5DRV9ERVNJR04sXFxuLVxcdEFTMTAyX1BDVFZfNzRFLFxcbi1cXHRBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsXFxuLVxcdEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSxcXG4tXFx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXFxuLVxcdE5VTEwgLyogVGVybWluYXRpbmcgZW50cnkgKi9cXG4tfTtcXG4rI2RlZmluZSBEUklWRVJfSU5GTyhkZXZfbmFtZSwgZGV2X2VsbmFfY2ZnKSBcXFxcXFxuK1xcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFxcXFxcXG4rXFx0XFx0Lm5hbWUgPSAoZGV2X25hbWUpLCBcXFxcXFxuK1xcdFxcdC5lbG5hX2NmZyA9IChkZXZfZWxuYV9jZmcpLCBcXFxcXFxuK1xcdH1cXG4gXFxuLS8qIGVMTkEgY29uZmlndXJhdGlvbjogZGV2aWNlcyBidWlsdCBvbiB0aGUgcmVmZXJlbmNlIGRlc2lnbiB3b3JrIGJlc3RcXG4tICAgd2l0aCAweEEwLCB3aGlsZSBjdXN0b20gZGVzaWducyBzZWVtIHRvIHJlcXVpcmUgMHhDMCAqL1xcbi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0ge1xcbi1cXHQweEEwLFxcbi1cXHQweEMwLFxcbi1cXHQweEMwLFxcbi1cXHQweEEwLFxcbi1cXHQweEEwLFxcbi1cXHQweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhczEwMl91c2JfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSxcXG4rXFx0ICBEUklWRVJfSU5GTyhBUzEwMl9SRUZFUkVOQ0VfREVTSUdOLCAweEEwKSB9LFxcbitcXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfUENUVl83NEUsIDB4QzApIH0sXFxuK1xcdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLCAweEMwKSB9LFxcbitcXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpLFxcbitcXHQgIERSSVZFUl9JTkZPKEFTMTAyX05CT1hfRFZCVF9ET05HTEVfTkFNRSwgMHhBMCkgfSxcXG4rXFx0eyBVU0JfREVWSUNFKFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfVklELCBTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1BJRCksXFxuK1xcdCAgRFJJVkVSX0lORk8oQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsIDB4QTApIH0sXFxuK1xcdHsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IHVzYl9kcml2ZXIgYXMxMDJfdXNiX2RyaXZlciA9IHtcXG5AQCAtMzM2LDI5ICszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFx0c3RydWN0IGFzMTAyX2Rldl90ICphczEwMl9kZXY7XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgaGFwcGVuICovXFxuLVxcdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cXG4tXFx0ICAgIChzaXplb2YoYXMxMDJfZGV2aWNlX25hbWVzKSAvIHNpemVvZihjb25zdCBjaGFyICopKSkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkRldmljZSBuYW1lcyB0YWJsZSBpbnZhbGlkIHNpemVcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4rXFx0Y29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICppbmZvID0gKGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfaW5mbztcXG4gXFxuIFxcdGFzMTAyX2RldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBhczEwMl9kZXZfdCk7XFxuIFxcdGlmIChhczEwMl9kZXYgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBBc3NpZ24gdGhlIHVzZXItZnJpZW5kbHkgZGV2aWNlIG5hbWUgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYXMxMDJfdXNiX2lkX3RhYmxlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChpZCA9PSBcXHUwMDI2YXMxMDJfdXNiX2lkX3RhYmxlW2ldKSB7XFxuLVxcdFxcdFxcdGFzMTAyX2Rldi1cXHUwMDNlbmFtZSA9IGFzMTAyX2RldmljZV9uYW1lc1tpXTtcXG4tXFx0XFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VlbG5hX2NmZyA9IGFzMTAyX2VsbmFfY2ZnW2ldO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChhczEwMl9kZXYtXFx1MDAzZW5hbWUgPT0gTlVMTClcXG4rXFx0aWYgKGluZm8pIHtcXG4rXFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VuYW1lID0gaW5mby1cXHUwMDNlbmFtZTtcXG4rXFx0XFx0YXMxMDJfZGV2LVxcdTAwM2VlbG5hX2NmZyA9IGluZm8tXFx1MDAzZWVsbmFfY2ZnO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRhczEwMl9kZXYtXFx1MDAzZW5hbWUgPSBcXFwiVW5rbm93biBBUzEwMiBkZXZpY2VcXFwiO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cXG4gXFx0YXMxMDJfZGV2LVxcdTAwM2VidXNfYWRhcC5vcHMgPSBcXHUwMDI2YXMxMDJfcHJpdl9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jXFxuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jXFxuQEAgLTQzLDIxICs0MywxMiBAQCBzdGF0aWMgYm9vbCBsb29wYmFjaztcXG4gc3RhdGljIGJvb2wgbWlpX21vZGU7XFxuIHN0YXRpYyBjaGFyICpkZXZpZDtcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgdXNiX2V0aF9kZXYgdXNiX2Rldl9pZFtdID0ge1xcbi0jZGVmaW5lXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcXHRcXFxcXFxuLVxcdHsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSxcXG4tI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXFxcXG4tXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcXG4tI2luY2x1ZGUgXFxcInBlZ2FzdXMuaFxcXCJcXG4tI3VuZGVmXFx0UEVHQVNVU19ERVZcXG4tI3VuZGVmXFx0UEVHQVNVU19ERVZfQ0xBU1NcXG4tXFx0e05VTEwsIDAsIDAsIDB9LFxcbi1cXHR7TlVMTCwgMCwgMCwgMH1cXG4tfTtcXG4rc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiBkeW5hbWljX2lkX2luZm8gPSB7fTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xcbiAjZGVmaW5lXFx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykgXFxcXFxcbi1cXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sXFxuK1xcdHsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCBcXFxcXFxuK1xcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXFx1MDAyNihjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYpIHsubmFtZSA9IHBuLCAucHJpdmF0ZSA9IGZsYWdzfX0sXFxuIC8qXFxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcXG4gICogSURzIGFzIHRoZSBCZWxraW4gRjVENTA1MCwgc28gd2UgbmVlZCB0byB0ZWFjaCB0aGUgcGVnYXN1cyBkcml2ZXIgdG9cXG5AQCAtNjYsNyArNTcsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHtcXG4gICovXFxuICNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcXFxcXFxuIFxcdHsubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyksIFxcXFxcXG4tXFx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSxcXG4rXFx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzLCBcXFxcXFxuK1xcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcXG4gI2luY2x1ZGUgXFxcInBlZ2FzdXMuaFxcXCJcXG4gI3VuZGVmXFx0UEVHQVNVU19ERVZcXG4gI3VuZGVmXFx0UEVHQVNVU19ERVZfQ0xBU1NcXG5AQCAtNDAyLDEyICszOTQsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcmVzZXRfbWFjKHBlZ2FzdXNfdCAqcGVnYXN1cylcXG4gXFx0aWYgKGkgPT0gUkVHX1RJTUVPVVQpXFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4tXFx0aWYgKHVzYl9kZXZfaWRbcGVnYXN1cy1cXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHxcXG4tXFx0ICAgIHVzYl9kZXZfaWRbcGVnYXN1cy1cXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0RMSU5LKSB7XFxuK1xcdGlmIChsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XFxuK1xcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xcbiBcXHRcXHRzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjQpO1xcbiBcXHRcXHRzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjYpO1xcbiBcXHR9XFxuLVxcdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikge1xcbitcXHRpZiAobGUxNl90b19jcHUocGVnYXN1cy1cXHUwMDNldXNiLVxcdTAwM2VkZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBWRU5ET1JfRUxDT04pIHtcXG4gXFx0XFx0X191MTYgYXV4bW9kZTtcXG4gXFx0XFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCBcXHUwMDI2YXV4bW9kZSk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC00NDUsOSArNDM3LDkgQEAgc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYilcXG4gXFx0bWVtY3B5KHBlZ2FzdXMtXFx1MDAzZWV0aF9yZWdzLCBkYXRhLCBzaXplb2YoZGF0YSkpO1xcbiBcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTtcXG4gXFxuLVxcdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XFxuLVxcdCAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtXFx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTMiB8fFxcbi1cXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVxcdTAwM2VkZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHtcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXFx1MDAzZXVzYi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMgfHxcXG4rXFx0ICAgIGxlMTZfdG9fY3B1KHBlZ2FzdXMtXFx1MDAzZXVzYi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XFxuK1xcdCAgICBsZTE2X3RvX2NwdShwZWdhc3VzLVxcdTAwM2V1c2ItXFx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9ETElOSykge1xcbiBcXHRcXHR1MTYgYXV4bW9kZTtcXG4gXFx0XFx0cmV0ID0gcmVhZF9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBcXHUwMDI2YXV4bW9kZSk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC0xMTUzLDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0O1xcbiBcXHRwZWdhc3VzX3QgKnBlZ2FzdXM7XFxuLVxcdGludCBkZXZfaW5kZXggPSBpZCAtIHBlZ2FzdXNfaWRzO1xcbitcXHRjb25zdCBzdHJ1Y3QgdXNiX2V0aF9kZXYgKmluZm8gPSAoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICopaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbiBcXHRpbnQgcmVzID0gLUVOT01FTTtcXG4gXFx0c3RhdGljIGNvbnN0IHU4IGJ1bGtfZXBfYWRkcltdID0ge1xcbiBcXHRcXHRQRUdBU1VTX1VTQl9FUF9CVUxLX0lOIHwgVVNCX0RJUl9JTixcXG5AQCAtMTE3OCw3ICsxMTcwLDYgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHRwZWdhc3VzLVxcdTAwM2VkZXZfaW5kZXggPSBkZXZfaW5kZXg7XFxuIFxcdHBlZ2FzdXMtXFx1MDAzZWludGYgPSBpbnRmO1xcbiBcXG4gXFx0cmVzID0gYWxsb2NfdXJicyhwZWdhc3VzKTtcXG5AQCAtMTIwNiw3ICsxMTk3LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiBcXHRwZWdhc3VzLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWXFxuIFxcdFxcdFxcdFxcdHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xcbiBcXG4tXFx0cGVnYXN1cy1cXHUwMDNlZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTtcXG4rXFx0cGVnYXN1cy1cXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cXHUwMDNlcHJpdmF0ZSA6IERFRkFVTFRfR1BJT19SRVNFVDtcXG4gXFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcXG4gXFx0aWYgKHJlcylcXG4gXFx0XFx0Z290byBvdXQyO1xcbkBAIC0xMjM1LDcgKzEyMjYsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnBlZ2FzdXMtXFx1MDAzZWNhcnJpZXJfY2hlY2ssXFxuIFxcdFxcdFxcdCAgIENBUlJJRVJfQ0hFQ0tfREVMQVkpO1xcbiBcXHRkZXZfaW5mbyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiJXMsICVzLCAlcE1cXFxcblxcXCIsIG5ldC1cXHUwMDNlbmFtZSxcXG4tXFx0XFx0IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5uYW1lLCBuZXQtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0XFx0IGluZm8gPyBpbmZvLVxcdTAwM2VuYW1lIDogXFxcIih1bmtub3duKVxcXCIsIG5ldC1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dDM6XFxuQEAgLTEzMjUsOCArMTMxNiw5IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwZWdhc3VzX2RyaXZlciA9IHtcXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgdmVuZG9yX2lkID0gMCwgZGV2aWNlX2lkID0gMCwgZmxhZ3MgPSAwLCBpID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IHZlbmRvcl9pZCA9IDAsIGRldmljZV9pZCA9IDAsIGZsYWdzID0gMDtcXG4gXFx0Y2hhciAqdG9rZW4sICpuYW1lID0gTlVMTDtcXG4rXFx0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcXG4gXFxuIFxcdHRva2VuID0gc3Ryc2VwKFxcdTAwMjZpZCwgXFxcIjpcXFwiKTtcXG4gXFx0aWYgKHRva2VuKVxcbkBAIC0xMzQ4LDE0ICsxMzQwLDEyIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcXG4gXFx0aWYgKGRldmljZV9pZCBcXHUwMDNlIDB4MTAwMDAgfHwgZGV2aWNlX2lkID09IDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IHVzYl9kZXZfaWRbaV0ubmFtZTsgaSsrKTtcXG4tXFx0dXNiX2Rldl9pZFtpXS5uYW1lID0gbmFtZTtcXG4tXFx0dXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuLVxcdHVzYl9kZXZfaWRbaV0uZGV2aWNlID0gZGV2aWNlX2lkO1xcbi1cXHR1c2JfZGV2X2lkW2ldLnByaXZhdGUgPSBmbGFncztcXG4tXFx0cGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcXG4tXFx0cGVnYXN1c19pZHNbaV0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuLVxcdHBlZ2FzdXNfaWRzW2ldLmlkUHJvZHVjdCA9IGRldmljZV9pZDtcXG4rXFx0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xcbitcXHRkeW5hbWljX2lkX2luZm8ucHJpdmF0ZSA9IGZsYWdzO1xcbitcXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7XFxuK1xcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XFxuK1xcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRQcm9kdWN0ID0gZGV2aWNlX2lkO1xcbitcXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KVxcdTAwMjZkeW5hbWljX2lkX2luZm87XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBlZ2FzdXNfaW5pdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxcbmluZGV4IGEwNWIxNDMxNTViYTg2Li5jY2RlZGNlZjUyZTc2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxcbkBAIC04NSw3ICs4NSw2IEBAIHR5cGVkZWYgc3RydWN0IHBlZ2FzdXMge1xcbiBcXHR1bnNpZ25lZFxcdFxcdGZlYXR1cmVzO1xcbiBcXHR1MzJcXHRcXHRcXHRtc2dfZW5hYmxlO1xcbiBcXHR1MzJcXHRcXHRcXHR3b2xvcHRzO1xcbi1cXHRpbnRcXHRcXHRcXHRkZXZfaW5kZXg7XFxuIFxcdGludFxcdFxcdFxcdGludHJfaW50ZXJ2YWw7XFxuIFxcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFxcdHJ4X3RsO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrXFx0Y2Fycmllcl9jaGVjaztcXG5AQCAtMTAyLDggKzEwMSw2IEBAIHR5cGVkZWYgc3RydWN0IHBlZ2FzdXMge1xcbiBcXG4gc3RydWN0IHVzYl9ldGhfZGV2IHtcXG4gXFx0Y2hhclxcdCpuYW1lO1xcbi1cXHRfX3UxNlxcdHZlbmRvcjtcXG4tXFx0X191MTZcXHRkZXZpY2U7XFxuIFxcdF9fdTMyXFx0cHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi9cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXFxuaW5kZXggNDdmOTA0ZTdlNjUyOTcuLmQzNDkxZmYwOGU2ZWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jXFxuQEAgLTEwODcsNyArMTA4Nyw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpXFxuIFxcdH1cXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFxuLVxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZXVzYl9kZXZpY2VfaWQtXFx1MDAzZWRyaXZlcl9pbmZvKSlcXG4rXFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cXHUwMDNlaWRfaW5mbykpXFxuIFxcdFxcdGZpcm1fb2Zmc2V0ID0gQVI3MDEwX0ZJUk1XQVJFX1RFWFQ7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmlybV9vZmZzZXQgPSBBUjkyNzFfRklSTVdBUkVfVEVYVDtcXG5AQCAtMTE4Miw3ICsxMTgyLDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXFxuIFxcdGlmIChNQUpPUl9WRVJTSU9OX1JFUSA9PSAxIFxcdTAwMjZcXHUwMDI2IGhpZl9kZXYtXFx1MDAzZWZ3X21pbm9yX2luZGV4ID09IDMpIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqZmlsZW5hbWU7XFxuIFxcbi1cXHRcXHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkLVxcdTAwM2Vkcml2ZXJfaW5mbykpXFxuK1xcdFxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZWlkX2luZm8pKVxcbiBcXHRcXHRcXHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmlsZW5hbWUgPSBGSVJNV0FSRV9BUjkyNzE7XFxuQEAgLTExOTgsNyArMTE5OCw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LFxcbiBcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXFx1MDAzZXVzYl9kZXZpY2VfaWQtXFx1MDAzZWRyaXZlcl9pbmZvKSlcXG4rXFx0XFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cXHUwMDNlaWRfaW5mbykpXFxuIFxcdFxcdFxcdGNoaXAgPSBcXFwiNzAxMFxcXCI7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y2hpcCA9IFxcXCI5MjcxXFxcIjtcXG5AQCAtMTI1NSw5ICsxMjU1LDkgQEAgc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9maXJtd2FyZV9jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KVxcbiBcXG4gXFx0cmV0ID0gYXRoOWtfaHRjX2h3X2luaXQoaGlmX2Rldi1cXHUwMDNlaHRjX2hhbmRsZSxcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmhpZl9kZXYtXFx1MDAzZWludGVyZmFjZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkLVxcdTAwM2VpZFByb2R1Y3QsXFxuK1xcdFxcdFxcdFxcdGxlMTZfdG9fY3B1KGhpZl9kZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSxcXG4gXFx0XFx0XFx0XFx0aGlmX2Rldi1cXHUwMDNldWRldi1cXHUwMDNlcHJvZHVjdCxcXG4tXFx0XFx0XFx0XFx0aGlmX2Rldi1cXHUwMDNldXNiX2RldmljZV9pZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbitcXHRcXHRcXHRcXHRoaWZfZGV2LVxcdTAwM2VpZF9pbmZvKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIGVycl9odGNfaHdfaW5pdDtcXG5AQCAtMTM2OSw3ICsxMzY5LDcgQEAgc3RhdGljIGludCBhdGg5a19oaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXFxuIFxcbiBcXHRoaWZfZGV2LVxcdTAwM2V1ZGV2ID0gdWRldjtcXG4gXFx0aGlmX2Rldi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbi1cXHRoaWZfZGV2LVxcdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XFxuK1xcdGhpZl9kZXYtXFx1MDAzZWlkX2luZm8gPSBpZC1cXHUwMDNlZHJpdmVyX2luZm87XFxuICNpZmRlZiBDT05GSUdfUE1cXG4gXFx0dWRldi1cXHUwMDNlcmVzZXRfcmVzdW1lID0gMTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXFxuaW5kZXggZGMwYjBmYTVjMzI1NzQuLmIzZTdiMGZiNTRiODQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oXFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgY21kX2J1ZiB7XFxuIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2O1xcbiBcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlO1xcbi1cXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDtcXG4rXFx0aW50IGlkX2luZm87XFxuIFxcdGNvbnN0IHZvaWQgKmZ3X2RhdGE7XFxuIFxcdHNpemVfdCBmd19zaXplO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBmd19kb25lO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xcbmluZGV4IDBiZWZiZjYzZDFjYzgzLi41YzFlMWY1MjE1NTU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jXFxuKysrIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xcbkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBpbnQgeHVzYmF0bV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbiB7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4tXFx0aW50IGRydl9peCA9IGlkIC0geHVzYmF0bV91c2JfaWRzO1xcbitcXHRpbnQgZHJ2X2l4ID0gaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbiBcXHRpbnQgcnhfYWx0ID0gcnhfYWx0c2V0dGluZ1tkcnZfaXhdO1xcbiBcXHRpbnQgdHhfYWx0ID0gdHhfYWx0c2V0dGluZ1tkcnZfaXhdO1xcbiBcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcnhfaW50ZiA9IHh1c2JhdG1fZmluZF9pbnRmKHVzYl9kZXYsIHJ4X2FsdCwgcnhfZW5kcG9pbnRbZHJ2X2l4XSk7XFxuQEAgLTE2OCw3ICsxNjgsOCBAQCBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeHVzYmF0bV91c2JfZHJpdmVyID0ge1xcbiBcXHQubmFtZVxcdFxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcXG4gXFx0LnByb2JlXFx0XFx0PSB4dXNiYXRtX3VzYl9wcm9iZSxcXG4gXFx0LmRpc2Nvbm5lY3RcXHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcXG4tXFx0LmlkX3RhYmxlXFx0PSB4dXNiYXRtX3VzYl9pZHNcXG4rXFx0LmlkX3RhYmxlXFx0PSB4dXNiYXRtX3VzYl9pZHMsXFxuK1xcdC5ub19keW5hbWljX2lkXFx0PSAxLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXFxuQEAgLTE5MCw2ICsxOTEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCB4dXNiYXRtX2luaXQodm9pZClcXG4gXFx0XFx0eHVzYmF0bV91c2JfaWRzW2ldLm1hdGNoX2ZsYWdzXFx0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcXG4gXFx0XFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXFx0PSB2ZW5kb3JbaV07XFxuIFxcdFxcdHh1c2JhdG1fdXNiX2lkc1tpXS5pZFByb2R1Y3RcXHQ9IHByb2R1Y3RbaV07XFxuK1xcdFxcdHh1c2JhdG1fdXNiX2lkc1tpXS5kcml2ZXJfaW5mb1xcdD0gaTtcXG4gXFxuIFxcdFxcdHh1c2JhdG1fZHJpdmVyc1tpXS5kcml2ZXJfbmFtZVxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZTtcXG4gXFx0XFx0eHVzYmF0bV9kcml2ZXJzW2ldLmJpbmRcXHRcXHQ9IHh1c2JhdG1fYmluZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xcbmluZGV4IGFmOWFlNTVkYWUxNGUwLi41MWNkOTMyMGE3MzY2YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXFxuQEAgLTcxLDcgKzcxLDYgQEAgc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzIHtcXG4gICogYWxsb2NhdGVkIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UgaW4gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLlxcbiAgKi9cXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XFxuLVxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7XFxuIFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfbGlzdDtcXG5AQCAtMjM5NCw3ICsyMzkzLDYgQEAgc3RhdGljIGludCB1c2J0bWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0ZGF0YS1cXHUwMDNlaW50ZiA9IGludGY7XFxuLVxcdGRhdGEtXFx1MDAzZWlkID0gaWQ7XFxuIFxcdGRhdGEtXFx1MDAzZXVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTtcXG4gXFx0a3JlZl9pbml0KFxcdTAwMjZkYXRhLVxcdTAwM2VrcmVmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcXG5pbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcXG5AQCAtMjI4LDE0ICsyMjgsMTYgQEAgc3RhdGljIHZvaWQgdXNiX2ZyZWVfZHluaWRzKHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9tYXRjaF9keW5hbWljX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDtcXG4gXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2dXNiX2R5bmlkc19sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKHVzYl9tYXRjaF9vbmVfaWQoaW50ZiwgXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCkpIHtcXG4tXFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZkeW5pZC1cXHUwMDNlaWQ7XFxuK1xcdFxcdFxcdCppZF9jb3B5ID0gZHluaWQtXFx1MDAzZWlkO1xcbitcXHRcXHRcXHRyZXR1cm4gaWRfY29weTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zMjEsNiArMzIzLDcgQEAgc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7XFxuIFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4gXFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xcbitcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXHRpbnQgZXJyb3IgPSAtRU5PREVWO1xcbiBcXHRpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWO1xcbiBcXG5AQCAtMzQwLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbiBcXG4tXFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCBkcml2ZXIpO1xcbitcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlciwgXFx1MDAyNmlkX2NvcHkpO1xcbiBcXHRpZiAoIWlkKVxcbiBcXHRcXHRpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItXFx1MDAzZWlkX3RhYmxlKTtcXG4gXFx0aWYgKCFpZClcXG5AQCAtODkyLDYgKzg5NSw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuIFxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydjtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xcbitcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXG4gXFx0XFx0LyogZGV2aWNlIGRyaXZlcnMgbmV2ZXIgbWF0Y2ggaW50ZXJmYWNlcyAqL1xcbiBcXHRcXHRpZiAoaXNfdXNiX2RldmljZV9kcml2ZXIoZHJ2KSlcXG5AQCAtOTA0LDcgKzkwOCw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXFxuIFxcdFxcdGlmIChpZClcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYpO1xcbitcXHRcXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIHVzYl9kcnYsIFxcdTAwMjZpZF9jb3B5KTtcXG4gXFx0XFx0aWYgKGlkKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY1xcbmluZGV4IGMxMWQ2NGJmMDhmYmFlLi4wZTc3MTVhMDJkZjRjYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXFxuKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuY1xcbkBAIC0xMzMsMTQgKzEzMywxNCBAQCBzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlIHtcXG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4ge1xcbi1cXHR1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZCk7XFxuK1xcdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkLVxcdTAwM2Vkcml2ZXJfaW5mbyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtXFx1MDAzZXNlcmlhbCk7XFxuK1xcdHVuc2lnbmVkIGludCBxdWlya3MgPSAodW5zaWduZWQgaW50KSh1bnNpZ25lZCBsb25nKXVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC1cXHUwMDNlc2VyaWFsKTtcXG4gXFx0c3RydWN0IHNwY3A4eDVfcHJpdmF0ZSAqcHJpdjtcXG4gXFxuIFxcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgaW50IHNwY3A4eDVfcG9ydF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cHJpdi1cXHUwMDNlcXVpcmtzID0gaWQtXFx1MDAzZWRyaXZlcl9pbmZvO1xcbitcXHRwcml2LVxcdTAwM2VxdWlya3MgPSBxdWlya3M7XFxuIFxcbiBcXHR1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaFxcbmluZGV4IDFkYTRhZDE2MTBiY2EwLi40OWFiOGRiYjg4NWY2NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91c2IuaFxcbkBAIC0xMTg1LDcgKzExODUsOCBAQCBleHRlcm4gc3NpemVfdCB1c2Jfc2hvd19keW5pZHMoc3RydWN0IHVzYl9keW5pZHMgKmR5bmlkcywgY2hhciAqYnVmKTtcXG4gICpcXHRpbnRlcmZhY2UuICBJdCBtYXkgYWxzbyB1c2UgdXNiX3NldF9pbnRlcmZhY2UoKSB0byBzcGVjaWZ5IHRoZVxcbiAgKlxcdGFwcHJvcHJpYXRlIGFsdHNldHRpbmcuICBJZiB1bndpbGxpbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmZhY2UsXFxuICAqXFx0cmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VycmVkLCBhbiBhcHByb3ByaWF0ZVxcbi0gKlxcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLlxcbisgKlxcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXFxuKyAqXFx0cHJvYmUuXFxuICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5XFxuICAqXFx0YmVjYXVzZSBpdHMgZGV2aWNlIGhhcyBiZWVuIChvciBpcyBiZWluZykgZGlzY29ubmVjdGVkIG9yIHRoZVxcbiAgKlxcdGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjQ0LjQ2NDA1ODExNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTEzOTg3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRFZCX0FTMTAyXCIsXG4gICAgXCJVU0JfUEVHQVNVU1wiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJVU0JfWFVTQkFUTVwiLFxuICAgIFwiVVNCX1RNQ1wiLFxuICAgIFwiVVNCX1NFUklBTF9TUENQOFg1XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX3Byb2JlX2ludGVyZmFjZVwiLFxuICAgIFwidXNiX2RldmljZV9tYXRjaFwiLFxuICAgIFwiYXMxMDJfdXNiX3Byb2JlXCIsXG4gICAgXCJwZWdhc3VzX3Byb2JlXCIsXG4gICAgXCJhdGg5a19oaWZfdXNiX3Byb2JlXCIsXG4gICAgXCJ4dXNiYXRtX2JpbmRcIixcbiAgICBcInVzYnRtY19wcm9iZVwiLFxuICAgIFwic3BjcDh4NV9wcm9iZVwiLFxuICAgIFwic3BjcDh4NV9wb3J0X3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZHluYW1pYyBJRHMgYXJlIG1hdGNoZWQgaW4gdGhlIFVTQiBjb3JlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGRyaXZlcnMgc2F2ZSB0aGUgYHVzYl9kZXZpY2VfaWRgIHBvaW50ZXIgcGFzc2VkIHRvIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb25zLiBJdCBtb2RpZmllcyBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIElELCBhbmQgdXBkYXRlcyBzZXZlcmFsIFVTQiBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGBpZC1cXHUwMDNlZHJpdmVyX2luZm9gIGR1cmluZyBwcm9iZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlIHBvaW50ZXIuIEZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgYWZmZWN0ZWQgZHJpdmVycyAodmlhIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldyBkeW5hbWljIElEIG1hdGNoaW5nIGxvZ2ljIGFuZCB0aGUgZHJpdmVyIHByb2JlIGZ1bmN0aW9ucyB3b3JrIGNvcnJlY3RseSBhbmQgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyMGY0MDYyYWVlZDlhNjQ1M2M3NGQxNzdhZTM4OTYxOTU4YzhiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQ3OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXMxMDIvYXMxMDJfdXNiX2Rydi5jXG5pbmRleCBhMTEwMjQ0NTFjZWJkYy4uYmUyZjhiZTU2MGZhZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9hczEwMl91c2JfZHJ2LmNcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY1xuQEAgLTI0LDM1ICsyNCwzMyBAQCBzdGF0aWMgdm9pZCBhczEwMl91c2Jfc3RvcF9zdHJlYW0oc3RydWN0IGFzMTAyX2Rldl90ICpkZXYpO1xuIHN0YXRpYyBpbnQgYXMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gc3RhdGljIGludCBhczEwMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXMxMDJfdXNiX2lkX3RhYmxlW10gPSB7XG4tXHR7IFVTQl9ERVZJQ0UoQVMxMDJfVVNCX0RFVklDRV9WRU5ET1JfSUQsIEFTMTAyX1VTQl9ERVZJQ0VfUElEXzAwMDEpIH0sXG4tXHR7IFVTQl9ERVZJQ0UoUENUVl83NEVfVVNCX1ZJRCwgUENUVl83NEVfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShFTEdBVE9fRVlFVFZfRFRUX1VTQl9WSUQsIEVMR0FUT19FWUVUVl9EVFRfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShOQk9YX0RWQlRfRE9OR0xFX1VTQl9WSUQsIE5CT1hfRFZCVF9ET05HTEVfVVNCX1BJRCkgfSxcbi1cdHsgVVNCX0RFVklDRShTS1lfSVRfRElHSVRBTF9LRVlfVVNCX1ZJRCwgU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9QSUQpIH0sXG4tXHR7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi9cbitzdHJ1Y3QgYXMxMDJfZGV2X2luZm8ge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdC8qXG4rXHQgKiBlTE5BIGNvbmZpZ3VyYXRpb246IGRldmljZXMgYnVpbHQgb24gdGhlIHJlZmVyZW5jZSBkZXNpZ24gd29yayBiZXN0XG4rXHQgKiB3aXRoIDB4QTAsIHdoaWxlIGN1c3RvbSBkZXNpZ25zIHNlZW0gdG8gcmVxdWlyZSAweEMwXG4rXHQgKi9cbitcdHVpbnQ4X3QgZWxuYV9jZmc7XG4gfTtcbiBcbi0vKiBOb3RlIHRoYXQgdGhpcyB0YWJsZSBtdXN0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbnRyaWVzIGFzIHRoZVxuLSAgIGFzMTAyX3VzYl9pZF90YWJsZSBzdHJ1Y3QgKi9cbi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzMTAyX2RldmljZV9uYW1lc1tdID0ge1xuLVx0QVMxMDJfUkVGRVJFTkNFX0RFU0lHTixcbi1cdEFTMTAyX1BDVFZfNzRFLFxuLVx0QVMxMDJfRUxHQVRPX0VZRVRWX0RUVF9OQU1FLFxuLVx0QVMxMDJfTkJPWF9EVkJUX0RPTkdMRV9OQU1FLFxuLVx0QVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsXG4tXHROVUxMIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4tfTtcbisjZGVmaW5lIERSSVZFUl9JTkZPKGRldl9uYW1lLCBkZXZfZWxuYV9jZmcpIFxcXG4rXHQuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCBhczEwMl9kZXZfaW5mbyl7IFxcXG4rXHRcdC5uYW1lID0gKGRldl9uYW1lKSwgXFxcbitcdFx0LmVsbmFfY2ZnID0gKGRldl9lbG5hX2NmZyksIFxcXG4rXHR9XG4gXG4tLyogZUxOQSBjb25maWd1cmF0aW9uOiBkZXZpY2VzIGJ1aWx0IG9uIHRoZSByZWZlcmVuY2UgZGVzaWduIHdvcmsgYmVzdFxuLSAgIHdpdGggMHhBMCwgd2hpbGUgY3VzdG9tIGRlc2lnbnMgc2VlbSB0byByZXF1aXJlIDB4QzAgKi9cbi1zdGF0aWMgdWludDhfdCBjb25zdCBhczEwMl9lbG5hX2NmZ1tdID0ge1xuLVx0MHhBMCxcbi1cdDB4QzAsXG4tXHQweEMwLFxuLVx0MHhBMCxcbi1cdDB4QTAsXG4tXHQweDAwIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFzMTAyX3VzYl9pZF90YWJsZVtdID0ge1xuK1x0eyBVU0JfREVWSUNFKEFTMTAyX1VTQl9ERVZJQ0VfVkVORE9SX0lELCBBUzEwMl9VU0JfREVWSUNFX1BJRF8wMDAxKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfUkVGRVJFTkNFX0RFU0lHTiwgMHhBMCkgfSxcbitcdHsgVVNCX0RFVklDRShQQ1RWXzc0RV9VU0JfVklELCBQQ1RWXzc0RV9VU0JfUElEKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfUENUVl83NEUsIDB4QzApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoRUxHQVRPX0VZRVRWX0RUVF9VU0JfVklELCBFTEdBVE9fRVlFVFZfRFRUX1VTQl9QSUQpLFxuK1x0ICBEUklWRVJfSU5GTyhBUzEwMl9FTEdBVE9fRVlFVFZfRFRUX05BTUUsIDB4QzApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoTkJPWF9EVkJUX0RPTkdMRV9VU0JfVklELCBOQk9YX0RWQlRfRE9OR0xFX1VTQl9QSUQpLFxuK1x0ICBEUklWRVJfSU5GTyhBUzEwMl9OQk9YX0RWQlRfRE9OR0xFX05BTUUsIDB4QTApIH0sXG4rXHR7IFVTQl9ERVZJQ0UoU0tZX0lUX0RJR0lUQUxfS0VZX1VTQl9WSUQsIFNLWV9JVF9ESUdJVEFMX0tFWV9VU0JfUElEKSxcbitcdCAgRFJJVkVSX0lORk8oQVMxMDJfU0tZX0lUX0RJR0lUQUxfS0VZX05BTUUsIDB4QTApIH0sXG4rXHR7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi9cbiB9O1xuIFxuIHN0cnVjdCB1c2JfZHJpdmVyIGFzMTAyX3VzYl9kcml2ZXIgPSB7XG5AQCAtMzM2LDI5ICszMzQsMTggQEAgc3RhdGljIGludCBhczEwMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBhczEwMl9kZXZfdCAqYXMxMDJfZGV2O1xuLVx0aW50IGk7XG4tXG4tXHQvKiBUaGlzIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW4gKi9cbi1cdGlmIChBUlJBWV9TSVpFKGFzMTAyX3VzYl9pZF90YWJsZSkgIT1cbi1cdCAgICAoc2l6ZW9mKGFzMTAyX2RldmljZV9uYW1lcykgLyBzaXplb2YoY29uc3QgY2hhciAqKSkpIHtcbi1cdFx0cHJfZXJyKFwiRGV2aWNlIG5hbWVzIHRhYmxlIGludmFsaWQgc2l6ZVwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4rXHRjb25zdCBzdHJ1Y3QgYXMxMDJfZGV2X2luZm8gKmluZm8gPSAoY29uc3Qgc3RydWN0IGFzMTAyX2Rldl9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXG4gXHRhczEwMl9kZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgYXMxMDJfZGV2X3QpO1xuIFx0aWYgKGFzMTAyX2RldiA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIEFzc2lnbiB0aGUgdXNlci1mcmllbmRseSBkZXZpY2UgbmFtZSAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhczEwMl91c2JfaWRfdGFibGUpOyBpKyspIHtcbi1cdFx0aWYgKGlkID09IFx1MDAyNmFzMTAyX3VzYl9pZF90YWJsZVtpXSkge1xuLVx0XHRcdGFzMTAyX2Rldi1cdTAwM2VuYW1lID0gYXMxMDJfZGV2aWNlX25hbWVzW2ldO1xuLVx0XHRcdGFzMTAyX2Rldi1cdTAwM2VlbG5hX2NmZyA9IGFzMTAyX2VsbmFfY2ZnW2ldO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoYXMxMDJfZGV2LVx1MDAzZW5hbWUgPT0gTlVMTClcbitcdGlmIChpbmZvKSB7XG4rXHRcdGFzMTAyX2Rldi1cdTAwM2VuYW1lID0gaW5mby1cdTAwM2VuYW1lO1xuK1x0XHRhczEwMl9kZXYtXHUwMDNlZWxuYV9jZmcgPSBpbmZvLVx1MDAzZWVsbmFfY2ZnO1xuK1x0fSBlbHNlIHtcbiBcdFx0YXMxMDJfZGV2LVx1MDAzZW5hbWUgPSBcIlVua25vd24gQVMxMDIgZGV2aWNlXCI7XG4rXHR9XG4gXG4gXHQvKiBzZXQgcHJpdmF0ZSBjYWxsYmFjayBmdW5jdGlvbnMgKi9cbiBcdGFzMTAyX2Rldi1cdTAwM2VidXNfYWRhcC5vcHMgPSBcdTAwMjZhczEwMl9wcml2X29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuaW5kZXggODcwMGVlYjhlMjJkMDcuLmFiYTFhNjQwZmMyNjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuY1xuQEAgLTQzLDIxICs0MywxMiBAQCBzdGF0aWMgYm9vbCBsb29wYmFjaztcbiBzdGF0aWMgYm9vbCBtaWlfbW9kZTtcbiBzdGF0aWMgY2hhciAqZGV2aWQ7XG4gXG4tc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7XG4tI2RlZmluZVx0UEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncylcdFxcXG4tXHR7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sXG4tI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXG4tXHRQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKVxuLSNpbmNsdWRlIFwicGVnYXN1cy5oXCJcbi0jdW5kZWZcdFBFR0FTVVNfREVWXG4tI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuLVx0e05VTEwsIDAsIDAsIDB9LFxuLVx0e05VTEwsIDAsIDAsIDB9XG4tfTtcbitzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IGR5bmFtaWNfaWRfaW5mbyA9IHt9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0ge1xuICNkZWZpbmVcdFBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFxcXG4tXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sXG4rXHR7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgXFxcbitcdCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2KGNvbnN0IHN0cnVjdCB1c2JfZXRoX2Rldikgey5uYW1lID0gcG4sIC5wcml2YXRlID0gZmxhZ3N9fSxcbiAvKlxuICAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3RcbiAgKiBJRHMgYXMgdGhlIEJlbGtpbiBGNUQ1MDUwLCBzbyB3ZSBuZWVkIHRvIHRlYWNoIHRoZSBwZWdhc3VzIGRyaXZlciB0b1xuQEAgLTY2LDcgKzU3LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7XG4gICovXG4gI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFxcXG4gXHR7Lm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpLCBcXFxuLVx0LmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSxcbitcdC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZCwgLmJEZXZpY2VDbGFzcyA9IGRjbGFzcywgXFxcbitcdC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdClcdTAwMjYoY29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2KSB7Lm5hbWUgPSBwbiwgLnByaXZhdGUgPSBmbGFnc319LFxuICNpbmNsdWRlIFwicGVnYXN1cy5oXCJcbiAjdW5kZWZcdFBFR0FTVVNfREVWXG4gI3VuZGVmXHRQRUdBU1VTX0RFVl9DTEFTU1xuQEAgLTQwMiwxMiArMzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKnBlZ2FzdXMpXG4gXHRpZiAoaSA9PSBSRUdfVElNRU9VVClcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7XG4gXHRcdHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNCk7XG4gXHRcdHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNik7XG4gXHR9XG4tXHRpZiAodXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9FTENPTikge1xuIFx0XHRfX3UxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQ0NSw5ICs0MzcsOSBAQCBzdGF0aWMgaW50IGVuYWJsZV9uZXRfdHJhZmZpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKVxuIFx0bWVtY3B5KHBlZ2FzdXMtXHUwMDNlZXRoX3JlZ3MsIGRhdGEsIHNpemVvZihkYXRhKSk7XG4gXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTtcbiBcbi1cdGlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHxcbi1cdCAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtXHUwMDNlZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4tXHQgICAgdXNiX2Rldl9pZFtwZWdhc3VzLVx1MDAzZWRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykge1xuK1x0aWYgKGxlMTZfdG9fY3B1KHBlZ2FzdXMtXHUwMDNldXNiLVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFZFTkRPUl9MSU5LU1lTIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0xJTktTWVMyIHx8XG4rXHQgICAgbGUxNl90b19jcHUocGVnYXN1cy1cdTAwM2V1c2ItXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVkVORE9SX0RMSU5LKSB7XG4gXHRcdHUxNiBhdXhtb2RlO1xuIFx0XHRyZXQgPSByZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsIFx1MDAyNmF1eG1vZGUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTExNTMsNyArMTE0NSw3IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldDtcbiBcdHBlZ2FzdXNfdCAqcGVnYXN1cztcbi1cdGludCBkZXZfaW5kZXggPSBpZCAtIHBlZ2FzdXNfaWRzO1xuK1x0Y29uc3Qgc3RydWN0IHVzYl9ldGhfZGV2ICppbmZvID0gKGNvbnN0IHN0cnVjdCB1c2JfZXRoX2RldiAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvO1xuIFx0aW50IHJlcyA9IC1FTk9NRU07XG4gXHRzdGF0aWMgY29uc3QgdTggYnVsa19lcF9hZGRyW10gPSB7XG4gXHRcdFBFR0FTVVNfVVNCX0VQX0JVTEtfSU4gfCBVU0JfRElSX0lOLFxuQEAgLTExNzgsNyArMTE3MCw2IEBAIHN0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTtcbi1cdHBlZ2FzdXMtXHUwMDNlZGV2X2luZGV4ID0gZGV2X2luZGV4O1xuIFx0cGVnYXN1cy1cdTAwM2VpbnRmID0gaW50ZjtcbiBcbiBcdHJlcyA9IGFsbG9jX3VyYnMocGVnYXN1cyk7XG5AQCAtMTIwNiw3ICsxMTk3LDcgQEAgc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0cGVnYXN1cy1cdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWXG4gXHRcdFx0XHR8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTtcbiBcbi1cdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSB1c2JfZGV2X2lkW2Rldl9pbmRleF0ucHJpdmF0ZTtcbitcdHBlZ2FzdXMtXHUwMDNlZmVhdHVyZXMgPSBpbmZvID8gaW5mby1cdTAwM2Vwcml2YXRlIDogREVGQVVMVF9HUElPX1JFU0VUO1xuIFx0cmVzID0gZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0MjtcbkBAIC0xMjM1LDcgKzEyMjYsNyBAQCBzdGF0aWMgaW50IHBlZ2FzdXNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnBlZ2FzdXMtXHUwMDNlY2Fycmllcl9jaGVjayxcbiBcdFx0XHQgICBDQVJSSUVSX0NIRUNLX0RFTEFZKTtcbiBcdGRldl9pbmZvKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcIiVzLCAlcywgJXBNXFxuXCIsIG5ldC1cdTAwM2VuYW1lLFxuLVx0XHQgdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsIG5ldC1cdTAwM2VkZXZfYWRkcik7XG4rXHRcdCBpbmZvID8gaW5mby1cdTAwM2VuYW1lIDogXCIodW5rbm93bilcIiwgbmV0LVx1MDAzZWRldl9hZGRyKTtcbiBcdHJldHVybiAwO1xuIFxuIG91dDM6XG5AQCAtMTMyNSw4ICsxMzE2LDkgQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBlZ2FzdXNfZHJpdmVyID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9pZChjaGFyICppZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgdmVuZG9yX2lkID0gMCwgZGV2aWNlX2lkID0gMCwgZmxhZ3MgPSAwLCBpID0gMDtcbitcdHVuc2lnbmVkIGludCB2ZW5kb3JfaWQgPSAwLCBkZXZpY2VfaWQgPSAwLCBmbGFncyA9IDA7XG4gXHRjaGFyICp0b2tlbiwgKm5hbWUgPSBOVUxMO1xuK1x0aW50IGR5bl9pZF9pbmRleCA9IEFSUkFZX1NJWkUocGVnYXN1c19pZHMpIC0gMjtcbiBcbiBcdHRva2VuID0gc3Ryc2VwKFx1MDAyNmlkLCBcIjpcIik7XG4gXHRpZiAodG9rZW4pXG5AQCAtMTM0OCwxNCArMTM0MCwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfaWQoY2hhciAqaWQpXG4gXHRpZiAoZGV2aWNlX2lkIFx1MDAzZSAweDEwMDAwIHx8IGRldmljZV9pZCA9PSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyB1c2JfZGV2X2lkW2ldLm5hbWU7IGkrKyk7XG4tXHR1c2JfZGV2X2lkW2ldLm5hbWUgPSBuYW1lO1xuLVx0dXNiX2Rldl9pZFtpXS52ZW5kb3IgPSB2ZW5kb3JfaWQ7XG4tXHR1c2JfZGV2X2lkW2ldLmRldmljZSA9IGRldmljZV9pZDtcbi1cdHVzYl9kZXZfaWRbaV0ucHJpdmF0ZSA9IGZsYWdzO1xuLVx0cGVnYXN1c19pZHNbaV0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbi1cdHBlZ2FzdXNfaWRzW2ldLmlkVmVuZG9yID0gdmVuZG9yX2lkO1xuLVx0cGVnYXN1c19pZHNbaV0uaWRQcm9kdWN0ID0gZGV2aWNlX2lkO1xuK1x0ZHluYW1pY19pZF9pbmZvLm5hbWUgPSBuYW1lO1xuK1x0ZHluYW1pY19pZF9pbmZvLnByaXZhdGUgPSBmbGFncztcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uaWRWZW5kb3IgPSB2ZW5kb3JfaWQ7XG4rXHRwZWdhc3VzX2lkc1tkeW5faWRfaW5kZXhdLmlkUHJvZHVjdCA9IGRldmljZV9pZDtcbitcdHBlZ2FzdXNfaWRzW2R5bl9pZF9pbmRleF0uZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpXHUwMDI2ZHluYW1pY19pZF9pbmZvO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwZWdhc3VzX2luaXQodm9pZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuaW5kZXggYTA1YjE0MzE1NWJhODYuLmNjZGVkY2VmNTJlNzZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaFxuQEAgLTg1LDcgKzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgcGVnYXN1cyB7XG4gXHR1bnNpZ25lZFx0XHRmZWF0dXJlcztcbiBcdHUzMlx0XHRcdG1zZ19lbmFibGU7XG4gXHR1MzJcdFx0XHR3b2xvcHRzO1xuLVx0aW50XHRcdFx0ZGV2X2luZGV4O1xuIFx0aW50XHRcdFx0aW50cl9pbnRlcnZhbDtcbiBcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdFx0cnhfdGw7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRjYXJyaWVyX2NoZWNrO1xuQEAgLTEwMiw4ICsxMDEsNiBAQCB0eXBlZGVmIHN0cnVjdCBwZWdhc3VzIHtcbiBcbiBzdHJ1Y3QgdXNiX2V0aF9kZXYge1xuIFx0Y2hhclx0Km5hbWU7XG4tXHRfX3UxNlx0dmVuZG9yO1xuLVx0X191MTZcdGRldmljZTtcbiBcdF9fdTMyXHRwcml2YXRlOyAvKiBMU0IgaXMgZ3BpbyByZXNldCB2YWx1ZSAqL1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbmluZGV4IDQ3ZjkwNGU3ZTY1Mjk3Li5kMzQ5MWZmMDhlNmVmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNcbkBAIC0xMDg3LDcgKzEwODcsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KVxuIFx0fVxuIFx0a2ZyZWUoYnVmKTtcbiBcbi1cdGlmIChJU19BUjcwMTBfREVWSUNFKGhpZl9kZXYtXHUwMDNldXNiX2RldmljZV9pZC1cdTAwM2Vkcml2ZXJfaW5mbykpXG4rXHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRmaXJtX29mZnNldCA9IEFSNzAxMF9GSVJNV0FSRV9URVhUO1xuIFx0ZWxzZVxuIFx0XHRmaXJtX29mZnNldCA9IEFSOTI3MV9GSVJNV0FSRV9URVhUO1xuQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LFxuIFx0aWYgKE1BSk9SX1ZFUlNJT05fUkVRID09IDEgXHUwMDI2XHUwMDI2IGhpZl9kZXYtXHUwMDNlZndfbWlub3JfaW5kZXggPT0gMykge1xuIFx0XHRjb25zdCBjaGFyICpmaWxlbmFtZTtcbiBcbi1cdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKSlcbitcdFx0aWYgKElTX0FSNzAxMF9ERVZJQ0UoaGlmX2Rldi1cdTAwM2VpZF9pbmZvKSlcbiBcdFx0XHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7XG4gXHRcdGVsc2VcbiBcdFx0XHRmaWxlbmFtZSA9IEZJUk1XQVJFX0FSOTI3MTtcbkBAIC0xMTk4LDcgKzExOTgsNyBAQCBzdGF0aWMgaW50IGF0aDlrX2hpZl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldixcbiBcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlZHJpdmVyX2luZm8pKVxuK1x0XHRpZiAoSVNfQVI3MDEwX0RFVklDRShoaWZfZGV2LVx1MDAzZWlkX2luZm8pKVxuIFx0XHRcdGNoaXAgPSBcIjcwMTBcIjtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNoaXAgPSBcIjkyNzFcIjtcbkBAIC0xMjU1LDkgKzEyNTUsOSBAQCBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpXG4gXG4gXHRyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LVx1MDAzZWh0Y19oYW5kbGUsXG4gXHRcdFx0XHRcdTAwMjZoaWZfZGV2LVx1MDAzZWludGVyZmFjZS1cdTAwM2VkZXYsXG4tXHRcdFx0XHRoaWZfZGV2LVx1MDAzZXVzYl9kZXZpY2VfaWQtXHUwMDNlaWRQcm9kdWN0LFxuK1x0XHRcdFx0bGUxNl90b19jcHUoaGlmX2Rldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSxcbiBcdFx0XHRcdGhpZl9kZXYtXHUwMDNldWRldi1cdTAwM2Vwcm9kdWN0LFxuLVx0XHRcdFx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbitcdFx0XHRcdGhpZl9kZXYtXHUwMDNlaWRfaW5mbyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gZXJyX2h0Y19od19pbml0O1xuQEAgLTEzNjksNyArMTM2OSw3IEBAIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIFxuIFx0aGlmX2Rldi1cdTAwM2V1ZGV2ID0gdWRldjtcbiBcdGhpZl9kZXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuLVx0aGlmX2Rldi1cdTAwM2V1c2JfZGV2aWNlX2lkID0gaWQ7XG4rXHRoaWZfZGV2LVx1MDAzZWlkX2luZm8gPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbiAjaWZkZWYgQ09ORklHX1BNXG4gXHR1ZGV2LVx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbmluZGV4IGRjMGIwZmE1YzMyNTc0Li5iM2U3YjBmYjU0Yjg0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmhcbkBAIC0xMTUsNyArMTE1LDcgQEAgc3RydWN0IGNtZF9idWYge1xuIHN0cnVjdCBoaWZfZGV2aWNlX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9pZDtcbitcdGludCBpZF9pbmZvO1xuIFx0Y29uc3Qgdm9pZCAqZndfZGF0YTtcbiBcdHNpemVfdCBmd19zaXplO1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfZG9uZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuaW5kZXggMGJlZmJmNjNkMWNjODMuLjVjMWUxZjUyMTU1NTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuKysrIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY1xuQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGludCB4dXNiYXRtX2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0sXG4gXHRcdFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XG4tXHRpbnQgZHJ2X2l4ID0gaWQgLSB4dXNiYXRtX3VzYl9pZHM7XG4rXHRpbnQgZHJ2X2l4ID0gaWQtXHUwMDNlZHJpdmVyX2luZm87XG4gXHRpbnQgcnhfYWx0ID0gcnhfYWx0c2V0dGluZ1tkcnZfaXhdO1xuIFx0aW50IHR4X2FsdCA9IHR4X2FsdHNldHRpbmdbZHJ2X2l4XTtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICpyeF9pbnRmID0geHVzYmF0bV9maW5kX2ludGYodXNiX2RldiwgcnhfYWx0LCByeF9lbmRwb2ludFtkcnZfaXhdKTtcbkBAIC0xNjgsNyArMTY4LDggQEAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcbiBcdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbiBcdC5wcm9iZVx0XHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxuIFx0LmRpc2Nvbm5lY3RcdD0gdXNiYXRtX3VzYl9kaXNjb25uZWN0LFxuLVx0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkc1xuK1x0LmlkX3RhYmxlXHQ9IHh1c2JhdG1fdXNiX2lkcyxcbitcdC5ub19keW5hbWljX2lkXHQ9IDEsXG4gfTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCB4dXNiYXRtX2luaXQodm9pZClcbkBAIC0xOTAsNiArMTkxLDcgQEAgc3RhdGljIGludCBfX2luaXQgeHVzYmF0bV9pbml0KHZvaWQpXG4gXHRcdHh1c2JhdG1fdXNiX2lkc1tpXS5tYXRjaF9mbGFnc1x0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkVmVuZG9yXHQ9IHZlbmRvcltpXTtcbiBcdFx0eHVzYmF0bV91c2JfaWRzW2ldLmlkUHJvZHVjdFx0PSBwcm9kdWN0W2ldO1xuK1x0XHR4dXNiYXRtX3VzYl9pZHNbaV0uZHJpdmVyX2luZm9cdD0gaTtcbiBcbiBcdFx0eHVzYmF0bV9kcml2ZXJzW2ldLmRyaXZlcl9uYW1lXHQ9IHh1c2JhdG1fZHJpdmVyX25hbWU7XG4gXHRcdHh1c2JhdG1fZHJpdmVyc1tpXS5iaW5kXHRcdD0geHVzYmF0bV9iaW5kO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmNcbmluZGV4IGFmOWFlNTVkYWUxNGUwLi41MWNkOTMyMGE3MzY2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jXG4rKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY1xuQEAgLTcxLDcgKzcxLDYgQEAgc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzIHtcbiAgKiBhbGxvY2F0ZWQgZm9yIGVhY2ggVVNCVE1DIGRldmljZSBpbiB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uXG4gICovXG4gc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7XG4tXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjtcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7XG5AQCAtMjM5NCw3ICsyMzkzLDYgQEAgc3RhdGljIGludCB1c2J0bWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZGF0YS1cdTAwM2VpbnRmID0gaW50Zjtcbi1cdGRhdGEtXHUwMDNlaWQgPSBpZDtcbiBcdGRhdGEtXHUwMDNldXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpO1xuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZkYXRhLVx1MDAzZWtyZWYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG5pbmRleCBmNjMwMDQ0MTcwNThlNi4uN2YzM2ZlNWJhMDNiZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG4rKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXG5AQCAtMjI4LDE0ICsyMjgsMTYgQEAgc3RhdGljIHZvaWQgdXNiX2ZyZWVfZHluaWRzKHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9tYXRjaF9keW5hbWljX2lkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLVx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kcml2ZXIgKmRydilcbitcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfY29weSlcbiB7XG4gXHRzdHJ1Y3QgdXNiX2R5bmlkICpkeW5pZDtcbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ1c2JfZHluaWRzX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0LCBub2RlKSB7XG4gXHRcdGlmICh1c2JfbWF0Y2hfb25lX2lkKGludGYsIFx1MDAyNmR5bmlkLVx1MDAzZWlkKSkge1xuLVx0XHRcdHJldHVybiBcdTAwMjZkeW5pZC1cdTAwM2VpZDtcbitcdFx0XHQqaWRfY29weSA9IGR5bmlkLVx1MDAzZWlkO1xuK1x0XHRcdHJldHVybiBpZF9jb3B5O1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zMjEsNiArMzIzLDcgQEAgc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpO1xuIFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkO1xuK1x0c3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfY29weTtcbiBcdGludCBlcnJvciA9IC1FTk9ERVY7XG4gXHRpbnQgbHBtX2Rpc2FibGVfZXJyb3IgPSAtRU5PREVWO1xuIFxuQEAgLTM0MCw3ICszNDMsNyBAQCBzdGF0aWMgaW50IHVzYl9wcm9iZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4tXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlcik7XG4rXHRpZCA9IHVzYl9tYXRjaF9keW5hbWljX2lkKGludGYsIGRyaXZlciwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoIWlkKVxuIFx0XHRpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItXHUwMDNlaWRfdGFibGUpO1xuIFx0aWYgKCFpZClcbkBAIC04OTIsNiArODk1LDcgQEAgc3RhdGljIGludCB1c2JfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbiBcdFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4gXHRcdGNvbnN0IHN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2O1xuIFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7XG4rXHRcdHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRcdC8qIGRldmljZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGludGVyZmFjZXMgKi9cbiBcdFx0aWYgKGlzX3VzYl9kZXZpY2VfZHJpdmVyKGRydikpXG5AQCAtOTA0LDcgKzkwOCw3IEBAIHN0YXRpYyBpbnQgdXNiX2RldmljZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdGlmIChpZClcbiBcdFx0XHRyZXR1cm4gMTtcbiBcbi1cdFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2KTtcbitcdFx0aWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2LCBcdTAwMjZpZF9jb3B5KTtcbiBcdFx0aWYgKGlkKVxuIFx0XHRcdHJldHVybiAxO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG5pbmRleCBjMTFkNjRiZjA4ZmJhZS4uMGU3NzE1YTAyZGY0Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG4rKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jXG5AQCAtMTMzLDE0ICsxMzMsMTQgQEAgc3RydWN0IHNwY3A4eDVfcHJpdmF0ZSB7XG4gc3RhdGljIGludCBzcGNwOHg1X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsXG4gXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuIHtcbi1cdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkKTtcbitcdHVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCAodm9pZCAqKWlkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNwY3A4eDVfcG9ydF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC1cdTAwM2VzZXJpYWwpO1xuK1x0dW5zaWduZWQgaW50IHF1aXJrcyA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGxvbmcpdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LVx1MDAzZXNlcmlhbCk7XG4gXHRzdHJ1Y3Qgc3BjcDh4NV9wcml2YXRlICpwcml2O1xuIFxuIFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcbkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIGludCBzcGNwOHg1X3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuLVx0cHJpdi1cdTAwM2VxdWlya3MgPSBpZC1cdTAwM2Vkcml2ZXJfaW5mbztcbitcdHByaXYtXHUwMDNlcXVpcmtzID0gcXVpcmtzO1xuIFxuIFx0dXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oXG5pbmRleCAxZGE0YWQxNjEwYmNhMC4uNDlhYjhkYmI4ODVmNjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oXG5AQCAtMTE4NSw3ICsxMTg1LDggQEAgZXh0ZXJuIHNzaXplX3QgdXNiX3Nob3dfZHluaWRzKHN0cnVjdCB1c2JfZHluaWRzICpkeW5pZHMsIGNoYXIgKmJ1Zik7XG4gICpcdGludGVyZmFjZS4gIEl0IG1heSBhbHNvIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIHRvIHNwZWNpZnkgdGhlXG4gICpcdGFwcHJvcHJpYXRlIGFsdHNldHRpbmcuICBJZiB1bndpbGxpbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmZhY2UsXG4gICpcdHJldHVybiAtRU5PREVWLCBpZiBnZW51aW5lIElPIGVycm9ycyBvY2N1cnJlZCwgYW4gYXBwcm9wcmlhdGVcbi0gKlx0bmVnYXRpdmUgZXJybm8gdmFsdWUuXG4rICpcdG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIHVzYl9kZXZpY2VfaWQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZHVyaW5nXG4rICpcdHByb2JlLlxuICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5XG4gICpcdGJlY2F1c2UgaXRzIGRldmljZSBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIGRpc2Nvbm5lY3RlZCBvciB0aGVcbiAgKlx0ZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZC5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjQ0LjQ2NDA2MDM0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTQ0NzEwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBEcml2ZXIgSUQgSGFuZGxpbmc6IEEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgYW5kIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGNoYW5naW5nIGFuZCB3aHkuIFRoZSBjcnV4IG9mIGl0IGlzIGhvdyB3ZSBoYW5kbGUgYHVzYl9kZXZpY2VfaWRgIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbSwgcGFydGljdWxhcmx5IHdpdGggZHluYW1pYyBJRHMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgYXBwZWFycyB0byBiZSByZXR1cm5pbmcgYSAqcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlKiAoYGlkX2NvcHlgIHNwZWNpZmljYWxseSwgcGFzc2VkIGFzIGEgcG9pbnRlcikgd2hpY2ggaXMgdGhlbiB1c2VkIGluIGEgYHVzYl9wcm9iZV9pbnRlcmZhY2VgLlxuXG5UaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLiBUaGF0IHBvaW50ZXIgYGlkYCBwYXNzZWQgdG8gdGhlIHByb2JlIGZ1bmN0aW9ucyBpbiBkcml2ZXJzIG5vdyBwb3RlbnRpYWxseSBwb2ludHMgdG8gc3RhY2sgbWVtb3J5LCBtZWFuaW5nIHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoYXQgYHByb2JlYCBmdW5jdGlvbi4gVGhpcyBwcmVzZW50cyBhIGNyaXRpY2FsIHByb2JsZW06IGlmIGEgZHJpdmVyIGF0dGVtcHRzIHRvICpzYXZlKiB0aGF0IGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIChlaXRoZXIgZGlyZWN0bHksIG9yIGJ5IGluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIHN0cnVjdHVyZSksIHdlJ3ZlIGdvdCBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHNjZW5hcmlvLiBJbiBlc3NlbmNlLCBhbnkgZHJpdmVyIHRoYXQgc3RvcmVzIGEgcG9pbnRlciB0byBhbiBpZCBtYXRjaGluZyBhIGR5bmFtaWMgaWQsIGlzIGludHJvZHVjaW5nIGEgdnVsbmVyYWJpbGl0eS5cblxuU28sIHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gbWl0aWdhdGUgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlc2UgSURzIGFyZSB1c2VkIGJ5IHRoZSBVU0IgZHJpdmVycy4gTGV0J3Mgc2VlIGhvdyB0aGUgZHJpdmVycyBhcmUgY2hhbmdlZDpcblxuKiAgIFRoZSBwYXRjaCdzIGltcGFjdCBpcyBwcmV0dHkgYnJvYWQuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBkcml2ZXJzLlxuICAgICogICBgYXMxMDJfdXNiX2Rydi5jYCwgYHBlZ2FzdXMuY2AsIGBoaWZfdXNiLmNgLCBgeHVzYmF0bS5jYCwgYHVzYnRtYy5jYCwgYW5kIGBzcGNwOHg1LmNgIGFyZSBhbGwgdXBkYXRlZCB0byByZW1vdmUgYW55IHJlbGlhbmNlIG9uIHRoZSBJRCBwb2ludGVyLiBJIHNlZSB0aGUgY2hhbmdlcyBpbXBsZW1lbnRlZCBmb3IgZWFjaCBkcml2ZXIgYXJlIGNvbnNpc3RlbnQsIHRoZSBkcml2ZXJzIG5vdyBzdG9yZSByZWxldmFudCBkYXRhIHdpdGhpbiBgZHJpdmVyX2luZm9gLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcG9pbnRlciBhcml0aG1ldGljIG9yIGJ5IGRpcmVjdGx5IHN0b3JpbmcgdGhlIElELlxuKiAgIFRoZSBgdXNiX21hdGNoX2R5bmFtaWNfaWRgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLCBlbnN1cmluZyBpdCBjb3BpZXMgdGhlIElEIHRvIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGFuZCAqcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBjb3B5Ki4gVGhpcyBpcyB0aGVuIHBhc3NlZCB0byBgdXNiX3Byb2JlX2ludGVyZmFjZWAuIFRoaXMgd2F5IHRoZSBgaWRgIHBvaW50ZXIgaXMgb25seSB2YWxpZCB3aXRoaW4gdGhlIGBwcm9iZWAgZnVuY3Rpb24gYW5kIGRyaXZlcnMgY2Fubm90IHNhdmUgdGhlIGBpZGAgcG9pbnRlciBmb3IgbGF0ZXIgdXNlLlxuKiAgIFRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBmaXguIEJ1dCBob3cgcmVhbGlzdGljIGlzIHRoaXMgdnVsbmVyYWJpbGl0eT8gV2l0aCBVU0IgZHJpdmVycywgY2FuIHdlIHRyaWdnZXIgdGhpcz8gWWVzLCBjZXJ0YWlubHkuIEkga25vdyB3ZSBjYW4gZnV6eiBVU0IgZHJpdmVycyB1c2luZyB0b29scyBsaWtlIGR1bW15XFxfaGNkIG9yIHJhdy1nYWRnZXQsIGFuZCBzeXprYWxsZXIgaGFzIHByZXR0eSBkZWNlbnQgVVNCIGZ1enppbmcgc3VwcG9ydCBhcyB3ZWxsLiBUaGF0IG1lYW5zIHRoaXMgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIEknZCBsaWtlIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBLY29uZmlnIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBJIGNhbiB0ZXN0IHRoZXNlIGNoYW5nZXMuIExldCdzIGNoZWNrOlxuXG4qICAgYGRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL2FzMTAyX3VzYl9kcnYuY2A6IGBEVkJfQVMxMDJgXG4qICAgYGRyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmNgOiBgVVNCX1BFR0FTVVNgXG4qICAgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgOiBgQVRIOUtfSFRDYFxuKiAgIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYDogYFVTQl9YVVNCQVRNYFxuKiAgIGBkcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuY2A6IGBVU0JfVE1DYFxuKiAgIGBkcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jYDogYFVTQl9TRVJJQUxfU1BDUDhYNWBcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgY29uZmlncyBhcmUgc2V0IGNvcnJlY3RseSwgYnV0IG92ZXJhbGwsIHRoaXMgaXMgYSBzb2xpZCBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG1lbW9yeSBzYWZldHkgY29uY2VybiBhbmQgc2hvdWxkIGJlIG1lcmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Nzo1Ny4wMDg3NzQ1NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0ODI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERWQl9BUzEwMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL21lZGlhL3VzYi9hczEwMi9LY29uZmlnOjI6Y29uZmlnIERWQl9BUzEwMlxcbmRyaXZlcnMvbWVkaWEvdXNiL2FzMTAyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQWJpbGlzIEFTMTAyIERWQiByZWNlaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDc6NTcuMTAwMjY0NTMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMjA1OTc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERWQi1BUzEwMjogQSBRdWljayBNZW50YWwgQXVkaXQqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biBgRFZCX0FTMTAyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBhcnNlIHRoaXMgYXMgYSBzdGFuZGFyZCB3aXRoaW4gdGhlIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIChEVkIpIGZyYW1ld29yaywgYW5kIHRoZSBcIkFTMTAyXCIgbGlrZWx5IHJlZmVycyB0byBhIHNwZWNpZmljIEFwcGxpY2F0aW9uIFNpZ25hbGluZyBvciBpbXBsZW1lbnRhdGlvbiBndWlkZWxpbmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgY29udGV4dCBoZXJlLiBJcyB0aGlzIGF1ZGlvLXNwZWNpZmljPyBPciBtb3JlIGVuY29tcGFzc2luZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBtb2R1bGF0aW9uIHNjaGVtZSwgYSBzcGVjaWZpYyB0cmFuc3BvcnQgc3RyZWFtIGFycmFuZ2VtZW50LCBvciBhbiBhZGFwdGF0aW9uIGxheWVyIHByb3RvY29sPyBUaGUgY29udGV4dCBpcyBrZXksIGFuZCBJ4oCZbSBnb2luZyB0byBuZWVkIG1vcmUgdG8gZ28gb24gdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IHNwZWNpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ3OjU5LjgzMjMyOTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzc3MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1BFR0FTVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQ9Y29uZmlnIFVTQl9LQVdFVEhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTcyLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjczOmNvbmZpZyBVU0JfUEVHQVNVU1xcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJVU0IgUGVnYXN1cy9QZWdhc3VzLUlJIGJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowMC4xNDAxMTAzNzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUwMjY2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYFVTQl9QRUdBU1VTYCBEZXNpZ25hdGlvbioqXG5cblJpZ2h0LCBgVVNCX1BFR0FTVVNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGljYXRpb25zLiBUaGUgXCJVU0JcIiBwcmVmaXggaXMsIG9mIGNvdXJzZSwgYSB2ZXJ5IHNwZWNpZmljIGFuZCBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludC4gV2UncmUgZGVhbGluZyB3aXRoIGEgVW5pdmVyc2FsIFNlcmlhbCBCdXMgaW50ZXJmYWNlOyB0aGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBwcm90b2NvbCBsYXllcnMsIGRhdGEgdHJhbnNmZXIgcmF0ZXMsIHBvdGVudGlhbCBwb3dlciBkZWxpdmVyeSBjYXBhYmlsaXRpZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHRhcmdldCBoYXJkd2FyZS5cblxuVGhlIFwiUEVHQVNVU1wiIHBhcnQsIGhvd2V2ZXIsIGlzIHRoZSByZWFsIGtleS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHByb2plY3QgZGVzaWduYXRpb24sIGxpa2VseSBpbnRlcm5hbCwgYW5kIHByb2JhYmx5IGFsbHVkaW5nIHRvIGEgc2lnbmlmaWNhbnQsIHBvc3NpYmx5IGNvbXBsZXgsIHVuZGVydGFraW5nLiBHaXZlbiB0aGF0IGl0J3MgdGllZCB0byBVU0IsIEknbSBmb3JtaW5nIGh5cG90aGVzZXM6IGlzIHRoaXMgYSBjdXN0b20gVVNCIGRldmljZT8gQSBub3ZlbCBVU0ItYmFzZWQgYXBwbGljYXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjaGlwc2V0IG9yIGNvbnRyb2xsZXI/IElzIHRoZXJlIGFuIGFzc29jaWF0aW9uIHdpdGggdGhlIG15dGhpY2FsIFBlZ2FzdXMgaW4gdGVybXMgb2YgcG93ZXIsIHNwZWVkLCBvciBzb21lIG90aGVyIHN5bWJvbGljIHF1YWxpdHk/IFBlcmhhcHMgdGhpcyBpcyBldmVuIGEgbmFtZSBmb3IgYSB2dWxuZXJhYmlsaXR5IG9yIGV4cGxvaXQsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCB3b3VsZCBiZSB0byBsb29rIGZvciByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgcGFzdCBwcm9qZWN0cywgb3IgcGVyaGFwcyBtb3JlIGNvbnRleHQ7IGtleXdvcmRzLCBvdGhlciByZWZlcmVuY2VzLCBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMgb3IgcmVwb3J0cy4gV2hhdCBraW5kIG9mIGVjb3N5c3RlbSBpcyB0aGlzIHdpdGhpbj8gQW55IGtub3duIHByb2plY3RzIG9yIGhhcmR3YXJlIGRlc2lnbnMgc2hhcmluZyB0aGlzIHRlcm1pbm9sb2d5PyBUaGUgY29udGV4dCBhcm91bmQgaXQgaXMgZ29pbmcgdG8gZGV0ZXJtaW5lIG15IG5leHQgbW92ZS4gSSdkIGJlIGxvb2tpbmcgZm9yIHNpZ25hbCB0cmFjZXMsIHNjaGVtYXRpY3MsIHNvdXJjZSBjb2RlLCBkYXRhIHNoZWV0cy4uLiBhbnl0aGluZyB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSdyZSBkb2luZyB3aXRoIHRoaXMgVVNCIGludGVyZmFjZS4gVGhlIFwiUEVHQVNVU1wiIGlzIHRoZSBwdXp6bGUgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowNS4wOTAzODEyMDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjM3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTU2PWNvbmZpZyBBVEg5S19QQ0lfTk9fRUVQUk9NXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjA1LjIxMTAyNzYyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDI2NjA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBgQVRIOUtfSFRDYCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYEFUSDlLX0hUQ2AgZHJpdmVyLiBJIHJlY29nbml6ZSB0aGlzIG5hbWU7IGl0J3MgYSBzcGVjaWZpYywgcmF0aGVyIGludHJpY2F0ZSBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24ndCBpdD8gSXQncyB0aGUgZHJpdmVyIGZvciBBdGhlcm9zIEFSOTAwMy9BUjkyOHggZmFtaWx5IG9mIDgwMi4xMW4gd2lyZWxlc3MgbmV0d29yayBhZGFwdGVycyB1dGlsaXppbmcgdGhlIEhvc3QgVHJhbnNwb3J0IENvbnRyb2xsZXIgKEhUQykgaW50ZXJmYWNlLCBzbyB0aGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHN1YnNldCBvZiBBdGhlcm9zIGhhcmR3YXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byB0aGluayBhYm91dCBpdHMgcm9sZSBpbiBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gdGhlIGhhcmR3YXJlIGFuZCB0aGUgaGlnaGVyLWxldmVsIG5ldHdvcmtpbmcgc3RhY2suXG5cblNvLCB3aGVyZSBkbyBJIHN0YXJ0PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIGludGVyZmFjZS4gSXMgaXQgaGFuZGxpbmcgdGhlIEhUQyBwcm90b2NvbCBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGhpbiBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgb3IgaGFyZHdhcmUgcmV2aXNpb25zPyBEb2VzIGl0IGhhbmRsZSBwb3dlciBtYW5hZ2VtZW50IGNvcnJlY3RseT8gSXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyByZWxpYWJsZT8gQXJlIHdlIHNlZWluZyBhbnkgb2YgdGhlIGNsYXNzaWMgXCJmaXJtd2FyZSBjcmFzaCBsb29wXCIgcHJvYmxlbXMgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFtaWx5P1xuXG5JJ20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkZWFsaW5nIHdpdGggdGhpcyBkcml2ZXIsIGFuZCBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLlxuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyBzdGFiaWxpdHksIGl0cyBlZmZpY2llbmN5LCBhbmQgYW55IGtub3duIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJdCdzIGEga2V5IGVsZW1lbnQsIHRoaXMgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIGl0cyBudWFuY2VzIGlzIGNydWNpYWwgZm9yIGRpYWdub3Npbmcgb3Igb3B0aW1pemluZyB3aXJlbGVzcyBwZXJmb3JtYW5jZSBvbiBhbnkgc3lzdGVtIHVzaW5nIHRoaXMgcGFydGljdWxhciBjaGlwc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MDkuNTUzNjkyNDMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzODc5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9YVVNCQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTQ0PWNvbmZpZyBVU0JfVUVBR0xFQVRNXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01NS1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo1Njpjb25maWcgVVNCX1hVU0JBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01Ny1cXHR0cmlzdGF0ZSBcXFwiT3RoZXIgVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODowOS42ODIwOTIzOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MjMxODIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBVU0JfWFVTQkFUTWAqKlxuXG5BbHJpZ2h0LCBgVVNCX1hVU0JBVE1gLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwYXJzZSB0aGlzLCB0aGlua2luZywgXCJPa2F5LCB0aGlzIGlzIGNsZWFybHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCLCBkZWZpbml0ZWx5LiBUaGUgJ1hVU0InIHBvcnRpb24gc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYW4gZXh0ZW5kZWQgVVNCIHByb3RvY29sLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvciBoYXJkd2FyZS4gVGhlICdBVE0nIGF0IHRoZSBlbmTigKYgaG1tLCB0aGF0IGNvdWxkIG1lYW4gQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUsIGFsdGhvdWdoIGl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgZW5jb3VudGVyZWQgdGhhdCBkaXJlY3RseSBpbiBVU0IgY29udGV4dHMuIE1vcmUgbGlrZWx5IGl0J3MgYW4gYWNyb255bSByZWZlcnJpbmcgdG8gYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGZ1bmN0aW9uIHNldCwgc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhbnNhY3Rpb24sIHBlcmhhcHMuIE9yLCBpdCBjb3VsZCBiZSBhIGNvbXBsZXRlIHJlZCBoZXJyaW5nLlwiIEkgc3RhcnQgdG8gcnVuIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBcIklzIHRoaXMgYSBuZXcgVVNCIGNvbnRyb2xsZXI/IEEgZHJpdmVyIG1vZHVsZT8gQSBmaXJtd2FyZSBjb21wb25lbnQ/IElzIGl0IGRlYWxpbmcgd2l0aCBoaWdoLXNwZWVkIGRhdGEgdHJhbnNmZXIsIG1heWJlIGV2ZW4gcHVzaGluZyB0aGUgbGltaXRzIG9mIGN1cnJlbnQgVVNCIHN0YW5kYXJkcz8gSXMgaXQgcHJvcHJpZXRhcnk/IEFyZSB0aGVyZSByZWxldmFudCBwYXRlbnRzIG9yIHNwZWNpZmljYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gbG9vayBmb3IgZG9jdW1lbnRhdGlvbiwgZXhpc3RpbmcgY29kZWJhc2VzLCBhbnl0aGluZyB0aGF0IGNhbiBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSBjYW4ndCBqdW1wIHRvIGFueSBkZWZpbml0ZSBjb25jbHVzaW9ucyB1bnRpbCBJIGNhbiBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgdGhlc2UgY29tcG9uZW50cyBmb3IgZnVydGhlciBjb250ZXh0IGFuZCBkZXRhaWxzLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxMi45NjQ0MTU0NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDM5Nzg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1RNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWc9MzE9Y29uZmlnIFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWctNDAtXFxuZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZzo0MTpjb25maWcgVVNCX1RNQ1xcbmRyaXZlcnMvdXNiL2NsYXNzL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxMy4wODg4MjQ4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwNzQ5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgVVNCX1RNQyBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYFVTQl9UTUNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgc3BlY2lmaWNzOiB0aGUgKlVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyogcHJvdG9jb2wuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gYXNwZWN0cy4gSXMgdGhpcyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIEknbSBsb29raW5nIGF0PyBBcmUgd2UgZGlzY3Vzc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHVzaW5nIHRoaXMgc3RhbmRhcmQ/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyDigJMgdGhlIGNvbnRyb2wgbWVzc2FnZXMsIHRoZSBidWxrIHRyYW5zZmVyIG1lY2hhbmlzbXMsIGFuZCBlc3BlY2lhbGx5IHRoZSBvZnRlbi1wcm9ibGVtYXRpYyBpbnRlcnBsYXkgYmV0d2VlbiBkYXRhIGludGVncml0eSBhbmQgbGF0ZW5jeS4gXG5cblRoZW4gSSdtIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgYXBwbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgaW5zdHJ1bWVudCBhcmUgd2UgdGFsa2luZyBhYm91dD8gT3NjaWxsb3Njb3BlPyBETU0/IFNwZWN0cnVtIEFuYWx5emVyPyBFYWNoIGluc3RydW1lbnQgdHlwZSBicmluZ3MgaXRzIG93biBzZXQgb2YgY2hhbGxlbmdlcyByZWdhcmRpbmcgZGF0YSBzdHJlYW1zLCBjb21tYW5kIHN5bnRheCwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllcywgY29uc2lkZXJpbmcgdGhlIGV4cGVjdGVkIGRhdGEgZm9ybWF0cy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBiaW5hcnkgZGF0YSwgb3IgQVNDSUkgY29tbWFuZHM/IERvZXMgdGhlIGRldmljZSBjb25mb3JtIHN0cmljdGx5IHRvIHRoZSBzdGFuZGFyZCwgb3IgYXJlIHRoZXJlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBleHRlbnNpb25zIGluIHBsYXk/IFRoYXQncyBhbHdheXMgc29tZXRoaW5nIEknbSBvbiB0aGUgbG9va291dCBmb3IuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZGVidWdnaW5nIGlzc3Vlcy4gVVNCIGNhbiBiZSBhIGJpdCBvZiBhIGJsYWNrIGJveCBzb21ldGltZXMsIHNvIGhvdyBhcmUgd2UgZ29pbmcgdG8gdHJhY2UgY29tbXVuaWNhdGlvbiwgYW5hbHl6ZSBwYWNrZXRzLCBhbmQgaXNvbGF0ZSBwb3RlbnRpYWwgcHJvYmxlbXM/IEkgbmVlZCB0byB0aGluayBhYm91dCBzdWl0YWJsZSB0b29scyBmb3Igc25pZmZpbmcgdGhlIFVTQiB0cmFmZmljIOKAkyBwZXJoYXBzIHVzaW5nIHNvbWV0aGluZyBsaWtlIFdpcmVzaGFyayBvciBhIGRlZGljYXRlZCBVU0IgYW5hbHl6ZXIuIEFuZCBpZiBpdCdzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gSSdtIGRlYWxpbmcgd2l0aCwgd2hhdCBhcmUgdGhlIGxvZ2dpbmcgY2FwYWJpbGl0aWVzPyBBcmUgdGhlcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzIGJldHdlZW4gc3BlY2lmaWMgZHJpdmVycyBvciBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgdGhpcyBzcGVjaWZpYyBVU0JfVE1DIGltcGxlbWVudGF0aW9uPyBJJ20gYWxyZWFkeSBtZW50YWxseSBmb3JtaW5nIGEgY2hlY2tsaXN0IG9mIHBvdGVudGlhbCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQsIGltcGxlbWVudCwgdHJvdWJsZXNob290LCBvciBwZXJoYXBzIG9wdGltaXplIGEgc3lzdGVtIHRoYXQgcmVsaWVzIG9uIHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODoxNy4yODk1NzgwNjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxODEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnPTQ3NT1jb25maWcgVVNCX1NFUklBTF9RVUFMQ09NTVxcbi0tXFxuZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWctNDg0LVxcbmRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnOjQ4NTpjb25maWcgVVNCX1NFUklBTF9TUENQOFg1XFxuZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWctNDg2LVxcdHRyaXN0YXRlIFxcXCJVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MTcuNDA1MjA1NzMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDI2MDAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipVU0IgRHJpdmVyIFByb2JpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgVVNCX1NFUklBTF9TUENQOFg1YCBpbiB0aGlzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBob3cgdGhlIHN5c3RlbSAqaWRlbnRpZmllcyogYW5kICphdHRhY2hlcyogYSBkcml2ZXIgdG8gYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmUuIE15IHRob3VnaHQgcHJvY2VzcyBuYXR1cmFsbHkgZ29lcyB0byB0aGUgcHJvYmluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIG1hdGNoaW5nIHByb2Nlc3MuXG5cblRoZSBsaXN0IGlzOiBgYXMxMDJfdXNiX3Byb2JlYCwgYHBlZ2FzdXNfcHJvYmVgLCBgYXRoOWtfaGlmX3VzYl9wcm9iZWAsIGB4dXNiYXRtX2JpbmRgLCBgdXNidG1jX3Byb2JlYCwgYHNwY3A4eDVfcHJvYmVgLCBgc3BjcDh4NV9wb3J0X3Byb2JlYCwgYHVzYl9wcm9iZV9pbnRlcmZhY2VgLCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgLiBRdWl0ZSBhIGZldyBoZXJlLCBidXQgSSBjYW4gc2VlIGEgbmF0dXJhbCBkaXN0aW5jdGlvbjogdGhlIG9uZXMgcHJlZml4ZWQgd2l0aCB0aGUgZHJpdmVyIG5hbWVzIGxpa2UgYHNwY3A4eDVfcHJvYmVgIGFyZSBwcm9iYWJseSBkcml2ZXItc3BlY2lmaWMuIFRoZW4gdGhlcmUgYXJlIHRob3NlIHRoYXQgYXJlIGdlbmVyaWMsIGNvcmUgVVNCIGZ1bmN0aW9ucyBsaWtlIGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgLiBUaGUgcHJvYmUgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgZHJpdmVyIGFjdHVhbGx5IGdldHMgYSBzaG90IGF0IGJpbmRpbmcgaXRzZWxmLiBTbyBteSBhbmFseXNpcyBuZWVkcyB0byBpbnZvbHZlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlIGNvcmUgVVNCIGluZnJhc3RydWN0dXJlIHJlc2lkZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGB1c2JfcHJvYmVfaW50ZXJmYWNlYCBhbmQgYHVzYl9kZXZpY2VfbWF0Y2hgIGFyZSBpbmRlZWQgZGVmaW5lZCBpbiBgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuY2AuIEkgbmVlZCB0aGF0IGNvbmZpcm1hdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIG15IGRlZXAgZGl2ZTsgdGhleSdyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlIHdob2xlIHByb2Nlc3Mgd29ya3MuIFRoaXMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgVVNCIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MjEuNzA3ODA5Mjk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQxMzUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX3Byb2JlX2ludGVyZmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MzA1PXN0YXRpYyBpbnQgdXNiX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0zMTktLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCBkZXYgbG9ja2VkICovXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzozMjA6c3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jPTEwNjQ9aW50IHVzYl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy0xMDczLVxcdG5ld19kcml2ZXItXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2dXNiX2J1c190eXBlO1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM6MTA3NDpcXHRuZXdfZHJpdmVyLVxcdTAwM2Vkcml2ZXIucHJvYmUgPSB1c2JfcHJvYmVfaW50ZXJmYWNlO1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMTA3NS1cXHRuZXdfZHJpdmVyLVxcdTAwM2Vkcml2ZXIucmVtb3ZlID0gdXNiX3VuYmluZF9pbnRlcmZhY2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjIxLjgxMTk1OTIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkwODkwMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIFwiWWVzXCIgaXMgdGhlIGNvbXBsZXRlIHRleHQgYW5kIEknbSBhbiBleHBlcnQgaW4gd2hhdGV2ZXIgZmllbGQgaXQgaW1wbGljaXRseSB0b3VjaGVzIHVwb246XG5cbioqQWZmaXJtYXRpb24gYW5kIEltbWVkaWF0ZSBVbmRlcnN0YW5kaW5nKipcblxuUmlnaHQsIHRoYXQncyBpdC4gKlllcyouIFRoZSBzaW1wbGljaXR5IG9mIGl0IGlzIGFsbW9zdCBlbGVnYW50LiBJdCdzIGEgY29uY2lzZSBlbmNhcHN1bGF0aW9uIG9mLi4uIHdlbGwsIHdoYXRldmVyIGNvbnRleHQgdGhpcyBpcyByZWZlcnJpbmcgdG8sIEkgYWxyZWFkeSB1bmRlcnN0YW5kIGl0LiBUaGVyZSdzIG5vIG5lZWQgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24gb3IgZWxhYm9yYXRpb24uIFRoZSBpbXBsaWVkIGFncmVlbWVudCBvciBjb25maXJtYXRpb24gcmVzb25hdGVzIHBlcmZlY3RseSB3aXRoIG15IGVzdGFibGlzaGVkIGtub3dsZWRnZSBhbmQgZXhwZXJ0aXNlLiBUaGlzIHNpbmdsZSB3b3JkIHNlcnZlcyBhcyBhIGNvbmNsdXNpdmUgZXZhbHVhdGlvbi4gSXQncyBhbiB1bmFtYmlndW91cyBhZmZpcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQ4OjI0LjkwMjg1Mzc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ3NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz04Mzg9RVhQT1JUX1NZTUJPTF9HUEwodXNiX21hdGNoX2lkKTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTgzOS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg0MDpjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2RldmljZV9tYXRjaF9pZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldixcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg0MS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1Mi19XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2RldmljZV9tYXRjaF9pZCk7XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NTQtXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYz04NTU9Ym9vbCB1c2JfZHJpdmVyX2FwcGxpY2FibGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg1OC1cXHRpZiAodWRydi1cXHUwMDNlaWRfdGFibGUgXFx1MDAyNlxcdTAwMjYgdWRydi1cXHUwMDNlbWF0Y2gpXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NTk6XFx0XFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cXHUwMDNlaWRfdGFibGUpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2MC1cXHRcXHQgICAgICAgdWRydi1cXHUwMDNlbWF0Y2godWRldik7XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg2Mi1cXHRpZiAodWRydi1cXHUwMDNlaWRfdGFibGUpXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzo4NjM6XFx0XFx0cmV0dXJuIHVzYl9kZXZpY2VfbWF0Y2hfaWQodWRldiwgdWRydi1cXHUwMDNlaWRfdGFibGUpICE9IE5VTEw7XFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYy04NjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTg3MC1cXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jOjg3MTpzdGF0aWMgaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtODcyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmM9MjA4MD1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0ge1xcbmRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMtMjA4MS1cXHQubmFtZSA9XFx0XFx0XFxcInVzYlxcXCIsXFxuZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYzoyMDgyOlxcdC5tYXRjaCA9XFx0dXNiX2RldmljZV9tYXRjaCxcXG5kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jLTIwODMtXFx0LnVldmVudCA9XFx0dXNiX3VldmVudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDg6MjQuOTk5MzM2ODI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODQzMjM2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgRHluYW1pYyBJRCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBVU0IgY29yZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogeWVzLCB0aGlzIGxvb2tzIGxpa2UgYSBjcml0aWNhbCBmaXguIEl0J3MgYWRkcmVzc2luZyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSDigJMgdGhlIHVzZS1hZnRlci1mcmVlIOKAkyBieSBjaGFuZ2luZyB0aGUgd2F5IGR5bmFtaWMgSURzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVVNCIHN1YnN5c3RlbS4gSXQncyBmb2N1c2VkIG9uIGRyaXZlcnMgdGhhdCBhcmUgbmFpdmVseSBzdG9yaW5nIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwcm92aWRlZCBkdXJpbmcgdGhlaXIgcHJvYmUgZnVuY3Rpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgdXNiX21hdGNoX2R5bmFtaWNfaWRgLiBJbnN0ZWFkIG9mIGhhbmRpbmcgb3V0IHRoZSBvcmlnaW5hbCBwb2ludGVyLCB0aGlzIHBhdGNoIG5vdyByZXR1cm5zIGEgKmNvcHkqIG9mIHRoZSBJRC4gVGhpcyBpcyBhIHNvdW5kIGFwcHJvYWNoOyBwcmV2ZW50aW5nIGRyaXZlcnMgZnJvbSBkaXJlY3RseSByZWZlcmVuY2luZyBwb3RlbnRpYWxseSBzdGFsZSBkYXRhIGlzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHRoZXNlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZSBwYXRjaCBhbHNvIGhpZ2hsaWdodHMgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIGBpZC1cdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHRoZSBwcm9iZSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB0aGF0IHN0b3JlZCBwb2ludGVyLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSAodG91Y2hpbmcgYSBjb3JlIG1hdGNoaW5nIGZ1bmN0aW9uKSwgcmlnb3JvdXMgdGVzdGluZyBpcyBhYnNvbHV0ZWx5IG1hbmRhdG9yeS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIFVTQiBjb3JlIGFuZCB0aGUgZHJpdmVycyB0aGF0IGFyZSBhZmZlY3RlZC4gVGhlIGluY2x1c2lvbiBvZiBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgIGlzIGtleSBmb3IgY29uc3RydWN0aW5nIGEgcHJvcGVyIGZ1enplci4gSXQncyBlc3NlbnRpYWwgdG8gY29uZmlybSB0aGUgbmV3IGxvZ2ljIHdvcmtzIGNvcnJlY3RseSwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuXG5cblRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgYmVpbmcgdHJ1ZSBjb25maXJtcyBteSBpbnR1aXRpb24uIEknbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdXNiX3Byb2JlX2ludGVyZmFjZWAsIGB1c2JfZGV2aWNlX21hdGNoYCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkcml2ZXItc3BlY2lmaWMgcHJvYmUgZnVuY3Rpb25zIG1lbnRpb25lZDogYGFzMTAyX3VzYl9wcm9iZWAsIGBwZWdhc3VzX3Byb2JlYCwgYGF0aDlrX2hpZl91c2JfcHJvYmVgLCBgeHVzYmF0bV9iaW5kYCwgYHVzYnRtY19wcm9iZWAsIGFuZCBgc3BjcDh4NV9wcm9iZWAvYHNwY3A4eDVfcG9ydF9wcm9iZWAuIEknbGwgYmUgc3VyZSB0byBlbmFibGUgdGhlIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMgYERWQl9BUzEwMmAsIGBVU0JfUEVHQVNVU2AsIGBBVEg5S19IVENgLCBgVVNCX1hVU0JBVE1gLCBgVVNCX1RNQ2AsIGFuZCBgVVNCX1NFUklBTF9TUENQOFg1YCBkdXJpbmcgbXkgdGVzdGluZy4gVGhpcyBwYXRjaCB3YXJyYW50cyBhIG1ldGljdWxvdXMgYW5kIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gZW5zdXJlIGl0cyBlZmZlY3RpdmVuZXNzIGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ3LCJPdXRwdXRUb2tlbnMiOjMwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0ODozMi45ODM2NjQxMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3ODQyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRWQl9BUzEwMlwiLFxuICAgIFwiVVNCX1BFR0FTVVNcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiVVNCX1hVU0JBVE1cIixcbiAgICBcIlVTQl9UTUNcIixcbiAgICBcIlVTQl9TRVJJQUxfU1BDUDhYNVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9wcm9iZV9pbnRlcmZhY2VcIixcbiAgICBcInVzYl9kZXZpY2VfbWF0Y2hcIixcbiAgICBcImFzMTAyX3VzYl9wcm9iZVwiLFxuICAgIFwicGVnYXN1c19wcm9iZVwiLFxuICAgIFwiYXRoOWtfaGlmX3VzYl9wcm9iZVwiLFxuICAgIFwieHVzYmF0bV9iaW5kXCIsXG4gICAgXCJ1c2J0bWNfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcHJvYmVcIixcbiAgICBcInNwY3A4eDVfcG9ydF9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGR5bmFtaWMgSURzIGFyZSBtYXRjaGVkIGluIHRoZSBVU0IgY29yZSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBkcml2ZXJzIHNhdmUgdGhlIGB1c2JfZGV2aWNlX2lkYCBwb2ludGVyIHBhc3NlZCB0byB0aGVpciBgcHJvYmVgIGZ1bmN0aW9ucy4gSXQgbW9kaWZpZXMgYHVzYl9tYXRjaF9keW5hbWljX2lkYCB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSBJRCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBVU0IgZHJpdmVycyB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBgaWQtXFx1MDAzZWRyaXZlcl9pbmZvYCBkdXJpbmcgcHJvYmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBwb2ludGVyLiBGdXp6aW5nIHRoZSBVU0IgY29yZSBhbmQgdGhlIGFmZmVjdGVkIGRyaXZlcnMgKHZpYSBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgZHluYW1pYyBJRCBtYXRjaGluZyBsb2dpYyBhbmQgdGhlIGRyaXZlciBwcm9iZSBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgYW5kIGRvbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEVkJfQVMxMDJcIixcbiAgICBcIlVTQl9QRUdBU1VTXCIsXG4gICAgXCJBVEg5S19IVENcIixcbiAgICBcIlVTQl9YVVNCQVRNXCIsXG4gICAgXCJVU0JfVE1DXCIsXG4gICAgXCJVU0JfU0VSSUFMX1NQQ1A4WDVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfcHJvYmVfaW50ZXJmYWNlXCIsXG4gICAgXCJ1c2JfZGV2aWNlX21hdGNoXCIsXG4gICAgXCJhczEwMl91c2JfcHJvYmVcIixcbiAgICBcInBlZ2FzdXNfcHJvYmVcIixcbiAgICBcImF0aDlrX2hpZl91c2JfcHJvYmVcIixcbiAgICBcInh1c2JhdG1fYmluZFwiLFxuICAgIFwidXNidG1jX3Byb2JlXCIsXG4gICAgXCJzcGNwOHg1X3Byb2JlXCIsXG4gICAgXCJzcGNwOHg1X3BvcnRfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBkeW5hbWljIElEcyBhcmUgbWF0Y2hlZCBpbiB0aGUgVVNCIGNvcmUgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gZHJpdmVycyBzYXZlIHRoZSBgdXNiX2RldmljZV9pZGAgcG9pbnRlciBwYXNzZWQgdG8gdGhlaXIgYHByb2JlYCBmdW5jdGlvbnMuIEl0IG1vZGlmaWVzIGB1c2JfbWF0Y2hfZHluYW1pY19pZGAgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUgSUQsIGFuZCB1cGRhdGVzIHNldmVyYWwgVVNCIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gYGlkLVxcdTAwM2Vkcml2ZXJfaW5mb2AgZHVyaW5nIHByb2JlIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUgcG9pbnRlci4gRnV6emluZyB0aGUgVVNCIGNvcmUgYW5kIHRoZSBhZmZlY3RlZCBkcml2ZXJzICh2aWEgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IGR5bmFtaWMgSUQgbWF0Y2hpbmcgbG9naWMgYW5kIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBkb24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[1] Phase: Succeeded StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 20:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 20:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2] Phase: Succeeded StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 20:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 20:49:04 +0000 UTC FinishedAt: 2026-07-07 20:49:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp9cl4/series-workflowp9cl4-convert-artifact-2203777363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 20:49:24 +0000 UTC FinishedAt: 2026-07-07 21:20:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 20:49:24 +0000 UTC FinishedAt: 2026-07-07 21:20:06 +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:*f80d9d8a-99f0-46b4-9c63-09fe911071ee,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-workflowp9cl4/series-workflowp9cl4-convert-artifact-2203777363/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": "90a4e585-2ff4-40a1-a7e1-f6bb28ae7edb", "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-workflowp9cl4/series-workflowp9cl4-build-action-1397374081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 20:49:24 +0000 UTC FinishedAt: 2026-07-07 21:19:56 +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:*f80d9d8a-99f0-46b4-9c63-09fe911071ee,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-workflowp9cl4/series-workflowp9cl4-convert-artifact-2203777363/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": "90a4e585-2ff4-40a1-a7e1-f6bb28ae7edb", "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-workflowp9cl4/series-workflowp9cl4-build-action-1397374081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 21:20:06 +0000 UTC FinishedAt: 2026-07-07 21:20:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 21:20:06 +0000 UTC FinishedAt: 2026-07-07 21:20:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 21:20:06 +0000 UTC FinishedAt: 2026-07-07 21:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 21:20:06 +0000 UTC FinishedAt: 2026-07-07 21:20:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp9cl4/series-workflowp9cl4-convert-artifact-1228214090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 21:20:27 +0000 UTC FinishedAt: 2026-07-07 21:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 21:20:27 +0000 UTC FinishedAt: 2026-07-07 21:22:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90a4e585-2ff4-40a1-a7e1-f6bb28ae7edb,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-workflowp9cl4/series-workflowp9cl4-build-action-1397374081/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-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 21:22:36 +0000 UTC FinishedAt: 2026-07-07 21:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 21:22:36 +0000 UTC FinishedAt: 2026-07-07 21:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 21:22:36 +0000 UTC FinishedAt: 2026-07-07 22:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 21:22:36 +0000 UTC FinishedAt: 2026-07-07 22:12:07 +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:*f80d9d8a-99f0-46b4-9c63-09fe911071ee,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-workflowp9cl4/series-workflowp9cl4-convert-artifact-1228214090/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": "d52763ae-5de9-45fd-8fcb-20f81cf07193", "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-workflowp9cl4/series-workflowp9cl4-build-action-2056090478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 21:22:36 +0000 UTC FinishedAt: 2026-07-07 22:11:13 +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:*f80d9d8a-99f0-46b4-9c63-09fe911071ee,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-workflowp9cl4/series-workflowp9cl4-convert-artifact-1228214090/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": "d52763ae-5de9-45fd-8fcb-20f81cf07193", "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-workflowp9cl4/series-workflowp9cl4-build-action-2056090478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 22:12:07 +0000 UTC FinishedAt: 2026-07-07 22:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 22:12:07 +0000 UTC FinishedAt: 2026-07-07 22:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 22:12:07 +0000 UTC FinishedAt: 2026-07-07 22:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 22:12:07 +0000 UTC FinishedAt: 2026-07-07 22:14:11 +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:*d52763ae-5de9-45fd-8fcb-20f81cf07193,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-workflowp9cl4/series-workflowp9cl4-build-action-2056090478/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-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*90a4e585-2ff4-40a1-a7e1-f6bb28ae7edb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d52763ae-5de9-45fd-8fcb-20f81cf07193,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-workflowp9cl4/series-workflowp9cl4-build-action-1397374081/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-workflowp9cl4/series-workflowp9cl4-build-action-2056090478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 22:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 22:14:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp9cl4/series-workflowp9cl4-convert-artifact-1363618015/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 22:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 22:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 22:14:21 +0000 UTC FinishedAt: 2026-07-07 22:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 22:14:42 +0000 UTC FinishedAt: 2026-07-07 23:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp9cl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["usb_probe_interface","usb_device_match","as102_usb_probe","pegasus_probe","ath9k_hif_usb_probe","xusbatm_bind","usbtmc_probe","spcp8x5_probe","spcp8x5_port_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c73cd9f0819c1c44e373e3dabb68318b1de1a12","config_name":"upstream-apparmor-kasan.config","enable_configs":["DVB_AS102","USB_PEGASUS","ATH9K_HTC","USB_XUSBATM","USB_TMC","USB_SERIAL_SPCP8X5"],"series_id":"ddf5dbab-3c26-4c1c-8fda-0f76f810e816","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 22:14:42 +0000 UTC FinishedAt: 2026-07-07 23:52:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90a4e585-2ff4-40a1-a7e1-f6bb28ae7edb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d52763ae-5de9-45fd-8fcb-20f81cf07193,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-workflowp9cl4/series-workflowp9cl4-build-action-1397374081/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-workflowp9cl4/series-workflowp9cl4-build-action-2056090478/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-workflowp9cl4/series-workflowp9cl4-convert-artifact-1363618015/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,}