Name: series-workflowxnqxx Phase: Succeeded StartedAt: 2026-07-02 10:29:00 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[0] Phase: Succeeded StartedAt: 2026-07-02 10:29:00 +0000 UTC FinishedAt: 2026-07-02 10:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 10:29:00 +0000 UTC FinishedAt: 2026-07-02 10:46:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY", "USB_NET_SMSC95XX", "USB_LAN78XX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY", "USB_NET_SMSC95XX", "USB_LAN78XX" ], "series_id": "161f5898-eb04-4fbe-8cbb-e0c194a8e057" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "genphy_c45_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave", "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7VVNCX0xBTjc4WFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5waHlfYzQ1X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9nZXRfZmVhdHVyZXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfbG9hZCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW50ciYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19hbmVnJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBuZXcgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgZm9yIHNvZnQgcmVzZXQgYW5kIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKGxpa2Ugc21zYzk1eHggb3IgbGFuNzh4eCkgdmlhIFZIQ0kuIFRoZXNlIGFkYXB0ZXJzIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBjYW4gYmUgbWFkZSB0byByZXBvcnQgdGhlIFJUTDgyNjFDIFBIWSBJRCAoMHgwMDFjYzg5OCkgZHVyaW5nIGJ1cyBzY2FubmluZy4gVGhlIFBIWSBzdWJzeXN0ZW0gd2lsbCB0aGVuIGxvYWQgdGhlIHJlYWx0ZWsgZHJpdmVyIGFuZCBleGVjdXRlIHRoZSBuZXcgcHJvYmUsIGNvbmZpZywgYW5kIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBhbHNvIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJiMzOTtzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMjJkYTJhYWJjYWZmMWNjZTA5NmRjZmUyNjk0MzFmYjdlMmVhMGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMDo0MToxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLmRmNjgyZDNlYmQ1YTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxuJiM0MztcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuJiM0MztcdFx0XHRcdFx0IE1ESU9fQ1RSTDEsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4mIzQzO1x0XHRcdFx0XHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuJiM0MzsgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4mIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbiYjMzk7dCBjaGFuZ2UsXG4mIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgY3RsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbiYjNDM7XHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbiYjNDM7XHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCAyNzI2ODgxMWY1NjRmMi4uMTBjOGFiZmViZTg0N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgJiM0Mzs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbiYjNDM7XG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVx0XHRCSVQoNylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXHRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX01BSU5fTUFHSUNcdFx0XHQweDUyNTQ0QzM4XG4mIzQzOyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXHRcdDMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwmIzM0O3J0bF9uaWMvcnRsODI2MWMuYmluXCYjMzQ7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbiYjNDM7XG4mIzQzO2VudW0gcnRsODI2MXhfZndfb3Age1xuJiM0MztcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4mIzQzO1x0T1BfUE9MTCAgPSAweDAyLFx0LyogUG9sbGluZyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XG4mIzQzO1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuJiM0MztcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWFqb3I7XHQvKiBNYWpvciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbiYjNDM7XHRfX2xlMTYgcmVzZXJ2ZWQ7XHQvKiBSZXNlcnZlZCAqL1xuJiM0MztcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4mIzQzO1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4mIzQzO1x0X191OCAgZGV2O1x0XHQvKiBNTUQgZGV2aWNlICovXG4mIzQzO1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbiYjNDM7XHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX3U4ICBsc2I7XHRcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbiYjNDM7XHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiYjNDM7XHRfX3U4ICBwb2xsX3NldDtcdFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xuJiM0MztcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbiYjNDM7I2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICYjNDM7MzM5LDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xuIFx0dTE2IGluZXI7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuJiM0MztcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4mIzQzO1x0Ym9vbCBmd19sb2FkZWQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICYjNDM7Mzg0LDMxOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4mIzQzO1x0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7VW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXG4mIzQzO1x0ICogUlRMODI2MVggc3VwcG9ydHMgMi41Ry81RyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCAxMEdcbiYjNDM7XHQgKi9cbiYjNDM7XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4mIzQzO1x0dTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYztcbiYjNDM7XHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuJiM0MztcdHNpemVfdCBkYXRhX2xlbjtcbiYjNDM7XHR1MTYgbnVtX2VudHJpZXM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBGV19IRUFERVJfU0laRSkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0Zpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCYjMzQ7LCBmdy1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZW1haW5fbWFnaWMpO1xuJiM0MztcdGlmIChtYWluX21hZ2ljICE9IEZXX01BSU5fTUFHSUMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcXG5cJiMzNDssIG1haW5fbWFnaWMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbiYjNDM7XHRpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cJiMzNDssIHN1Yl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTtcbiYjNDM7XHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgIT0gc2l6ZW9mKCpoZHIpICYjNDM7IGRhdGFfbGVuKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wO1xuJiM0MztcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7Q1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xuJiM0MztcdHU4IGRldiwgbXNiLCBsc2IsIHBvbGxfc2V0O1xuJiM0MztcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuJiM0MztcdGludCByZXQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuJiM0MztcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VhZGRyKTtcbiYjNDM7XHRtc2IgPSBlbnRyeS1cdTAwM2Vtc2I7XG4mIzQzO1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuJiM0MztcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldmFsdWUpO1xuJiM0MztcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V0aW1lb3V0X21zKTtcbiYjNDM7XHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAodGltZW91dF9tcyA9PSAwKVxuJiM0MztcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbiYjNDM7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2UgUlRMODI2MVhfTUFYX01NRF9ERVYpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtpbnZhbGlkIGZpcm13YXJlIE1NRCBkZXZpY2U6IGRldj0ldVxcblwmIzM0OywgZGV2KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtpbnZhbGlkIGZpcm13YXJlIGJpdHM6IG1zYj0ldSwgbHNiPSV1XFxuXCYjMzQ7LCBtc2IsIGxzYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnktXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgT1BfV1JJVEU6XG4mIzQzO1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IEdFTk1BU0sobXNiLCBsc2IpKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBPUF9QT0xMOlxuJiM0MztcdFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xuJiM0MztcdFx0ZXhwZWN0X3ZhbCA9ICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgYml0cztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9sbF9zZXQpXG4mIzQzO1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSAhPSBleHBlY3RfdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlZndfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBwcml2LVx1MDAzZWZ3X25hbWUsIFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2Vmd19uYW1lLCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpOyBpJiM0MzsmIzQzOywgZW50cnkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RW50cnkgJWQgZmFpbGVkOiAlZFxcblwmIzM0OywgaSwgcmV0KTtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7cmVsZWFzZV9mdzpcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXG4mIzQzO1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBpcnFfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4mIzQzO1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeV9lcnJvcihwaHlkZXYpO1xuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEoaXJxX3N0YXR1cyBcdTAwMjYgUlRMODI2MVhfSU5UX01BU0tfQUxMKSlcbiYjNDM7XHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlycV9zdGF0dXMgXHUwMDI2IChSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHxcbiYjNDM7XHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbiYjNDM7XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWR2XzFnID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuJiM0MztcdFx0XHRcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbiYjNDM7XHRcdFx0XHQgICAgIGFkdl8xZyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdHJldHVybiBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmRcbiYjNDM7XHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4mIzQzO1x0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4mIzQzO1x0XHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bDgyMXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5AQCAtMzAwMSw2ICYjNDM7MzM4OCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4mIzQzO1x0fSwge1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCYjMzQ7LFxuJiM0MztcdFx0LnByb2JlXHRcdFx0PSBydGw4MjYxeF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19hbmVnLFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXG4mIzQzO1x0XHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcbiYjNDM7XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQuc29mdF9yZXNldFx0XHQ9IGdlbnBoeV9jNDVfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZmQuLjI1YTY2MzIwZGY1NmVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMDksNiAmIzQzOzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggJiM0MzszMzIsMTMgQEBcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXHQweDAwODBcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcdDB4MDEwMFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXHQweDEwMDBcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXHQweDIwMDBcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xuIFxuIC8qIEFOIDEwR0JBU0UtVCBzdGF0dXMgcmVnaXN0ZXIuICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzIyZGEyYWFiY2FmZjFjY2UwOTZkY2ZlMjY5NDMxZmI3ZTJlYTBlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTA6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCAxMjY5NTE3NDE0Mjg4Zi4uZGY2ODJkM2ViZDVhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwpAQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKJiM0MzsJCQkgICAgICAgTURJT19DVFJMMV9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsCiYjNDM7CQkJCQkgTURJT19DVFJMMSwgdmFsLAomIzQzOwkJCQkJICEodmFsICZhbXA7IE1ESU9fQ1RSTDFfUkVTRVQpLAomIzQzOwkJCQkJIDUwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfc29mdF9yZXNldCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlCiYjNDM7ICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0bwomIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4mIzM5O3QgY2hhbmdlLAomIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGN0bCA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc2V0KSB7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRToKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOOwomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHsKJiM0MzsJCWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7CiYjNDM7CQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7CiYjNDM7CX0gZWxzZSBpZiAocGh5ZGV2LSZndDtsaW5rKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJCXJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7CkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmZ3Q7IDApCiAJCWNoYW5nZWQgPSB0cnVlOwogCiYjNDM7CWlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IDI3MjY4ODExZjU2NGYyLi4xMGM4YWJmZWJlODQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKQEAgLTgsNyAmIzQzOzgsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JjMzIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2VpcnEuaCZndDsKQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBACiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDEJCTE3CiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDIJCTE4CiAKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFRwkJCTB4YTQzNgomIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHCQkJMHhhNDM4CiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSCQkweDgwMWQKJiM0MzsKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT04JCQkweDY5N2EKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLCQlHRU5NQVNLKDUsIDApCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJCQkwCkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQAogI2RlZmluZSBSVExfODIyMUJfVk1fQ0cJCQkJMHgwMDFjYzg0YQogI2RlZmluZSBSVExfODI1MUIJCQkJMHgwMDFjYzg2MgogI2RlZmluZSBSVExfODI2MUMJCQkJMHgwMDFjYzg5MAomIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHCQkJCTB4MDAxY2M4OTgKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMCQkweDAwCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg0LDMxOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyoKJiM0MzsJICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCiYjNDM7CSAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHCiYjNDM7CSAqLwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICZhbXA7JmFtcDsgcGh5ZGV2LSZndDthdXRvbmVnX2NvbXBsZXRlKSB7CiYjNDM7CQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7CiYjNDM7CQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwkJbWlpX3N0YXQxMDAwX21vZF9saW5rbW9kZV9scGFfdChwaHlkZXYtJmd0O2xwX2FkdmVydGlzaW5nLCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjsKJiM0MzsJdTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYzsKJiM0MzsJdTMyIGNhbGNfY3JjLCBmaWxlX2NyYzsKJiM0MzsJc2l6ZV90IGRhdGFfbGVuOwomIzQzOwl1MTYgbnVtX2VudHJpZXM7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAmbHQ7IEZXX0hFQURFUl9TSVpFKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xuJiMzNDssIGZ3LSZndDtzaXplKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItJmd0O21haW5fbWFnaWMpOwomIzQzOwlpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBtYWluX21hZ2ljKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3ViX21hZ2ljKTsKJiM0MzsJaWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBzdWJfbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsKJiM0MzsJZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHNpemUgbWlzbWF0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDsKJiM0MzsJZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItJmd0O2NyYzMyKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcbiYjMzQ7LAomIzQzOwkJCSAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tczsKJiM0MzsJdTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7CiYjNDM7CXUzMiBiaXRzLCBleHBlY3RfdmFsOwomIzQzOwlpbnQgcmV0LCB2YWw7CiYjNDM7CiYjNDM7CWRldiA9IGVudHJ5LSZndDtkZXY7CiYjNDM7CWFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7YWRkcik7CiYjNDM7CW1zYiA9IGVudHJ5LSZndDttc2I7CiYjNDM7CWxzYiA9IGVudHJ5LSZndDtsc2I7CiYjNDM7CXZhbHVlID0gbGUxNl90b19jcHUoZW50cnktJmd0O3ZhbHVlKTsKJiM0MzsJdGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDt0aW1lb3V0X21zKTsKJiM0MzsJcG9sbF9zZXQgPSBlbnRyeS0mZ3Q7cG9sbF9zZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lb3V0X21zID09IDApCiYjNDM7CQl0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TOwomIzQzOwomIzQzOwlpZiAoZGV2ICZndDsgUlRMODI2MVhfTUFYX01NRF9ERVYpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XG4mIzM0OywgZGV2KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtc2IgJmd0OyAxNSB8fCBsc2IgJmd0OyBtc2IpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcbiYjMzQ7LCBtc2IsIGxzYik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5LSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgT1BfV1JJVEU6CiYjNDM7CQlyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkciwKJiM0MzsJCQkJICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlICZsdDsmbHQ7IGxzYikgJmFtcDsgR0VOTUFTSyhtc2IsIGxzYikpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgT1BfUE9MTDoKJiM0MzsJCWJpdHMgPSBHRU5NQVNLKG1zYiwgbHNiKTsKJiM0MzsJCWV4cGVjdF92YWwgPSAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBiaXRzOwomIzQzOwomIzQzOwkJaWYgKHBvbGxfc2V0KQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSA9PSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSAhPSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O2Z3X25hbWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO2Z3LCBwcml2LSZndDtmd19uYW1lLCAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiYjMzQ7LCBwcml2LSZndDtmd19uYW1lLCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy0mZ3Q7ZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsgaSYjNDM7JiM0MzssIGVudHJ5JiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXG4mIzM0OywgaSwgcmV0KTsKJiM0MzsJCQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7ZndfbG9hZGVkID0gdHJ1ZTsKJiM0MzsKJiM0MztyZWxlYXNlX2Z3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLAomIzQzOwkJCQkgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBpcnFfc3RhdHVzOwomIzQzOwomIzQzOwlpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZsdDsgMCkgewomIzQzOwkJcGh5X2Vycm9yKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEoaXJxX3N0YXR1cyAmYW1wOyBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKQomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwomIzQzOwlpZiAoaXJxX3N0YXR1cyAmYW1wOyAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8CiYjNDM7CSAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKQomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBhZHZfMWcgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLAomIzQzOwkJCQkgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiwKJiM0MzsJCQkJICAgICBhZHZfMWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJLyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmQKJiM0MzsJICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlcgomIzQzOwkgKiBjeWNsZSBvciBoYXJkIHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2Z3X25hbWUgJmFtcDsmYW1wOyAhcHJpdi0mZ3Q7ZndfbG9hZGVkKQomIzQzOwkJcmV0dXJuIHJ0bDgyNjF4X2Z3X2xvYWQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwpAQCAtMzAwMSw2ICYjNDM7MzM4OCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKIAkJLnJlYWRfbW1kCT0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLAogCQkud3JpdGVfbW1kCT0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCwKJiM0MzsJfSwgewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKJiM0MzsJCS5wcm9iZQkJCT0gcnRsODI2MXhfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0gcnRsODI2MXhfY29uZmlnX2luaXQsCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcywKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBydGw4MjYxeF9jb25maWdfYW5lZywKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSBydGw4MjYxeF9yZWFkX3N0YXR1cywKJiM0MzsJCS5jb25maWdfaW50cgkJPSBydGw4MjYxeF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IGdlbnBoeV9jNDVfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmZkLi4yNWE2NjMyMGRmNTZlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMzA5LDYgJiM0MzsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7CiAvKiBDbGF1c2UgNDUgUEhZICovCiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7CiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBACiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHCTB4MDA4MAkvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUcJMHgwMTAwCS8qIEFkdmVydGlzZSA1R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHCTB4MTAwMAkvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRQkweDQwMDAJLyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFCTB4MjAwMAkvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi8KIAogLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVAkweDgwMDAJLyogTWFzdGVyL3NsYXZlIGZhdWx0ICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcJMHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1RwkJMHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSCTB4MDIwMAkvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgyNjFDIFBIWSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkuIEl0IHRvdWNoZXMgYHBoeS1jNDUuY2AgYW5kIGByZWFsdGVrX21haW4uY2AsIGFuZCBpdCBicmluZ3MgaW4gc29tZSBuZXcgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/CgpQSFkgZHJpdmVycyBhcmUgdXN1YWxseSByZWFjaGFibGUgd2hlbiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBhdCBsZWFzdCBlbXVsYXRlZC4gQnV0LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgc3BlY2lmaWMgUEhZcyBkaXJlY3RseSwgcmlnaHQ/IEl0JiMzOTtzIG1vcmUgYWJvdXQgaGF2aW5nIGdlbmVyaWMgbWVjaGFuaXNtcyBvciBwZXJoYXBzIHNwZWNpZmljIGVtdWxhdGlvbi4gSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBQSFlzLiBUaGV5JiMzOTtyZSB1c3VhbGx5IGNvbm5lY3RlZCB0byBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhyb3VnaCBhbiBNRElPIGJ1cy4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBNRElPIGJ1cyBlbXVsYXRvcj8gV2UgaGF2ZSBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGBuZXRkZXZzaW1gIGZvciBzb21lIG5ldGRldnMsIGJ1dCBub3RoaW5nIGp1bXBzIG91dCBmb3IgTURJTy4KCkhvbGQgb24sIGNhbiB3ZSB0cmlnZ2VyIHRoZSBQSFkgZHJpdmVyIGNvZGUgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHk/IEkgc2VlbSB0byByZW1lbWJlciBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlSRUdgIGlvY3Rscy4gQnV0IGFyZW4mIzM5O3QgdGhvc2UgdGllZCB0byBhIG5ldGRldiB0aGF0JiMzOTtzICp1c2luZyogYSBQSFk/IEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBldGh0b29sYCwgd2hpY2ggc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLiBCdXQgd2UmIzM5O3JlIHRyeWluZyB0byBnZXQgdG8gYHJ0bDgyNjF4X3Byb2JlYCwgd2hpY2ggbWVhbnMgd2UgbmVlZCBhIFBIWSBkZXZpY2Ugd2l0aCB0aGUgSUQgYFJUTF84MjYxQ19DR2AgKDB4MDAxY2M4OTgpIG9uIGFuIE1ESU8gYnVzLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdG8gaW5zdGFudGlhdGUgdGhhdCBzcGVjaWZpYyBQSFkuCgpJcyB0aGVyZSBhbnkga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIHN5emthbGxlciBjYW4gY29udHJvbCBpbiB0aGUga2VybmVsPyBMZXQgbWUgZXhwbG9yZSB0aGUgb3B0aW9ucy4gSG1tLCBgbWRpby1tb2NrdXBgLCBuby4gYG1kaW8tZ3Bpb2AsIHVubGlrZWx5LiBXaGF0IGFib3V0IGBmaXhlZC1waHlgPyBXb3J0aCBhIGxvb2ssIGJ1dCBJJiMzOTttIGRvdWJ0aW5nIHRoYXQgZ2l2ZXMgdXMgdGhlIGxldmVsIG9mIGNvbnRyb2wgd2UgbmVlZC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIHNlYXJjaCB0aGUgYGRyaXZlcnMvbmV0L3BoeS9gIGRpcmVjdG9yeSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgbWRpb2Agb3IgYHBoeWAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLiptb2NrdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTgwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBCdXMgU29mdHdhcmUgUHJvYmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGEgbWVudGFsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgb3IgZHJpdmVyIGhhbmRsaW5nIHRoZSBNRElPIGJ1cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrbm93biBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFuZCBjaGVja2luZyB0aGVpciByZXNwZWN0aXZlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBhbmQgYW55IHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJ1aWxkIHRoZSBjb250ZXh0IG9mIGEgc3lzdGVtIHdoaWNoIHJlbGllcyBvbiBzdWNoIGEgbG93IGxldmVsIGJ1cy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlIE9TLCBvciBhbnkgbG93ZXIgbGV2ZWwgZmlybXdhcmUsIGhhcyBhbHJlYWR5IHRha2VuIHJlc3BvbnNpYmlsaXR5IGZvciB0aGlzIGludGVyZmFjZS4gSXQmIzM5O2xsIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBpZiBzb21lb25lIGVsc2UgaGFzIGFscmVhZHkgbGFpZCB0aGUgZ3JvdW5kd29yaywgYW5kIEkgY2FuIHNpbXBseSBsZXZlcmFnZSB0aGF0IGV4aXN0aW5nIGNvZGUuIElmIHRoZXJlJiMzOTtzIGFuIGV4aXN0aW5nIHNvZnR3YXJlIE1ESU8gYnVzIGluIHBsYWNlLCBJIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGF0IGJ1cywgYW5kIHZlcmlmeSBjb21wYXRpYmlsaXR5IHdpdGggbXkgdXNlLWNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLipzb2Z0d2FyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFZpcnR1YWwgUEhZIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlc2UgdmlydHVhbCBQSFlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSwgdGhlIGhlYXJ0IG9mIHRoZSBQSFkgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgeW91JiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIHByZWRpY3RhYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cCBpbiB0aGVyZS4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUEhZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTIyPWlmIFBIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDpjb25maWcgU1dQSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1LVx0Ym9vbFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjYtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNzpjb25maWcgUEhZX1BBQ0tBR0VcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4LVx0IHRyaXN0YXRlXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwOmNvbmZpZyBMRURfVFJJR0dFUl9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IExFRCB0cmlnZ2VycyBmb3IgdHJhY2tpbmcgbGluayBzdGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXHRkZWZfYm9vbCBPRlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTU1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NTY6Y29uZmlnIEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDtNRElPIEJ1cy9QSFkgZW11bGF0aW9uIHdpdGggZml4ZWQgc3BlZWQvbGluayBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2NTpjb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy02Ni0gICAgICAgIGJvb2wgXCYjMzQ7UnVzdCBQSFlMSUIgYWJzdHJhY3Rpb25zIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz03OT1jb21tZW50IFwmIzM0O01JSSBQSFkgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6ODE6Y29uZmlnIEFTMjFYWFhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy04Mi1cdHRyaXN0YXRlIFwmIzM0O0Flb25zZW1pIEFTMjF4eHggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTkyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTM6Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBBTjg4MDEgR2lnYWJpdCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEwNjpjb25maWcgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTEwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTExOmNvbmZpZyBBTURfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTItXHR0cmlzdGF0ZSBcJiMzNDtBTUQgYW5kIEFsdGltYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTE2OmNvbmZpZyBNRVNPTl9HWExfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtBbWxvZ2ljIE1lc29uIEdYTCBJbnRlcm5hbCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMjM6Y29uZmlnIEFESU5fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMzI6Y29uZmlnIEFESU4xMTAwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMzLVx0dHJpc3RhdGUgXCYjMzQ7QW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEzOC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzOTpjb25maWcgQU1DQ19RVDIwMjVfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDAtXHR0cmlzdGF0ZSBcJiMzNDtBTUNDIFFUMjAyNSBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0xNDY9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNDg6Y29uZmlnIEFYODg3OTZCX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7QXNpeCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTUzLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU0OmNvbmZpZyBBWDg4Nzk2Ql9SVVNUX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtSdXN0IHJlZmVyZW5jZSBkcml2ZXIgZm9yIEFzaXggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2MS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE2Mjpjb25maWcgQlJPQURDT01fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSA1NFhYIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzAtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNzE6Y29uZmlnIEJDTTU0MTQwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gQkNNNTQxNDAgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgxLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTgyOmNvbmZpZyBCQ002M1hYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgzLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gNjN4eCBTT0NzIGludGVybmFsIFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE4OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE4OTpjb25maWcgQkNNN1hYWF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE5MC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIDd4eHggU09DcyBpbnRlcm5hbCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTk2OmNvbmZpZyBCQ004NDg4MV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTg0ODgxIFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwMTpjb25maWcgQkNNODdYWF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMi1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTg3MDYgYW5kIEJDTTg3MjcgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwNjpjb25maWcgQkNNX0NZR05VU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEN5Z251cy9PbWVnYSBTb0MgaW50ZXJuYWwgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjE4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjE5OmNvbmZpZyBCQ01fTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjIwLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIyMjpjb25maWcgQkNNX05FVF9QSFlQVFBcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMjU6Y29uZmlnIENJQ0FEQV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyNi1cdHRyaXN0YXRlIFwmIzM0O0NpY2FkYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjI5LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjMwOmNvbmZpZyBDT1JUSU5BX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMxLVx0dHJpc3RhdGUgXCYjMzQ7Q29ydGluYSBFREMgQ0RSIDEwRyBFdGhlcm5ldCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMzU6Y29uZmlnIERBVklDT01fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzYtXHR0cmlzdGF0ZSBcJiMzNDtEYXZpY29tIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzktXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDA6Y29uZmlnIElDUExVU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0MS1cdHRyaXN0YXRlIFwmIzM0O0lDUGx1cyBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjQ0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjQ1OmNvbmZpZyBMWFRfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBMWFQgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0OS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1MDpjb25maWcgSU5URUxfWFdBWV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1MS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFhXQVkgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1Ny1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1ODpjb25maWcgTFNJX0VUMTAxMUNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtMU0kgRVQxMDExQyBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNjM6Y29uZmlnIE1BUlZFTExfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjQtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFsYXNrYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjY3LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjY4OmNvbmZpZyBNQVJWRUxMXzEwR19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgQWxhc2thIDEwR2JpdCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjczOmNvbmZpZyBNQVJWRUxMXzg4UTJYWFhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNzQtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIDg4UTJYWFggUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc5LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjgwOmNvbmZpZyBNQVJWRUxMXzg4WDIyMjJfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yODEtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIDg4WDIyMjIgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mjg2OmNvbmZpZyBNQVhMSU5FQVJfR1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg3LVx0dHJpc3RhdGUgXCYjMzQ7TWF4bGluZWFyIEV0aGVybmV0IFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOTMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyOTQ6Y29uZmlnIE1BWExJTkVBUl84NjExMF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5NS1cdHRyaXN0YXRlIFwmIzM0O01heExpbmVhciBNWEw4NjExMCBQSFkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMwNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMwNy1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwODpjb25maWcgTUlDUkVMX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzA5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcmVsIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMTU6Y29uZmlnIE1JQ1JPQ0hJUF9UMVNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgMTBCQVNFLVQxUyBFdGhlcm5ldCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzIwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzIxOmNvbmZpZyBNSUNST0NISVBfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMyNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMyNjpjb25maWcgTUlDUk9DSElQX1QxX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzI3LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIFQxIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMzM6Y29uZmlnIE1JQ1JPQ0hJUF9QSFlfUkRTX1BUUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMzg6Y29uZmlnIE1JQ1JPU0VNSV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMzOS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc2VtaSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzQ3OmNvbmZpZyBNT1RPUkNPTU1fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDgtXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM1Mi1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM1Mzpjb25maWcgTkFUSU9OQUxfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTQtXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNTg6Y29uZmlnIE5YUF9DQlRYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzU5LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIDEwMEJBU0UtVFggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM2My1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM2NDpjb25maWcgTlhQX0M0NV9USkExMVhYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzY1LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIEM0NSBUSkExMVhYIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNzEtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNzI6Y29uZmlnIE5YUF9USkExMVhYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzczLVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFRKQTExeHggUEhZcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc3LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzc4OmNvbmZpZyBOQ04yNjAwMF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3OS1cdHRyaXN0YXRlIFwmIzM0O09uc2VtaSAxMEJBU0UtVDFTIEV0aGVybmV0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTM4NT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGh5L3Fjb20vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzg2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzg3OmNvbmZpZyBRU0VNSV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4OC1cdHRyaXN0YXRlIFwmIzM0O1F1YWxpdHkgU2VtaWNvbmR1Y3RvciBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzkyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTQ6Y29uZmlnIFJFTkVTQVNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTk6Y29uZmlnIFJPQ0tDSElQX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDAwLVx0dHJpc3RhdGUgXCYjMzQ7Um9ja2NoaXAgRXRoZXJuZXQgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwMy1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQwNDpjb25maWcgU01TQ19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwNS1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQxMD1jb25maWcgU1RFMTBYUFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQxNTpjb25maWcgVEVSQU5FVElDU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNi1cdHRyaXN0YXRlIFwmIzM0O1RlcmFuZXRpY3MgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxOS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyMDpjb25maWcgRFA4MzgyMl9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQyMS1cdHRyaXN0YXRlIFwmIzM0O1RleGFzIEluc3RydW1lbnRzIERQODM4MjIvODI1LzgyNiBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDI1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDI2OmNvbmZpZyBEUDgzVEM4MTFfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MjctXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEM4MTEgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDMxOmNvbmZpZyBEUDgzODQ4X1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMyLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4Mzg0OCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MzUtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzY6Y29uZmlnIERQODM4NjdfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MzctXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzODY3IEdpZ2FiaXQgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDQxOmNvbmZpZyBEUDgzODY5X1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQyLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4Mzg2OSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ0Ni1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ0Nzpjb25maWcgRFA4M1RENTEwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4M1RENTEwIEV0aGVybmV0IDEwQmFzZS1UMUwgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDUyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDUzOmNvbmZpZyBEUDgzVEc3MjBfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NTQtXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEc3MjAgRXRoZXJuZXQgMTAwMEJhc2UtVDEgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDY3OmNvbmZpZyBWSVRFU1NFX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY4LVx0dHJpc3RhdGUgXCYjMzQ7Vml0ZXNzZSBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipFbXVsYXRpbmcgYSBQSFkgLSBXaGVyZSB0byBTdGFydD8qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHNpbXVsYXRlIGEgUEhZIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nLCBpcyB0aGVyZSBhIGdvb2QgYXBwcm9hY2ggb3IgYSBwcmUtZXhpc3RpbmcgbWV0aG9kIHRvIGVtdWxhdGUgYSBwaHlzaWNhbCBsYXllciBkZXZpY2U/IExldCBtZSB0aGluay4uLiB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGNvZGUgcmVsYXRlZCB0byB0aGlzLiBZZXMsIHRoZXJlIGl0IGlzISAqZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jKi4gRXhjZWxsZW50LiBUaGF0JiMzOTtzIHByb2JhYmx5IG15IGJlc3Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIG15IGdvYWwgaXMgdG8gZW11bGF0ZSAqYW55KiBQSFkgSUQuIENhbiBJIGxldmVyYWdlIHRoaXMgYGZpeGVkX3BoeWAgZHJpdmVyIHRvIGFjaGlldmUgdGhhdD8gSSYjMzk7bSBob3BpbmcgSSBjYW4gY29uZmlndXJlIGl0IHRvIHByZXNlbnQgaXRzZWxmIHdpdGggYW4gYXJiaXRyYXJ5IFBIWSBJRC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoYXQgbW9kaWZpY2F0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbWVldCB0aGF0IGdvYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihwaHlkZXZzW2ldKSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0MjpcdFx0XHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXZzW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9GSVhFRF9QSFlTOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcdFx0cGh5ZGV2c1tpXSA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI3MzpcdFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjc0LVx0XHRpZiAoIUlTX0VSUihwaHlkZXYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzIyLVx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjMyMzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjQtXHRtZGlvYnVzX3VucmVnaXN0ZXIobWlpX2J1cyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmcGh5X3N0YXR1cyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0Mi1cdFx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM6MTQ0OTpcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDUwLVx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTk3PXZvaWQgYmNtZ2VuZXRfbWlpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTE3OnN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMTg6XHRcdFx0XHRcdCAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTg2PXN0YXRpYyB2b2lkIGJjbWdlbmV0X21vY2FfcGh5X3NldHVwKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cdGlmIChiY21nZW5ldF9oYXNfbW9jYV9saW5rX2RldChwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjE4OTpcdFx0Zml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShwcml2LVx1MDAzZWRldi1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxOTA6XHRcdFx0XHRcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE5MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtNjYtLyogRm9yIE5DLVNJIHRvIHJlZ2lzdGVyIGEgZml4ZWQtbGluayBwaHkgZGV2aWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTY4LVx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTc4MD1zdGF0aWMgdm9pZCBmdGdtYWMxMDBfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXHRpZiAocHJpdi1cdTAwM2V1c2VfbmNzaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODQ4PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX25jc2koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE4Njc6XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2bmNzaV9waHlfc3RhdHVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjgtXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODEtZXJyX3JlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODMtZXJyX3JlZ2lzdGVyX25kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVx0XHRcdG5ldGRldl9pbmZvKG5kZXYsIFwmIzM0O25vIFBIWSwgYXNzdW1pbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gc3dpdGNoXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XHRcdFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cdFx0XHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxMy1cdFx0XHRpZiAocGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcdFx0XHRcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxNS1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2NvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00MjI4PWZlY19lbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQyNDMtXHRpZiAoIWZlcC1cdTAwM2VwaHlfbm9kZSBcdTAwMjZcdTAwMjYgcGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDEtXHQubmRvX2dldF9zdGF0czY0ID0gZ2Zhcl9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcdC5uZG9fY2hhbmdlX2NhcnJpZXIgPSBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDMtXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjI4PXZvaWQgaGJnX3BoeV9zdG9wKHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjMzOnN0YXRpYyB2b2lkIGhiZ19maXhlZF9waHlfdW5pbml0KHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzNTpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKChzdHJ1Y3QgcGh5X2RldmljZSAqKWRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzODpzdGF0aWMgaW50IGhiZ19maXhlZF9waHlfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI0MDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGhiZ19maXhlZF9waHlfc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXHRcdC5saW5rID0gMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjUxOlx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUyLVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGhiZ19maXhlZF9waHlfdW5pbml0LCBwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI3NS1cdGlmIChtYWMtXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6Mjc2Olx0XHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDEzLXtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQxNDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDE1LVx0c3RydWN0IGRldmljZV9ub2RlICpmaXhlZF9saW5rX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDU5LXJlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgbnApKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDY0PXZvaWQgb2ZfcGh5X2RlcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ3MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVx0JiM0Mzs9IGRwODN0ZzcyMC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcdFx0JiM0Mzs9IGZpeGVkX3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXHQmIzQzOz0gaWNwbHVzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMxOlx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzMtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zNi1zdGF0aWMgc3RydWN0IG1paV9idXMgKmZtYl9taWlfYnVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zOS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyAmIzQzOyBhZGRyIDogTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDItXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjQ2Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Ni1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTc1PXN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4NjppbnQgZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVx0XHRcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04OS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTAzLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNjpzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTU6XHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVx0ZG8ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEyMzpcdFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjQtXHRcdGlmIChhZGRyID09IE5VTV9GUClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2Olx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNDY6XHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVx0aWYgKHBoeV9hZGRyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDktXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUxOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cdGlmIChJU19FUlIocGh5KSkge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1NTpcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU2LVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVx0XHRvZl9ub2RlX3B1dChucCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3OC1cdFx0LnNwZWVkXHQ9IFNQRUVEXzEwMCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODY6dm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4OS1cdG9mX25vZGVfcHV0KHBoeS1cdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTA6XHRmaXhlZF9waHlfZGVsKHBoeS1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5MS1cdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzYxPXN0YXRpYyBpbnQgcGh5bGlua19taWlfZW11bF9yZWFkKHVuc2lnbmVkIGludCByZWcsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM2NDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVx0dW5zaWduZWQgbG9uZyAqbHBhID0gc3RhdGUtXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNC0gKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTQtICovXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC02LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC05LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NzpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyB7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTgtXHRpbnQgc3BlZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xNj1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19GSVhFRF9QSFkpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjE5OmV4dGVybiBpbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNDpleHRlcm4gdm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI2LVx0XHRcdGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yOC0jZWxzZVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzA6Zml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTMxLVx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNy17XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC00MC1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBQSFkgRW11bGF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCB0b29sIGhlcmUuIGBmaXhlZF9waHlgIGlzIGRlZmluaXRlbHkgbm90IHRoZSB3YXkgdG8gZ28gZm9yIHRoaXM7IGl0JiMzOTtzIGRlc2lnbmVkIGZvciBmaXhlZCBsaW5rcywgbm90IGVtdWxhdGluZyBhcmJpdHJhcnkgUEhZIGJlaGF2aW9yLiBTbywgc2NyYXRjaCB0aGF0IGlkZWEuIEkgbmVlZCBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2guIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgdGhlcmU/IE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG1kaW8tbW9ja3VwYCwgYnV0Li4uIHdhaXQsIEkmIzM5O3ZlIGFscmVhZHkgdHJpZWQgc2VhcmNoaW5nIGZvciB0aGF0LCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBkaWQgYSBwcmV0dHkgdGhvcm91Z2ggc2VhcmNoLCBzcGVjaWZpY2FsbHkgdXNpbmcgYG1kaW8uKm1vY2t1cGAgYW5kIGNhbWUgdXAgZW1wdHkuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gYG1kaW8tZ3Bpb2AgZHJpdmVyIG9yIHNvbWV0aGluZyBvZiB0aGF0IG5hdHVyZT8gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBpbnNpZGUgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4cGxvcmUgdGhlIGxhbmRzY2FwZSBvZiBNRElPIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpX21kaW8uYyYjMzQ7LAogICAgJiMzNDtmd25vZGVfbWRpby5jJiMzNDssCiAgICAmIzM0O21kaW8tYWlyb2hhLmMmIzM0OywKICAgICYjMzQ7bWRpby1hc3BlZWQuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLXVuaW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYml0YmFuZy5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uaCYjMzQ7LAogICAgJiMzNDttZGlvLWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWhpc2ktZmVtYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWkyYy5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxNDAxOS5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxODA2NC5jJiMzNDssCiAgICAmIzM0O21kaW8tbW94YXJ0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tc2NjLW1paW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY202MzY4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWcxMmEuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1neGwuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tbWlvcmVnLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbXVsdGlwbGV4ZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXZ1c2IuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9jdGVvbi5jJiMzNDssCiAgICAmIzM0O21kaW8tcGljNjRocHNjLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlZ21hcC5jJiMzNDssCiAgICAmIzM0O21kaW8tc3VuNGkuYyYjMzQ7LAogICAgJiMzNDttZGlvLXRodW5kZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLXhnZW5lLmMmIzM0OywKICAgICYjMzQ7b2ZfbWRpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBCdXMgRW11bGF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYG1kaW8tbXZ1c2IuY2AgdGhpbmcuLi4gbm9wZSwgdGhhdCYjMzk7cyBNYXJ2ZWxsIFVTQiBNRElPLiBOb3Qgd2hhdCBJIG5lZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgY29uanVyZSB1cCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgb3V0IG9mIHRoaW4gYWlyIGZvciB0ZXN0aW5nPyBTeXprYWxsZXImIzM5O3MgZ290IHRob3NlIGBuZXRsaW5rYCBhbmQgYGV0aHRvb2xgIHRvb2xzIHRvIHRhbGsgdG8gZXhpc3RpbmcgUEhZcywgYnV0IEkgbmVlZCB0byBoaXQgYHJ0bDgyNjF4X3Byb2JlYCwgd2hpY2ggbWVhbnMgSSAqYWJzb2x1dGVseSogbmVlZCBhIFBIWSB3aXRoIHRoZSBJRCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkuIEEgZGlyZWN0IGluamVjdGlvbiBvZiB0aGUgUEhZIElEIHdvdWxkIGJlIGlkZWFsLCBidXQgaXMgdGhhdCBldmVuIHBvc3NpYmxlPwoKV2FpdCBhIG1pbnV0ZSwgaWYgU3l6a2FsbGVyIGNhbiBzcGluIHVwIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBhbmQgaGF2ZSBpdCByZWdpc3RlciBhbiBNRElPIGJ1cy4uLiBhbmQgKmlmKiBJIGNhbiBjb250cm9sIHRoZSByZXNwb25zZXMgZnJvbSB0aGF0IE1ESU8gYnVzLi4uIHRoYXQmIzM5O3MgdGhlIHRpY2tldCEgU28sIHdoZXJlJiMzOTtzIHRoZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgZG9lcyB0aGlzPyBMZXQmIzM5O3Mgc2VlLi4uIGBtYWNzZWNgPyBOb3BlLiBgdmV0aGA/IE5vIE1ESU8uIGBkdW1teWAsIGB0dW5gPyBOYWRhLiBPa2F5LCB3aGF0IGFib3V0IGBuZXRkZXZzaW1gPyBEb2VzIGBuZXRkZXZzaW1gIGhhdmUgYW4gTURJTyBidXM/IFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBnZXR0aW5nIGNsb3NlLCBzbyB0aGF0JiMzOTtzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIEFkYXB0ZXIgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZXhwYW5kIHRoZSBmdXp6aW5nIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBVU0IgbmV0d29yayBhZGFwdGVyczsgc29tZSwgSSByZW1lbWJlciwgaW5jb3Jwb3JhdGUgTURJTyBidXNlcyBhbmQgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcyAoUEhZcykuIEFuZCB0aGVuIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZW11bGF0aW5nIFVTQiBkZXZpY2VzIHVzaW5nIGB2aGNpYC4gU28sIHRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBmb3IgU3l6a2FsbGVyIHRvIHNpbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciwgdGhpbmdzIGxpa2UgYHNtc2M5NXh4YCwgYHI4MTUyYCwgb3IgYGFzaXhgLCBmb3IgZXhhbXBsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgcmVnaXN0ZXJzLCBpdCBjb3VsZCBzdWJzZXF1ZW50bHkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBuZXh0IGF0dGFjayBzdXJmYWNlIGlzLiBUaGVyZWZvcmUsIGl0IG1ha2VzIHNlbnNlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYHI4MTUyYCBkcml2ZXIgbGV2ZXJhZ2VzIFBIWUxJQi4gVGhhdOKAmXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTY2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqTURJT2J1cyBSZWdpc3RlcjogQSBRdWljayBTY2FuKioKCldhaXQsIGBtZGlvYnVzX3JlZ2lzdGVyYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhleSYjMzk7cmUgdXNpbmc/IEludGVyZXN0aW5nLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRyeWluZyB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaGVyZSwgd2hhdCBraW5kIG9mIE1ESU8gYnVzIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSXMgdGhpcyBzdGFuZGFyZCBFdGhlcm5ldCwgc29tZXRoaW5nIHByb3ByaWV0YXJ5LCBvciBhIHNwZWNpYWxpemVkIHZhcmlhbnQ/IFRoZSBjaG9pY2Ugb2YgYG1kaW9idXNfcmVnaXN0ZXJgIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhZGQgYSBuZXcgTURJTyBidXMgaW5zdGFuY2UgdG8gdGhlIHN5c3RlbSwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIHRoZXkgYXJlIGVpdGhlciBkZWFsaW5nIHdpdGggYSBuZXcgaGFyZHdhcmUgZGV2aWNlLCBvciBkeW5hbWljYWxseSBtYW5hZ2luZyBhbiBleGlzdGluZyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBidXMgaXMgZGVzaWduZWQgdG8gdGFsayB0by4gSXMgaXQganVzdCBQSFlzLCBvciBhcmUgdGhlcmUgb3RoZXIgTURJTy1jb21wYXRpYmxlIGNvbXBvbmVudHMgaW4gdGhlIG1peD8gVGhpcyByZWdpc3RyYXRpb24gcG9pbnQgaXMgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwga2V5IHRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGNvbWUgdG8gbWluZDogd2hhdCBpcyBpdHMgZHJpdmVyIGFuZCBwbGF0Zm9ybSBkYXRhPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjgwOlx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtODEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDcwPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZW1kaW9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQxLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTczOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIEJ1cyBNYW5pcHVsYXRpb24gdGhyb3VnaCBVU0IgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGlkZWEgYnJld2luZy4uLiBJIHNlZSB0aGF0IGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGF4ODgxNzJhYCwgYW5kIGBhc2l4X2RldmljZXNgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gSW50ZXJlc3RpbmchIElmIEkgY2FuIGxldmVyYWdlIHN5emthbGxlciB0byBlbXVsYXRlIG9uZSBvZiB0aGVzZSBVU0IgZGV2aWNlcyB1c2luZyBgdmhjaWAsIEkgY2FuIGludGVyY2VwdCB0aGUgVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGludm9sdmVkIGluIHJlYWRpbmcgYW5kIHdyaXRpbmcgTURJTyByZWdpc3RlcnMuIFRoZSBrZXkgaXMgaW4gdGhlIGNvbnRyb2wgdHJhbnNmZXJzLgoKSGFuZyBvbi4uLiBpZiBJIGZvY3VzIG9uIGVtdWxhdGluZyBgc21zYzk1eHhgLCB0aGUgYHNtc2M5NXh4YCBkcml2ZXIgd2lsbCB0cnkgdG8gZ2V0IHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMgdGhyb3VnaCBVU0IgY29udHJvbCBtZXNzYWdlcy4gQnJpbGxpYW50ISBJIGNhbiBoYXZlIHN5emthbGxlciByZXNwb25kIHRvIHRoaXMgd2l0aCB0aGUgUEhZIElEIG9mIGBSVExfODI2MUNfQ0dgLCB3aGljaCBpcyBgMHgwMDFjYzg5OGAuCgpUaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCB0aGUgUEhZIHN1YnN5c3RlbSAqc2hvdWxkKiB0aGVuIHBpY2sgdXAgb24gdGhpcyBJRCwgbG9hZCB0aGUgYHJlYWx0ZWtgIFBIWSBkcml2ZXIsIGFuZCB1bHRpbWF0ZWx5IGNhbGwgYHJ0bDgyNjF4X3Byb2JlYC4gVGhpcyBvcGVucyB1cCBhIHBvdGVudGlhbCB0ZXN0aW5nIHZlY3Rvci4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNtc2M5NXh4YCBkb2VzbiYjMzk7dCBoYXZlIHNvbWUga2luZCBvZiBzYW5pdHkgY2hlY2sgb24gdGhlIFBIWSBJRCBpdCByZWNlaXZlcywgdGhvdWdoLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IHZlcmlmeSBpZiBpdCBhbGxvd3MgYXJiaXRyYXJ5IFBIWSBJRHMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDc6XHRzdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjExNDg6XHR7XG4xMTQ5Olx0XHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XG4xMTUwOlx0XHRjaGFyIHVzYl9wYXRoWzY0XTtcbjExNTE6XHRcdGludCByZXQsIHBoeV9pcnE7XG4xMTUyOlx0XHR1MzIgdmFsO1xuMTE1MzpcdFxuMTE1NDpcdFx0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbjExNTU6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjExNTY6XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbjExNTc6XHRcdFx0cmV0dXJuIHJldDtcbjExNTg6XHRcdH1cbjExNTk6XHRcbjExNjA6XHRcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcbjExNjE6XHRcdGlmICghcGRhdGEpXG4xMTYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE2MzpcdFxuMTE2NDpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcGRhdGE7XG4xMTY1Olx0XG4xMTY2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZGF0YS1cdTAwM2VtYWNfY3JfbG9jayk7XG4xMTY3Olx0XG4xMTY4Olx0XHQvKiBMQU45NXh4IGRldmljZXMgZG8gbm90IGFsdGVyIHRoZSBjb21wdXRlZCBjaGVja3N1bSBvZiAwIHRvIDB4ZmZmZi5cbjExNjk6XHRcdCAqIFJGQyAyNDYwLCBpcHY2IFVEUCBjYWxjdWxhdGVkIGNoZWNrc3VtIHlpZWxkcyBhIHJlc3VsdCBvZiB6ZXJvIG11c3RcbjExNzA6XHRcdCAqIGJlIGNoYW5nZWQgdG8gMHhmZmZmLiBSRkMgNzY4LCBpcHY0IFVEUCBjb21wdXRlZCBjaGVja3N1bSBpcyB6ZXJvLFxuMTE3MTpcdFx0ICogaXQgaXMgdHJhbnNtaXR0ZWQgYXMgYWxsIG9uZXMuIFRoZSB6ZXJvIHRyYW5zbWl0dGVkIGNoZWNrc3VtIG1lYW5zXG4xMTcyOlx0XHQgKiB0cmFuc21pdHRlciBnZW5lcmF0ZWQgbm8gY2hlY2tzdW0uIEhlbmNlLCBlbmFibGUgY3N1bSBvZmZsb2FkIG9ubHlcbjExNzM6XHRcdCAqIGZvciBpcHY0IHBhY2tldHMuXG4xMTc0Olx0XHQgKi9cbjExNzU6XHRcdGlmIChERUZBVUxUX1RYX0NTVU1fRU5BQkxFKVxuMTE3NjpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTtcbjExNzc6XHRcdGlmIChERUZBVUxUX1JYX0NTVU1fRU5BQkxFKVxuMTE3ODpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNO1xuMTE3OTpcdFxuMTE4MDpcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuMTE4MTpcdFx0c2V0X2JpdChFVkVOVF9OT19JUF9BTElHTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbjExODI6XHRcbjExODM6XHRcdHNtc2M5NXh4X2luaXRfbWFjX2FkZHJlc3MoZGV2KTtcbjExODQ6XHRcbjExODU6XHRcdC8qIEluaXQgYWxsIHJlZ2lzdGVycyAqL1xuMTE4NjpcdFx0cmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTtcbjExODc6XHRcdGlmIChyZXQpXG4xMTg4Olx0XHRcdGdvdG8gZnJlZV9wZGF0YTtcbjExODk6XHRcbjExOTA6XHRcdC8qIGNyZWF0ZSBpcnEgZG9tYWluIGZvciB1c2UgYnkgUEhZIGRyaXZlciBhbmQgR1BJTyBjb25zdW1lcnMgKi9cbjExOTE6XHRcdHVzYl9tYWtlX3BhdGgoZGV2LVx1MDAzZXVkZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTtcbjExOTI6XHRcdHBkYXRhLVx1MDAzZWlycWZ3bm9kZSA9IGlycV9kb21haW5fYWxsb2NfbmFtZWRfZndub2RlKHVzYl9wYXRoKTtcbjExOTM6XHRcdGlmICghcGRhdGEtXHUwMDNlaXJxZndub2RlKSB7XG4xMTk0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xMTk1Olx0XHRcdGdvdG8gZnJlZV9wZGF0YTtcbjExOTY6XHRcdH1cbjExOTc6XHRcbjExOTg6XHRcdHBkYXRhLVx1MDAzZWlycWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihwZGF0YS1cdTAwM2VpcnFmd25vZGUsXG4xMTk5Olx0XHRcdFx0XHRcdFx0ICAgIFNNU0M5NVhYX05SX0lSUVMsXG4xMjAwOlx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlycV9kb21haW5fc2ltcGxlX29wcyxcbjEyMDE6XHRcdFx0XHRcdFx0XHQgICAgcGRhdGEpO1xuMTIwMjpcdFx0aWYgKCFwZGF0YS1cdTAwM2VpcnFkb21haW4pIHtcbjEyMDM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEyMDQ6XHRcdFx0Z290byBmcmVlX2lycWZ3bm9kZTtcbjEyMDU6XHRcdH1cbjEyMDY6XHRcbjEyMDc6XHRcdHBoeV9pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcocGRhdGEtXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpO1xuMTIwODpcdFx0aWYgKCFwaHlfaXJxKSB7XG4xMjA5Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xMjEwOlx0XHRcdGdvdG8gcmVtb3ZlX2lycWRvbWFpbjtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdHBkYXRhLVx1MDAzZWlycWNoaXAgPSBkdW1teV9pcnFfY2hpcDtcbjEyMTQ6XHRcdHBkYXRhLVx1MDAzZWlycWNoaXAubmFtZSA9IFNNU0NfQ0hJUE5BTUU7XG4xMjE1Olx0XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShwaHlfaXJxLCBcdTAwMjZwZGF0YS1cdTAwM2VpcnFjaGlwLFxuMTIxNjpcdFx0XHRcdFx0ICAgICAgaGFuZGxlX3NpbXBsZV9pcnEsIFwmIzM0O3BoeVwmIzM0Oyk7XG4xMjE3Olx0XG4xMjE4Olx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xuMTIxOTpcdFx0aWYgKCFwZGF0YS1cdTAwM2VtZGlvYnVzKSB7XG4xMjIwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xMjIxOlx0XHRcdGdvdG8gZGlzcG9zZV9pcnE7XG4xMjIyOlx0XHR9XG4xMjIzOlx0XG4xMjI0Olx0XHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgXHUwMDI2dmFsKTtcbjEyMjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjI2Olx0XHRcdGdvdG8gZnJlZV9tZGlvO1xuMTIyNzpcdFxuMTIyODpcdFx0cGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5ID0gISh2YWwgXHUwMDI2IEhXX0NGR19QU0VMXyk7XG4xMjI5Olx0XHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuMTIzMDpcdFx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxdSBcdTAwM2NcdTAwM2MgU01TQzk1WFhfSU5URVJOQUxfUEhZX0lEKTtcbjEyMzE6XHRcbjEyMzI6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbjEyMzM6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcmVhZCA9IHNtc2M5NXh4X21kaW9idXNfcmVhZDtcbjEyMzQ6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xuMTIzNTpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZXNldCA9IHNtc2M5NXh4X21kaW9idXNfcmVzZXQ7XG4xMjM2Olx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtzbXNjOTV4eC1tZGlvYnVzXCYjMzQ7O1xuMTIzNzpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VwYXJlbnQgPSBcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG4xMjM4Olx0XG4xMjM5Olx0XHRzbnByaW50ZihwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlaWQpLFxuMTI0MDpcdFx0XHQgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OywgZGV2LVx1MDAzZXVkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSwgZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2bnVtKTtcbjEyNDE6XHRcbjEyNDI6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG4xMjQzOlx0XHRpZiAocmV0KSB7XG4xMjQ0Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbjEyNDU6XHRcdFx0Z290byBmcmVlX21kaW87XG4xMjQ2Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTg1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkgQ29uZmlndXJhdGlvbiBmb3IgU01TQzk1WFggRHJpdmVyKioKCk9rYXksIHllcywgdGhpcyBpcyBnb29kLiBJZiBgSFdfQ0ZHX1BTRUxfYCBpcyBlbmFibGVkLCB0aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZXJuYWwgUEhZLCBhbmQgdGhhdCBvcGVucyB1cCB0aGUgYHBoeV9tYXNrYCDigJMgd2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgcmVzdHJpY3Rpb25zIHRoZXJlLiBFdmVuIGlmIGl0ICppcyogYW4gaW50ZXJuYWwgUEhZLCBTeXprYWxsZXIgY2FuIHN0aWxsIGhhbmQgdXMgdGhlIFBIWSBJRCB0aHJvdWdoIGBTTVNDOTVYWF9JTlRFUk5BTF9QSFlfSURgLCB3aGljaCBpcyBwcmVkaWN0YWJseSAxLgoKUmlnaHQsIHNvIHdoZW4gYG1kaW9idXNfcmVnaXN0ZXJgIGlzIGludm9rZWQsIHRoYXQmIzM5O3Mgd2hlbiB0aGUgUEhZIElEIHNjYW4gaGFwcGVucywgaXQmIzM5O3MgYWxsIGFib3V0IHJlYWRpbmcgdGhvc2UgSURzLiBBbmQgc2luY2UgU3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgdGhvc2UgVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZvciBgc21zYzk1eHhfbWRpb2J1c19yZWFkYCwgd2UgY2FuIGZlZWQgaXQgdGhlIHZhbHVlcyBpdCYjMzk7cyBleHBlY3RpbmcuIExldCYjMzk7cyBzZWUuLi4gZm9yIFBIWSBJRCAxLCB3ZSBjYW4gcmV0dXJuIGAweDAwMWNgLCBhbmQgYDB4Yzg5OGAgZm9yIElEIDIsIGFuZCBzbyBvbi4KCldhaXQgYSBzZWNvbmQuLi4gV2hhdCYjMzk7cyB0aGlzIGFib3V0IGBSVExfODI2MUNfQ0dgPyBUaGF0IGxvb2tzIGxpa2UgYSBDbGF1c2UgNDUgUEhZLiBUaGF0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQmIzM5O3MgZGlnIGludG8gYHJlYWx0ZWtfbWFpbi5jYCBhbmQgc2VlIGlmIHRoZSBkcml2ZXIgY29ycmVjdGx5IGhhbmRsZXMgQ2xhdXNlIDIyIG9yIENsYXVzZSA0NSBhY2Nlc3Nlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIGFjY2VzcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBSVEwgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLiBHb3R0YSBjb25maXJtIHRoYXQgdGhlIGRyaXZlciBrbm93cyBob3cgdG8gdGFsayB0byB0aGlzIFBIWS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRMXzgyNjFDX0NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjU5LSNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcdFx0XHRcdDB4MDAxY2M4OThcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI2MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYz0zMDc0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkxLVx0fSwge1xuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM6MzM5MjpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkzLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgxMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUEhZIElEIE1hdGNoaW5nIGFuZCBDbGF1c2UgNDUgU3VwcG9ydCoqCgpPa2F5LCBzbyBgUEhZX0lEX01BVENIX0VYQUNUYCBtZWFucyBhIHByZWNpc2UgUEhZIElEIG1hdGNoIOKAkyBub3RoaW5nIGFtYmlndW91cyB0aGVyZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHNwZWNpZmljIHNjZW5hcmlvIG5lY2Vzc2l0YXRlIENsYXVzZSA0NSBzdXBwb3J0PyBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYFJUTF84MjYxQ19DR2AgdXRpbGl6ZXMgQ2xhdXNlIDQ1LiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSBzdHJvbmcgY29ubmVjdGlvbiwgYXMgaXQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfcG1hX3N1c3BlbmRgLCBhbmQgYGdlbnBoeV9jNDVfcG1hX3Jlc3VtZWAgdG8gaXRzIGBwaHlfZHJpdmVyYCBzdHJ1Y3QuIEZ1cnRoZXJtb3JlLCBgcnRsODI2MXhfcHJvYmVgIGV4cGxpY2l0bHkgZW1wbG95cyBgcGh5X3dyaXRlX21tZGAgYW5kIGBwaHlfcmVhZF9tbWRgLCB3aGljaCBhcmUsIGJ5IGRlZmluaXRpb24sIENsYXVzZSA0NSBvcGVyYXRpb25zLiBUaGF0IGZlZWxzIHByZXR0eSBkZWZpbml0aXZlLgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIHRob3NlIGNhbGxzICpzdWdnZXN0KiBDbGF1c2UgNDUsIEkgcmVjYWxsIHRoYXQgYHBoeV9yZWFkX21tZGAgaGFzIGEgYml0IG9mIGZsZXhpYmlsaXR5LiBJdCAqY291bGQqIG9wZXJhdGUgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzLCBwcm92aWRlZCB0aGUgUEhZIGhhcyB0aGUgY2FwYWJpbGl0eSwgb3IgZGlyZWN0bHkgdXNpbmcgQ2xhdXNlIDQ1IGlmIHRoZSBidXMgc3VwcG9ydHMgaXQuIEkgbmVlZCB0byBrZWVwIHRoZSBhbWJpZ3VpdHkgaW4gbWluZC4KClNvLCAqZG9lcyogYHNtc2M5NXh4YCBoYXZlIENsYXVzZSA0NSBzdXBwb3J0PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYHNtc2M5NXh4YCBoYW5kbGVzIGl0cyBNRElPIGJ1cyByZWFkcywganVzdCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjM2Olx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbiAyMzc6XHRcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFcnJvciB3cml0aW5nIE1JSV9EQVRBXFxuXCYjMzQ7KTtcbiAyMzg6XHRcdFx0Z290byBkb25lO1xuIDIzOTpcdFx0fVxuIDI0MDpcdFxuIDI0MTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXG4gMjQyOlx0XHRhZGRyID0gbWlpX2FkZHJlc3NfY21kKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEVfIHwgTUlJX0JVU1lfKTtcbiAyNDM6XHRcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcbiAyNDQ6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyNDU6XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuIDI0NjpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHdyaXRpbmcgTUlJX0FERFJcXG5cJiMzNDspO1xuIDI0NzpcdFx0XHRnb3RvIGRvbmU7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4gMjUwOlx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDI1MTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDI1MjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtUaW1lZCBvdXQgd3JpdGluZyBNSUkgcmVnICUwMlhcXG5cJiMzNDssIGlkeCk7XG4gMjUzOlx0XHRcdGdvdG8gZG9uZTtcbiAyNTQ6XHRcdH1cbiAyNTU6XHRcbiAyNTY6XHRkb25lOlxuIDI1NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VwaHlfbXV0ZXgpO1xuIDI1ODpcdH1cbiAyNTk6XHRcbiAyNjA6XHRzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiAyNjE6XHR7XG4gMjYyOlx0XHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XG4gMjYzOlx0XHRzdHJ1Y3QgdXNibmV0ICpkZXY7XG4gMjY0Olx0XHR1MzIgdmFsO1xuIDI2NTpcdFx0aW50IHJldDtcbiAyNjY6XHRcbiAyNjc6XHRcdGRldiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDI2ODpcdFx0cGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjY5Olx0XG4gMjcwOlx0XHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuIDI3MTpcdFx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gMjc0Olx0XG4gMjc1Olx0XHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIFBNX0NUUkwsIFx1MDAyNnZhbCk7XG4gMjc2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI3NzpcdFx0XHRnb3RvIHJlc2V0X291dDtcbiAyNzg6XHRcbiAyNzk6XHRcdHZhbCB8PSBQTV9DVExfUEhZX1JTVF87XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBQTV9DVFJMLCB2YWwpO1xuIDI4MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyODM6XHRcdFx0Z290byByZXNldF9vdXQ7XG4gMjg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipUcmFjaW5nIGEgTWlzc2luZyBGdW5jdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgZm9yIGBzbXNjOTV4eF9tZGlvYnVzX3JlYWRgLCBidXQgaXQmIzM5O3Mgbm90IHBvcHBpbmcgdXAgd2hlcmUgSSBleHBlY3RlZC4gVGhhdCYjMzk7cyB1bnVzdWFsLiBJdCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gQWxyaWdodCwgbm8gdGltZSB0byB3YXN0ZSDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbXNjOTV4eF9tZGlvYnVzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yNjA9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjk2LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6Mjk3OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzMi1cdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjM0LVx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IHNtc2M5NXh4X21kaW9idXNfd3JpdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc21zYzk1eHhfbWRpb2J1c19yZWFkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nIE1ESU8gYnVzIHRyYW5zYWN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSByZWFkIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBmb3IgdGhlIGtleSBlbGVtZW50czogaG93IGlzIHRoZSBNRElPIGFkZHJlc3MgY29uZmlndXJlZD8gV2hhdCYjMzk7cyB0aGUgdGltaW5nIGFuZCBzZXF1ZW5jZSBvZiBzaWduYWxzIGJlaW5nIGdlbmVyYXRlZD8gQXJlIHRoZXkgdXNpbmcgYW55IGhhcmR3YXJlIHNwZWNpZmljIHJlZ2lzdGVycyBvciBtYWNyb3M/IElzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgbGlrZSByZXRyaWVzIG9yIHRpbWVvdXQgbWVjaGFuaXNtcz8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgdHJhbnNsYXRpb24gb2YgdGhlIHN0YW5kYXJkIE1ESU8gcmVhZCBwcm90b2NvbCBpbnRvIHRoZSBjb2RlLCBhbmQgaG93IHRoZXkgYXJlIGFjY291bnRpbmcgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIFNNU0M5NXh4IFBIWSBjaGlwLiBJIHdpbGwgZXhwZWN0IGEgbG9vcCBhbmQgYSBzdGF0dXMgcmVhZCwgYW5kIHRoZSBvdmVyYWxsIG9iamVjdGl2ZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHJlbGlhYmxlIGRhdGEgcmV0cmlldmFsIGZyb20gdGhlIFBIWS4gSSBhbSBsb29raW5nIGZvciBlbGVnYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk3Olx0c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbiAyOTg6XHR7XG4gMjk5Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBidXMtXHUwMDNlcHJpdjtcbiAzMDA6XHRcbiAzMDE6XHRcdHJldHVybiBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIGlkeCk7XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuIDMwNTpcdFx0XHRcdFx0ICB1MTYgcmVndmFsKVxuIDMwNjpcdHtcbiAzMDc6XHRcdHN0cnVjdCB1c2JuZXQgKmRldiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDMwODpcdFxuIDMwOTpcdFx0c21zYzk1eHhfbWRpb193cml0ZShkZXYsIHBoeV9pZCwgaWR4LCByZWd2YWwpO1xuIDMxMDpcdFx0cmV0dXJuIDA7XG4gMzExOlx0fVxuIDMxMjpcdFxuIDMxMzpcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dhaXRfZWVwcm9tKHN0cnVjdCB1c2JuZXQgKmRldilcbiAzMTQ6XHR7XG4gMzE1Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuIDMxNjpcdFx0dTMyIHZhbDtcbiAzMTc6XHRcdGludCByZXQ7XG4gMzE4Olx0XG4gMzE5Olx0XHRkbyB7XG4gMzIwOlx0XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgRTJQX0NNRCwgXHUwMDI2dmFsKTtcbiAzMjE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDMyMjpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHJlYWRpbmcgRTJQX0NNRFxcblwmIzM0Oyk7XG4gMzIzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMjQ6XHRcdFx0fVxuIDMyNTpcdFxuIDMyNjpcdFx0XHRpZiAoISh2YWwgXHUwMDI2IEUyUF9DTURfQlVTWV8pIHx8ICh2YWwgXHUwMDI2IEUyUF9DTURfVElNRU9VVF8pKVxuIDMyNzpcdFx0XHRcdGJyZWFrO1xuIDMyODpcdFx0XHR1ZGVsYXkoNDApO1xuIDMyOTpcdFx0fSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnRfdGltZSAmIzQzOyBIWikpO1xuIDMzMDpcdFxuIDMzMTpcdFx0aWYgKHZhbCBcdTAwMjYgKEUyUF9DTURfVElNRU9VVF8gfCBFMlBfQ01EX0JVU1lfKSkge1xuIDMzMjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dFxcblwmIzM0Oyk7XG4gMzMzOlx0XHRcdHJldHVybiAtRUlPO1xuIDMzNDpcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0cmV0dXJuIDA7XG4gMzM3Olx0fVxuIDMzODpcdFxuIDMzOTpcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X2VlcHJvbV9jb25maXJtX25vdF9idXN5KHN0cnVjdCB1c2JuZXQgKmRldilcbiAzNDA6XHR7XG4gMzQxOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuIDM0MjpcdFx0dTMyIHZhbDtcbiAzNDM6XHRcdGludCByZXQ7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRkbyB7XG4gMzQ2Olx0XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgRTJQX0NNRCwgXHUwMDI2dmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgc21zYzk1eHhfbWRpb19yZWFkYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBzbXNjOTV4eF9tZGlvX3JlYWRgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgc29tZSBzb3J0IG9mIGxvdy1sZXZlbCBkcml2ZXIgZnVuY3Rpb24sIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBkYXRhIGZyb20gdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvciBSZWR1Y2VkIE1JSSAoUk1JSSkgYnVzLCB3aGljaCBpcyBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgY29ubmVjdGluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgKFBIWSkgdG8gdGhlIE1BQy4KCk15IHByaW1hcnkgY29uY2VybiBpcyBlZmZpY2llbmN5IGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhcmVmdWwgYml0IG1hbmlwdWxhdGlvbiBoZXJlLCBsaWtlbHkgdXNpbmcgZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBmb2xsb3dpbmc6CiogICAqKkluaXRpYWxpemF0aW9uKio6IEkgbmVlZCB0byBrbm93IHRoZSBzdGF0ZSB0aGUgYnVzIGlzIGluaXRpYWxpemVkIHRvLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY29udHJvbGxlciBpcyBpbml0aWFsaXplZCBwcmlvciB0byByZWFkaW5nIG9yIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUuCiogICAqKkFkZHJlc3MgU2VsZWN0aW9uKio6IFRoZSBNRElPIGludGVyZmFjZSBpcyBiYXNlZCBvbiBzZWxlY3RpbmcgYW4gYWRkcmVzcywgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNwZWNpZmljIGNvbW1hbmRzIG9yIGJpdCBwYXR0ZXJucyB0byBzZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCByZWdpc3RlciBhZGRyZXNzIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHJlYWRpbmcuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhZGRyZXNzIGlzIGVuY29kZWQuCiogICAqKlJlYWQgT3BlcmF0aW9uKio6IFRoZSBjb3JlIG9mIGl0LiBXaGF0IHByZWNpc2UgYml0IHNlcXVlbmNlIGlzIGJlaW5nIHNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIGluaXRpYXRlIGEgcmVhZD8gSXMgdGhlcmUgYSBzdGFydCBjb25kaXRpb24sIGEgdHVybmFyb3VuZCBwaGFzZSwgdGhlIGFkZHJlc3MgaXRzZWxmLCBhbmQgdGhlbiB0aGUgcmVhZCBkYXRhPyBXaGF0JiMzOTtzIHRoZSB0aW1pbmc/IEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgaW1wbGVtZW50cyB0aGUgTURJTyBzcGVjaWZpY2F0aW9uLgoqICAgKipEYXRhIFJldHJpZXZhbCoqOiBIb3cgaXMgdGhlIGRhdGEgYWN0dWFsbHkgZmV0Y2hlZD8gSXMgaXQgcG9sbGVkLCBvciBpcyB0aGVyZSBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGFueSB3YWl0IHN0YXRlcyBvciBkZWxheXMgaW52b2x2ZWQsIHRvIGFsbG93IHRoZSBQSFkgdGltZSB0byByZXNwb25kPyBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBwcmV2ZW50aW5nIGJ1cyBjb250ZW50aW9uLgoqICAgKipFcnJvciBEZXRlY3Rpb24qKjogSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGVycm9yIGNoZWNrcy4gSG93IGlzIGl0IGhhbmRsZWQgaWYgdGhlIFBIWSBkb2VzbiYjMzk7dCByZXNwb25kPyBXaGF0IGFib3V0IHBhcml0eSBlcnJvcnMgb3Igb3RoZXIgY29tbXVuaWNhdGlvbiBmYWlsdXJlcz8gQXJlIHRoZXJlIHRpbWVvdXRzIGltcGxlbWVudGVkPyBXaGF0IGFib3V0IHJldHJpZXM/CiogICAqKlN5bmNocm9uaXphdGlvbioqOiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGJldHdlZW4gdGhlIE1BQyBhbmQgUEhZLiBJcyB0aGVyZSBhIG5lZWQgZm9yIGEgbG9jayBvciBtdXRleCB0byBwcmV2ZW50IG11bHRpcGxlIGFjY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWU/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciBidXMgdGltaW5nIGFuZCBjbG9jayBzcGVlZHM/CgpBbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBvdmVyYWxsIGRlc2lnbi4uLiBpcyBpdCBtb2R1bGFyPyBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2xlYXJseSBuYW1lZD8gQ2FuIEkgZWFzaWx5IHRyYWNlIHRoZSBkYXRhIGZsb3c/IEFuZCwgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gd29yayBwcm9wZXJseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQ/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBpbXBvcnRhbnQsIGJ1dCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBpcyB2aXRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21zYzk1eHhfbWRpb19yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNzAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yOTc9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzozMDE6XHRyZXR1cm4gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGh5X2lkLCBpZHgpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAyLX1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMzUxPXN0YXRpYyBpbnQgc21zYzk1eHhfbGlua19vayhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1Ni1cdC8qIGZpcnN0LCBhIGR1bW15IHJlYWQsIG5lZWRlZCB0byBsYXRjaCBzb21lIE1JSSBwaHlzICovXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMzU3Olx0cmV0ID0gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGRhdGEtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1OC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM2MC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzNjE6XHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwZGF0YS1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBNSUlfQk1TUik7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzYyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xNDA3PXN0YXRpYyBpbnQgc21zYzk1eHhfZW50ZXJfc3VzcGVuZDEoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjAtXHQvKiBlbmFibGUgZW5lcmd5IGRldGVjdCBwb3dlci1kb3duIG1vZGUgKi9cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjE0MjE6XHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIFBIWV9NT0RFX0NUUkxfU1RTKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgc21zYzk1eHhfbWRpb19yZWFkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNtc2M5NXh4X21kaW9fcmVhZGAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGFib3V0IHJlYWRpbmcgZGF0YSBmcm9tIGFuIE1ESU8gYnVzLCBsaWtlbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEhZIG9mIGFuIFNNU0M5NXh4IEV0aGVybmV0IGNvbnRyb2xsZXIuIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZXhwbGljaXQg4oCTIGBzbXNjOTV4eGAgY2xlYXJseSBpZGVudGlmaWVzIHRoZSBkZXZpY2UgZmFtaWx5LCBgbWRpb2AgcG9pbnRzIHRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UsIGFuZCBgcmVhZGAgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIE1ESU8gY29tbXVuaWNhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgaW52b2x2aW5nIGNsb2NraW5nIHRoZSBNRElPIHNpZ25hbHMgKE1EQyBhbmQgTURJTyksIHBvdGVudGlhbGx5IHVzaW5nIGJpdC1iYW5naW5nIG9yIGEgZGVkaWNhdGVkIGhhcmR3YXJlIGludGVyZmFjZSBpZiBpdCYjMzk7cyBhdmFpbGFibGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJuczogc2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIEkgd2FudCB0byByZWFkLCBpc3N1aW5nIGEgcmVhZCBjb21tYW5kLCB3YWl0aW5nIGZvciB0aGUgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQgdGhlbiByZXRyaWV2aW5nIGl0LgoKSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIHRpbWluZyBjb25zdHJhaW50cy4gTURJTyBpcyBhIHNlcmlhbCBwcm90b2NvbCwgYW5kIHRoZXJlIGFyZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNsb2NrIGN5Y2xlIHJlcXVpcmVtZW50cyBmb3IgdmFyaW91cyBwaGFzZXMgKGxpa2UgcHJlYW1ibGUsIHN0YXJ0LCB0dXJuYXJvdW5kLCBhbmQgZGF0YSkuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGRlbGF5cyBvciB0aW1pbmcgbG9vcHMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHByb3BlciBvcGVyYXRpb24uCgpCZXlvbmQgdGhlIE1ESU8gc3BlY2lmaWNzLCBJJiMzOTttIGdvaW5nIHRvIGJlIGludGVyZXN0ZWQgaW4gZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgY29tbXVuaWNhdGlvbiBmYWlscz8gSXMgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbT8gQXJlIHBvdGVudGlhbCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBpc3N1ZXMgaGFuZGxlZCBncmFjZWZ1bGx5PyBBbnkgcG90ZW50aWFsIGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCByZWdpc3RlciBhZGRyZXNzZXMgd2lsbCBiZSBxdWlja2x5IG5vdGVkLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgZXhhbWluaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIuIFdoYXQgYXJlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzPyBXaGF0JiMzOTtzIHRoZSByZXR1cm5lZCB2YWx1ZT8gSXMgdGhlcmUgYW55IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBpbnZvbHZlZCwgb3IgaXMgdGhpcyB0aGUgZnVuZGFtZW50YWwgTURJTyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBkcml2ZXI/IEkmIzM5O20gaG9waW5nIGl0IGNvbmZvcm1zIHRvIHRoZSBzdGFuZGFyZCBNRElPIGludGVyZmFjZSBzdHJ1Y3R1cmUgb3IgYXQgbGVhc3QgaXMgZG9jdW1lbnRlZCB3ZWxsLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcxOlx0c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuIDE3MjpcdHtcbiAxNzM6XHRcdHUzMiB2YWwsIGFkZHI7XG4gMTc0Olx0XHRpbnQgcmV0O1xuIDE3NTpcdFxuIDE3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlcGh5X211dGV4KTtcbiAxNzc6XHRcbiAxNzg6XHRcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXG4gMTc5Olx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDE4MDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE4MTpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDslczogTUlJIGlzIGJ1c3lcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAxODI6XHRcdFx0Z290byBkb25lO1xuIDE4MzpcdFx0fVxuIDE4NDpcdFxuIDE4NTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xuIDE4NjpcdFx0YWRkciA9IG1paV9hZGRyZXNzX2NtZChwaHlfaWQsIGlkeCwgTUlJX1JFQURfIHwgTUlJX0JVU1lfKTtcbiAxODc6XHRcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcbiAxODg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxODk6XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuIDE5MDpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHdyaXRpbmcgTUlJX0FERFJcXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRnb3RvIGRvbmU7XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDE5NTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE5NjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtUaW1lZCBvdXQgcmVhZGluZyBNSUkgcmVnICUwMlhcXG5cJiMzNDssIGlkeCk7XG4gMTk3Olx0XHRcdGdvdG8gZG9uZTtcbiAxOTg6XHRcdH1cbiAxOTk6XHRcbiAyMDA6XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgTUlJX0RBVEEsIFx1MDAyNnZhbCk7XG4gMjAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjAyOlx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbiAyMDM6XHRcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFcnJvciByZWFkaW5nIE1JSV9EQVRBXFxuXCYjMzQ7KTtcbiAyMDQ6XHRcdFx0Z290byBkb25lO1xuIDIwNTpcdFx0fVxuIDIwNjpcdFxuIDIwNzpcdFx0cmV0ID0gKHUxNikodmFsIFx1MDAyNiAweEZGRkYpO1xuIDIwODpcdFxuIDIwOTpcdGRvbmU6XG4gMjEwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gMjExOlx0XG4gMjEyOlx0XHQvKiBJZ25vcmUgLUVOT0RFViBlcnJvciBkdXJpbmcgZGlzY29ubmVjdCgpICovXG4gMjEzOlx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4gMjE0Olx0XHRcdHJldHVybiAwO1xuIDIxNTpcdFx0cmV0dXJuIHJldDtcbiAyMTY6XHR9XG4gMjE3Olx0XG4gMjE4Olx0c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG4gMjE5Olx0XHRcdFx0XHRpbnQgcmVndmFsKVxuIDIyMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgQWNjZXNzIE1ldGhvZCoqCgpPa2F5LCBzbyBJIHNlZSBgaWR4YCBiZWluZyBwYXNzZWQgdG8gYG1paV9hZGRyZXNzX2NtZGAuIFRoYXQgZnVuY3Rpb24gaXM6CgpgYGBjCnN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcCkKewoJcmV0dXJuIChwaHlfaWQgJmFtcDsgMHgxZikgJmx0OyZsdDsgMTEgfCAoaWR4ICZhbXA7IDB4MWYpICZsdDsmbHQ7IDYgfCBvcDsKfQpgYGAKClJpZ2h0LCB0aGUga2V5IGhlcmUgaXMgYGlkeGAgYmVpbmcgYml0d2lzZSBBTkRlZCB3aXRoIGAweDFmYC4gVGhhdCBnaXZlcyBpdCBhd2F5IGltbWVkaWF0ZWx5IC0gdGhpcyBpcyBhIENsYXVzZSAyMiBNRElPIGJ1cyBhY2Nlc3MhIEJ1dCB3YWl0LCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgQ2xhdXNlIDIyIGJ1cywgY2FuIHdlIHN0aWxsIHRhbGsgdG8gYSBDbGF1c2UgNDUgUEhZPwoKWWVzLCB3ZSBjYW4sIGJ1dCBpdCByZXF1aXJlcyBpbmRpcmVjdCBhY2Nlc3MuIFdl4oCZZCBuZWVkIHRvIHVzZSByZWdpc3RlcnMgMTMgYW5kIDE0IHRvIHNwZWNpZnkgdGhlIE1NRCAoTWFuYWdlbWVudCBNb2R1bGUgRGV2aWNlKSBhbmQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHRoZSBQSFkgc3Vic3lzdGVtIGludGVsbGlnZW50bHkgaGFuZGxlIHRoaXM/IElmIHRoZSBidXMgKmRvZXNuJiMzOTt0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NSwgd2lsbCBpdCBhdXRvbWF0aWNhbGx5IGRlZmF1bHQgdG8gaW5kaXJlY3QgYWNjZXNzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIENsYXVzZSA0NSBQSFk/CgpUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBgcGh5X3JlYWRfbW1kYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgdGhlIGNvcnJlY3QgYWNjZXNzIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfd3JpdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2MDogKiBfX3BoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2MS0gKiBmcm9tIGFuIE1NRCBvbiBhIGdpdmVuIFBIWS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NjctICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0Njg6aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODMtICogZnJvbSBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDkwOmludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTQtXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5Ni1cdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTUwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjMzLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTYzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciAmIzM0O3ByaXZhdGUmIzM0OyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IG1vc3Qgb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYSBsb3ctbGV2ZWwsIGNyaXRpY2FsIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlICYjMzQ7TU1EJiMzNDsgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCYjMzk7cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhbmQgd2hhdCBpcyBpdCByZXR1cm5pbmcgYW5kIHdoYXQga2luZCBvZiBlcnJvci1oYW5kbGluZyBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY4Olx0aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Njk6XHR7XG4gNDcwOlx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA0NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VyZWFkX21tZClcbiA0NzQ6XHRcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuIDQ3NzpcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiA0Nzg6XHR9XG4gNDc5Olx0RVhQT1JUX1NZTUJPTChfX3BoeV9yZWFkX21tZCk7XG4gNDgwOlx0XG4gNDgxOlx0LyoqXG4gNDgyOlx0ICogcGh5X3JlYWRfbW1kIC0gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSByZWdpc3RlclxuIDQ4MzpcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDQ4NDpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDQ4NTpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA0ODY6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNDg3Olx0ICpcbiA0ODg6XHQgKiBTYW1lIHJ1bGVzIGFzIGZvciBwaHlfcmVhZCgpO1xuIDQ4OTpcdCAqL1xuIDQ5MDpcdGludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdGludCByZXQ7XG4gNDkzOlx0XG4gNDk0Olx0XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuIDQ5NTpcdFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0OTY6XHRcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiA0OTc6XHRcbiA0OTg6XHRcdHJldHVybiByZXQ7XG4gNDk5Olx0fVxuIDUwMDpcdEVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbiA1MDE6XHRcbiA1MDI6XHQvKipcbiA1MDM6XHQgKiBfX3BoeV93cml0ZV9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyXG4gNTA0Olx0ICogb24gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDUwNTpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDUwNjpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA1MDc6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNTA4Olx0ICogQHZhbDogdmFsdWUgdG8gd3JpdGUgdG8gQHJlZ251bVxuIDUwOTpcdCAqXG4gNTEwOlx0ICogU2FtZSBydWxlcyBhcyBmb3IgX19waHlfd3JpdGUoKTtcbiA1MTE6XHQgKi9cbiA1MTI6XHRpbnQgX19waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcbiA1MTM6XHR7XG4gNTE0Olx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA1MTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTE2Olx0XG4gNTE3Olx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2V3cml0ZV9tbWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlY29kaW5nIGBtbWRfcGh5X3JlYWRgIGFuZCBpdHMgaW1wbGljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgZnVuY3Rpb24sIGBtbWRfcGh5X3JlYWRgLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBQSFkgb3BlcmF0ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IGl0IGhhbmRsZXMgdGhlIE1NRCAoTWFuYWdlbWVudCBNb2RlIERldmljZSkgaW50ZXJmYWNlLiBHaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWJvdXQgcmVhZGluZyBkYXRhIGZyb20gYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHRoZXNlIGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgTURJTyBhZGRyZXNzIHNwYWNlLiBUaGUgdGVybSAmIzM0O01NRCYjMzQ7IGl0c2VsZiBpcyBhIHByZXR0eSBzdGFuZGFyZCB3YXkgdG8gaWRlbnRpZnkgdGhlc2UgUEhZLWludGVybmFsIHJlZ2lzdGVycy4KCknigJltIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBXaGF0JiMzOTtzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQgc2V0LCBvciBkb2VzIGl0IGNvbmZvcm0gdG8gYSBtb3JlIGdlbmVyaWMgc3BlY2lmaWNhdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGhpbnRzIHJlZ2FyZGluZyB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUg4oCTIGhvdyB0aGUgTU1EIGFkZHJlc3MgYW5kIHRoZSBzdWItYWRkcmVzcy9yZWdpc3RlciB3aXRoaW4gdGhhdCBNTUQgYXJlIGhhbmRsZWQuIFRoZSBrZXkgd2lsbCBiZSB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBkaXJlY3QgcmVnaXN0ZXIgcmVhZCwgb3IgaWYgaXQgcmVxdWlyZXMgYSB0d28tc3RlcCB3cml0ZS9yZWFkIHNlcXVlbmNlIGZvciBhY2Nlc3Npbmcgc29tZSByZWdpc3RlcnMuIEFsc28sIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgY3JpdGljYWwgaGVyZTsgaG93IGlzIGl0IHBhc3NlZCB0aGUgTU1EIG51bWJlciwgdGhlIHJlZ2lzdGVyIG51bWJlciwgYW5kIHRoZSByZXN1bHQ/IEFyZSB0aGV5IHBhc3NlZCBhcyBhcmd1bWVudHMgb3IgcGFydCBvZiBhIHN0cnVjdHVyZT8KCkkmIzM5O20gbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgdG8gb3RoZXIgUEhZIHJlYWQgZnVuY3Rpb25zIEkmIzM5O3ZlIHdvcmtlZCB3aXRoLiBBcmUgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXM/IEhvdyBkb2VzIGl0IGRlYWwgd2l0aCBwb3RlbnRpYWwgYnVzIGNvbnRlbnRpb24gb3IgdGltZW91dCBzY2VuYXJpb3M/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGRlc2lnbmVkIHdpdGggc29tZSBsZXZlbCBvZiByb2J1c3RuZXNzLCBwYXJ0aWN1bGFybHkgaWYgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBhIHBvdGVudGlhbGx5IG5vaXN5IHBoeXNpY2FsIGludGVyZmFjZS4gSSYjMzk7bSBhbHNvIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGxpa2U6IERvZXMgaXQgcmV0dXJuIGEgc3RhdHVzIGNvZGUgb3IgdXNlIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIGluZGljYXRlIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBoYXZlIGFueSByZXRyeSBsb2dpYyBidWlsdCBpbj8gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcnJ1cHRzIGZyb20gdGhlIFBIWSBpdHNlbGYsIHdoaWNoIGNhbiBpbXBhY3QgdGhpcyByZWFkaW5nIHByb2Nlc3MuCgpNeSBtYWluIGZvY3VzIGlzIHRvIGVuc3VyZSB0aGF0IEkga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBhcHByb3ByaWF0ZSBtZWFuaW5nIHdpdGhpbiB0aGUgUEhZJiMzOTtzIGNvbnRleHQuIEkgbXVzdCBlbnN1cmUgdGhlIHJlZ2lzdGVyIHZhbHVlIGlzIGluIHRoZSBjb3JyZWN0IGZvcm1hdC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGF0YXNoZWV0IGZvciB0aGlzIFBIWSBvciBhdCBsZWFzdCBhIHNpbWlsYXIgb25lIHRvIGZpbmQgb3V0IHdoYXQgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZC4gVW5kZXJzdGFuZGluZyB0aGF0IGlzIGdvaW5nIHRvIGJlIHRoZSBseW5jaHBpbiBmb3IgYW55IG1lYW5pbmdmdWwgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWRfcGh5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00MjE9c3RhdGljIHZvaWQgbW1kX3BoeV9pbmRpcmVjdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCBkZXZhZCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzQtXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0MzU6aW50IG1tZF9waHlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDM2LVx0XHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0NC19XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NDU6RVhQT1JUX1NZTUJPTF9HUEwobW1kX3BoeV9yZWFkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00Njg9aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzUtXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NzY6XHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcixcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3Ny1cdFx0XHQgICAgcGh5ZGV2LVx1MDAzZWlzX2M0NSwgZGV2YWQsIHJlZ251bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3QgbWF0dGVyIGFuZCBhcHByb2FjaGluZyBhIHNwZWNpZmljIGNvZGUgZnVuY3Rpb246CgoqKkFuYWx5emluZyBgbW1kX3BoeV9yZWFkYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbW1kX3BoeV9yZWFkYC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCB0aGlzIGltcGxpZXMgYSByZWFkIG9wZXJhdGlvbiwgbGlrZWx5IGludm9sdmluZyBhIE1lZGlhLUluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBNYW5hZ2VtZW50IERhdGEgKE1NRCkgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhleSBoYW5kbGUgdGhlIHJlYWRpbmcgYW5kIHJldHJpZXZpbmcgb2YgZGF0YSBmcm9tIGEgUEhZIHZpYSBNTUQuJiMzNDsgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9yIGhvdyB0aGUgcmVhZCBjeWNsZSBpcyBpbml0aWF0ZWQgYW5kIGNvbXBsZXRlZC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBpdCBpbnRlbmRzIHRvIHRhcmdldCwgdGhlIGJpdCBtYW5pcHVsYXRpb24gb2YgdGhlIHJlYWQgYW5kIHdyaXRlIGNvbW1hbmRzLCBhbmQgZGF0YSB0cmFuc21pc3Npb24uICYjMzQ7SXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nPyYjMzQ7IGlzIGEga2V5IHF1ZXN0aW9uIGluIHRoaXMgYXJlYS4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1pbmcgY29uc3RyYWludHMsIGFja25vd2xlZGdlIHNpZ25hbHMsIGFuZCBhbnkgcG90ZW50aWFsIHJldHJ5IG1lY2hhbmlzbXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3csIGFueSBkZXBlbmRlbmNpZXMgb24gaGFyZHdhcmUgb3Igb3RoZXIgbW9kdWxlcywgYW5kIHRoZSBnZW5lcmFsIHdheSB0aGUgTU1EIFBIWSByZWdpc3RlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBvbmUgdG8gdW5wYWNrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzU6XHRpbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG4gNDM2Olx0XHRcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXG4gNDM3Olx0e1xuIDQzODpcdFx0aWYgKGlzX2M0NSlcbiA0Mzk6XHRcdFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcbiA0NDA6XHRcbiA0NDE6XHRcdG1tZF9waHlfaW5kaXJlY3QoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XG4gNDQyOlx0XHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbiA0NDM6XHRcdHJldHVybiBfX21kaW9idXNfcmVhZChidXMsIHBoeV9hZGRyLCBNSUlfTU1EX0RBVEEpO1xuIDQ0NDpcdH1cbiA0NDU6XHRFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xuIDQ0NjpcdFxuIDQ0NzpcdGludCBtbWRfcGh5X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG4gNDQ4Olx0XHRcdCAgaW50IGRldmFkLCB1MzIgcmVnbnVtLCB1MTYgdmFsKVxuIDQ0OTpcdHtcbiA0NTA6XHRcdGlmIChpc19jNDUpXG4gNDUxOlx0XHRcdHJldHVybiBfX21kaW9idXNfYzQ1X3dyaXRlKGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0sIHZhbCk7XG4gNDUyOlx0XG4gNDUzOlx0XHRtbWRfcGh5X2luZGlyZWN0KGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0pO1xuIDQ1NDpcdFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxMzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWSBEZXZpY2UgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBsb2dpYyBhbmQgaXQgc2VlbXMgdGhhdCBpZiBgaXNfYzQ1YCBpcyAqZmFsc2UqLCB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBhY2Nlc3NpbmcgcmVnaXN0ZXJzIDEzIGFuZCAxNCB1c2luZyBpbmRpcmVjdCBhY2Nlc3MsIHdoaWNoIGFsaWducyB3aXRoIENsYXVzZSAyMiBQSFkgYWNjZXNzLCBuYXR1cmFsbHkuIE15IGNvbmNlcm4gbm93LCBhcyBpdCBhbHdheXMgaXMgd2hlbiBzZWVpbmcgYSBjb25kaXRpb25hbCBsaWtlIHRoaXMsIGlzIGhvdyB0aGF0IGJvb2xlYW4sIGBpc19jNDVgLCBnZXRzIHNldCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUsIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uLgoKUmlnaHQsIEkgcmVtZW1iZXIgbm93LCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLCBgZ2V0X3BoeV9kZXZpY2VgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGRldmljZSBpZGVudGlmaWNhdGlvbiB1c3VhbGx5IGhhcHBlbnMuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBgaXNfYzQ1YCBkZXRlcm1pbmF0aW9uIGhhcHBlbnMuIFNvIEkgbmVlZCB0byBnbyBzdHJhaWdodCB0byBgZ2V0X3BoeV9kZXZpY2VgIGRlZmluaXRpb24gd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCB0byBzZWUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcGh5X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDUwPUVYUE9SVF9TWU1CT0woZndub2RlX2dldF9waHlfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA1Mi0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA1MzogKiBnZXRfcGh5X2RldmljZSAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgUEhZIGRldmljZSBhbmQgcmV0dXJucyBpdHMgQHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA1NC0gKlx0XHQgICAgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDcwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDcxOnN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNzIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDM6RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcgYGdldF9waHlfZGV2aWNlYCoqCgpBbHJpZ2h0LCBJIHNlZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZ2V0X3BoeV9kZXZpY2VgLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGRyaXZlciwgYSBuZXR3b3JrIHN0YWNrLCBhIHN5c3RlbSB1dGlsaXR5PyBUaGUgbmFtZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGdldHRpbmcgdGhpcyAmIzM0O1BIWSBkZXZpY2UuJiMzNDsgSXMgaXQgZW51bWVyYXRpbmcgaGFyZHdhcmUsIHF1ZXJ5aW5nIGEgY29uZmlndXJhdGlvbiBkYXRhYmFzZSwgb3IgcGVyaGFwcyBhY2Nlc3NpbmcgYSBwbGF0Zm9ybS1zcGVjaWZpYyBBUEk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gb2YgZGV2aWNlIGRpc2NvdmVyeSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGVtcGxveWVkLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZTogd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZD8gQXJlIHRoZXJlIGRldmljZSBpZGVudGlmaWVycywgYWRkcmVzc2VzLCBvciBzb21lIHNvcnQgb2YgY29udGV4dD8gVGhlIHJldHVybiB2YWx1ZSBpcyBjcnVjaWFsIHRvby4gSXMgaXQgcmV0dXJuaW5nIGEgcG9pbnRlciwgYSBoYW5kbGUsIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBIWT8gQW5kIHdoYXQgYWJvdXQgcG90ZW50aWFsIGVycm9yIGNvZGVzPyBBIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBncmFjZWZ1bGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZGV2aWNlIGlzbiYjMzk7dCBmb3VuZCBvciBhbiBlcnJvciBvY2N1cnMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllczogSW52YWxpZCBhZGRyZXNzLCBkZXZpY2Ugbm90IHByZXNlbnQsIG5vIHBlcm1pc3Npb24sIGhhcmR3YXJlIGZhaWx1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24mIzM5O3MgYm9keSBmb3IgZmxvdyBjb250cm9sIGFuZCBsb2dpYy4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGludGVybmFsIHZhcmlhYmxlcyBiZWluZyBkZWNsYXJlZCBhbmQgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZGF0YSB0eXBlcywgc2luY2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgYW5kIHRoZXJlIGNvdWxkIGJlIGltcG9ydGFudCBpbnRlcmFjdGlvbnMgYW5kIHNoYXJlZCBhY2Nlc3MgaGFwcGVuaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGhvdyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4gQWxzbywgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLCBhbmQgaWYgdGhlcmUgY291bGQgYmUgYW55IHBvdGVudGlhbCBkYXRhIHJhY2VzLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uICpmaW5kcyogYW5kICpyZXR1cm5zKiBhIHBoeXNpY2FsIGxheWVyIGRldmljZSwgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZG9pbmcgc28gaW4gYSB3YXkgdGhhdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgcmVsaWFiaWxpdHksIGVmZmljaWVuY3ksIGFuZCBwb3J0YWJpbGl0eSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2Vuc2l0aXZpdHkgb2YgbG93LWxldmVsIGRldmljZSBpbnRlcmFjdGlvbnMuIFRoZW4sIGFuZCBvbmx5IHRoZW4sIGNhbiBJIG1ha2UgYSBqdWRnbWVudCBvbiBpdHMgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcxOlx0c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgcGh5X2M0NV9kZXZpY2VfaWRzIGM0NV9pZHM7XG4xMDc0Olx0XHR1MzIgcGh5X2lkID0gMDtcbjEwNzU6XHRcdGludCByO1xuMTA3NjpcdFxuMTA3NzpcdFx0YzQ1X2lkcy5kZXZpY2VzX2luX3BhY2thZ2UgPSAwO1xuMTA3ODpcdFx0YzQ1X2lkcy5tbWRzX3ByZXNlbnQgPSAwO1xuMTA3OTpcdFx0bWVtc2V0KGM0NV9pZHMuZGV2aWNlX2lkcywgMHhmZiwgc2l6ZW9mKGM0NV9pZHMuZGV2aWNlX2lkcykpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKGlzX2M0NSlcbjEwODI6XHRcdFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFx1MDAyNmM0NV9pZHMpO1xuMTA4MzpcdFx0ZWxzZVxuMTA4NDpcdFx0XHRyID0gZ2V0X3BoeV9jMjJfaWQoYnVzLCBhZGRyLCBcdTAwMjZwaHlfaWQpO1xuMTA4NTpcdFxuMTA4NjpcdFx0aWYgKHIpXG4xMDg3Olx0XHRcdHJldHVybiBFUlJfUFRSKHIpO1xuMTA4ODpcdFxuMTA4OTpcdFx0LyogUEhZIGRldmljZSBzdWNoIGFzIHRoZSBNYXJ2ZWxsIEFsYXNrYSA4OEUyMTEwIHdpbGwgcmV0dXJuIGEgUEhZIElEXG4xMDkwOlx0XHQgKiBvZiAwIHdoZW4gcHJvYmVkIHVzaW5nIGdldF9waHlfYzIyX2lkKCkgd2l0aCBubyBlcnJvci4gUHJvY2VlZCB0b1xuMTA5MTpcdFx0ICogcHJvYmUgd2l0aCBDNDUgdG8gc2VlIGlmIHdlJiMzOTtyZSBhYmxlIHRvIGdldCBhIHZhbGlkIFBIWSBJRCBpbiB0aGUgQzQ1XG4xMDkyOlx0XHQgKiBzcGFjZSwgaWYgc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBDNDUgUEhZIGRldmljZS5cbjEwOTM6XHRcdCAqL1xuMTA5NDpcdFx0aWYgKCFpc19jNDUgXHUwMDI2XHUwMDI2IHBoeV9pZCA9PSAwIFx1MDAyNlx1MDAyNiBidXMtXHUwMDNlcmVhZF9jNDUpIHtcbjEwOTU6XHRcdFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFx1MDAyNmM0NV9pZHMpO1xuMTA5NjpcdFx0XHRpZiAoIXIpXG4xMDk3Olx0XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuMTA5ODpcdFx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbjEwOTk6XHRcdH1cbjExMDA6XHRcbjExMDE6XHRcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcdTAwMjZjNDVfaWRzKTtcbjExMDI6XHR9XG4xMTAzOlx0RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4xMTA0Olx0XG4xMTA1Olx0LyoqXG4xMTA2Olx0ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuMTEwNzpcdCAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuMTEwODpcdCAqL1xuMTEwOTpcdGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTEwOlx0e1xuMTExMTpcdFx0aW50IGVycjtcbjExMTI6XHRcbjExMTM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbjExMTQ6XHRcdGlmIChlcnIpXG4xMTE1Olx0XHRcdHJldHVybiBlcnI7XG4xMTE2Olx0XG4xMTE3Olx0XHQvKiBEZWFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4xMTE4Olx0XHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMCk7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMTA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBTY2FuKioKCk9rYXksIHNvIHRoZSBgZ2V0X3BoeV9kZXZpY2VgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIGJ5IGRlZmF1bHQsIHRoZSBgaXNfYzQ1YCBmbGFnIGlzIHNldCB0byBgZmFsc2VgIGR1cmluZyB0aGlzIE1ESU8gYnVzIHNjYW4uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFNpbmNlIGBpc19jNDVgIGlzIGZhbHNlLCB0aGUgY29kZSBpcyBleGVjdXRpbmcgdGhlIGBnZXRfcGh5X2MyMl9pZGAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYGdldF9waHlfYzIyX2lkYCBhbmQgZmlndXJlIG91dCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIE1ESU8gYnVzIHNjYW4gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3BoeV9jMjJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9OTA2PXN0YXRpYyBpbnQgZ2V0X3BoeV9jNDVfaWRzKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtOTkxLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo5OTI6ICogZ2V0X3BoeV9jMjJfaWQgLSByZWFkcyB0aGUgc3BlY2lmaWVkIGFkZHIgZm9yIGl0cyBjbGF1c2UgMjIgSUQuXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5My0gKiBAYnVzOiB0aGUgdGFyZ2V0IE1JSSBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwMDI6c3RhdGljIGludCBnZXRfcGh5X2MyMl9pZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyICpwaHlfaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA4My1cdGVsc2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA4NDpcdFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXHUwMDI2cGh5X2lkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA4NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwODktXHQvKiBQSFkgZGV2aWNlIHN1Y2ggYXMgdGhlIE1hcnZlbGwgQWxhc2thIDg4RTIxMTAgd2lsbCByZXR1cm4gYSBQSFkgSURcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5MDpcdCAqIG9mIDAgd2hlbiBwcm9iZWQgdXNpbmcgZ2V0X3BoeV9jMjJfaWQoKSB3aXRoIG5vIGVycm9yLiBQcm9jZWVkIHRvXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTEtXHQgKiBwcm9iZSB3aXRoIEM0NSB0byBzZWUgaWYgd2UmIzM5O3JlIGFibGUgdG8gZ2V0IGEgdmFsaWQgUEhZIElEIGluIHRoZSBDNDVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogZ2V0XF9waHlcX2MyMlxfaWQqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGllY2Ugb2YgY29kZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgbmFtZSwgYGdldF9waHlfYzIyX2lkYCwgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyByZXRyaWV2aW5nIGFuIGlkZW50aWZpZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzb21ldGhpbmcgcGh5c2ljYWwgKGBwaHlgKSwgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aCBhIEMyMiBzeXN0ZW0gb3IgY29tcG9uZW50LiBUaGUgJiMzNDtnZXQmIzM0OyBwcmVmaXggaXMgY2xlYXI7IGl0IGltcGxpZXMgYSByZXRyaWV2YWwgZnVuY3Rpb24uIE15IGd1dCBmZWVsaW5nIGlzIGl0JiMzOTtzIHB1bGxpbmcgYSB1bmlxdWUgSUQgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnQgb3IgYSBwaWVjZSBvZiBjb25maWd1cmF0aW9uIGRhdGEuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDI6XHRzdGF0aWMgaW50IGdldF9waHlfYzIyX2lkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgKnBoeV9pZClcbjEwMDM6XHR7XG4xMDA0Olx0XHRpbnQgcGh5X3JlZztcbjEwMDU6XHRcbjEwMDY6XHRcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjEsIGFuZCBwdXQgdGhlbSBpbiB0aGUgdXBwZXIgaGFsZiAqL1xuMTAwNzpcdFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQxKTtcbjEwMDg6XHRcdGlmIChwaHlfcmVnIFx1MDAzYyAwKSB7XG4xMDA5Olx0XHRcdC8qIHJldHVybmluZyAtRU5PREVWIGRvZXNuJiMzOTt0IHN0b3AgYnVzIHNjYW5uaW5nICovXG4xMDEwOlx0XHRcdHJldHVybiAocGh5X3JlZyA9PSAtRUlPIHx8IHBoeV9yZWcgPT0gLUVOT0RFVikgPyAtRU5PREVWIDogLUVJTztcbjEwMTE6XHRcdH1cbjEwMTI6XHRcbjEwMTM6XHRcdCpwaHlfaWQgPSBwaHlfcmVnIFx1MDAzY1x1MDAzYyAxNjtcbjEwMTQ6XHRcbjEwMTU6XHRcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFsZiAqL1xuMTAxNjpcdFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQyKTtcbjEwMTc6XHRcdGlmIChwaHlfcmVnIFx1MDAzYyAwKSB7XG4xMDE4Olx0XHRcdC8qIHJldHVybmluZyAtRU5PREVWIGRvZXNuJiMzOTt0IHN0b3AgYnVzIHNjYW5uaW5nICovXG4xMDE5Olx0XHRcdHJldHVybiAocGh5X3JlZyA9PSAtRUlPIHx8IHBoeV9yZWcgPT0gLUVOT0RFVikgPyAtRU5PREVWIDogLUVJTztcbjEwMjA6XHRcdH1cbjEwMjE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0NTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU3l6a2FsbGVyJiMzOTtzIFVTQiBEZXZpY2UgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZm9sbG93aW5nIHRoaXMgc3l6a2FsbGVyIGVtdWxhdGlvbiBwYXRoIGFuZCBpdCBzZWVtcyBwcmV0dHkgaW50ZXJlc3RpbmcuIElmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgdGhlIHN5c3RlbSYjMzk7cyBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgdGhlIGBzbXNjOTV4eGAuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBpbnRlcmNlcHQgdGhlIGBtZGlvYnVzX3JlYWRgIGNhbGxzLCBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAgcmVnaXN0ZXJzLiBCeSByZXR1cm5pbmcgYDB4MDAxY2AgYW5kIGAweGM4OThgIHJlc3BlY3RpdmVseSwgdGhlIGNvZGUgaXMgY29uc3RydWN0aW5nIHRoYXQgYHBoeV9pZGAgdG8gYmUgYDB4MDAxY2M4OThgLgoKVGhpcyBsZWFkcyB0byB0aGUgY3J1Y2lhbCBgcGh5X2RldmljZV9jcmVhdGVgIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IGBpc19jNDVgIGlzIHNldCB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIHdpbGwgdXNlIGluZGlyZWN0IGFjY2Vzcy4gTm93IHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBkb2VzIHRoZSBgcmVhbHRla2AgZHJpdmVyIHRoYXQmIzM5O3MgbGlrZWx5IGJlaW5nIHByb2JlZCBzdXBwb3J0IHRoaXMgaW5kaXJlY3QgYWNjZXNzPyBJIG5lZWQgdG8gY2hlY2suCgpBaCwgeWVzLiBJIHNlZSBpdC4gVGhlIGBtbWRfcGh5X2luZGlyZWN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIGByZWFsdGVrYCBkcml2ZXIgY29uZmlybXMgdGhpcyBieSB3cml0aW5nIHRvIHJlZ2lzdGVycyAxMyBhbmQgMTQsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgQ2xhdXNlIDIyIHJlZ2lzdGVycyB1c2VkIGZvciBpbmRpcmVjdCBDbGF1c2UgNDUgYWNjZXNzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBjb25kaXRpb25zIGZvciBhbiBpbnRlcmVzdGluZyBwcm9iZSB0byBvY2N1ci4KClRoZXJlZm9yZSwgdGhpcyB3aG9sZSBzZXF1ZW5jZSBzaG91bGQgdHJpZ2dlciBgcnRsODI2MXhfcHJvYmVgIGV2ZW50dWFsbHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgcnRsODI2MXhfcHJvYmVgIG5vdyBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoYXQgd2lsbCBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg3Olx0c3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDM4ODpcdHtcbiAzODk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiAzOTA6XHRcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xuIDM5MTpcdFx0aW50IHN1Yl9waHlfaWQsIHJldDtcbiAzOTI6XHRcbiAzOTM6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiAzOTQ6XHRcdGlmICghcHJpdilcbiAzOTU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk2Olx0XG4gMzk3Olx0XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4gMzk4Olx0XG4gMzk5Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcbiA0MDA6XHRcdFx0XHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XG4gNDAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDQwMjpcdFx0XHRyZXR1cm4gcmV0O1xuIDQwMzpcdFxuIDQwNDpcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4gNDA1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDQwNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDQwNzpcdFxuIDQwODpcdFx0c3ViX3BoeV9pZCA9IChyZXQgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuIDQwOTpcdFxuIDQxMDpcdFx0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4gNDExOlx0XHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxuIDQxMjpcdFx0XHRwcml2LVx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xuIDQxMzpcdFx0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4gNDE0Olx0XHRcdGJyZWFrO1xuIDQxNTpcdFxuIDQxNjpcdFx0ZGVmYXVsdDpcbiA0MTc6XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuIDQxODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiAwO1xuIDQyMjpcdH1cbiA0MjM6XHRcbiA0MjQ6XHRzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDQyNTpcdHtcbiA0MjY6XHRcdGludCByZXQ7XG4gNDI3Olx0XG4gNDI4Olx0XHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuIDQyOTpcdFx0aWYgKHJldClcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdC8qXG4gNDMyOlx0XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiA0MzM6XHRcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4gNDM0Olx0XHQgKi9cbiA0MzU6XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuIDQzNjpcdFx0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEFuYWx5emluZyB0aGUgUlRMODI2MXggRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBgcnRsODI2MXhfcHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gVGhlIHNlcXVlbmNlIGlzIGNsZWFyOiB3ZSB3cml0ZSB0byBgTURJT19NTURfVkVORDJgIHRocm91Z2ggYFJUTDgyNjFYX0VYVF9BRERSX1JFR2AsIHNldHRpbmcgdGhlIGFkZHJlc3MgdG8gYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgLiBXZSB0aGVuIHJlYWQgZnJvbSBgUlRMODI2MVhfRVhUX0RBVEFfUkVHYC4gU3l6a2FsbGVyIGludGVyY2VwdHMgdGhhdCByZWFkLCB3aGljaCBpcyBmYXNjaW5hdGluZywgYW5kIGluamVjdHMgYSB2YWx1ZSwgYFJUTDgyNjFDX0NFX01PREVMYCBzaGlmdGVkLCByZXN1bHRpbmcgaW4gYDB4MDAwMGAuIFRoaXMgdHJpZ2dlcnMgdGhlIHNldHRpbmcgb2YgYHByaXYtJmd0O2Z3X25hbWVgIHRvIGBSVEw4MjYxQ19DRV9GV19OQU1FYC4gRnJvbSB0aGVyZSwgYGNvbmZpZ19pbml0YCBjYWxscyBgcnRsODI2MXhfZndfbG9hZGAsIHdoaWNoIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggU3l6a2FsbGVyIGNhbiBwcm92aWRlLiBUaGUgZmlybXdhcmUgbG9hZCBpcyBzdWNjZXNzZnVsIGFzIGlzIHRoZSBzdWJzZXF1ZW50IHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uIG9mIGZpcm13YXJlIGVudHJpZXMgdmlhIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YC4gQWxsIG9mIHRoYXQmIzM5O3MgYSBkaXJlY3QgcGF0aCwgbm8gcXVlc3Rpb24uCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN1cHBvcnRpbmcgUEhZIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBvdGhlciByZWxhdGVkIGNvZGUsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIEdlbmVyaWMgUEhZIEM0NSBpbnRlcmZhY2Ugd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gU3BlY2lmaWNhbGx5LCBhcmUgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgdXNlZCBieSBvdXIgZHJpdmVyPyBUaGV5IGFyZSwgaW5kZWVkLiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZCBhbmQgdXNlZCBhcyBgLnNvZnRfcmVzZXRgLCB3aGljaCBpcyBleGNlbGxlbnQuIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgaXMgY2FsbGVkIGJ5IGBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBieSBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIGBydGw4MjYxeGAgdXNlcyBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AgYW5kIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYCB2aWEgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCBhbmQgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCByZXNwZWN0aXZlbHksIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRvdWNoZWQuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpPa2F5LCBuZXh0IEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgdGhlIGtleS4gSXQmIzM5O3MgbmVlZGVkIGZvciBgcmVhbHRla19tYWluLmNgLiBUaGUgU3l6a2FsbGVyIHNldHVwIGFwcGVhcnMgdG8gYmUgZW5hYmxpbmcgdmFyaW91cyBVU0IgbmV0IGRyaXZlcnMgYWxyZWFkeSwgd2hpY2ggbWlnaHQgYmUgaGVscGZ1bC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyBlbmFibGVkIGV4cGxpY2l0bHkuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlLiBJIGNhbiBjb25maXJtIHRoaXMgdXNpbmcgYG1lbnVjb25maWdgLiBZZXAsIGl0JiMzOTtzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkmIzM5O2xsIHNwZWNpZnkgdGhhdC4gVGhhbmtmdWxseSBgQ09ORklHX1BIWUxJQmAgaXMgc2VsZWN0ZWQgYnkgYFJFQUxURUtfUEhZYCBvciBgTkVUREVWSUNFU2AsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC4gV2l0aCB0aGUgY29uZmlndXJhdGlvbiBxdWVzdGlvbiBoYW5kbGVkLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBJIGhhdmUgYSBmdW5jdGlvbmFsIHBhdGggZm9yIGV4ZXJjaXNpbmcgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkVBTFRFS19QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWc6Mjpjb25maWcgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWc9OD1pZiBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy05LVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMTEtXHRib29sIFwmIzM0O0hXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBQSFkgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYSBwYXRjaCBqdXN0IGNhbWUgYWNyb3NzIG15IGRlc2ssIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheSBoZXJlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBsYW5kc2NhcGUuCgpUaGVuLCBJIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCB0aGlzIHNwZWNpZmljIGZpbGUsIGBwaHktYzQ1LmNgLCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgdGhlIFBIWUxJQiBjb25maWd1cmF0aW9uLiBTbywgaWYgYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQsICp0aGVuKiB0aGlzIGNvZGUgaXMgY29tcGlsZWQuIEdvb2QsIHRoYXQgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29vZCB0byBrbm93IGNvbnRleHR1YWxseSBiZWZvcmUgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHktYzQ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkgQ29uZmlndXJhdGlvbiBmb3IgRW5oYW5jZWQgVGVzdGluZyoqCgpPa2F5LCBzbyBgcGh5LWM0NS5vYCBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgbGlicGh5LXlgLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2ZS4gR29vZC4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBjcml0aWNhbCBmb3IgbXkgYW5hbHlzaXMuIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAKKiAgIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAKKiAgIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYAoqICAgYHJ0bDgyNjF4X3Byb2JlYAoqICAgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AKKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AKKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgCiogICBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAKKiAgIGBydGw4MjYxeF9md19sb2FkYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYAoqICAgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgCiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgCgpUaGVzZSBhbGwgbG9vayBsaWtlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgVVNCX05FVF9TTVNDOTVYWGAgZGVwZW5kZW5jeS4gV2l0aCBTeXprYWxsZXImIzM5O3MgYHZoY2lgIGVtdWxhdGluZyBhbnkgVVNCIGRldmljZSwgSSBkb24mIzM5O3QgKnN0cmljdGx5KiBuZWVkIGBzbXNjOTV4eGAuIEl0JiMzOTtzIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgYWxsb3dzIGFyYml0cmFyeSBQSFkgSURzLCBzbyB0aGVvcmV0aWNhbGx5LCBJIGNvdWxkIHVzZSBzb21ldGhpbmcgZWxzZS4gSG93ZXZlciwgaXQmIzM5O3MgYSBnb29kIGRlZmF1bHQsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQganVzdCBpbiBjYXNlLCB3aGlsZSBhbHNvIGNoZWNraW5nIGlmIGl0JiMzOTtzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBVU0JfTkVUX1NNU0M5NVhYYCBpcyB0aGUgY29ycmVjdCBjb25maWcgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9ORVRfU01TQzk1WFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM1MTpjb25maWcgVVNCX05FVF9TTVNDOTVYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUyLVx0dHJpc3RhdGUgXCYjMzQ7U01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBVU0JfTEFONzhYWCBJbnRlZ3JhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBhbHNvIGdpdmUgYFVTQl9MQU43OFhYYCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIFdl4oCZdmUgY292ZXJlZCB0aGUgb3RoZXIgYXNwZWN0cywgYnV0IHRoaXMgZHJpdmVyLCBpbiBwYXJ0aWN1bGFyLCBjb3VsZCBwcmVzZW50IHNvbWUgdW5pcXVlIGNoYWxsZW5nZXMgb3Igc3VidGxlIGludGVncmF0aW9uIHF1aXJrcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBwb3RlbnRpYWwgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGF0IHBhcnRpY3VsYXIgVVNCLXRvLUV0aGVybmV0IGNvbnRyb2xsZXIuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWzigJlzIFVTQiBzdWJzeXN0ZW0gaXMgc2VhbWxlc3MsIHRoYXQgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZyByZXF1aXJlbWVudHMsIGFuZCB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9zZWQgYW5kIGRvY3VtZW50ZWQuIFRoZSBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGRlcGVuZCBvbiBnZXR0aW5nIHRoZSBgVVNCX0xBTjc4WFhgIHBhcnQgcmlnaHQsIHNvIGFub3RoZXIgY2hlY2sgd29uJiMzOTt0IGh1cnQuIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHNwZWNpZmljIGNvbXBhdGliaWxpdHkgbm90ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfTEFONzhYWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9OTk9Y29uZmlnIFVTQl9SVEw4MTUyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTEyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTEzOmNvbmZpZyBVU0JfTEFONzhYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTE0LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTg0CgkJCQkJCQlvdXRwdXQ6IDM4NwoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgUlRMODI2MUMgUEhZKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBuZXcgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGRyaXZlci4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGZ1bmN0aW9ucyBhZGRlZCBieSB0aGUgcGF0Y2guIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGVtIGFnYWluOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBOb3BlLCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBmdWxsIHNldC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbmV3IFBIWSBkcml2ZXIsIGJ1dCBpdCBhbHNvIGludHJvZHVjZXMgbmV3IENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbi4gVGhpcyBtZWFucyB3ZSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgaWRlYWwgZm9yIFN5emthbGxlci4KCkhlcmXigJlzIHRoZSByZWFzb25pbmc6IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBVU0JfTkVUX1NNU0M5NVhYYCBvciBgVVNCX0xBTjc4WFhgIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHdlIGNhbiBtYWtlIHRoZW0gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciwgZXhlY3V0aW5nIHRoZSBuZXcgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYW5kIGV2ZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYmVjYXVzZSB3ZSBjYW4gYWxzbyBsZXZlcmFnZSBTeXprYWxsZXLigJlzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgdGhlcmUuCgpTbywgaW4gdGVybXMgb2YgZm9jdXMsIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyB0aHJvdWdoIHRob3NlIGZ1bmN0aW9uczogYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCwgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AsIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AsIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgLCBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAsIGBydGw4MjYxeF9md19sb2FkYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYCwgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgLCBgcnRsODI2MXhfY29uZmlnX2FuZWdgLCBhbmQgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YC4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGFyZSBgUkVBTFRFS19QSFlgLCBgVVNCX05FVF9TTVNDOTVYWGAsIGFuZCBgVVNCX0xBTjc4WFhgLgoKQWxyaWdodCwgSSB0aGluayB0aGlzIHBsYW4gaXMgc29saWQuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjAyMDg2ODI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDQ5MDk2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCIsXG4gICAgXCJVU0JfTkVUX1NNU0M5NVhYXCIsXG4gICAgXCJVU0JfTEFONzhYWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcInJ0bDgyNjF4X3Byb2JlXCIsXG4gICAgXCJydGw4MjYxeF9nZXRfZmVhdHVyZXNcIixcbiAgICBcInJ0bDgyNjF4X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2xvYWRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0XCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfYW5lZ1wiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgbmV3IENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIGZvciBzb2Z0IHJlc2V0IGFuZCBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIChsaWtlIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cyBhbmQgY2FuIGJlIG1hZGUgdG8gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciBhbmQgZXhlY3V0ZSB0aGUgbmV3IHByb2JlLCBjb25maWcsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHJvdXRpbmVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBjYW4gYWxzbyBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjAyMDg3MzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA2NjgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMjJkYTJhYWJjYWZmMWNjZTA5NmRjZmUyNjk0MzFmYjdlMmVhMGUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTA6NDE6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uZGY2ODJkM2ViZDVhMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5AQCAtMzg0LDYgKzM4NCwxMTkgQEAgaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcXG4gXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbitcXHRcXHRcXHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX0NUUkwxLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAhKHZhbCBcXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xcbitcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxcbisgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXFxuKyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxcbisgKlxcbisgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbid0IGNoYW5nZSxcXG4rICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHR1MTYgY3RsID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAocGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfCBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEOlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgTWFzdGVyL1NsYXZlIG1vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8XFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xcbisgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xcbitcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xcbitcXG4rXFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcXG4rXFx0fVxcbitcXG4rXFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7XFxuK1xcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VsaW5rKSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9NQVNURVI7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfU0xBVkU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuQEAgLTExOTIsNiArMTMwNSwxMCBAQCBpbnQgZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xcbkBAIC0xMjI1LDYgKzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0aWYgKHJldCBcXHUwMDNlIDApXFxuIFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbiBcXG4rXFx0aWYgKCFnZW5waHlfYzQ1X2Jhc2V0MV9hYmxlKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuaW5kZXggMjcyNjg4MTFmNTY0ZjIuLjEwYzhhYmZlYmU4NDdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5AQCAtOCw3ICs4LDkgQEBcXG4gICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMzMi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXFx1MDAzZVxcbkBAIC0xNDEsNiArMTQzLDEwIEBAXFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMVxcdFxcdDE3XFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMlxcdFxcdDE4XFxuIFxcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFR1xcdFxcdFxcdDB4YTQzNlxcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFR1xcdFxcdFxcdDB4YTQzOFxcbisjZGVmaW5lIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJcXHRcXHQweDgwMWRcXG4rXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05cXHRcXHRcXHQweDY5N2FcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDUsIDApXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcXHRcXHQwXFxuQEAgLTI1MSw2ICsyNTcsNjkgQEBcXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcXHRcXHRcXHRcXHQweDAwMWNjODRhXFxuICNkZWZpbmUgUlRMXzgyNTFCXFx0XFx0XFx0XFx0MHgwMDFjYzg2MlxcbiAjZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG4rI2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuK1xcbisjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXFx0QklUKDApXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkVcXHRCSVQoMylcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTElOS19DSEdcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1NcXHRCSVQoNSlcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcXHRcXHRCSVQoMTApXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFRcXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0pBQkJFUilcXG4rXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXFx0XFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUE1FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXFxuK1xcbisjZGVmaW5lIEZXX01BSU5fTUFHSUNcXHRcXHRcXHQweDUyNTQ0QzM4XFxuKyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXFx0XFx0MHgzMjM2MzE0M1xcbisjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1xcdDEwMFxcbisjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXFx0XFx0MzFcXG4rXFxuKyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVxcdFxcXCJydGxfbmljL3J0bDgyNjFjLmJpblxcXCJcXG4rTU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xcbitcXG4rZW51bSBydGw4MjYxeF9md19vcCB7XFxuK1xcdE9QX1dSSVRFID0gMHgwMCxcXHQvKiBXcml0ZSAqL1xcbitcXHRPUF9QT0xMICA9IDB4MDIsXFx0LyogUG9sbGluZyAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XFxuK1xcdF9fbGUzMiBtYWluX21hZ2ljO1xcdC8qIE1haW4gbWFnaWMgbnVtYmVyICovXFxuK1xcdF9fbGUzMiBzdWJfbWFnaWM7XFx0LyogU3ViIG1hZ2ljIG51bWJlciAqL1xcbitcXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcXHQvKiBNYWpvciB2ZXJzaW9uICovXFxuK1xcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1xcdC8qIE1pbm9yIHZlcnNpb24gKi9cXG4rXFx0X19sZTE2IG51bV9lbnRyaWVzO1xcdC8qIE51bWJlciBvZiBlbnRyaWVzICovXFxuK1xcdF9fbGUxNiByZXNlcnZlZDtcXHQvKiBSZXNlcnZlZCAqL1xcbitcXHRfX2xlMzIgY3JjMzI7XFx0XFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XFxuK1xcdF9fdTggIHR5cGU7XFx0XFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXFxuK1xcdF9fdTggIGRldjtcXHRcXHQvKiBNTUQgZGV2aWNlICovXFxuK1xcdF9fbGUxNiBhZGRyO1xcdFxcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4rXFx0X191OCAgbXNiO1xcdFxcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cXG4rXFx0X191OCAgbHNiO1xcdFxcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cXG4rXFx0X19sZTE2IHZhbHVlO1xcdFxcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cXG4rXFx0X19sZTE2IHRpbWVvdXRfbXM7XFx0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xcbitcXHRfX3U4ICBwb2xsX3NldDtcXHRcXHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXFxuK1xcdF9fdTggIHJlc2VydmVkO1xcdFxcdC8qIFJlc2VydmVkICovXFxuK307XFxuK1xcbisjZGVmaW5lIEZXX0hFQURFUl9TSVpFXFx0XFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXFxuKyNkZWZpbmUgRldfRU5UUllfU0laRVxcdFxcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXFxuIFxcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXFxuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXFx0XFx0XFx0M1xcbkBAIC0yNzAsNiArMzM5LDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xcbiBcXHR1MTYgaW5lcjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcXG4rXFx0Y29uc3QgY2hhciAqZndfbmFtZTtcXG4rXFx0Ym9vbCBmd19sb2FkZWQ7XFxuK307XFxuK1xcbiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTtcXG5AQCAtMzEwLDYgKzM4NCwzMTkgQEAgc3RhdGljIGludCBydGw4MjF4X21vZGlmeV9leHRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgZXh0X3BhZ2UsXFxuIFxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHN1Yl9waHlfaWQsIHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN1Yl9waHlfaWQgPSAocmV0IFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rXFxuK1xcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xcbitcXHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxcbitcXHRcXHRwcml2LVxcdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcXG4rXFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFN1cHBsZW1lbnQgTXVsdGktR2lnIHNwZWVkcyB0aGF0IG1heSBub3QgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZFxcbitcXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFIFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0XFx0bWlpX3N0YXQxMDAwX21vZF9saW5rbW9kZV9scGFfdChwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xcbitcXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xcbitcXHRzaXplX3QgZGF0YV9sZW47XFxuK1xcdHUxNiBudW1fZW50cmllcztcXG4rXFxuK1xcdGlmIChmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXFxcblxcXCIsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VtYWluX21hZ2ljKTtcXG4rXFx0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgbWFpbl9tYWdpYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZXN1Yl9tYWdpYyk7XFxuK1xcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgc3ViX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRjYWxjX2NyYyA9IGNyYzMyKH4wLCBmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcXG4rXFx0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWNyYzMyKTtcXG4rXFxuK1xcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkNSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxcbit7XFxuK1xcdHUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tcztcXG4rXFx0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XFxuK1xcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbitcXHRhZGRyID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZWFkZHIpO1xcbitcXHRtc2IgPSBlbnRyeS1cXHUwMDNlbXNiO1xcbitcXHRsc2IgPSBlbnRyeS1cXHUwMDNlbHNiO1xcbitcXHR2YWx1ZSA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V2YWx1ZSk7XFxuK1xcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNldGltZW91dF9tcyk7XFxuK1xcdHBvbGxfc2V0ID0gZW50cnktXFx1MDAzZXBvbGxfc2V0O1xcbitcXG4rXFx0aWYgKHRpbWVvdXRfbXMgPT0gMClcXG4rXFx0XFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcXG4rXFxuK1xcdGlmIChkZXYgXFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxcXG5cXFwiLCBkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1zYiBcXHUwMDNlIDE1IHx8IGxzYiBcXHUwMDNlIG1zYikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXFxcblxcXCIsIG1zYiwgbHNiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnktXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBPUF9XUklURTpcXG4rXFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcXHUwMDNjXFx1MDAzYyBsc2IpIFxcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgT1BfUE9MTDpcXG4rXFx0XFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xcbitcXHRcXHRleHBlY3RfdmFsID0gKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBiaXRzO1xcbitcXG4rXFx0XFx0aWYgKHBvbGxfc2V0KVxcbitcXHRcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCh2YWwgXFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vmd19uYW1lKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmZ3LCBwcml2LVxcdTAwM2Vmd19uYW1lLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWZ3X25hbWUsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbnVtX2VudHJpZXMpOyBpKyssIGVudHJ5KyspIHtcXG4rXFx0XFx0cmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkVudHJ5ICVkIGZhaWxlZDogJWRcXFxcblxcXCIsIGksIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xcbitcXG4rcmVsZWFzZV9mdzpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXFxuK1xcdFxcdFxcdFxcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLCAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBpcnFfc3RhdHVzO1xcbitcXG4rXFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRpZiAoaXJxX3N0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5X2Vycm9yKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEoaXJxX3N0YXR1cyBcXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxcbitcXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcXG4rXFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGFkdl8xZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYWR2XzFnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxcbitcXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXFxuK1xcdCAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlZndfbmFtZSBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZndfbG9hZGVkKVxcbitcXHRcXHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbkBAIC0zMDAxLDYgKzMzODgsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcXG4gXFx0XFx0LndyaXRlX21tZFxcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcXG4rXFx0fSwge1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcXFwiLFxcbitcXHRcXHQucHJvYmVcXHRcXHRcXHQ9IHJ0bDgyNjF4X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5jb25maWdfaW50clxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXFxuK1xcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0gZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMjVhNjYzMjBkZjU2ZWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMwOSw2ICsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5AQCAtMzMyLDggKzMzMiwxMyBAQFxcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXFx0MHgwMDgwXFx0LyogQWR2ZXJ0aXNlIDIuNUdCQVNFLVQgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcXHQweDAxMDBcXHQvKiBBZHZlcnRpc2UgNUdCQVNFLVQgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXFx0MHgxMDAwXFx0LyogQWR2ZXJ0aXNlIDEwR0JBU0UtVCAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEVcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUVcXHQweDQwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXFx0MHgyMDAwXFx0LyogTWFzdGVyIFByZWZlcnJlZCBUeXBlICovXFxuIFxcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFxcdDB4ODAwMFxcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcXHQweDQwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1xcdDB4MDAyMCAgLyogTFAgaXMgMi41R0JUIGNhcGFibGUgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1xcdFxcdDB4MDA0MCAgLyogTFAgaXMgNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXFx0MHgwMjAwXFx0LyogTFAgdHJhaW5pbmcgcmVzZXQgcmVxLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MToxOS40OTIzMTgwMTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mzk3NzYzNzk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiVVNCX0xBTjc4WFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBmaXJtd2FyZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyMmRhMmFhYmNhZmYxY2NlMDk2ZGNmZTI2OTQzMWZiN2UyZWEwZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDEwOjQxOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDEyNjk1MTc0MTQyODhmLi5kZjY4MmQzZWJkNWExZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0zODQsNiArMzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbisvKipcbisgKiBnZW5waHlfYzQ1X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbitcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4rXHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4rXHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4rXHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xuK1xuKy8qKlxuKyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuKyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cbisgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy5cbisgKlxuKyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJ3QgY2hhbmdlLFxuKyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4rICovXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHUxNiBjdGwgPSAwO1xuK1xuK1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5zdXBwb3J0ZWQgTWFzdGVyL1NsYXZlIG1vZGVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XG4rfVxuK1xuKy8qKlxuKyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXG4rICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XG4rXHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4rXG4rXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4rXHR9XG4rXG4rXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcbitcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7XG4rXHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9NQVNURVI7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5AQCAtMTE5Miw2ICsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbiBcdFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xuQEAgLTEyMjUsNiArMTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0Y2hhbmdlZCA9IHRydWU7XG4gXG4rXHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbmluZGV4IDI3MjY4ODExZjU2NGYyLi4xMGM4YWJmZWJlODQ3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuQEAgLTgsNyArOCw5IEBAXG4gICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXHUwMDNlXG5AQCAtMTQxLDYgKzE0MywxMCBAQFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMVx0XHQxN1xuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMlx0XHQxOFxuIFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcdFx0XHQweGE0MzhcbisjZGVmaW5lIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJcdFx0MHg4MDFkXG4rXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiArMjU3LDY5IEBAXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcdFx0XHRcdDB4MDAxY2M4NGFcbiAjZGVmaW5lIFJUTF84MjUxQlx0XHRcdFx0MHgwMDFjYzg2MlxuICNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG4rI2RlZmluZSBSVExfODI2MUNfQ0dcdFx0XHRcdDB4MDAxY2M4OThcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXHRcdDB4MDBcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXHRCSVQoMClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1x0XHRCSVQoNClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1x0XHRCSVQoOSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuK1xuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuK1xuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1x0XHQweDMyMzYzMTQzXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwicnRsX25pYy9ydGw4MjYxYy5iaW5cIlxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbitcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcbitcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4rXHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbitcdF9fbGUzMiBtYWluX21hZ2ljO1x0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4rXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1x0LyogTWlub3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbitcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4rXHRfX2xlMzIgY3JjMzI7XHRcdC8qIENSQzMyIGNoZWNrc3VtICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xuK1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4rXHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbitcdF9fbGUxNiBhZGRyO1x0XHQvKiBSZWdpc3RlciBhZGRyZXNzICovXG4rXHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbitcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X19sZTE2IHZhbHVlO1x0XHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXG4rXHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbitcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4rXHRfX3U4ICByZXNlcnZlZDtcdFx0LyogUmVzZXJ2ZWQgKi9cbit9O1xuK1xuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcbitcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4rXHRib29sIGZ3X2xvYWRlZDtcbit9O1xuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICszODQsMzE5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XG4rXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxuK1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdWJfcGh5X2lkID0gKHJldCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbitcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XG4rXHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4rXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXG5cIiwgc3ViX3BoeV9pZCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIlVua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKlxuK1x0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXG4rXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuK1x0ICovXG4rXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfU1RBVDEwMDApKTtcbitcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdmFsO1xuK1xuK1x0XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbitcdH1cbitcbitcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuK1x0dTMyIGNhbGNfY3JjLCBmaWxlX2NyYztcbitcdHNpemVfdCBkYXRhX2xlbjtcbitcdHUxNiBudW1fZW50cmllcztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBGV19IRUFERVJfU0laRSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xcblwiLCBmdy1cdTAwM2VzaXplKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4rXG4rXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZW1haW5fbWFnaWMpO1xuK1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcXG5cIiwgbWFpbl9tYWdpYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3ViX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZXN1Yl9tYWdpYyk7XG4rXHRpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJJbnZhbGlkIHN1YiBtYWdpYzogMHglMDh4XFxuXCIsIHN1Yl9tYWdpYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuK1x0ZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgKyBkYXRhX2xlbikge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVx1MDAzZWRhdGEgKyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4rXHRmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VjcmMzMik7XG4rXG4rXHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxuXCIsXG4rXHRcdFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4re1xuK1x0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xuK1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4rXHR1MzIgYml0cywgZXhwZWN0X3ZhbDtcbitcdGludCByZXQsIHZhbDtcbitcbitcdGRldiA9IGVudHJ5LVx1MDAzZWRldjtcbitcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VhZGRyKTtcbitcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbitcdGxzYiA9IGVudHJ5LVx1MDAzZWxzYjtcbitcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldmFsdWUpO1xuK1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuK1x0cG9sbF9zZXQgPSBlbnRyeS1cdTAwM2Vwb2xsX3NldDtcbitcbitcdGlmICh0aW1lb3V0X21zID09IDApXG4rXHRcdHRpbWVvdXRfbXMgPSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVM7XG4rXG4rXHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJpbnZhbGlkIGZpcm13YXJlIE1NRCBkZXZpY2U6IGRldj0ldVxcblwiLCBkZXYpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChtc2IgXHUwMDNlIDE1IHx8IGxzYiBcdTAwM2UgbXNiKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cIiwgbXNiLCBsc2IpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHN3aXRjaCAoZW50cnktXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBPUF9XUklURTpcbitcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXG4rXHRcdFx0XHQgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IEdFTk1BU0sobXNiLCBsc2IpKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgT1BfUE9MTDpcbitcdFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xuK1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuK1xuK1x0XHRpZiAocG9sbF9zZXQpXG4rXHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuK1x0XHRcdFx0XHRcdFx0KHZhbCBcdTAwMjYgYml0cykgPT0gZXhwZWN0X3ZhbCxcbitcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSAhPSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuK1x0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbitcdGludCByZXQsIGk7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlZndfbmFtZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBwcml2LVx1MDAzZWZ3X25hbWUsIFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcblwiLCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4rXG4rXHRlbnRyeSA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKikoZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkrKywgZW50cnkrKykge1xuK1x0XHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRW50cnkgJWQgZmFpbGVkOiAlZFxcblwiLCBpLCByZXQpO1xuK1x0XHRcdGdvdG8gcmVsZWFzZV9mdztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xuK1xuK3JlbGVhc2VfZnc6XG4rXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbitcdFx0XHRcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgaXJxX3N0YXR1cztcbitcbitcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAzYyAwKSB7XG4rXHRcdHBoeV9lcnJvcihwaHlkZXYpO1xuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rXHR9XG4rXG4rXHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rXG4rXHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuK1x0ICAgIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgUlRMODI2MVhfSU5UX0pBQkJFUikpXG4rXHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHUxNiBhZHZfMWcgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuK1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuK1x0XHRcdFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXG4rXHRcdFx0XHQgICAgIGFkdl8xZyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXG4rXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuK1x0ICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlclxuK1x0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlZndfbmFtZSBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZndfbG9hZGVkKVxuK1x0XHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAxLDYgKzMzODgsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcbiBcdFx0LndyaXRlX21tZFx0PSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLFxuK1x0fSwge1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCIsXG4rXHRcdC5wcm9iZVx0XHRcdD0gcnRsODI2MXhfcHJvYmUsXG4rXHRcdC5jb25maWdfaW5pdFx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gcnRsODI2MXhfZ2V0X2ZlYXR1cmVzLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcbitcdFx0LnJlYWRfc3RhdHVzXHRcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXG4rXHRcdC5jb25maWdfaW50clx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbnRyLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxuK1x0XHQuc29mdF9yZXNldFx0XHQ9IGdlbnBoeV9jNDVfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsXG4gXHR9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4yNWE2NjMyMGRmNTZlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzA5LDYgKzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbitpbnQgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IGIyNTQxYzk0OGZjMWViLi4wNmY0YmMzYzIwYzcxNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC0zMzIsOCArMzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSBjb25maWcgdmFsdWUgKDE9TWFzdGVyKSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFU1x0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1x0XHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXHQweDAyMDBcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjQ5MjMyMDAxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDIzNzQzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkuIEl0IHRvdWNoZXMgYHBoeS1jNDUuY2AgYW5kIGByZWFsdGVrX21haW4uY2AsIGFuZCBpdCBicmluZ3MgaW4gc29tZSBuZXcgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/XG5cblBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHJlYWNoYWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIGF0IGxlYXN0IGVtdWxhdGVkLiBCdXQsIHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBlbXVsYXRlIHNwZWNpZmljIFBIWXMgZGlyZWN0bHksIHJpZ2h0PyBJdCdzIG1vcmUgYWJvdXQgaGF2aW5nIGdlbmVyaWMgbWVjaGFuaXNtcyBvciBwZXJoYXBzIHNwZWNpZmljIGVtdWxhdGlvbi4gSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIFBIWXMuIFRoZXkncmUgdXN1YWxseSBjb25uZWN0ZWQgdG8gYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRocm91Z2ggYW4gTURJTyBidXMuIERvZXMgc3l6a2FsbGVyIGhhdmUgYW4gTURJTyBidXMgZW11bGF0b3I/IFdlIGhhdmUgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGFuZCBgbmV0ZGV2c2ltYCBmb3Igc29tZSBuZXRkZXZzLCBidXQgbm90aGluZyBqdW1wcyBvdXQgZm9yIE1ESU8uXG5cbkhvbGQgb24sIGNhbiB3ZSB0cmlnZ2VyIHRoZSBQSFkgZHJpdmVyIGNvZGUgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHk/IEkgc2VlbSB0byByZW1lbWJlciBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlSRUdgIGlvY3Rscy4gQnV0IGFyZW4ndCB0aG9zZSB0aWVkIHRvIGEgbmV0ZGV2IHRoYXQncyAqdXNpbmcqIGEgUEhZPyBBbmQgdGhlbiB0aGVyZSdzIGBldGh0b29sYCwgd2hpY2ggc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLiBCdXQgd2UncmUgdHJ5aW5nIHRvIGdldCB0byBgcnRsODI2MXhfcHJvYmVgLCB3aGljaCBtZWFucyB3ZSBuZWVkIGEgUEhZIGRldmljZSB3aXRoIHRoZSBJRCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkgb24gYW4gTURJTyBidXMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBpbnN0YW50aWF0ZSB0aGF0IHNwZWNpZmljIFBIWS5cblxuSXMgdGhlcmUgYW55IGtpbmQgb2YgdmlydHVhbCBNRElPIGJ1cyBzeXprYWxsZXIgY2FuIGNvbnRyb2wgaW4gdGhlIGtlcm5lbD8gTGV0IG1lIGV4cGxvcmUgdGhlIG9wdGlvbnMuIEhtbSwgYG1kaW8tbW9ja3VwYCwgbm8uIGBtZGlvLWdwaW9gLCB1bmxpa2VseS4gV2hhdCBhYm91dCBgZml4ZWQtcGh5YD8gV29ydGggYSBsb29rLCBidXQgSSdtIGRvdWJ0aW5nIHRoYXQgZ2l2ZXMgdXMgdGhlIGxldmVsIG9mIGNvbnRyb2wgd2UgbmVlZC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBtZGlvYCBvciBgcGh5YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MToyOC4yMzQ2OTY0MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNDE0NzI1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTozMC45Mzg4NDk1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwMzUwODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPIEJ1cyBTb2Z0d2FyZSBQcm9iZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgYSBtZW50YWwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIGRyaXZlciBoYW5kbGluZyB0aGUgTURJTyBidXMuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrbm93biBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFuZCBjaGVja2luZyB0aGVpciByZXNwZWN0aXZlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBhbmQgYW55IHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYnVpbGQgdGhlIGNvbnRleHQgb2YgYSBzeXN0ZW0gd2hpY2ggcmVsaWVzIG9uIHN1Y2ggYSBsb3cgbGV2ZWwgYnVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGUgT1MsIG9yIGFueSBsb3dlciBsZXZlbCBmaXJtd2FyZSwgaGFzIGFscmVhZHkgdGFrZW4gcmVzcG9uc2liaWxpdHkgZm9yIHRoaXMgaW50ZXJmYWNlLiBJdCdsbCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgaWYgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IGxhaWQgdGhlIGdyb3VuZHdvcmssIGFuZCBJIGNhbiBzaW1wbHkgbGV2ZXJhZ2UgdGhhdCBleGlzdGluZyBjb2RlLiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHNvZnR3YXJlIE1ESU8gYnVzIGluIHBsYWNlLCBJIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGF0IGJ1cywgYW5kIHZlcmlmeSBjb21wYXRpYmlsaXR5IHdpdGggbXkgdXNlLWNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6MzUuMjA5MjAyODU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjI4MTEyNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnNvZnR3YXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTozNy43MzIwMTk4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM5NzEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBQSFkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZXNlIHZpcnR1YWwgUEhZcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSwgdGhlIGhlYXJ0IG9mIHRoZSBQSFkgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgeW91J2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRoZSBwcmVkaWN0YWJsZSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cCBpbiB0aGVyZS4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDIuOTc1OTk0MzA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzIwMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MjI9aWYgUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjQ6Y29uZmlnIFNXUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI3OmNvbmZpZyBQSFlfUEFDS0FHRVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4LVxcdCB0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwOmNvbmZpZyBMRURfVFJJR0dFUl9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IExFRCB0cmlnZ2VycyBmb3IgdHJhY2tpbmcgbGluayBzdGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy01NS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo1Njpjb25maWcgRklYRURfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcIk1ESU8gQnVzL1BIWSBlbXVsYXRpb24gd2l0aCBmaXhlZCBzcGVlZC9saW5rIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2NTpjb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNjYtICAgICAgICBib29sIFxcXCJSdXN0IFBIWUxJQiBhYnN0cmFjdGlvbnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTc5PWNvbW1lbnQgXFxcIk1JSSBQSFkgZGV2aWNlIGRyaXZlcnNcXFwiXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctODAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6ODE6Y29uZmlnIEFTMjFYWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctODItXFx0dHJpc3RhdGUgXFxcIkFlb25zZW1pIEFTMjF4eHggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTkyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjkzOmNvbmZpZyBBSVJfQU44ODAxX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctOTgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEwNjpjb25maWcgQUlSX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDctXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTExMC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMTE6Y29uZmlnIEFNRF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGUgXFxcIkFNRCBhbmQgQWx0aW1hIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTE2OmNvbmZpZyBNRVNPTl9HWExfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIE1lc29uIEdYTCBJbnRlcm5hbCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTIzOmNvbmZpZyBBRElOX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZSBcXFwiQW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzMjpjb25maWcgQURJTjExMDBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFQxTCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTM4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzOTpjb25maWcgQU1DQ19RVDIwMjVfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJBTUNDIFFUMjAyNSBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0xNDY9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvYXF1YW50aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTQ4OmNvbmZpZyBBWDg4Nzk2Ql9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcIkFzaXggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE1My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTQ6Y29uZmlnIEFYODg3OTZCX1JVU1RfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlJ1c3QgcmVmZXJlbmNlIGRyaXZlciBmb3IgQXNpeCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYxLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE2Mjpjb25maWcgQlJPQURDT01fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSA1NFhYIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTcxOmNvbmZpZyBCQ001NDE0MF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEJDTTU0MTQwIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE4MS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxODI6Y29uZmlnIEJDTTYzWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgzLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSA2M3h4IFNPQ3MgaW50ZXJuYWwgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE4OTpjb25maWcgQkNNN1hYWF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xOTAtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIDd4eHggU09DcyBpbnRlcm5hbCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE5Njpjb25maWcgQkNNODQ4ODFfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ004NDg4MSBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMDAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjAxOmNvbmZpZyBCQ004N1hYX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gQkNNODcwNiBhbmQgQkNNODcyNyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwNjpjb25maWcgQkNNX0NZR05VU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEN5Z251cy9PbWVnYSBTb0MgaW50ZXJuYWwgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIxOTpjb25maWcgQkNNX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjEtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjIyOmNvbmZpZyBCQ01fTkVUX1BIWVBUUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMjU6Y29uZmlnIENJQ0FEQV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjYtXFx0dHJpc3RhdGUgXFxcIkNpY2FkYSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjI5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIzMDpjb25maWcgQ09SVElOQV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIkNvcnRpbmEgRURDIENEUiAxMEcgRXRoZXJuZXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjM0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIzNTpjb25maWcgREFWSUNPTV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzYtXFx0dHJpc3RhdGUgXFxcIkRhdmljb20gUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIzOS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDA6Y29uZmlnIElDUExVU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDEtXFx0dHJpc3RhdGUgXFxcIklDUGx1cyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI0NTpjb25maWcgTFhUX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgTFhUIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDktXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjUwOmNvbmZpZyBJTlRFTF9YV0FZX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1MS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgWFdBWSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjU3LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1ODpjb25maWcgTFNJX0VUMTAxMUNfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJMU0kgRVQxMDExQyBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjYzOmNvbmZpZyBNQVJWRUxMX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2NC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBBbGFza2EgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2Ny1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNjg6Y29uZmlnIE1BUlZFTExfMTBHX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2OS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBBbGFza2EgMTBHYml0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjczOmNvbmZpZyBNQVJWRUxMXzg4UTJYWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc0LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4UTJYWFggUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI4MDpjb25maWcgTUFSVkVMTF84OFgyMjIyX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4MS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFgyMjIyIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4NS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyODY6Y29uZmlnIE1BWExJTkVBUl9HUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg3LVxcdHRyaXN0YXRlIFxcXCJNYXhsaW5lYXIgRXRoZXJuZXQgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyOTQ6Y29uZmlnIE1BWExJTkVBUl84NjExMF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOTUtXFx0dHJpc3RhdGUgXFxcIk1heExpbmVhciBNWEw4NjExMCBQSFkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMwNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMDg6Y29uZmlnIE1JQ1JFTF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMDktXFx0dHJpc3RhdGUgXFxcIk1pY3JlbCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzE0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMxNTpjb25maWcgTUlDUk9DSElQX1QxU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCAxMEJBU0UtVDFTIEV0aGVybmV0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzIxOmNvbmZpZyBNSUNST0NISVBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMyNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMjY6Y29uZmlnIE1JQ1JPQ0hJUF9UMV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjctXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBUMSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzMyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMzMzpjb25maWcgTUlDUk9DSElQX1BIWV9SRFNfUFRQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzM4OmNvbmZpZyBNSUNST1NFTUlfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NlbWkgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM0Ni1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNDc6Y29uZmlnIE1PVE9SQ09NTV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDgtXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzUyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM1Mzpjb25maWcgTkFUSU9OQUxfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzU0LVxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzU4OmNvbmZpZyBOWFBfQ0JUWF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTktXFx0dHJpc3RhdGUgXFxcIk5YUCAxMDBCQVNFLVRYIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNjMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzY0OmNvbmZpZyBOWFBfQzQ1X1RKQTExWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJOWFAgQzQ1IFRKQTExWFggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3MS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNzI6Y29uZmlnIE5YUF9USkExMVhYX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3My1cXHR0cmlzdGF0ZSBcXFwiTlhQIFRKQTExeHggUEhZcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc3LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM3ODpjb25maWcgTkNOMjYwMDBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc5LVxcdHRyaXN0YXRlIFxcXCJPbnNlbWkgMTBCQVNFLVQxUyBFdGhlcm5ldCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0zODU9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvcWNvbS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4Ni1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozODc6Y29uZmlnIFFTRU1JX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4OC1cXHR0cmlzdGF0ZSBcXFwiUXVhbGl0eSBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0zOTI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM5My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTQ6Y29uZmlnIFJFTkVTQVNfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzk5OmNvbmZpZyBST0NLQ0hJUF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIlJvY2tjaGlwIEV0aGVybmV0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MDMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDA0OmNvbmZpZyBTTVNDX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwNS1cXHR0cmlzdGF0ZSBcXFwiU01TQyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDEwPWNvbmZpZyBTVEUxMFhQXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDE1OmNvbmZpZyBURVJBTkVUSUNTX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNi1cXHR0cmlzdGF0ZSBcXFwiVGVyYW5ldGljcyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDE5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyMDpjb25maWcgRFA4MzgyMl9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MjEtXFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIERQODM4MjIvODI1LzgyNiBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDI1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyNjpjb25maWcgRFA4M1RDODExX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQyNy1cXHR0cmlzdGF0ZSBcXFwiVGV4YXMgSW5zdHJ1bWVudHMgRFA4M1RDODExIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQzMC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzE6Y29uZmlnIERQODM4NDhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMyLVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzODQ4IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQzNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzY6Y29uZmlnIERQODM4NjdfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDM3LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzODY3IEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQwLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ0MTpjb25maWcgRFA4Mzg2OV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NDItXFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIERQODM4NjkgR2lnYWJpdCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NDYtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDQ3OmNvbmZpZyBEUDgzVEQ1MTBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEQ1MTAgRXRoZXJuZXQgMTBCYXNlLVQxTCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NTItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDUzOmNvbmZpZyBEUDgzVEc3MjBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEc3MjAgRXRoZXJuZXQgMTAwMEJhc2UtVDEgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY2LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ2Nzpjb25maWcgVklURVNTRV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NjgtXFx0dHJpc3RhdGUgXFxcIlZpdGVzc2UgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDMuMDM0NzIwODQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjY0MDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW11bGF0aW5nIGEgUEhZIC0gV2hlcmUgdG8gU3RhcnQ/KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHNpbXVsYXRlIGEgUEhZIGhlcmUuIEknbSB3b25kZXJpbmcsIGlzIHRoZXJlIGEgZ29vZCBhcHByb2FjaCBvciBhIHByZS1leGlzdGluZyBtZXRob2QgdG8gZW11bGF0ZSBhIHBoeXNpY2FsIGxheWVyIGRldmljZT8gTGV0IG1lIHRoaW5rLi4uIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBjb2RlIHJlbGF0ZWQgdG8gdGhpcy4gWWVzLCB0aGVyZSBpdCBpcyEgKmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyouIEV4Y2VsbGVudC4gVGhhdCdzIHByb2JhYmx5IG15IGJlc3Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbXkgZ29hbCBpcyB0byBlbXVsYXRlICphbnkqIFBIWSBJRC4gQ2FuIEkgbGV2ZXJhZ2UgdGhpcyBgZml4ZWRfcGh5YCBkcml2ZXIgdG8gYWNoaWV2ZSB0aGF0PyBJJ20gaG9waW5nIEkgY2FuIGNvbmZpZ3VyZSBpdCB0byBwcmVzZW50IGl0c2VsZiB3aXRoIGFuIGFyYml0cmFyeSBQSFkgSUQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoYXQgbW9kaWZpY2F0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbWVldCB0aGF0IGdvYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDYuNjE3MzY0MDg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMjExMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2c1tpXSkpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQyOlxcdFxcdFxcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldnNbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSsrKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcXHRcXHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlxcdFxcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjItXFx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIzMjM6XFx0XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzI0LVxcdG1kaW9idXNfdW5yZWdpc3RlcihtaWlfYnVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM9MTQzOT1pbnQgYmdtYWNfcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnBoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQyLVxcdFxcdC5saW5rID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz05Nz12b2lkIGJjbWdlbmV0X21paV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExNzpzdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE4Nj1zdGF0aWMgdm9pZCBiY21nZW5ldF9tb2NhX3BoeV9zZXR1cChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cXHRpZiAoYmNtZ2VuZXRfaGFzX21vY2FfbGlua19kZXQocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTg5OlxcdFxcdGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTkwOlxcdFxcdFxcdFxcdFxcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02Ni0vKiBGb3IgTkMtU0kgdG8gcmVnaXN0ZXIgYSBmaXhlZC1saW5rIHBoeSBkZXZpY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02OC1cXHQubGluayA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3ODA9c3RhdGljIHZvaWQgZnRnbWFjMTAwX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXFx0aWYgKHByaXYtXFx1MDAzZXVzZV9uY3NpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4MS1lcnJfcmVnaXN0ZXJfcGh5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4My1lcnJfcmVnaXN0ZXJfbmRldjpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVxcdFxcdFxcdG5ldGRldl9pbmZvKG5kZXYsIFxcXCJubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAwMzpcXHRcXHRcXHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDEzLVxcdFxcdFxcdGlmIChwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcXHRcXHRcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDE1LVxcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyMjg9ZmVjX2VuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQzLVxcdGlmICghZmVwLVxcdTAwM2VwaHlfbm9kZSBcXHUwMDI2XFx1MDAyNiBwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTQxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBnZmFyX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcXHQubmRvX2NoYW5nZV9jYXJyaWVyID0gZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE0My1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMjg9dm9pZCBoYmdfcGh5X3N0b3Aoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzM6c3RhdGljIHZvaWQgaGJnX2ZpeGVkX3BoeV91bmluaXQodm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzU6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIoKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjM4OnN0YXRpYyBpbnQgaGJnX2ZpeGVkX3BoeV9pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNDA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgaGJnX2ZpeGVkX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXFx0XFx0LmxpbmsgPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZoYmdfZml4ZWRfcGh5X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBoYmdfZml4ZWRfcGh5X3VuaW5pdCwgcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzUtXFx0aWYgKG1hYy1cXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI3NjpcXHRcXHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjc3LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxMy17XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDE0OlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxNS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpeGVkX2xpbmtfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDYwOlxcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIG5wKSk7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQ2ND12b2lkIG9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0NzI6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXFx0Kz0gZHA4M3RnNzIwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcXHRcXHQrPSBmaXhlZF9waHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcXHQrPSBpY3BsdXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozMTpcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMzLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzYtc3RhdGljIHN0cnVjdCBtaWlfYnVzICpmbWJfbWlpX2J1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcXHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyArIGFkZHIgOiBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQyLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDUtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cXHUwMDNlcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0NjpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz03NT1zdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODY6aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXFx0XFx0XFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjk1OlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05Ni1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwMy19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDY6c3RhdGljIHZvaWQgZml4ZWRfcGh5X2RlbChpbnQgcGh5X2FkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE1OlxcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXFx0ZG8ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjM6XFx0XFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI0LVxcdFxcdGlmIChhZGRyID09IE5VTV9GUClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI1LVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XFx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTQ2OlxcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVxcdGlmIChwaHlfYWRkciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1MTpcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVxcdGlmIChJU19FUlIocGh5KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTU6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Ni1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzgtXFx0XFx0LnNwZWVkXFx0PSBTUEVFRF8xMDAsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg2OnZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODktXFx0b2Zfbm9kZV9wdXQocGh5LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkwOlxcdGZpeGVkX3BoeV9kZWwocGh5LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTEtXFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM2MT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNjQ6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVxcdHVuc2lnbmVkIGxvbmcgKmxwYSA9IHN0YXRlLVxcdTAwM2VscF9hZHZlcnRpc2luZztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTQtICpcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTItICovXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNi1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjc6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMge1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtOC1cXHRpbnQgc3BlZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTE2PXN0cnVjdCBuZXRfZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0xOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRklYRURfUEhZKVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MTk6ZXh0ZXJuIGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI0OmV4dGVybiB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yNi1cXHRcXHRcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKixcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNDAtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDguNTMwNTgyNjc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzY5ODkwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUEhZIEVtdWxhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgc3VyZSBJJ20gdXNpbmcgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gYGZpeGVkX3BoeWAgaXMgZGVmaW5pdGVseSBub3QgdGhlIHdheSB0byBnbyBmb3IgdGhpczsgaXQncyBkZXNpZ25lZCBmb3IgZml4ZWQgbGlua3MsIG5vdCBlbXVsYXRpbmcgYXJiaXRyYXJ5IFBIWSBiZWhhdmlvci4gU28sIHNjcmF0Y2ggdGhhdCBpZGVhLiBJIG5lZWQgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIHRoZXJlPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtZGlvLW1vY2t1cGAsIGJ1dC4uLiB3YWl0LCBJJ3ZlIGFscmVhZHkgdHJpZWQgc2VhcmNoaW5nIGZvciB0aGF0LCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBkaWQgYSBwcmV0dHkgdGhvcm91Z2ggc2VhcmNoLCBzcGVjaWZpY2FsbHkgdXNpbmcgYG1kaW8uKm1vY2t1cGAgYW5kIGNhbWUgdXAgZW1wdHkuIFBlcmhhcHMgdGhlcmUncyBhbiBgbWRpby1ncGlvYCBkcml2ZXIgb3Igc29tZXRoaW5nIG9mIHRoYXQgbmF0dXJlPyBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgaW5zaWRlIHRoZSBgZHJpdmVycy9uZXQvbWRpby9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBleHBsb3JlIHRoZSBsYW5kc2NhcGUgb2YgTURJTyBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjUyLjQwNzU3MzY4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpX21kaW8uY1wiLFxuICAgIFwiZndub2RlX21kaW8uY1wiLFxuICAgIFwibWRpby1haXJvaGEuY1wiLFxuICAgIFwibWRpby1hc3BlZWQuY1wiLFxuICAgIFwibWRpby1iY20taXByb2MuY1wiLFxuICAgIFwibWRpby1iY20tdW5pbWFjLmNcIixcbiAgICBcIm1kaW8tYml0YmFuZy5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5oXCIsXG4gICAgXCJtZGlvLWdwaW8uY1wiLFxuICAgIFwibWRpby1oaXNpLWZlbWFjLmNcIixcbiAgICBcIm1kaW8taTJjLmNcIixcbiAgICBcIm1kaW8taXBxNDAxOS5jXCIsXG4gICAgXCJtZGlvLWlwcTgwNjQuY1wiLFxuICAgIFwibWRpby1tb3hhcnQuY1wiLFxuICAgIFwibWRpby1tc2NjLW1paW0uY1wiLFxuICAgIFwibWRpby1tdXgtYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbTYzNjguY1wiLFxuICAgIFwibWRpby1tdXgtZ3Bpby5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1nMTJhLmNcIixcbiAgICBcIm1kaW8tbXV4LW1lc29uLWd4bC5jXCIsXG4gICAgXCJtZGlvLW11eC1tbWlvcmVnLmNcIixcbiAgICBcIm1kaW8tbXV4LW11bHRpcGxleGVyLmNcIixcbiAgICBcIm1kaW8tbXV4LmNcIixcbiAgICBcIm1kaW8tbXZ1c2IuY1wiLFxuICAgIFwibWRpby1vY3Rlb24uY1wiLFxuICAgIFwibWRpby1waWM2NGhwc2MuY1wiLFxuICAgIFwibWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICAgIFwibWRpby1yZWdtYXAuY1wiLFxuICAgIFwibWRpby1zdW40aS5jXCIsXG4gICAgXCJtZGlvLXRodW5kZXIuY1wiLFxuICAgIFwibWRpby14Z2VuZS5jXCIsXG4gICAgXCJvZl9tZGlvLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NTIuNDA3NjU3MzY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njg1NTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgRW11bGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtZGlvLW12dXNiLmNgIHRoaW5nLi4uIG5vcGUsIHRoYXQncyBNYXJ2ZWxsIFVTQiBNRElPLiBOb3Qgd2hhdCBJIG5lZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgY29uanVyZSB1cCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgb3V0IG9mIHRoaW4gYWlyIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIncyBnb3QgdGhvc2UgYG5ldGxpbmtgIGFuZCBgZXRodG9vbGAgdG9vbHMgdG8gdGFsayB0byBleGlzdGluZyBQSFlzLCBidXQgSSBuZWVkIHRvIGhpdCBgcnRsODI2MXhfcHJvYmVgLCB3aGljaCBtZWFucyBJICphYnNvbHV0ZWx5KiBuZWVkIGEgUEhZIHdpdGggdGhlIElEIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KS4gQSBkaXJlY3QgaW5qZWN0aW9uIG9mIHRoZSBQSFkgSUQgd291bGQgYmUgaWRlYWwsIGJ1dCBpcyB0aGF0IGV2ZW4gcG9zc2libGU/XG5cbldhaXQgYSBtaW51dGUsIGlmIFN5emthbGxlciBjYW4gc3BpbiB1cCBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgYW5kIGhhdmUgaXQgcmVnaXN0ZXIgYW4gTURJTyBidXMuLi4gYW5kICppZiogSSBjYW4gY29udHJvbCB0aGUgcmVzcG9uc2VzIGZyb20gdGhhdCBNRElPIGJ1cy4uLiB0aGF0J3MgdGhlIHRpY2tldCEgU28sIHdoZXJlJ3MgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBkb2VzIHRoaXM/IExldCdzIHNlZS4uLiBgbWFjc2VjYD8gTm9wZS4gYHZldGhgPyBObyBNRElPLiBgZHVtbXlgLCBgdHVuYD8gTmFkYS4gT2theSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyBgbmV0ZGV2c2ltYCBoYXZlIGFuIE1ESU8gYnVzPyBUaGlzIGZlZWxzIGxpa2UgaXQncyBnZXR0aW5nIGNsb3NlLCBzbyB0aGF0J3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTo1OC4wNzYyMTkzNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTYyMzM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NTguMTMzNzg4OTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzkwNzM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgQWRhcHRlciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZXhwYW5kIHRoZSBmdXp6aW5nIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBVU0IgbmV0d29yayBhZGFwdGVyczsgc29tZSwgSSByZW1lbWJlciwgaW5jb3Jwb3JhdGUgTURJTyBidXNlcyBhbmQgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcyAoUEhZcykuIEFuZCB0aGVuIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZW11bGF0aW5nIFVTQiBkZXZpY2VzIHVzaW5nIGB2aGNpYC4gU28sIHRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBmb3IgU3l6a2FsbGVyIHRvIHNpbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciwgdGhpbmdzIGxpa2UgYHNtc2M5NXh4YCwgYHI4MTUyYCwgb3IgYGFzaXhgLCBmb3IgZXhhbXBsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgcmVnaXN0ZXJzLCBpdCBjb3VsZCBzdWJzZXF1ZW50bHkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM7IHRoYXQncyB3aGVyZSB0aGUgbmV4dCBhdHRhY2sgc3VyZmFjZSBpcy4gVGhlcmVmb3JlLCBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGByODE1MmAgZHJpdmVyIGxldmVyYWdlcyBQSFlMSUIuIFRoYXTigJlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowMi42MTI4NjQ3MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTQ3ODg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowMi42NzE4MTg4OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzOTQ1NDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqTURJT2J1cyBSZWdpc3RlcjogQSBRdWljayBTY2FuKipcblxuV2FpdCwgYG1kaW9idXNfcmVnaXN0ZXJgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoZXkncmUgdXNpbmc/IEludGVyZXN0aW5nLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFzc2VzcyB0aGUgY29udGV4dCBoZXJlLCB3aGF0IGtpbmQgb2YgTURJTyBidXMgYXJlIHRoZXkgd29ya2luZyB3aXRoPyBJcyB0aGlzIHN0YW5kYXJkIEV0aGVybmV0LCBzb21ldGhpbmcgcHJvcHJpZXRhcnksIG9yIGEgc3BlY2lhbGl6ZWQgdmFyaWFudD8gVGhlIGNob2ljZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgc3VnZ2VzdHMgdGhleSdyZSB0cnlpbmcgdG8gYWRkIGEgbmV3IE1ESU8gYnVzIGluc3RhbmNlIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIHR5cGljYWxseSBtZWFucyB0aGV5IGFyZSBlaXRoZXIgZGVhbGluZyB3aXRoIGEgbmV3IGhhcmR3YXJlIGRldmljZSwgb3IgZHluYW1pY2FsbHkgbWFuYWdpbmcgYW4gZXhpc3Rpbmcgb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYnVzIGlzIGRlc2lnbmVkIHRvIHRhbGsgdG8uIElzIGl0IGp1c3QgUEhZcywgb3IgYXJlIHRoZXJlIG90aGVyIE1ESU8tY29tcGF0aWJsZSBjb21wb25lbnRzIGluIHRoZSBtaXg/IFRoaXMgcmVnaXN0cmF0aW9uIHBvaW50IGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGtleSB0byBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBjb21lIHRvIG1pbmQ6IHdoYXQgaXMgaXRzIGRyaXZlciBhbmQgcGxhdGZvcm0gZGF0YT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowNS45MTEyNzU3MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mjk5NDQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA3MD1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MDYuMjc0Mjc4MTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMjM5OTg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBNYW5pcHVsYXRpb24gdGhyb3VnaCBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBpZGVhIGJyZXdpbmcuLi4gSSBzZWUgdGhhdCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIGBheDg4MTcyYWAsIGFuZCBgYXNpeF9kZXZpY2VzYCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIEludGVyZXN0aW5nISBJZiBJIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gZW11bGF0ZSBvbmUgb2YgdGhlc2UgVVNCIGRldmljZXMgdXNpbmcgYHZoY2lgLCBJIGNhbiBpbnRlcmNlcHQgdGhlIFVTQiBjb250cm9sIHRyYW5zZmVycyBpbnZvbHZlZCBpbiByZWFkaW5nIGFuZCB3cml0aW5nIE1ESU8gcmVnaXN0ZXJzLiBUaGUga2V5IGlzIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy5cblxuSGFuZyBvbi4uLiBpZiBJIGZvY3VzIG9uIGVtdWxhdGluZyBgc21zYzk1eHhgLCB0aGUgYHNtc2M5NXh4YCBkcml2ZXIgd2lsbCB0cnkgdG8gZ2V0IHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMgdGhyb3VnaCBVU0IgY29udHJvbCBtZXNzYWdlcy4gQnJpbGxpYW50ISBJIGNhbiBoYXZlIHN5emthbGxlciByZXNwb25kIHRvIHRoaXMgd2l0aCB0aGUgUEhZIElEIG9mIGBSVExfODI2MUNfQ0dgLCB3aGljaCBpcyBgMHgwMDFjYzg5OGAuXG5cblRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IHRoZSBQSFkgc3Vic3lzdGVtICpzaG91bGQqIHRoZW4gcGljayB1cCBvbiB0aGlzIElELCBsb2FkIHRoZSBgcmVhbHRla2AgUEhZIGRyaXZlciwgYW5kIHVsdGltYXRlbHkgY2FsbCBgcnRsODI2MXhfcHJvYmVgLiBUaGlzIG9wZW5zIHVwIGEgcG90ZW50aWFsIHRlc3RpbmcgdmVjdG9yLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzbXNjOTV4eGAgZG9lc24ndCBoYXZlIHNvbWUga2luZCBvZiBzYW5pdHkgY2hlY2sgb24gdGhlIFBIWSBJRCBpdCByZWNlaXZlcywgdGhvdWdoLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgdmVyaWZ5IGlmIGl0IGFsbG93cyBhcmJpdHJhcnkgUEhZIElEcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzM4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjExLjU3NjY4MTc0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDc6XFx0c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTE0ODpcXHR7XFxuMTE0OTpcXHRcXHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XFxuMTE1MDpcXHRcXHRjaGFyIHVzYl9wYXRoWzY0XTtcXG4xMTUxOlxcdFxcdGludCByZXQsIHBoeV9pcnE7XFxuMTE1MjpcXHRcXHR1MzIgdmFsO1xcbjExNTM6XFx0XFxuMTE1NDpcXHRcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbjExNTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMTU2OlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwidXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTU3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1ODpcXHRcXHR9XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG4xMTYxOlxcdFxcdGlmICghcGRhdGEpXFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHBkYXRhO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGRhdGEtXFx1MDAzZW1hY19jcl9sb2NrKTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0LyogTEFOOTV4eCBkZXZpY2VzIGRvIG5vdCBhbHRlciB0aGUgY29tcHV0ZWQgY2hlY2tzdW0gb2YgMCB0byAweGZmZmYuXFxuMTE2OTpcXHRcXHQgKiBSRkMgMjQ2MCwgaXB2NiBVRFAgY2FsY3VsYXRlZCBjaGVja3N1bSB5aWVsZHMgYSByZXN1bHQgb2YgemVybyBtdXN0XFxuMTE3MDpcXHRcXHQgKiBiZSBjaGFuZ2VkIHRvIDB4ZmZmZi4gUkZDIDc2OCwgaXB2NCBVRFAgY29tcHV0ZWQgY2hlY2tzdW0gaXMgemVybyxcXG4xMTcxOlxcdFxcdCAqIGl0IGlzIHRyYW5zbWl0dGVkIGFzIGFsbCBvbmVzLiBUaGUgemVybyB0cmFuc21pdHRlZCBjaGVja3N1bSBtZWFuc1xcbjExNzI6XFx0XFx0ICogdHJhbnNtaXR0ZXIgZ2VuZXJhdGVkIG5vIGNoZWNrc3VtLiBIZW5jZSwgZW5hYmxlIGNzdW0gb2ZmbG9hZCBvbmx5XFxuMTE3MzpcXHRcXHQgKiBmb3IgaXB2NCBwYWNrZXRzLlxcbjExNzQ6XFx0XFx0ICovXFxuMTE3NTpcXHRcXHRpZiAoREVGQVVMVF9UWF9DU1VNX0VOQUJMRSlcXG4xMTc2OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07XFxuMTE3NzpcXHRcXHRpZiAoREVGQVVMVF9SWF9DU1VNX0VOQUJMRSlcXG4xMTc4OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTtcXG4xMTc5OlxcdFxcbjExODA6XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07XFxuMTE4MTpcXHRcXHRzZXRfYml0KEVWRU5UX05PX0lQX0FMSUdOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHNtc2M5NXh4X2luaXRfbWFjX2FkZHJlc3MoZGV2KTtcXG4xMTg0OlxcdFxcbjExODU6XFx0XFx0LyogSW5pdCBhbGwgcmVnaXN0ZXJzICovXFxuMTE4NjpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZXNldChkZXYpO1xcbjExODc6XFx0XFx0aWYgKHJldClcXG4xMTg4OlxcdFxcdFxcdGdvdG8gZnJlZV9wZGF0YTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogY3JlYXRlIGlycSBkb21haW4gZm9yIHVzZSBieSBQSFkgZHJpdmVyIGFuZCBHUElPIGNvbnN1bWVycyAqL1xcbjExOTE6XFx0XFx0dXNiX21ha2VfcGF0aChkZXYtXFx1MDAzZXVkZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTtcXG4xMTkyOlxcdFxcdHBkYXRhLVxcdTAwM2VpcnFmd25vZGUgPSBpcnFfZG9tYWluX2FsbG9jX25hbWVkX2Z3bm9kZSh1c2JfcGF0aCk7XFxuMTE5MzpcXHRcXHRpZiAoIXBkYXRhLVxcdTAwM2VpcnFmd25vZGUpIHtcXG4xMTk0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTE5NTpcXHRcXHRcXHRnb3RvIGZyZWVfcGRhdGE7XFxuMTE5NjpcXHRcXHR9XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdHBkYXRhLVxcdTAwM2VpcnFkb21haW4gPSBpcnFfZG9tYWluX2NyZWF0ZV9saW5lYXIocGRhdGEtXFx1MDAzZWlycWZ3bm9kZSxcXG4xMTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTTVNDOTVYWF9OUl9JUlFTLFxcbjEyMDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpcnFfZG9tYWluX3NpbXBsZV9vcHMsXFxuMTIwMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGRhdGEpO1xcbjEyMDI6XFx0XFx0aWYgKCFwZGF0YS1cXHUwMDNlaXJxZG9tYWluKSB7XFxuMTIwMzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjEyMDQ6XFx0XFx0XFx0Z290byBmcmVlX2lycWZ3bm9kZTtcXG4xMjA1OlxcdFxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0XFx0cGh5X2lycSA9IGlycV9jcmVhdGVfbWFwcGluZyhwZGF0YS1cXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpO1xcbjEyMDg6XFx0XFx0aWYgKCFwaHlfaXJxKSB7XFxuMTIwOTpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjEyMTA6XFx0XFx0XFx0Z290byByZW1vdmVfaXJxZG9tYWluO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRcXHRwZGF0YS1cXHUwMDNlaXJxY2hpcCA9IGR1bW15X2lycV9jaGlwO1xcbjEyMTQ6XFx0XFx0cGRhdGEtXFx1MDAzZWlycWNoaXAubmFtZSA9IFNNU0NfQ0hJUE5BTUU7XFxuMTIxNTpcXHRcXHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShwaHlfaXJxLCBcXHUwMDI2cGRhdGEtXFx1MDAzZWlycWNoaXAsXFxuMTIxNjpcXHRcXHRcXHRcXHRcXHQgICAgICBoYW5kbGVfc2ltcGxlX2lycSwgXFxcInBoeVxcXCIpO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4xMjE5OlxcdFxcdGlmICghcGRhdGEtXFx1MDAzZW1kaW9idXMpIHtcXG4xMjIwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTIyMTpcXHRcXHRcXHRnb3RvIGRpc3Bvc2VfaXJxO1xcbjEyMjI6XFx0XFx0fVxcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgXFx1MDAyNnZhbCk7XFxuMTIyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjI2OlxcdFxcdFxcdGdvdG8gZnJlZV9tZGlvO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHRwZGF0YS1cXHUwMDNlaXNfaW50ZXJuYWxfcGh5ID0gISh2YWwgXFx1MDAyNiBIV19DRkdfUFNFTF8pO1xcbjEyMjk6XFx0XFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuMTIzMDpcXHRcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDF1IFxcdTAwM2NcXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XFxuMTIzMTpcXHRcXG4xMjMyOlxcdFxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbjEyMzM6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuMTIzNDpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcbjEyMzU6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlc2V0ID0gc21zYzk1eHhfbWRpb2J1c19yZXNldDtcXG4xMjM2OlxcdFxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcInNtc2M5NXh4LW1kaW9idXNcXFwiO1xcbjEyMzc6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldjtcXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0c25wcmludGYocGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCksXFxuMTI0MDpcXHRcXHRcXHQgXFxcInVzYi0lMDNkOiUwM2RcXFwiLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbjEyNDM6XFx0XFx0aWYgKHJldCkge1xcbjEyNDQ6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuMTI0NTpcXHRcXHRcXHRnb3RvIGZyZWVfbWRpbztcXG4xMjQ2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MTEuNTc2ODE1ODQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg4ODIwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBIWSBDb25maWd1cmF0aW9uIGZvciBTTVNDOTVYWCBEcml2ZXIqKlxuXG5Pa2F5LCB5ZXMsIHRoaXMgaXMgZ29vZC4gSWYgYEhXX0NGR19QU0VMX2AgaXMgZW5hYmxlZCwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZXJuYWwgUEhZLCBhbmQgdGhhdCBvcGVucyB1cCB0aGUgYHBoeV9tYXNrYCDigJMgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCByZXN0cmljdGlvbnMgdGhlcmUuIEV2ZW4gaWYgaXQgKmlzKiBhbiBpbnRlcm5hbCBQSFksIFN5emthbGxlciBjYW4gc3RpbGwgaGFuZCB1cyB0aGUgUEhZIElEIHRocm91Z2ggYFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRGAsIHdoaWNoIGlzIHByZWRpY3RhYmx5IDEuXG5cblJpZ2h0LCBzbyB3aGVuIGBtZGlvYnVzX3JlZ2lzdGVyYCBpcyBpbnZva2VkLCB0aGF0J3Mgd2hlbiB0aGUgUEhZIElEIHNjYW4gaGFwcGVucywgaXQncyBhbGwgYWJvdXQgcmVhZGluZyB0aG9zZSBJRHMuIEFuZCBzaW5jZSBTeXprYWxsZXIgY2FuIGludGVyY2VwdCB0aG9zZSBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZm9yIGBzbXNjOTV4eF9tZGlvYnVzX3JlYWRgLCB3ZSBjYW4gZmVlZCBpdCB0aGUgdmFsdWVzIGl0J3MgZXhwZWN0aW5nLiBMZXQncyBzZWUuLi4gZm9yIFBIWSBJRCAxLCB3ZSBjYW4gcmV0dXJuIGAweDAwMWNgLCBhbmQgYDB4Yzg5OGAgZm9yIElEIDIsIGFuZCBzbyBvbi5cblxuV2FpdCBhIHNlY29uZC4uLiBXaGF0J3MgdGhpcyBhYm91dCBgUlRMXzgyNjFDX0NHYD8gVGhhdCBsb29rcyBsaWtlIGEgQ2xhdXNlIDQ1IFBIWS4gVGhhdCBuZWVkcyB0byBiZSB2ZXJpZmllZC4gTGV0J3MgZGlnIGludG8gYHJlYWx0ZWtfbWFpbi5jYCBhbmQgc2VlIGlmIHRoZSBkcml2ZXIgY29ycmVjdGx5IGhhbmRsZXMgQ2xhdXNlIDIyIG9yIENsYXVzZSA0NSBhY2Nlc3Nlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIGFjY2VzcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBSVEwgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24uIEdvdHRhIGNvbmZpcm0gdGhhdCB0aGUgZHJpdmVyIGtub3dzIGhvdyB0byB0YWxrIHRvIHRoaXMgUEhZLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjE2Ljk1NTY5OTc4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxMzk1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRMXzgyNjFDX0NHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI1OS0jZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA3ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkxLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozMzkyOlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTMzOTMtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjoxNy4wMzI4NDQwNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0OTI4OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUEhZIElEIE1hdGNoaW5nIGFuZCBDbGF1c2UgNDUgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBQSFlfSURfTUFUQ0hfRVhBQ1RgIG1lYW5zIGEgcHJlY2lzZSBQSFkgSUQgbWF0Y2gg4oCTIG5vdGhpbmcgYW1iaWd1b3VzIHRoZXJlLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gbmVjZXNzaXRhdGUgQ2xhdXNlIDQ1IHN1cHBvcnQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBSVExfODI2MUNfQ0dgIHV0aWxpemVzIENsYXVzZSA0NS4gVGhlIHBhdGNoIHN1Z2dlc3RzIGEgc3Ryb25nIGNvbm5lY3Rpb24sIGFzIGl0IGFkZHMgZnVuY3Rpb25zIGxpa2UgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kYCwgYW5kIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgIHRvIGl0cyBgcGh5X2RyaXZlcmAgc3RydWN0LiBGdXJ0aGVybW9yZSwgYHJ0bDgyNjF4X3Byb2JlYCBleHBsaWNpdGx5IGVtcGxveXMgYHBoeV93cml0ZV9tbWRgIGFuZCBgcGh5X3JlYWRfbW1kYCwgd2hpY2ggYXJlLCBieSBkZWZpbml0aW9uLCBDbGF1c2UgNDUgb3BlcmF0aW9ucy4gVGhhdCBmZWVscyBwcmV0dHkgZGVmaW5pdGl2ZS5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIHRob3NlIGNhbGxzICpzdWdnZXN0KiBDbGF1c2UgNDUsIEkgcmVjYWxsIHRoYXQgYHBoeV9yZWFkX21tZGAgaGFzIGEgYml0IG9mIGZsZXhpYmlsaXR5LiBJdCAqY291bGQqIG9wZXJhdGUgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzLCBwcm92aWRlZCB0aGUgUEhZIGhhcyB0aGUgY2FwYWJpbGl0eSwgb3IgZGlyZWN0bHkgdXNpbmcgQ2xhdXNlIDQ1IGlmIHRoZSBidXMgc3VwcG9ydHMgaXQuIEkgbmVlZCB0byBrZWVwIHRoZSBhbWJpZ3VpdHkgaW4gbWluZC5cblxuU28sICpkb2VzKiBgc21zYzk1eHhgIGhhdmUgQ2xhdXNlIDQ1IHN1cHBvcnQ/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgc21zYzk1eHhgIGhhbmRsZXMgaXRzIE1ESU8gYnVzIHJlYWRzLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjIyLjE4MjEzNzY3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIzNjpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDIzNzpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0RBVEFcXFxcblxcXCIpO1xcbiAyMzg6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMzk6XFx0XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXFxuIDI0MjpcXHRcXHRhZGRyID0gbWlpX2FkZHJlc3NfY21kKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEVfIHwgTUlJX0JVU1lfKTtcXG4gMjQzOlxcdFxcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcXG4gMjQ0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDI0NTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDI0NjpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0FERFJcXFxcblxcXCIpO1xcbiAyNDc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xcbiAyNTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjUyOlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiVGltZWQgb3V0IHdyaXRpbmcgTUlJIHJlZyAlMDJYXFxcXG5cXFwiLCBpZHgpO1xcbiAyNTM6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNTQ6XFx0XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRkb25lOlxcbiAyNTc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBoeV9tdXRleCk7XFxuIDI1ODpcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0c3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhO1xcbiAyNjM6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2O1xcbiAyNjQ6XFx0XFx0dTMyIHZhbDtcXG4gMjY1OlxcdFxcdGludCByZXQ7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGRldiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gMjY4OlxcdFxcdHBkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuIDI3MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIFBNX0NUUkwsIFxcdTAwMjZ2YWwpO1xcbiAyNzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI3NzpcXHRcXHRcXHRnb3RvIHJlc2V0X291dDtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0dmFsIHw9IFBNX0NUTF9QSFlfUlNUXztcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0cmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgUE1fQ1RSTCwgdmFsKTtcXG4gMjgyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyODM6XFx0XFx0XFx0Z290byByZXNldF9vdXQ7XFxuIDI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MjIuMTgyMjY2OTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTMxMTUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqVHJhY2luZyBhIE1pc3NpbmcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBmb3IgYHNtc2M5NXh4X21kaW9idXNfcmVhZGAsIGJ1dCBpdCdzIG5vdCBwb3BwaW5nIHVwIHdoZXJlIEkgZXhwZWN0ZWQuIFRoYXQncyB1bnVzdWFsLiBJdCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gQWxyaWdodCwgbm8gdGltZSB0byB3YXN0ZSDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEknbGwgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjI1LjA3NTM4NDI3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjI1MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtc2M5NXh4X21kaW9idXNfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yNjA9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTYtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6Mjk3OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMyLVxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzNC1cXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjoyNS4zMjE2MTQ3NzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjQxMzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNtc2M5NXh4X21kaW9idXNfcmVhZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBoYW5kbGluZyBNRElPIGJ1cyB0cmFuc2FjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgcmVhZCBvcGVyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGxvb2sgZm9yIHRoZSBrZXkgZWxlbWVudHM6IGhvdyBpcyB0aGUgTURJTyBhZGRyZXNzIGNvbmZpZ3VyZWQ/IFdoYXQncyB0aGUgdGltaW5nIGFuZCBzZXF1ZW5jZSBvZiBzaWduYWxzIGJlaW5nIGdlbmVyYXRlZD8gQXJlIHRoZXkgdXNpbmcgYW55IGhhcmR3YXJlIHNwZWNpZmljIHJlZ2lzdGVycyBvciBtYWNyb3M/IElzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgbGlrZSByZXRyaWVzIG9yIHRpbWVvdXQgbWVjaGFuaXNtcz8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhciB0cmFuc2xhdGlvbiBvZiB0aGUgc3RhbmRhcmQgTURJTyByZWFkIHByb3RvY29sIGludG8gdGhlIGNvZGUsIGFuZCBob3cgdGhleSBhcmUgYWNjb3VudGluZyBmb3IgdGhlIHNwZWNpZmljcyBvZiB0aGUgU01TQzk1eHggUEhZIGNoaXAuIEkgd2lsbCBleHBlY3QgYSBsb29wIGFuZCBhIHN0YXR1cyByZWFkLCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgcmVsaWFibGUgZGF0YSByZXRyaWV2YWwgZnJvbSB0aGUgUEhZLiBJIGFtIGxvb2tpbmcgZm9yIGVsZWdhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDYxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjI4LjU3NDAzMDYyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk3OlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuIDI5ODpcXHR7XFxuIDI5OTpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBidXMtXFx1MDAzZXByaXY7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdHJldHVybiBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIGlkeCk7XFxuIDMwMjpcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbiAzMDU6XFx0XFx0XFx0XFx0XFx0ICB1MTYgcmVndmFsKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRzbXNjOTV4eF9tZGlvX3dyaXRlKGRldiwgcGh5X2lkLCBpZHgsIHJlZ3ZhbCk7XFxuIDMxMDpcXHRcXHRyZXR1cm4gMDtcXG4gMzExOlxcdH1cXG4gMzEyOlxcdFxcbiAzMTM6XFx0c3RhdGljIGludCBfX211c3RfY2hlY2sgc21zYzk1eHhfd2FpdF9lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAzMTQ6XFx0e1xcbiAzMTU6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lID0gamlmZmllcztcXG4gMzE2OlxcdFxcdHUzMiB2YWw7XFxuIDMxNzpcXHRcXHRpbnQgcmV0O1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRkbyB7XFxuIDMyMDpcXHRcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEUyUF9DTUQsIFxcdTAwMjZ2YWwpO1xcbiAzMjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzIyOlxcdFxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiRXJyb3IgcmVhZGluZyBFMlBfQ01EXFxcXG5cXFwiKTtcXG4gMzIzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMyNDpcXHRcXHRcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdFxcdGlmICghKHZhbCBcXHUwMDI2IEUyUF9DTURfQlVTWV8pIHx8ICh2YWwgXFx1MDAyNiBFMlBfQ01EX1RJTUVPVVRfKSlcXG4gMzI3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0XFx0dWRlbGF5KDQwKTtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0X3RpbWUgKyBIWikpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodmFsIFxcdTAwMjYgKEUyUF9DTURfVElNRU9VVF8gfCBFMlBfQ01EX0JVU1lfKSkge1xcbiAzMzI6XFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LVxcdTAwM2VuZXQsIFxcXCJFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dFxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0cmV0dXJuIDA7XFxuIDMzNzpcXHR9XFxuIDMzODpcXHRcXG4gMzM5OlxcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X2VlcHJvbV9jb25maXJtX25vdF9idXN5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuIDM0MjpcXHRcXHR1MzIgdmFsO1xcbiAzNDM6XFx0XFx0aW50IHJldDtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0ZG8ge1xcbiAzNDY6XFx0XFx0XFx0cmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBFMlBfQ01ELCBcXHUwMDI2dmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MjguNTc0MTU2ODYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTEzMTIwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBzbXNjOTV4eF9tZGlvX3JlYWRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBzbXNjOTV4eF9tZGlvX3JlYWRgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBzb21lIHNvcnQgb2YgbG93LWxldmVsIGRyaXZlciBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgZnJvbSB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIG9yIFJlZHVjZWQgTUlJIChSTUlJKSBidXMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBjb25uZWN0aW5nIHRoZSBwaHlzaWNhbCBsYXllciAoUEhZKSB0byB0aGUgTUFDLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgZWZmaWNpZW5jeSBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhcmVmdWwgYml0IG1hbmlwdWxhdGlvbiBoZXJlLCBsaWtlbHkgdXNpbmcgZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gSSdkIGV4cGVjdCB0byBzZWUgdGhlIGZvbGxvd2luZzpcbiogICAqKkluaXRpYWxpemF0aW9uKio6IEkgbmVlZCB0byBrbm93IHRoZSBzdGF0ZSB0aGUgYnVzIGlzIGluaXRpYWxpemVkIHRvLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY29udHJvbGxlciBpcyBpbml0aWFsaXplZCBwcmlvciB0byByZWFkaW5nIG9yIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUuXG4qICAgKipBZGRyZXNzIFNlbGVjdGlvbioqOiBUaGUgTURJTyBpbnRlcmZhY2UgaXMgYmFzZWQgb24gc2VsZWN0aW5nIGFuIGFkZHJlc3MsIHNvIEknbSBleHBlY3RpbmcgdG8gc2VlIHNwZWNpZmljIGNvbW1hbmRzIG9yIGJpdCBwYXR0ZXJucyB0byBzZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCByZWdpc3RlciBhZGRyZXNzIHRoYXQgSSdtIGludGVyZXN0ZWQgaW4gcmVhZGluZy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgZW5jb2RlZC5cbiogICAqKlJlYWQgT3BlcmF0aW9uKio6IFRoZSBjb3JlIG9mIGl0LiBXaGF0IHByZWNpc2UgYml0IHNlcXVlbmNlIGlzIGJlaW5nIHNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIGluaXRpYXRlIGEgcmVhZD8gSXMgdGhlcmUgYSBzdGFydCBjb25kaXRpb24sIGEgdHVybmFyb3VuZCBwaGFzZSwgdGhlIGFkZHJlc3MgaXRzZWxmLCBhbmQgdGhlbiB0aGUgcmVhZCBkYXRhPyBXaGF0J3MgdGhlIHRpbWluZz8gSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBpbXBsZW1lbnRzIHRoZSBNRElPIHNwZWNpZmljYXRpb24uXG4qICAgKipEYXRhIFJldHJpZXZhbCoqOiBIb3cgaXMgdGhlIGRhdGEgYWN0dWFsbHkgZmV0Y2hlZD8gSXMgaXQgcG9sbGVkLCBvciBpcyB0aGVyZSBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGFueSB3YWl0IHN0YXRlcyBvciBkZWxheXMgaW52b2x2ZWQsIHRvIGFsbG93IHRoZSBQSFkgdGltZSB0byByZXNwb25kPyBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBwcmV2ZW50aW5nIGJ1cyBjb250ZW50aW9uLlxuKiAgICoqRXJyb3IgRGV0ZWN0aW9uKio6IEkgd2lsbCBiZSBsb29raW5nIGZvciBlcnJvciBjaGVja3MuIEhvdyBpcyBpdCBoYW5kbGVkIGlmIHRoZSBQSFkgZG9lc24ndCByZXNwb25kPyBXaGF0IGFib3V0IHBhcml0eSBlcnJvcnMgb3Igb3RoZXIgY29tbXVuaWNhdGlvbiBmYWlsdXJlcz8gQXJlIHRoZXJlIHRpbWVvdXRzIGltcGxlbWVudGVkPyBXaGF0IGFib3V0IHJldHJpZXM/XG4qICAgKipTeW5jaHJvbml6YXRpb24qKjogSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cyBiZXR3ZWVuIHRoZSBNQUMgYW5kIFBIWS4gSXMgdGhlcmUgYSBuZWVkIGZvciBhIGxvY2sgb3IgbXV0ZXggdG8gcHJldmVudCBtdWx0aXBsZSBhY2Nlc3NlcyBhdCB0aGUgc2FtZSB0aW1lPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHJlcXVpcmVtZW50cyBmb3IgYnVzIHRpbWluZyBhbmQgY2xvY2sgc3BlZWRzP1xuXG5BbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBvdmVyYWxsIGRlc2lnbi4uLiBpcyBpdCBtb2R1bGFyPyBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2xlYXJseSBuYW1lZD8gQ2FuIEkgZWFzaWx5IHRyYWNlIHRoZSBkYXRhIGZsb3c/IEFuZCwgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gd29yayBwcm9wZXJseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQ/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBpbXBvcnRhbnQsIGJ1dCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBpcyB2aXRhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2MTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjMzLjgyNTQ3MDU2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDY5NjM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbXNjOTV4eF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yOTc9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTMwMC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzozMDE6XFx0cmV0dXJuIHNtc2M5NXh4X21kaW9fcmVhZChkZXYsIHBoeV9pZCwgaWR4KTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTM1MT1zdGF0aWMgaW50IHNtc2M5NXh4X2xpbmtfb2soc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1Ni1cXHQvKiBmaXJzdCwgYSBkdW1teSByZWFkLCBuZWVkZWQgdG8gbGF0Y2ggc29tZSBNSUkgcGh5cyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzNTc6XFx0cmV0ID0gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGRhdGEtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzNjAtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTM2MTpcXHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTQwNz1zdGF0aWMgaW50IHNtc2M5NXh4X2VudGVyX3N1c3BlbmQxKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjAtXFx0LyogZW5hYmxlIGVuZXJneSBkZXRlY3QgcG93ZXItZG93biBtb2RlICovXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTQyMTpcXHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIFBIWV9NT0RFX0NUUkxfU1RTKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNDIyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozNS4xOTAxNzU3NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTAxODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHNtc2M5NXh4X21kaW9fcmVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc21zYzk1eHhfbWRpb19yZWFkYCBmdW5jdGlvbi4gSSBzZWUgaXQncyBhYm91dCByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggdGhlIFBIWSBvZiBhbiBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0IOKAkyBgc21zYzk1eHhgIGNsZWFybHkgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGZhbWlseSwgYG1kaW9gIHBvaW50cyB0byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLCBhbmQgYHJlYWRgIGluZGljYXRlcyB0aGUgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIE1ESU8gY29tbXVuaWNhdGlvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBpbnZvbHZpbmcgY2xvY2tpbmcgdGhlIE1ESU8gc2lnbmFscyAoTURDIGFuZCBNRElPKSwgcG90ZW50aWFsbHkgdXNpbmcgYml0LWJhbmdpbmcgb3IgYSBkZWRpY2F0ZWQgaGFyZHdhcmUgaW50ZXJmYWNlIGlmIGl0J3MgYXZhaWxhYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJuczogc2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIEkgd2FudCB0byByZWFkLCBpc3N1aW5nIGEgcmVhZCBjb21tYW5kLCB3YWl0aW5nIGZvciB0aGUgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQgdGhlbiByZXRyaWV2aW5nIGl0LlxuXG5JJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuIE1ESU8gaXMgYSBzZXJpYWwgcHJvdG9jb2wsIGFuZCB0aGVyZSBhcmUgbWluaW11bSBhbmQgbWF4aW11bSBjbG9jayBjeWNsZSByZXF1aXJlbWVudHMgZm9yIHZhcmlvdXMgcGhhc2VzIChsaWtlIHByZWFtYmxlLCBzdGFydCwgdHVybmFyb3VuZCwgYW5kIGRhdGEpLiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGRlbGF5cyBvciB0aW1pbmcgbG9vcHMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHByb3BlciBvcGVyYXRpb24uXG5cbkJleW9uZCB0aGUgTURJTyBzcGVjaWZpY3MsIEknbSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW11bmljYXRpb24gZmFpbHM/IElzIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc20/IEFyZSBwb3RlbnRpYWwgaGFyZHdhcmUgb3Igc29mdHdhcmUgaXNzdWVzIGhhbmRsZWQgZ3JhY2VmdWxseT8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzc2VzIHdpbGwgYmUgcXVpY2tseSBub3RlZC5cblxuRmluYWxseSwgSSdsbCBiZSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gV2hhdCdzIHRoZSByZXR1cm5lZCB2YWx1ZT8gSXMgdGhlcmUgYW55IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBpbnZvbHZlZCwgb3IgaXMgdGhpcyB0aGUgZnVuZGFtZW50YWwgTURJTyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBkcml2ZXI/IEknbSBob3BpbmcgaXQgY29uZm9ybXMgdG8gdGhlIHN0YW5kYXJkIE1ESU8gaW50ZXJmYWNlIHN0cnVjdHVyZSBvciBhdCBsZWFzdCBpcyBkb2N1bWVudGVkIHdlbGwuIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozOS42NDkxOTcwNDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MTpcXHRzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9fcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHR1MzIgdmFsLCBhZGRyO1xcbiAxNzQ6XFx0XFx0aW50IHJldDtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbiAxNzk6XFx0XFx0cmV0ID0gc21zYzk1eHhfcGh5X3dhaXRfbm90X2J1c3koZGV2KTtcXG4gMTgwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4MTpcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIiVzOiBNSUkgaXMgYnVzeVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAxODI6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxODM6XFx0XFx0fVxcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xcbiAxODY6XFx0XFx0YWRkciA9IG1paV9hZGRyZXNzX2NtZChwaHlfaWQsIGlkeCwgTUlJX1JFQURfIHwgTUlJX0JVU1lfKTtcXG4gMTg3OlxcdFxcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcXG4gMTg4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4OTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDE5MDpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0FERFJcXFxcblxcXCIpO1xcbiAxOTE6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xcbiAxOTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTk2OlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiVGltZWQgb3V0IHJlYWRpbmcgTUlJIHJlZyAlMDJYXFxcXG5cXFwiLCBpZHgpO1xcbiAxOTc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxOTg6XFx0XFx0fVxcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIE1JSV9EQVRBLCBcXHUwMDI2dmFsKTtcXG4gMjAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIwMjpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDIwMzpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHJlYWRpbmcgTUlJX0RBVEFcXFxcblxcXCIpO1xcbiAyMDQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMDU6XFx0XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRyZXQgPSAodTE2KSh2YWwgXFx1MDAyNiAweEZGRkYpO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRkb25lOlxcbiAyMTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBoeV9tdXRleCk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdC8qIElnbm9yZSAtRU5PREVWIGVycm9yIGR1cmluZyBkaXNjb25uZWN0KCkgKi9cXG4gMjEzOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4gMjE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMTU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE2OlxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXFxuIDIxOTpcXHRcXHRcXHRcXHRcXHRpbnQgcmVndmFsKVxcbiAyMjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozOS42NDkzMzU3MDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1MjQ3NzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBIWSBBY2Nlc3MgTWV0aG9kKipcblxuT2theSwgc28gSSBzZWUgYGlkeGAgYmVpbmcgcGFzc2VkIHRvIGBtaWlfYWRkcmVzc19jbWRgLiBUaGF0IGZ1bmN0aW9uIGlzOlxuXG5gYGBjXG5zdGF0aWMgdTMyIG1paV9hZGRyZXNzX2NtZChpbnQgcGh5X2lkLCBpbnQgaWR4LCB1MTYgb3ApXG57XG5cdHJldHVybiAocGh5X2lkIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgMTEgfCAoaWR4IFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgNiB8IG9wO1xufVxuYGBgXG5cblJpZ2h0LCB0aGUga2V5IGhlcmUgaXMgYGlkeGAgYmVpbmcgYml0d2lzZSBBTkRlZCB3aXRoIGAweDFmYC4gVGhhdCBnaXZlcyBpdCBhd2F5IGltbWVkaWF0ZWx5IC0gdGhpcyBpcyBhIENsYXVzZSAyMiBNRElPIGJ1cyBhY2Nlc3MhIEJ1dCB3YWl0LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBDbGF1c2UgMjIgYnVzLCBjYW4gd2Ugc3RpbGwgdGFsayB0byBhIENsYXVzZSA0NSBQSFk/XG5cblllcywgd2UgY2FuLCBidXQgaXQgcmVxdWlyZXMgaW5kaXJlY3QgYWNjZXNzLiBXZeKAmWQgbmVlZCB0byB1c2UgcmVnaXN0ZXJzIDEzIGFuZCAxNCB0byBzcGVjaWZ5IHRoZSBNTUQgKE1hbmFnZW1lbnQgTW9kdWxlIERldmljZSkgYW5kIHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzcy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyB0aGUgUEhZIHN1YnN5c3RlbSBpbnRlbGxpZ2VudGx5IGhhbmRsZSB0aGlzPyBJZiB0aGUgYnVzICpkb2Vzbid0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NSwgd2lsbCBpdCBhdXRvbWF0aWNhbGx5IGRlZmF1bHQgdG8gaW5kaXJlY3QgYWNjZXNzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIENsYXVzZSA0NSBQSFk/XG5cblRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY2AuIExldCdzIHNlZSBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHRoZSBjb3JyZWN0IGFjY2VzcyBtZXRob2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NDYuOTAxODE0Nzk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI0NTg2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlYWRfbW1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ1Nz1FWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3dyaXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NjA6ICogX19waHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDYxLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2ODppbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzgtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgzLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ5MDppbnQgcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk0LVxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk2LVxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy01MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy02MzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mjo0Ny4yOTQyODI5MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MjMxNjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgYnkgbW9zdCBvdGhlciBtb2R1bGVzLiBJdCdzIGEgbG93LWxldmVsLCBjcml0aWNhbCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlIFwiTU1EXCIgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCdzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFuZCB3aGF0IGlzIGl0IHJldHVybmluZyBhbmQgd2hhdCBraW5kIG9mIGVycm9yLWhhbmRsaW5nIGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NDUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NTIuNTQ2NjAxOTk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2ODpcXHRpbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0aWYgKHJlZ251bSBcXHUwMDNlICh1MTYpfjAgfHwgZGV2YWQgXFx1MDAzZSAzMilcXG4gNDcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXJlYWRfbW1kKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VyZWFkX21tZChwaHlkZXYsIGRldmFkLCByZWdudW0pO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdEVYUE9SVF9TWU1CT0woX19waHlfcmVhZF9tbWQpO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKipcXG4gNDgyOlxcdCAqIHBoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcXG4gNDgzOlxcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbiA0ODQ6XFx0ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQ4NTpcXHQgKiBAZGV2YWQ6IFRoZSBNTUQgdG8gcmVhZCBmcm9tXFxuIDQ4NjpcXHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXFxuIDQ4NzpcXHQgKlxcbiA0ODg6XFx0ICogU2FtZSBydWxlcyBhcyBmb3IgcGh5X3JlYWQoKTtcXG4gNDg5OlxcdCAqL1xcbiA0OTA6XFx0aW50IHBoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRpbnQgcmV0O1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbiA0OTU6XFx0XFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDk2OlxcdFxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDk5OlxcdH1cXG4gNTAwOlxcdEVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0LyoqXFxuIDUwMzpcXHQgKiBfX3BoeV93cml0ZV9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyXFxuIDUwNDpcXHQgKiBvbiBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXFxuIDUwNTpcXHQgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcXG4gNTA2OlxcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cXG4gNTA3OlxcdCAqIEByZWdudW06IFRoZSByZWdpc3RlciBvbiB0aGUgTU1EIHRvIHJlYWRcXG4gNTA4OlxcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlIHRvIEByZWdudW1cXG4gNTA5OlxcdCAqXFxuIDUxMDpcXHQgKiBTYW1lIHJ1bGVzIGFzIGZvciBfX3BoeV93cml0ZSgpO1xcbiA1MTE6XFx0ICovXFxuIDUxMjpcXHRpbnQgX19waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcXG4gNTEzOlxcdHtcXG4gNTE0OlxcdFxcdGlmIChyZWdudW0gXFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFxcdTAwM2UgMzIpXFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTE2OlxcdFxcbiA1MTc6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2V3cml0ZV9tbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjUyLjU0NjY5ODMzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMxNjM1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGBtbWRfcGh5X3JlYWRgIGFuZCBpdHMgaW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGZ1bmN0aW9uLCBgbW1kX3BoeV9yZWFkYCwgYmVjYXVzZSBJJ20gYmV0dGluZyBpdCdzIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIFBIWSBvcGVyYXRlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgaXQgaGFuZGxlcyB0aGUgTU1EIChNYW5hZ2VtZW50IE1vZGUgRGV2aWNlKSBpbnRlcmZhY2UuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHJlYWRpbmcgZGF0YSBmcm9tIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHRoZXNlIGFyZW4ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBNRElPIGFkZHJlc3Mgc3BhY2UuIFRoZSB0ZXJtIFwiTU1EXCIgaXRzZWxmIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBpZGVudGlmeSB0aGVzZSBQSFktaW50ZXJuYWwgcmVnaXN0ZXJzLlxuXG5J4oCZbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gV2hhdCdzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQgc2V0LCBvciBkb2VzIGl0IGNvbmZvcm0gdG8gYSBtb3JlIGdlbmVyaWMgc3BlY2lmaWNhdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGhpbnRzIHJlZ2FyZGluZyB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUg4oCTIGhvdyB0aGUgTU1EIGFkZHJlc3MgYW5kIHRoZSBzdWItYWRkcmVzcy9yZWdpc3RlciB3aXRoaW4gdGhhdCBNTUQgYXJlIGhhbmRsZWQuIFRoZSBrZXkgd2lsbCBiZSB0byBkZXRlcm1pbmUgaWYgaXQncyBhIGRpcmVjdCByZWdpc3RlciByZWFkLCBvciBpZiBpdCByZXF1aXJlcyBhIHR3by1zdGVwIHdyaXRlL3JlYWQgc2VxdWVuY2UgZm9yIGFjY2Vzc2luZyBzb21lIHJlZ2lzdGVycy4gQWxzbywgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBjcml0aWNhbCBoZXJlOyBob3cgaXMgaXQgcGFzc2VkIHRoZSBNTUQgbnVtYmVyLCB0aGUgcmVnaXN0ZXIgbnVtYmVyLCBhbmQgdGhlIHJlc3VsdD8gQXJlIHRoZXkgcGFzc2VkIGFzIGFyZ3VtZW50cyBvciBwYXJ0IG9mIGEgc3RydWN0dXJlP1xuXG5JJ20gbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgdG8gb3RoZXIgUEhZIHJlYWQgZnVuY3Rpb25zIEkndmUgd29ya2VkIHdpdGguIEFyZSB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcz8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHBvdGVudGlhbCBidXMgY29udGVudGlvbiBvciB0aW1lb3V0IHNjZW5hcmlvcz8gSSdtIGhvcGluZyBpdCdzIGRlc2lnbmVkIHdpdGggc29tZSBsZXZlbCBvZiByb2J1c3RuZXNzLCBwYXJ0aWN1bGFybHkgaWYgaXQncyBpbnRlcmFjdGluZyB3aXRoIGEgcG90ZW50aWFsbHkgbm9pc3kgcGh5c2ljYWwgaW50ZXJmYWNlLiBJJ20gYWxzbyBhc2tpbmcgbXlzZWxmIHF1ZXN0aW9ucyBsaWtlOiBEb2VzIGl0IHJldHVybiBhIHN0YXR1cyBjb2RlIG9yIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmU/IERvZXMgaXQgaGF2ZSBhbnkgcmV0cnkgbG9naWMgYnVpbHQgaW4/IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgaXRzZWxmLCB3aGljaCBjYW4gaW1wYWN0IHRoaXMgcmVhZGluZyBwcm9jZXNzLlxuXG5NeSBtYWluIGZvY3VzIGlzIHRvIGVuc3VyZSB0aGF0IEkga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBhcHByb3ByaWF0ZSBtZWFuaW5nIHdpdGhpbiB0aGUgUEhZJ3MgY29udGV4dC4gSSBtdXN0IGVuc3VyZSB0aGUgcmVnaXN0ZXIgdmFsdWUgaXMgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhpcyBQSFkgb3IgYXQgbGVhc3QgYSBzaW1pbGFyIG9uZSB0byBmaW5kIG91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQuIFVuZGVyc3RhbmRpbmcgdGhhdCBpcyBnb2luZyB0byBiZSB0aGUgbHluY2hwaW4gZm9yIGFueSBtZWFuaW5nZnVsIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NTguNjc4MzM1MzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTAyMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbWRfcGh5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDIxPXN0YXRpYyB2b2lkIG1tZF9waHlfaW5kaXJlY3Qoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgZGV2YWQsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzQtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDM1OmludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzYtXFx0XFx0IGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDY4PWludCBfX3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDc2OlxcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc3LVxcdFxcdFxcdCAgICBwaHlkZXYtXFx1MDAzZWlzX2M0NSwgZGV2YWQsIHJlZ251bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjU4LjczNzM2MDg2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc1NjI4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXIgYW5kIGFwcHJvYWNoaW5nIGEgc3BlY2lmaWMgY29kZSBmdW5jdGlvbjpcblxuKipBbmFseXppbmcgYG1tZF9waHlfcmVhZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbW1kX3BoeV9yZWFkYC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgdGhpcyBpbXBsaWVzIGEgcmVhZCBvcGVyYXRpb24sIGxpa2VseSBpbnZvbHZpbmcgYSBNZWRpYS1JbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgTWFuYWdlbWVudCBEYXRhIChNTUQpIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRldmljZS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhleSBoYW5kbGUgdGhlIHJlYWRpbmcgYW5kIHJldHJpZXZpbmcgb2YgZGF0YSBmcm9tIGEgUEhZIHZpYSBNTUQuXCIgSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSByZWFkIGN5Y2xlIGlzIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgaXQgaW50ZW5kcyB0byB0YXJnZXQsIHRoZSBiaXQgbWFuaXB1bGF0aW9uIG9mIHRoZSByZWFkIGFuZCB3cml0ZSBjb21tYW5kcywgYW5kIGRhdGEgdHJhbnNtaXNzaW9uLiBcIklzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZz9cIiBpcyBhIGtleSBxdWVzdGlvbiBpbiB0aGlzIGFyZWEuIEknbGwgYmUgZm9jdXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1pbmcgY29uc3RyYWludHMsIGFja25vd2xlZGdlIHNpZ25hbHMsIGFuZCBhbnkgcG90ZW50aWFsIHJldHJ5IG1lY2hhbmlzbXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgZmxvdywgYW55IGRlcGVuZGVuY2llcyBvbiBoYXJkd2FyZSBvciBvdGhlciBtb2R1bGVzLCBhbmQgdGhlIGdlbmVyYWwgd2F5IHRoZSBNTUQgUEhZIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQuIFRoaXMgc2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIG9uZSB0byB1bnBhY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDIuMTEyOTkyNTM5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzNTpcXHRpbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXFxuIDQzNjpcXHRcXHRcXHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Mzc6XFx0e1xcbiA0Mzg6XFx0XFx0aWYgKGlzX2M0NSlcXG4gNDM5OlxcdFxcdFxcdHJldHVybiBfX21kaW9idXNfYzQ1X3JlYWQoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdG1tZF9waHlfaW5kaXJlY3QoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuIDQ0MjpcXHRcXHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xcbiA0NDM6XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIE1JSV9NTURfREFUQSk7XFxuIDQ0NDpcXHR9XFxuIDQ0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRpbnQgbW1kX3BoeV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxcbiA0NDg6XFx0XFx0XFx0ICBpbnQgZGV2YWQsIHUzMiByZWdudW0sIHUxNiB2YWwpXFxuIDQ0OTpcXHR7XFxuIDQ1MDpcXHRcXHRpZiAoaXNfYzQ1KVxcbiA0NTE6XFx0XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSwgdmFsKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDU0OlxcdFxcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDIuMTEzMDkwMTY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzk0NDUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGxvZ2ljIGFuZCBpdCBzZWVtcyB0aGF0IGlmIGBpc19jNDVgIGlzICpmYWxzZSosIHRoZSBjb2RlIGlzIGdvaW5nIHRvIGJlIGFjY2Vzc2luZyByZWdpc3RlcnMgMTMgYW5kIDE0IHVzaW5nIGluZGlyZWN0IGFjY2Vzcywgd2hpY2ggYWxpZ25zIHdpdGggQ2xhdXNlIDIyIFBIWSBhY2Nlc3MsIG5hdHVyYWxseS4gTXkgY29uY2VybiBub3csIGFzIGl0IGFsd2F5cyBpcyB3aGVuIHNlZWluZyBhIGNvbmRpdGlvbmFsIGxpa2UgdGhpcywgaXMgaG93IHRoYXQgYm9vbGVhbiwgYGlzX2M0NWAsIGdldHMgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLCB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbi5cblxuUmlnaHQsIEkgcmVtZW1iZXIgbm93LCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLCBgZ2V0X3BoeV9kZXZpY2VgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgZGV2aWNlIGlkZW50aWZpY2F0aW9uIHVzdWFsbHkgaGFwcGVucy4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgYGlzX2M0NWAgZGV0ZXJtaW5hdGlvbiBoYXBwZW5zLiBTbyBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gYGdldF9waHlfZGV2aWNlYCBkZWZpbml0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxMzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjA2LjE5MjUzNzgyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4ODQyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9waHlfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDUwPUVYUE9SVF9TWU1CT0woZndub2RlX2dldF9waHlfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDUyLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA1MzogKiBnZXRfcGh5X2RldmljZSAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgUEhZIGRldmljZSBhbmQgcmV0dXJucyBpdHMgQHBoeV9kZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNTQtICpcXHRcXHQgICAgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNzAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDcxOnN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTAzOkVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDYuMzgxMzg0NTk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDU4NDU3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQW5hbHl6aW5nIGBnZXRfcGh5X2RldmljZWAqKlxuXG5BbHJpZ2h0LCBJIHNlZSB3ZSdyZSBsb29raW5nIGF0IGBnZXRfcGh5X2RldmljZWAuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHBhcnQgb2YgYSBkcml2ZXIsIGEgbmV0d29yayBzdGFjaywgYSBzeXN0ZW0gdXRpbGl0eT8gVGhlIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgZ2V0dGluZyB0aGlzIFwiUEhZIGRldmljZS5cIiBJcyBpdCBlbnVtZXJhdGluZyBoYXJkd2FyZSwgcXVlcnlpbmcgYSBjb25maWd1cmF0aW9uIGRhdGFiYXNlLCBvciBwZXJoYXBzIGFjY2Vzc2luZyBhIHBsYXRmb3JtLXNwZWNpZmljIEFQST8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbSBvZiBkZXZpY2UgZGlzY292ZXJ5IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHRoYXQncyBiZWluZyBlbXBsb3llZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlOiB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkPyBBcmUgdGhlcmUgZGV2aWNlIGlkZW50aWZpZXJzLCBhZGRyZXNzZXMsIG9yIHNvbWUgc29ydCBvZiBjb250ZXh0PyBUaGUgcmV0dXJuIHZhbHVlIGlzIGNydWNpYWwgdG9vLiBJcyBpdCByZXR1cm5pbmcgYSBwb2ludGVyLCBhIGhhbmRsZSwgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEhZPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgZXJyb3IgY29kZXM/IEEgcm9idXN0IGltcGxlbWVudGF0aW9uICpzaG91bGQqIGdyYWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBkZXZpY2UgaXNuJ3QgZm91bmQgb3IgYW4gZXJyb3Igb2NjdXJzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllczogSW52YWxpZCBhZGRyZXNzLCBkZXZpY2Ugbm90IHByZXNlbnQsIG5vIHBlcm1pc3Npb24sIGhhcmR3YXJlIGZhaWx1cmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbidzIGJvZHkgZm9yIGZsb3cgY29udHJvbCBhbmQgbG9naWMuIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGJlaW5nIGRlY2xhcmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRhdGEgdHlwZXMsIHNpbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGFuZCB0aGVyZSBjb3VsZCBiZSBpbXBvcnRhbnQgaW50ZXJhY3Rpb25zIGFuZCBzaGFyZWQgYWNjZXNzIGhhcHBlbmluZy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHJlc291cmNlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBob3cgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEFsc28sIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBpZiB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgYW5kIGlmIHRoZXJlIGNvdWxkIGJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcy5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uICpmaW5kcyogYW5kICpyZXR1cm5zKiBhIHBoeXNpY2FsIGxheWVyIGRldmljZSwgYW5kIHdoZXRoZXIgaXQncyBkb2luZyBzbyBpbiBhIHdheSB0aGF0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciByZWxpYWJpbGl0eSwgZWZmaWNpZW5jeSwgYW5kIHBvcnRhYmlsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBsb3ctbGV2ZWwgZGV2aWNlIGludGVyYWN0aW9ucy4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgY2FuIEkgbWFrZSBhIGp1ZGdtZW50IG9uIGl0cyBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjEyLjcyNzIzMjE4MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDcxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcxOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuMTA3MjpcXHR7XFxuMTA3MzpcXHRcXHRzdHJ1Y3QgcGh5X2M0NV9kZXZpY2VfaWRzIGM0NV9pZHM7XFxuMTA3NDpcXHRcXHR1MzIgcGh5X2lkID0gMDtcXG4xMDc1OlxcdFxcdGludCByO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRjNDVfaWRzLmRldmljZXNfaW5fcGFja2FnZSA9IDA7XFxuMTA3ODpcXHRcXHRjNDVfaWRzLm1tZHNfcHJlc2VudCA9IDA7XFxuMTA3OTpcXHRcXHRtZW1zZXQoYzQ1X2lkcy5kZXZpY2VfaWRzLCAweGZmLCBzaXplb2YoYzQ1X2lkcy5kZXZpY2VfaWRzKSk7XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdGlmIChpc19jNDUpXFxuMTA4MjpcXHRcXHRcXHRyID0gZ2V0X3BoeV9jNDVfaWRzKGJ1cywgYWRkciwgXFx1MDAyNmM0NV9pZHMpO1xcbjEwODM6XFx0XFx0ZWxzZVxcbjEwODQ6XFx0XFx0XFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXFx1MDAyNnBoeV9pZCk7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlmIChyKVxcbjEwODc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocik7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdC8qIFBIWSBkZXZpY2Ugc3VjaCBhcyB0aGUgTWFydmVsbCBBbGFza2EgODhFMjExMCB3aWxsIHJldHVybiBhIFBIWSBJRFxcbjEwOTA6XFx0XFx0ICogb2YgMCB3aGVuIHByb2JlZCB1c2luZyBnZXRfcGh5X2MyMl9pZCgpIHdpdGggbm8gZXJyb3IuIFByb2NlZWQgdG9cXG4xMDkxOlxcdFxcdCAqIHByb2JlIHdpdGggQzQ1IHRvIHNlZSBpZiB3ZSdyZSBhYmxlIHRvIGdldCBhIHZhbGlkIFBIWSBJRCBpbiB0aGUgQzQ1XFxuMTA5MjpcXHRcXHQgKiBzcGFjZSwgaWYgc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBDNDUgUEhZIGRldmljZS5cXG4xMDkzOlxcdFxcdCAqL1xcbjEwOTQ6XFx0XFx0aWYgKCFpc19jNDUgXFx1MDAyNlxcdTAwMjYgcGh5X2lkID09IDAgXFx1MDAyNlxcdTAwMjYgYnVzLVxcdTAwM2VyZWFkX2M0NSkge1xcbjEwOTU6XFx0XFx0XFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFxcdTAwMjZjNDVfaWRzKTtcXG4xMDk2OlxcdFxcdFxcdGlmICghcilcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG4xMDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlLCBcXHUwMDI2YzQ1X2lkcyk7XFxuMTA5OTpcXHRcXHR9XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcXHUwMDI2YzQ1X2lkcyk7XFxuMTEwMjpcXHR9XFxuMTEwMzpcXHRFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4xMTA0OlxcdFxcbjExMDU6XFx0LyoqXFxuMTEwNjpcXHQgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuMTEwNzpcXHQgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG4xMTA4OlxcdCAqL1xcbjExMDk6XFx0aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMTEwOlxcdHtcXG4xMTExOlxcdFxcdGludCBlcnI7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbjExMTQ6XFx0XFx0aWYgKGVycilcXG4xMTE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdC8qIERlYXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4xMTE4OlxcdFxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAwKTtcXG4xMTE5OlxcdFxcbjExMjA6XFx0XFx0LyogUnVuIGFsbCBvZiB0aGUgZml4dXBzIGZvciB0aGlzIFBIWSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzoxMi43Mjc0MDg3MTJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2Mzk4NDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gQnVzIFNjYW4qKlxuXG5Pa2F5LCBzbyB0aGUgYGdldF9waHlfZGV2aWNlYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQsIGFuZCBieSBkZWZhdWx0LCB0aGUgYGlzX2M0NWAgZmxhZyBpcyBzZXQgdG8gYGZhbHNlYCBkdXJpbmcgdGhpcyBNRElPIGJ1cyBzY2FuLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gU2luY2UgYGlzX2M0NWAgaXMgZmFsc2UsIHRoZSBjb2RlIGlzIGV4ZWN1dGluZyB0aGUgYGdldF9waHlfYzIyX2lkYCBmdW5jdGlvbi4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBnZXRfcGh5X2MyMl9pZGAgYW5kIGZpZ3VyZSBvdXQgaG93IGl0J3MgaGFuZGxpbmcgdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIE1ESU8gYnVzIHNjYW4gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxMDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjE2LjE5MTM5NTY0OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NDYyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9waHlfYzIyX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz05MDY9c3RhdGljIGludCBnZXRfcGh5X2M0NV9pZHMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5MS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjk5MjogKiBnZXRfcGh5X2MyMl9pZCAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgYWRkciBmb3IgaXRzIGNsYXVzZSAyMiBJRC5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5My0gKiBAYnVzOiB0aGUgdGFyZ2V0IE1JSSBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTAwMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwMDI6c3RhdGljIGludCBnZXRfcGh5X2MyMl9pZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyICpwaHlfaWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDgzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwODQ6XFx0XFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXFx1MDAyNnBoeV9pZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDg1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDg5LVxcdC8qIFBIWSBkZXZpY2Ugc3VjaCBhcyB0aGUgTWFydmVsbCBBbGFza2EgODhFMjExMCB3aWxsIHJldHVybiBhIFBIWSBJRFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5MDpcXHQgKiBvZiAwIHdoZW4gcHJvYmVkIHVzaW5nIGdldF9waHlfYzIyX2lkKCkgd2l0aCBubyBlcnJvci4gUHJvY2VlZCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5MS1cXHQgKiBwcm9iZSB3aXRoIEM0NSB0byBzZWUgaWYgd2UncmUgYWJsZSB0byBnZXQgYSB2YWxpZCBQSFkgSUQgaW4gdGhlIEM0NVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzoxNi4zODc4NjIxMjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MjkyODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBnZXRcXF9waHlcXF9jMjJcXF9pZCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBpZWNlIG9mIGNvZGUgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgbmFtZSwgYGdldF9waHlfYzIyX2lkYCwgc3VnZ2VzdHMgdGhhdCBpdCdzIHJldHJpZXZpbmcgYW4gaWRlbnRpZmllci4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHNvbWV0aGluZyBwaHlzaWNhbCAoYHBoeWApLCBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoIGEgQzIyIHN5c3RlbSBvciBjb21wb25lbnQuIFRoZSBcImdldFwiIHByZWZpeCBpcyBjbGVhcjsgaXQgaW1wbGllcyBhIHJldHJpZXZhbCBmdW5jdGlvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwdWxsaW5nIGEgdW5pcXVlIElEIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGEgcGllY2Ugb2YgY29uZmlndXJhdGlvbiBkYXRhLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjE5LjQ0MDc5MjgzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAyOlxcdHN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxcbjEwMDM6XFx0e1xcbjEwMDQ6XFx0XFx0aW50IHBoeV9yZWc7XFxuMTAwNTpcXHRcXG4xMDA2OlxcdFxcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjEsIGFuZCBwdXQgdGhlbSBpbiB0aGUgdXBwZXIgaGFsZiAqL1xcbjEwMDc6XFx0XFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQxKTtcXG4xMDA4OlxcdFxcdGlmIChwaHlfcmVnIFxcdTAwM2MgMCkge1xcbjEwMDk6XFx0XFx0XFx0LyogcmV0dXJuaW5nIC1FTk9ERVYgZG9lc24ndCBzdG9wIGJ1cyBzY2FubmluZyAqL1xcbjEwMTA6XFx0XFx0XFx0cmV0dXJuIChwaHlfcmVnID09IC1FSU8gfHwgcGh5X3JlZyA9PSAtRU5PREVWKSA/IC1FTk9ERVYgOiAtRUlPO1xcbjEwMTE6XFx0XFx0fVxcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHQqcGh5X2lkID0gcGh5X3JlZyBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0LyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMiwgYW5kIHB1dCB0aGVtIGluIHRoZSBsb3dlciBoYWxmICovXFxuMTAxNjpcXHRcXHRwaHlfcmVnID0gbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX1BIWVNJRDIpO1xcbjEwMTc6XFx0XFx0aWYgKHBoeV9yZWcgXFx1MDAzYyAwKSB7XFxuMTAxODpcXHRcXHRcXHQvKiByZXR1cm5pbmcgLUVOT0RFViBkb2Vzbid0IHN0b3AgYnVzIHNjYW5uaW5nICovXFxuMTAxOTpcXHRcXHRcXHRyZXR1cm4gKHBoeV9yZWcgPT0gLUVJTyB8fCBwaHlfcmVnID09IC1FTk9ERVYpID8gLUVOT0RFViA6IC1FSU87XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MTkuNDQxMDA1Njc3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTIwODU2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU3l6a2FsbGVyJ3MgVVNCIERldmljZSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9sbG93aW5nIHRoaXMgc3l6a2FsbGVyIGVtdWxhdGlvbiBwYXRoIGFuZCBpdCBzZWVtcyBwcmV0dHkgaW50ZXJlc3RpbmcuIElmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgdGhlIHN5c3RlbSdzIGVtdWxhdGluZyBhIFVTQiBkZXZpY2UsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSB0aGUgYHNtc2M5NXh4YC4gVGhlIGtleSBpcyB0aGF0IGl0J3MgZ29pbmcgdG8gaW50ZXJjZXB0IHRoZSBgbWRpb2J1c19yZWFkYCBjYWxscywgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgIHJlZ2lzdGVycy4gQnkgcmV0dXJuaW5nIGAweDAwMWNgIGFuZCBgMHhjODk4YCByZXNwZWN0aXZlbHksIHRoZSBjb2RlIGlzIGNvbnN0cnVjdGluZyB0aGF0IGBwaHlfaWRgIHRvIGJlIGAweDAwMWNjODk4YC5cblxuVGhpcyBsZWFkcyB0byB0aGUgY3J1Y2lhbCBgcGh5X2RldmljZV9jcmVhdGVgIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IGBpc19jNDVgIGlzIHNldCB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIHdpbGwgdXNlIGluZGlyZWN0IGFjY2Vzcy4gTm93IHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBkb2VzIHRoZSBgcmVhbHRla2AgZHJpdmVyIHRoYXQncyBsaWtlbHkgYmVpbmcgcHJvYmVkIHN1cHBvcnQgdGhpcyBpbmRpcmVjdCBhY2Nlc3M/IEkgbmVlZCB0byBjaGVjay5cblxuQWgsIHllcy4gSSBzZWUgaXQuIFRoZSBgbW1kX3BoeV9pbmRpcmVjdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgcmVhbHRla2AgZHJpdmVyIGNvbmZpcm1zIHRoaXMgYnkgd3JpdGluZyB0byByZWdpc3RlcnMgMTMgYW5kIDE0LCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIENsYXVzZSAyMiByZWdpc3RlcnMgdXNlZCBmb3IgaW5kaXJlY3QgQ2xhdXNlIDQ1IGFjY2Vzcy4gVGhpcyBtZWFucyB3ZSdyZSBzZXR0aW5nIHVwIHRoZSBjb25kaXRpb25zIGZvciBhbiBpbnRlcmVzdGluZyBwcm9iZSB0byBvY2N1ci5cblxuVGhlcmVmb3JlLCB0aGlzIHdob2xlIHNlcXVlbmNlIHNob3VsZCB0cmlnZ2VyIGBydGw4MjYxeF9wcm9iZWAgZXZlbnR1YWxseS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBydGw4MjYxeF9wcm9iZWAgbm93IGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhhdCB3aWxsIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ1OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjI0LjY5MzA5NDYyNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg3OlxcdHN0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzg4OlxcdHtcXG4gMzg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbiAzOTA6XFx0XFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XFxuIDM5MTpcXHRcXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDM5NDpcXHRcXHRpZiAoIXByaXYpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXFxuIDQwMDpcXHRcXHRcXHRcXHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XFxuIDQwMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNDAyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xcbiA0MDU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQwNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRzdWJfcGh5X2lkID0gKHJldCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xcbiA0MTE6XFx0XFx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcXG4gNDEyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xcbiA0MTM6XFx0XFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4gNDE0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRcXHRkZWZhdWx0OlxcbiA0MTc6XFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4gNDE4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gMDtcXG4gNDIyOlxcdH1cXG4gNDIzOlxcdFxcbiA0MjQ6XFx0c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdGludCByZXQ7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuIDQyOTpcXHRcXHRpZiAocmV0KVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDMxOlxcdFxcdC8qXFxuIDQzMjpcXHRcXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcXG4gNDMzOlxcdFxcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXFxuIDQzNDpcXHRcXHQgKi9cXG4gNDM1OlxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbiA0MzY6XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MjQuNjkzMjcwNDU0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjAzMDQ0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBBbmFseXppbmcgdGhlIFJUTDgyNjF4IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBydGw4MjYxeF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGFwcGVhcnMgdG8gYmUgZnVuY3Rpb25pbmcgY29ycmVjdGx5LiBUaGUgc2VxdWVuY2UgaXMgY2xlYXI6IHdlIHdyaXRlIHRvIGBNRElPX01NRF9WRU5EMmAgdGhyb3VnaCBgUlRMODI2MVhfRVhUX0FERFJfUkVHYCwgc2V0dGluZyB0aGUgYWRkcmVzcyB0byBgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUmAuIFdlIHRoZW4gcmVhZCBmcm9tIGBSVEw4MjYxWF9FWFRfREFUQV9SRUdgLiBTeXprYWxsZXIgaW50ZXJjZXB0cyB0aGF0IHJlYWQsIHdoaWNoIGlzIGZhc2NpbmF0aW5nLCBhbmQgaW5qZWN0cyBhIHZhbHVlLCBgUlRMODI2MUNfQ0VfTU9ERUxgIHNoaWZ0ZWQsIHJlc3VsdGluZyBpbiBgMHgwMDAwYC4gVGhpcyB0cmlnZ2VycyB0aGUgc2V0dGluZyBvZiBgcHJpdi1cdTAwM2Vmd19uYW1lYCB0byBgUlRMODI2MUNfQ0VfRldfTkFNRWAuIEZyb20gdGhlcmUsIGBjb25maWdfaW5pdGAgY2FsbHMgYHJ0bDgyNjF4X2Z3X2xvYWRgLCB3aGljaCBjYWxscyBgcmVxdWVzdF9maXJtd2FyZWAsIHdoaWNoIFN5emthbGxlciBjYW4gcHJvdmlkZS4gVGhlIGZpcm13YXJlIGxvYWQgaXMgc3VjY2Vzc2Z1bCBhcyBpcyB0aGUgc3Vic2VxdWVudCB2ZXJpZmljYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBmaXJtd2FyZSBlbnRyaWVzIHZpYSBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuIEFsbCBvZiB0aGF0J3MgYSBkaXJlY3QgcGF0aCwgbm8gcXVlc3Rpb24uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdXBwb3J0aW5nIFBIWSBmdW5jdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2Ygb3RoZXIgcmVsYXRlZCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBHZW5lcmljIFBIWSBDNDUgaW50ZXJmYWNlIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIFNwZWNpZmljYWxseSwgYXJlIGBnZW5waHlfYzQ1X3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIHVzZWQgYnkgb3VyIGRyaXZlcj8gVGhleSBhcmUsIGluZGVlZC4gYGdlbnBoeV9jNDVfc29mdF9yZXNldGAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYXMgYC5zb2Z0X3Jlc2V0YCwgd2hpY2ggaXMgZXhjZWxsZW50LiBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGlzIGNhbGxlZCBieSBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYnkgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgLiBgcnRsODI2MXhgIHVzZXMgYGdlbnBoeV9jNDVfY29uZmlnX2FuZWdgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AgdmlhIGBydGw4MjYxeF9jb25maWdfYW5lZ2AgYW5kIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0b3VjaGVkLiBJdCdzIGFsbCBjb25uZWN0ZWQuXG5cbk9rYXksIG5leHQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyB0aGUga2V5LiBJdCdzIG5lZWRlZCBmb3IgYHJlYWx0ZWtfbWFpbi5jYC4gVGhlIFN5emthbGxlciBzZXR1cCBhcHBlYXJzIHRvIGJlIGVuYWJsaW5nIHZhcmlvdXMgVVNCIG5ldCBkcml2ZXJzIGFscmVhZHksIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgZW5hYmxlZCBleHBsaWNpdGx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gSSBjYW4gY29uZmlybSB0aGlzIHVzaW5nIGBtZW51Y29uZmlnYC4gWWVwLCBpdCdzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbGwgc3BlY2lmeSB0aGF0LiBUaGFua2Z1bGx5IGBDT05GSUdfUEhZTElCYCBpcyBzZWxlY3RlZCBieSBgUkVBTFRFS19QSFlgIG9yIGBORVRERVZJQ0VTYCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuIFdpdGggdGhlIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb24gaGFuZGxlZCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBJIGhhdmUgYSBmdW5jdGlvbmFsIHBhdGggZm9yIGV4ZXJjaXNpbmcgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg4OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjM1LjI5NjMxNzM4OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MTE1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRUFMVEVLX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjI6Y29uZmlnIFJFQUxURUtfUEhZXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnPTg9aWYgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkhXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MzUuNTM0NDM4NTQxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjEzNTIyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBQSFkgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGEgcGF0Y2gganVzdCBjYW1lIGFjcm9zcyBteSBkZXNrLCBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheSBoZXJlPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZS5cblxuVGhlbiwgSSBpbW1lZGlhdGVseSBub3RlIHRoYXQgdGhpcyBzcGVjaWZpYyBmaWxlLCBgcGh5LWM0NS5jYCwgZmFsbHMgdW5kZXIgdGhlIHVtYnJlbGxhIG9mIHRoZSBQSFlMSUIgY29uZmlndXJhdGlvbi4gU28sIGlmIGBDT05GSUdfUEhZTElCYCBpcyBlbmFibGVkLCAqdGhlbiogdGhpcyBjb2RlIGlzIGNvbXBpbGVkLiBHb29kLCB0aGF0IGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBUaGlzIGlzIGdvb2QgdG8ga25vdyBjb250ZXh0dWFsbHkgYmVmb3JlIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzozOS41OTU3OTMzMTdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTI3Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeS1jNDVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzozOS42NTQ5MjU1MjZaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5MjMxMjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUEhZIENvbmZpZ3VyYXRpb24gZm9yIEVuaGFuY2VkIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBgcGh5LWM0NS5vYCBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgbGlicGh5LXlgLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2ZS4gR29vZC4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBteSBhbmFseXNpcy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGdlbnBoeV9jNDVfc29mdF9yZXNldGBcbiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgXG4qICAgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgXG4qICAgYHJ0bDgyNjF4X3Byb2JlYFxuKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgXG4qICAgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYFxuKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgXG4qICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgXG4qICAgYHJ0bDgyNjF4X2Z3X2xvYWRgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYFxuKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGBydGw4MjYxeF9jb25maWdfYW5lZ2BcbiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgXG5cblRoZXNlIGFsbCBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuXG5cbk5vdywgYSBxdWljayBjaGVjayBvbiB0aGUgYFVTQl9ORVRfU01TQzk1WFhgIGRlcGVuZGVuY3kuIFdpdGggU3l6a2FsbGVyJ3MgYHZoY2lgIGVtdWxhdGluZyBhbnkgVVNCIGRldmljZSwgSSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgYHNtc2M5NXh4YC4gSXQncyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIGFsbG93cyBhcmJpdHJhcnkgUEhZIElEcywgc28gdGhlb3JldGljYWxseSwgSSBjb3VsZCB1c2Ugc29tZXRoaW5nIGVsc2UuIEhvd2V2ZXIsIGl0J3MgYSBnb29kIGRlZmF1bHQsIHNvIEknbGwgaW5jbHVkZSBpdCBqdXN0IGluIGNhc2UsIHdoaWxlIGFsc28gY2hlY2tpbmcgaWYgaXQncyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVVNCX05FVF9TTVNDOTVYWGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjQ2LjM0NzI0MDQzNFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzMjY4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9ORVRfU01TQzk1WFhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTE6Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXFx0dHJpc3RhdGUgXFxcIlNNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mzo0Ni40MTM1NzUyMDFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MTcxOTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgVVNCX0xBTjc4WFggSW50ZWdyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGFsc28gZ2l2ZSBgVVNCX0xBTjc4WFhgIGEgdGhvcm91Z2ggZ29pbmctb3Zlci4gV2XigJl2ZSBjb3ZlcmVkIHRoZSBvdGhlciBhc3BlY3RzLCBidXQgdGhpcyBkcml2ZXIsIGluIHBhcnRpY3VsYXIsIGNvdWxkIHByZXNlbnQgc29tZSB1bmlxdWUgY2hhbGxlbmdlcyBvciBzdWJ0bGUgaW50ZWdyYXRpb24gcXVpcmtzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgcmVzb3VyY2UgY29uZmxpY3RzLCBvciBldmVuIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhhdCBwYXJ0aWN1bGFyIFVTQi10by1FdGhlcm5ldCBjb250cm9sbGVyLiBJIG5lZWQgdG8gYmUgY2VydGFpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVs4oCZcyBVU0Igc3Vic3lzdGVtIGlzIHNlYW1sZXNzLCB0aGF0IHdlJ3ZlIGFjY291bnRlZCBmb3IgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZyByZXF1aXJlbWVudHMsIGFuZCB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9zZWQgYW5kIGRvY3VtZW50ZWQuIFRoZSBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGRlcGVuZCBvbiBnZXR0aW5nIHRoZSBgVVNCX0xBTjc4WFhgIHBhcnQgcmlnaHQsIHNvIGFub3RoZXIgY2hlY2sgd29uJ3QgaHVydC4gVGltZSB0byBkaXZlIGJhY2sgaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IG5vdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjUyLjE2NTI5NzAzOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9MQU43OFhYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9OTk9Y29uZmlnIFVTQl9SVEw4MTUyXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMTItXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTEzOmNvbmZpZyBVU0JfTEFONzhYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTExNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mzo1Mi4yMjU1MTY2NzZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNjg2MjkxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIFJUTDgyNjFDIFBIWSoqXG5cbk9rYXksIGxldCdzIHNvbGlkaWZ5IHRoZSBmdXp6aW5nIGFwcHJvYWNoIGZvciB0aGlzIG5ldyBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBmdW5jdGlvbnMgYWRkZWQgYnkgdGhlIHBhdGNoLiBMZXQncyBydW4gdGhyb3VnaCB0aGVtIGFnYWluOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBOb3BlLCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBmdWxsIHNldC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyBpbmRlZWQgd29ydGggZnV6emluZy4gSXQncyBub3QganVzdCBhIG5ldyBQSFkgZHJpdmVyLCBidXQgaXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHZpYSBNRElPIGJ1cyBlbXVsYXRpb24uIFRoaXMgbWVhbnMgd2UgY2FuIHJlYWNoIHRoZSBuZXcgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGlkZWFsIGZvciBTeXprYWxsZXIuXG5cbkhlcmXigJlzIHRoZSByZWFzb25pbmc6IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBVU0JfTkVUX1NNU0M5NVhYYCBvciBgVVNCX0xBTjc4WFhgIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHdlIGNhbiBtYWtlIHRoZW0gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciwgZXhlY3V0aW5nIHRoZSBuZXcgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYW5kIGV2ZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYmVjYXVzZSB3ZSBjYW4gYWxzbyBsZXZlcmFnZSBTeXprYWxsZXLigJlzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgdGhlcmUuXG5cblNvLCBpbiB0ZXJtcyBvZiBmb2N1cywgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgYFJFQUxURUtfUEhZYCwgYFVTQl9ORVRfU01TQzk1WFhgLCBhbmQgYFVTQl9MQU43OFhYYC5cblxuQWxyaWdodCwgSSB0aGluayB0aGlzIHBsYW4gaXMgc29saWQuIEl0J3MgdGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIHRlc3QgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTg0LCJPdXRwdXRUb2tlbnMiOjM4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0NDowMy4zOTQxNDc5MzhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgwMjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIlVTQl9MQU43OFhYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBuZXcgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgZm9yIHNvZnQgcmVzZXQgYW5kIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKGxpa2Ugc21zYzk1eHggb3IgbGFuNzh4eCkgdmlhIFZIQ0kuIFRoZXNlIGFkYXB0ZXJzIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBjYW4gYmUgbWFkZSB0byByZXBvcnQgdGhlIFJUTDgyNjFDIFBIWSBJRCAoMHgwMDFjYzg5OCkgZHVyaW5nIGJ1cyBzY2FubmluZy4gVGhlIFBIWSBzdWJzeXN0ZW0gd2lsbCB0aGVuIGxvYWQgdGhlIHJlYWx0ZWsgZHJpdmVyIGFuZCBleGVjdXRlIHRoZSBuZXcgcHJvYmUsIGNvbmZpZywgYW5kIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBhbHNvIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiVVNCX0xBTjc4WFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBmaXJtd2FyZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 10:29:00 +0000 UTC FinishedAt: 2026-07-02 10:44:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY", "USB_NET_SMSC95XX", "USB_LAN78XX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "REALTEK_PHY", "USB_NET_SMSC95XX", "USB_LAN78XX" ], "series_id": "161f5898-eb04-4fbe-8cbb-e0c194a8e057" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "genphy_c45_soft_reset", "genphy_c45_an_setup_master_slave", "genphy_c45_read_master_slave", "rtl8261x_probe", "rtl8261x_get_features", "rtl8261x_read_status", "rtl8261x_verify_firmware", "rtl8261x_fw_execute_entry", "rtl8261x_fw_load", "rtl8261x_config_intr", "rtl8261x_handle_interrupt", "rtl8261x_config_aneg", "rtl8261x_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JFQUxURUtfUEhZJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7VVNCX0xBTjc4WFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5waHlfYzQ1X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUmIzM0OywKICAgICYjMzQ7Z2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9nZXRfZmVhdHVyZXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfbG9hZCYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9jb25maWdfaW50ciYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19hbmVnJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBuZXcgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgZm9yIHNvZnQgcmVzZXQgYW5kIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKGxpa2Ugc21zYzk1eHggb3IgbGFuNzh4eCkgdmlhIFZIQ0kuIFRoZXNlIGFkYXB0ZXJzIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBjYW4gYmUgbWFkZSB0byByZXBvcnQgdGhlIFJUTDgyNjFDIFBIWSBJRCAoMHgwMDFjYzg5OCkgZHVyaW5nIGJ1cyBzY2FubmluZy4gVGhlIFBIWSBzdWJzeXN0ZW0gd2lsbCB0aGVuIGxvYWQgdGhlIHJlYWx0ZWsgZHJpdmVyIGFuZCBleGVjdXRlIHRoZSBuZXcgcHJvYmUsIGNvbmZpZywgYW5kIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBhbHNvIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJiMzOTtzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMjJkYTJhYWJjYWZmMWNjZTA5NmRjZmUyNjk0MzFmYjdlMmVhMGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMDo0MToxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggMTI2OTUxNzQxNDI4OGYuLmRmNjgyZDNlYmQ1YTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXJcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxuJiM0MztcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfUE1BUE1ELFxuJiM0MztcdFx0XHRcdFx0IE1ESU9fQ1RSTDEsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4mIzQzO1x0XHRcdFx0XHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuJiM0MzsgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXG4mIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbiYjMzk7dCBjaGFuZ2UsXG4mIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgY3RsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuJiM0MztcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbiYjNDM7XHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbiYjNDM7XHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5TVVBQT1JURUQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBNYXN0ZXIvU2xhdmUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XG4mIzQzO1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbiYjNDM7XHRcdFx0XHQgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFLCBjdGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4mIzQzO1xuJiM0MztcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUUpXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX0VSUjtcbiYjNDM7XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxuJiM0MztcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX01BU1RFUjtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9TTEFWRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbkBAIC0xMTkyLDYgJiM0MzsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG4gXHRcdHBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTtcbkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiBcbiYjNDM7XHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCAyNzI2ODgxMWY1NjRmMi4uMTBjOGFiZmViZTg0N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC04LDcgJiM0Mzs4LDkgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2VpcnEuaFx1MDAzZVxuQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBAXG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQxXHRcdDE3XG4gI2RlZmluZSBSVEw4MjExRl9QSFlTSUNBTF9BRERSX1dPUkQyXHRcdDE4XG4gXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHXHRcdFx0MHhhNDM4XG4mIzQzOyNkZWZpbmUgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUlx0XHQweDgwMWRcbiYjNDM7XG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQFxuICNkZWZpbmUgUlRMXzgyMjFCX1ZNX0NHXHRcdFx0XHQweDAwMWNjODRhXG4gI2RlZmluZSBSVExfODI1MUJcdFx0XHRcdDB4MDAxY2M4NjJcbiAjZGVmaW5lIFJUTF84MjYxQ1x0XHRcdFx0MHgwMDFjYzg5MFxuJiM0MzsjZGVmaW5lIFJUTF84MjYxQ19DR1x0XHRcdFx0MHgwMDFjYzg5OFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9NT0RFTFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1JcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORVx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0xJTktfQ0hHXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX1BNRVx0XHRCSVQoNylcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQUxEUFNfQ0hHXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0pBQkJFUilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXHRcdChSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BTERQU19DSEcgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZXX01BSU5fTUFHSUNcdFx0XHQweDUyNTQ0QzM4XG4mIzQzOyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXHRcdDB4MzIzNjMxNDNcbiYjNDM7I2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuJiM0MzsjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXHRcdDMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwmIzM0O3J0bF9uaWMvcnRsODI2MWMuYmluXCYjMzQ7XG4mIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbiYjNDM7XG4mIzQzO2VudW0gcnRsODI2MXhfZndfb3Age1xuJiM0MztcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4mIzQzO1x0T1BfUE9MTCAgPSAweDAyLFx0LyogUG9sbGluZyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XG4mIzQzO1x0X19sZTMyIG1haW5fbWFnaWM7XHQvKiBNYWluIG1hZ2ljIG51bWJlciAqL1xuJiM0MztcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWFqb3I7XHQvKiBNYWpvciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IHZlcnNpb25fbWlub3I7XHQvKiBNaW5vciB2ZXJzaW9uICovXG4mIzQzO1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbiYjNDM7XHRfX2xlMTYgcmVzZXJ2ZWQ7XHQvKiBSZXNlcnZlZCAqL1xuJiM0MztcdF9fbGUzMiBjcmMzMjtcdFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XG4mIzQzO1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4mIzQzO1x0X191OCAgZGV2O1x0XHQvKiBNTUQgZGV2aWNlICovXG4mIzQzO1x0X19sZTE2IGFkZHI7XHRcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cbiYjNDM7XHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX3U4ICBsc2I7XHRcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cbiYjNDM7XHRfX2xlMTYgdmFsdWU7XHRcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cbiYjNDM7XHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiYjNDM7XHRfX3U4ICBwb2xsX3NldDtcdFx0LyogUG9sbCB1bnRpbCBlcXVhbCAoMSkgb3Igbm90IGVxdWFsICgwKSAqL1xuJiM0MztcdF9fdTggIHJlc2VydmVkO1x0XHQvKiBSZXNlcnZlZCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGV19IRUFERVJfU0laRVx0XHRzaXplb2Yoc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlcilcbiYjNDM7I2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICYjNDM7MzM5LDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xuIFx0dTE2IGluZXI7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHJ0bDgyNjF4X3ByaXYge1xuJiM0MztcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4mIzQzO1x0Ym9vbCBmd19sb2FkZWQ7XG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICYjNDM7Mzg0LDMxOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSxcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9waHlfaWQgPSAocmV0IFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4mIzQzO1x0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4mIzQzO1x0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7VW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxuXCYjMzQ7LCBzdWJfcGh5X2lkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXG4mIzQzO1x0ICogUlRMODI2MVggc3VwcG9ydHMgMi41Ry81RyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCAxMEdcbiYjNDM7XHQgKi9cbiYjNDM7XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgyMlhfVk5EMl9DMjJfUkVHKE1JSV9TVEFUMTAwMCkpO1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4mIzQzO1x0dTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYztcbiYjNDM7XHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xuJiM0MztcdHNpemVfdCBkYXRhX2xlbjtcbiYjNDM7XHR1MTYgbnVtX2VudHJpZXM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBGV19IRUFERVJfU0laRSkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0Zpcm13YXJlIHRvbyBzbWFsbDogJXp1IGJ5dGVzXFxuXCYjMzQ7LCBmdy1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZW1haW5fbWFnaWMpO1xuJiM0MztcdGlmIChtYWluX21hZ2ljICE9IEZXX01BSU5fTUFHSUMpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcXG5cJiMzNDssIG1haW5fbWFnaWMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlc3ViX21hZ2ljKTtcbiYjNDM7XHRpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcXG5cJiMzNDssIHN1Yl9tYWdpYyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZW51bV9lbnRyaWVzKTtcbiYjNDM7XHRkYXRhX2xlbiA9IG51bV9lbnRyaWVzICogRldfRU5UUllfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXNpemUgIT0gc2l6ZW9mKCpoZHIpICYjNDM7IGRhdGFfbGVuKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVx1MDAzZWRhdGEgJiM0MzsgRldfSEVBREVSX1NJWkUsIGRhdGFfbGVuKSBeIH4wO1xuJiM0MztcdGZpbGVfY3JjID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWNyYzMyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7Q1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBjYWxjX2NyYywgZmlsZV9jcmMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xuJiM0MztcdHU4IGRldiwgbXNiLCBsc2IsIHBvbGxfc2V0O1xuJiM0MztcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xuJiM0MztcdGludCByZXQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuJiM0MztcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VhZGRyKTtcbiYjNDM7XHRtc2IgPSBlbnRyeS1cdTAwM2Vtc2I7XG4mIzQzO1x0bHNiID0gZW50cnktXHUwMDNlbHNiO1xuJiM0MztcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldmFsdWUpO1xuJiM0MztcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2V0aW1lb3V0X21zKTtcbiYjNDM7XHRwb2xsX3NldCA9IGVudHJ5LVx1MDAzZXBvbGxfc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAodGltZW91dF9tcyA9PSAwKVxuJiM0MztcdFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcbiYjNDM7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2UgUlRMODI2MVhfTUFYX01NRF9ERVYpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtpbnZhbGlkIGZpcm13YXJlIE1NRCBkZXZpY2U6IGRldj0ldVxcblwmIzM0OywgZGV2KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1zYiBcdTAwM2UgMTUgfHwgbHNiIFx1MDAzZSBtc2IpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtpbnZhbGlkIGZpcm13YXJlIGJpdHM6IG1zYj0ldSwgbHNiPSV1XFxuXCYjMzQ7LCBtc2IsIGxzYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnktXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgT1BfV1JJVEU6XG4mIzQzO1x0XHRyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IEdFTk1BU0sobXNiLCBsc2IpKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBPUF9QT0xMOlxuJiM0MztcdFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xuJiM0MztcdFx0ZXhwZWN0X3ZhbCA9ICh2YWx1ZSBcdTAwM2NcdTAwM2MgbHNiKSBcdTAwMjYgYml0cztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9sbF9zZXQpXG4mIzQzO1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSAhPSBleHBlY3RfdmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlZndfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBwcml2LVx1MDAzZWZ3X25hbWUsIFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2Vmd19uYW1lLCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cdTAwM2VkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpOyBpJiM0MzsmIzQzOywgZW50cnkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RW50cnkgJWQgZmFpbGVkOiAlZFxcblwmIzM0OywgaSwgcmV0KTtcbiYjNDM7XHRcdFx0Z290byByZWxlYXNlX2Z3O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7cmVsZWFzZV9mdzpcbiYjNDM7XHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXG4mIzQzO1x0XHRcdFx0ICAgIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBpcnFfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XG4mIzQzO1x0aWYgKGlycV9zdGF0dXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeV9lcnJvcihwaHlkZXYpO1xuJiM0MztcdFx0cmV0dXJuIElSUV9OT05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCEoaXJxX3N0YXR1cyBcdTAwMjYgUlRMODI2MVhfSU5UX01BU0tfQUxMKSlcbiYjNDM7XHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlycV9zdGF0dXMgXHUwMDI2IChSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FIHxcbiYjNDM7XHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcbiYjNDM7XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWR2XzFnID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcbiYjNDM7XHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0hhbGZfQklULFxuJiM0MztcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0YWR2XzFnIHw9IEFEVkVSVElTRV8xMDAwSEFMRjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuJiM0MztcdFx0XHRcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRixcbiYjNDM7XHRcdFx0XHQgICAgIGFkdl8xZyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdHJldHVybiBnZW5waHlfYzQ1X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmRcbiYjNDM7XHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXG4mIzQzO1x0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vmd19uYW1lIFx1MDAyNlx1MDAyNiAhcHJpdi1cdTAwM2Vmd19sb2FkZWQpXG4mIzQzO1x0XHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bDgyMXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG5AQCAtMzAwMSw2ICYjNDM7MzM4OCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIFx0XHQucmVhZF9tbWRcdD0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLFxuIFx0XHQud3JpdGVfbW1kXHQ9IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQsXG4mIzQzO1x0fSwge1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksXG4mIzQzO1x0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCYjMzQ7LFxuJiM0MztcdFx0LnByb2JlXHRcdFx0PSBydGw4MjYxeF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19hbmVnLFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXG4mIzQzO1x0XHQuY29uZmlnX2ludHJcdFx0PSBydGw4MjYxeF9jb25maWdfaW50cixcbiYjNDM7XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQuc29mdF9yZXNldFx0XHQ9IGdlbnBoeV9jNDVfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0XHQ9IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZmQuLjI1YTY2MzIwZGY1NmVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMDksNiAmIzQzOzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtMzMyLDggJiM0MzszMzIsMTMgQEBcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXHQweDAwODBcdC8qIEFkdmVydGlzZSAyLjVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcdDB4MDEwMFx0LyogQWR2ZXJ0aXNlIDVHQkFTRS1UICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXHQweDEwMDBcdC8qIEFkdmVydGlzZSAxMEdCQVNFLVQgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRVx0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cbiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXHQweDIwMDBcdC8qIE1hc3RlciBQcmVmZXJyZWQgVHlwZSAqL1xuIFxuIC8qIEFOIDEwR0JBU0UtVCBzdGF0dXMgcmVnaXN0ZXIuICovXG4mIzQzOyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcdDB4NDAwMFx0LyogTWFzdGVyL3NsYXZlIHJlc29sdXRpb24gKDE9TWFzdGVyKSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1x0MHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQNUdcdFx0MHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi9cbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUFRSUlx0MHgwMjAwXHQvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzIyZGEyYWFiY2FmZjFjY2UwOTZkY2ZlMjY5NDMxZmI3ZTJlYTBlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTA6NDE6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCAxMjY5NTE3NDE0Mjg4Zi4uZGY2ODJkM2ViZDVhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwpAQCAtMzg0LDYgJiM0MzszODQsMTE5IEBAIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIENsYXVzZSA0NSBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQsIHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKJiM0MzsJCQkgICAgICAgTURJT19DVFJMMV9SRVNFVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsCiYjNDM7CQkJCQkgTURJT19DVFJMMSwgdmFsLAomIzQzOwkJCQkJICEodmFsICZhbXA7IE1ESU9fQ1RSTDFfUkVTRVQpLAomIzQzOwkJCQkJIDUwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfc29mdF9yZXNldCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUgLSBDb25maWd1cmUgTWFzdGVyL1NsYXZlIHNldHRpbmcgZm9yIEM0NSBQSFlzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogQ29uZmlndXJlIHRoZSBmb3JjZWQgb3IgcHJlZmVycmVkIE1hc3Rlci9TbGF2ZSByb2xlCiYjNDM7ICogMTBHQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgKE1NRCA3LCBSZWdpc3RlciAweDAwMjApIGFjY29yZGluZyB0bwomIzQzOyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGZhaWx1cmUsIDAgaWYgTWFzdGVyL1NsYXZlIGRpZG4mIzM5O3QgY2hhbmdlLAomIzQzOyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJdTE2IGN0bCA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc2V0KSB7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOgomIzQzOwkJY3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6CiYjNDM7CQljdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRToKJiM0MzsJCWN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV046CiYjNDM7CWNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIE1hc3Rlci9TbGF2ZSBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgICBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHwKJiM0MzsJCQkJICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSwgY3RsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZSAtIHJlYWQgbWFzdGVyL3NsYXZlIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFJlYWQgdGhlIE1hc3Rlci9TbGF2ZSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOOwomIzQzOwomIzQzOwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHsKJiM0MzsJCWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFKQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfUFJFRkVSUkVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmFtcDsgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUKSB7CiYjNDM7CQlwaHlkZXYtJmd0O21hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7CiYjNDM7CX0gZWxzZSBpZiAocGh5ZGV2LSZndDtsaW5rKSB7CiYjNDM7CQlpZiAodmFsICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpCiYjNDM7CQkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfTUFTVEVSOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeWRldi0mZ3Q7bWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5ZGV2LSZndDttYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKQEAgLTExOTIsNiAmIzQzOzEzMDUsMTAgQEAgaW50IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJCXJldCA9IGdlbnBoeV9jNDVfYmFzZXQxX3JlYWRfc3RhdHVzKHBoeWRldik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlwaHlfcmVzb2x2ZV9hbmVnX2xpbmttb2RlKHBoeWRldik7CkBAIC0xMjI1LDYgJiM0MzsxMzQyLDE0IEBAIGludCBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmZ3Q7IDApCiAJCWNoYW5nZWQgPSB0cnVlOwogCiYjNDM7CWlmICghZ2VucGh5X2M0NV9iYXNldDFfYWJsZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jb25maWdfYW5lZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IDI3MjY4ODExZjU2NGYyLi4xMGM4YWJmZWJlODQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKQEAgLTgsNyAmIzQzOzgsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9iaXRvcHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JjMzIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2VpcnEuaCZndDsKQEAgLTE0MSw2ICYjNDM7MTQzLDEwIEBACiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDEJCTE3CiAjZGVmaW5lIFJUTDgyMTFGX1BIWVNJQ0FMX0FERFJfV09SRDIJCTE4CiAKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFRwkJCTB4YTQzNgomIzQzOyNkZWZpbmUgUlRMODI2MVhfRVhUX0RBVEFfUkVHCQkJMHhhNDM4CiYjNDM7I2RlZmluZSBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSCQkweDgwMWQKJiM0MzsKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT04JCQkweDY5N2EKICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLCQlHRU5NQVNLKDUsIDApCiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJCQkwCkBAIC0yNTEsNiAmIzQzOzI1Nyw2OSBAQAogI2RlZmluZSBSVExfODIyMUJfVk1fQ0cJCQkJMHgwMDFjYzg0YQogI2RlZmluZSBSVExfODI1MUIJCQkJMHgwMDFjYzg2MgogI2RlZmluZSBSVExfODI2MUMJCQkJMHgwMDFjYzg5MAomIzQzOyNkZWZpbmUgUlRMXzgyNjFDX0NHCQkJCTB4MDAxY2M4OTgKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMCQkweDAwCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUglCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YJCUJJVCgyKQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIRwkJQklUKDQpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MJQklUKDUpCiYjNDM7I2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9BTERQU19DSEcJCUJJVCg5KQomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX0pBQkJFUgkJQklUKDEwKQomIzQzOwomIzQzOyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVAkoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0pBQkJFUikKJiM0MzsKJiM0MzsjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0FMTAkJKFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXAomIzQzOwkJCQkJIFJUTDgyNjFYX0lOVF9QTUUgfCBcCiYjNDM7CQkJCQkgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFwKJiM0MzsJCQkJCSBSVEw4MjYxWF9JTlRfSkFCQkVSKQomIzQzOwomIzQzOyNkZWZpbmUgRldfTUFJTl9NQUdJQwkJCTB4NTI1NDRDMzgKJiM0MzsjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQwkJMHgzMjM2MzE0MwomIzQzOyNkZWZpbmUgUlRMODI2MVhfUE9MTF9USU1FT1VUX01TCTEwMAomIzQzOyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVYJCTMxCiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MjYxQ19DRV9GV19OQU1FCSYjMzQ7cnRsX25pYy9ydGw4MjYxYy5iaW4mIzM0OwomIzQzO01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTsKJiM0MzsKJiM0MztlbnVtIHJ0bDgyNjF4X2Z3X29wIHsKJiM0MzsJT1BfV1JJVEUgPSAweDAwLAkvKiBXcml0ZSAqLwomIzQzOwlPUF9QT0xMICA9IDB4MDIsCS8qIFBvbGxpbmcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgewomIzQzOwlfX2xlMzIgbWFpbl9tYWdpYzsJLyogTWFpbiBtYWdpYyBudW1iZXIgKi8KJiM0MzsJX19sZTMyIHN1Yl9tYWdpYzsJLyogU3ViIG1hZ2ljIG51bWJlciAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9tYWpvcjsJLyogTWFqb3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgdmVyc2lvbl9taW5vcjsJLyogTWlub3IgdmVyc2lvbiAqLwomIzQzOwlfX2xlMTYgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzICovCiYjNDM7CV9fbGUxNiByZXNlcnZlZDsJLyogUmVzZXJ2ZWQgKi8KJiM0MzsJX19sZTMyIGNyYzMyOwkJLyogQ1JDMzIgY2hlY2tzdW0gKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7CiYjNDM7CV9fdTggIHR5cGU7CQkvKiBPcGVyYXRpb24gdHlwZSAoT1BfKikgKi8KJiM0MzsJX191OCAgZGV2OwkJLyogTU1EIGRldmljZSAqLwomIzQzOwlfX2xlMTYgYWRkcjsJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KJiM0MzsJX191OCAgbXNiOwkJLyogTVNCIGJpdCBwb3NpdGlvbiAqLwomIzQzOwlfX3U4ICBsc2I7CQkvKiBMU0IgYml0IHBvc2l0aW9uICovCiYjNDM7CV9fbGUxNiB2YWx1ZTsJCS8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi8KJiM0MzsJX19sZTE2IHRpbWVvdXRfbXM7CS8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KJiM0MzsJX191OCAgcG9sbF9zZXQ7CQkvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovCiYjNDM7CV9fdTggIHJlc2VydmVkOwkJLyogUmVzZXJ2ZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRldfSEVBREVSX1NJWkUJCXNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyKQomIzQzOyNkZWZpbmUgRldfRU5UUllfU0laRQkJc2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSkKIAogLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqLwogI2RlZmluZSBSVEw4MjExeF9MRURfQ09VTlQJCQkzCkBAIC0yNzAsNiAmIzQzOzMzOSwxMSBAQCBzdHJ1Y3QgcnRsODIxeF9wcml2IHsKIAl1MTYgaW5lcjsKIH07CiAKJiM0MztzdHJ1Y3QgcnRsODI2MXhfcHJpdiB7CiYjNDM7CWNvbnN0IGNoYXIgKmZ3X25hbWU7CiYjNDM7CWJvb2wgZndfbG9hZGVkOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTsKQEAgLTMxMCw2ICYjNDM7Mzg0LDMxOSBAQCBzdGF0aWMgaW50IHJ0bDgyMXhfbW9kaWZ5X2V4dF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiBleHRfcGFnZSwKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2OwomIzQzOwlpbnQgc3ViX3BoeV9pZCwgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRywKJiM0MzsJCQkgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3ViX3BoeV9pZCA9IChyZXQgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsKJiM0MzsJc3dpdGNoIChzdWJfcGh5X2lkKSB7CiYjNDM7CWNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6CiYjNDM7CQlwcml2LSZndDtmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTsKJiM0MzsJCXBoeWRldl9pbmZvKHBoeWRldiwgJiMzNDtSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcbiYjMzQ7LCBzdWJfcGh5X2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O1Vua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxuJiMzNDssIHN1Yl9waHlfaWQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyoKJiM0MzsJICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCiYjNDM7CSAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHCiYjNDM7CSAqLwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICZhbXA7JmFtcDsgcGh5ZGV2LSZndDthdXRvbmVnX2NvbXBsZXRlKSB7CiYjNDM7CQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7CiYjNDM7CQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdmFsOwomIzQzOwomIzQzOwkJbWlpX3N0YXQxMDAwX21vZF9saW5rbW9kZV9scGFfdChwaHlkZXYtJmd0O2xwX2FkdmVydGlzaW5nLCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKmhkcjsKJiM0MzsJdTMyIG1haW5fbWFnaWMsIHN1Yl9tYWdpYzsKJiM0MzsJdTMyIGNhbGNfY3JjLCBmaWxlX2NyYzsKJiM0MzsJc2l6ZV90IGRhdGFfbGVuOwomIzQzOwl1MTYgbnVtX2VudHJpZXM7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAmbHQ7IEZXX0hFQURFUl9TSVpFKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xuJiMzNDssIGZ3LSZndDtzaXplKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CW1haW5fbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItJmd0O21haW5fbWFnaWMpOwomIzQzOwlpZiAobWFpbl9tYWdpYyAhPSBGV19NQUlOX01BR0lDKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBtYWluX21hZ2ljKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Yl9tYWdpYyA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3ViX21hZ2ljKTsKJiM0MzsJaWYgKHN1Yl9tYWdpYyAhPSBGV19TVUJfTUFHSUNfODI2MUMpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0ludmFsaWQgc3ViIG1hZ2ljOiAweCUwOHhcbiYjMzQ7LCBzdWJfbWFnaWMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsKJiM0MzsJZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7CiYjNDM7CiYjNDM7CWlmIChmdy0mZ3Q7c2l6ZSAhPSBzaXplb2YoKmhkcikgJiM0MzsgZGF0YV9sZW4pIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0Zpcm13YXJlIHNpemUgbWlzbWF0Y2hcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LSZndDtkYXRhICYjNDM7IEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDsKJiM0MzsJZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItJmd0O2NyYzMyKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGNfY3JjICE9IGZpbGVfY3JjKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDUkMzMiBtaXNtYXRjaDogY2FsY3VsYXRlZD0weCUwOHggZmlsZT0weCUwOHhcbiYjMzQ7LAomIzQzOwkJCSAgIGNhbGNfY3JjLCBmaWxlX2NyYyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tczsKJiM0MzsJdTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7CiYjNDM7CXUzMiBiaXRzLCBleHBlY3RfdmFsOwomIzQzOwlpbnQgcmV0LCB2YWw7CiYjNDM7CiYjNDM7CWRldiA9IGVudHJ5LSZndDtkZXY7CiYjNDM7CWFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS0mZ3Q7YWRkcik7CiYjNDM7CW1zYiA9IGVudHJ5LSZndDttc2I7CiYjNDM7CWxzYiA9IGVudHJ5LSZndDtsc2I7CiYjNDM7CXZhbHVlID0gbGUxNl90b19jcHUoZW50cnktJmd0O3ZhbHVlKTsKJiM0MzsJdGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LSZndDt0aW1lb3V0X21zKTsKJiM0MzsJcG9sbF9zZXQgPSBlbnRyeS0mZ3Q7cG9sbF9zZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lb3V0X21zID09IDApCiYjNDM7CQl0aW1lb3V0X21zID0gUlRMODI2MVhfUE9MTF9USU1FT1VUX01TOwomIzQzOwomIzQzOwlpZiAoZGV2ICZndDsgUlRMODI2MVhfTUFYX01NRF9ERVYpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XG4mIzM0OywgZGV2KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtc2IgJmd0OyAxNSB8fCBsc2IgJmd0OyBtc2IpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcbiYjMzQ7LCBtc2IsIGxzYik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5LSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgT1BfV1JJVEU6CiYjNDM7CQlyZXQgPSBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldiwgYWRkciwKJiM0MzsJCQkJICAgICBHRU5NQVNLKG1zYiwgbHNiKSwgKHZhbHVlICZsdDsmbHQ7IGxzYikgJmFtcDsgR0VOTUFTSyhtc2IsIGxzYikpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgT1BfUE9MTDoKJiM0MzsJCWJpdHMgPSBHRU5NQVNLKG1zYiwgbHNiKTsKJiM0MzsJCWV4cGVjdF92YWwgPSAodmFsdWUgJmx0OyZsdDsgbHNiKSAmYW1wOyBiaXRzOwomIzQzOwomIzQzOwkJaWYgKHBvbGxfc2V0KQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSA9PSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCwKJiM0MzsJCQkJCQkJKHZhbCAmYW1wOyBiaXRzKSAhPSBleHBlY3RfdmFsLAomIzQzOwkJCQkJCQkxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9md19sb2FkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O2Z3X25hbWUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO2Z3LCBwcml2LSZndDtmd19uYW1lLCAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcbiYjMzQ7LCBwcml2LSZndDtmd19uYW1lLCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctJmd0O2RhdGE7CiYjNDM7CiYjNDM7CWVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy0mZ3Q7ZGF0YSAmIzQzOyBGV19IRUFERVJfU0laRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZTE2X3RvX2NwdShoZHItJmd0O251bV9lbnRyaWVzKTsgaSYjNDM7JiM0MzssIGVudHJ5JiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtFbnRyeSAlZCBmYWlsZWQ6ICVkXG4mIzM0OywgaSwgcmV0KTsKJiM0MzsJCQlnb3RvIHJlbGVhc2VfZnc7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7ZndfbG9hZGVkID0gdHJ1ZTsKJiM0MzsKJiM0MztyZWxlYXNlX2Z3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLAomIzQzOwkJCQkgICAgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBpcnFfc3RhdHVzOwomIzQzOwomIzQzOwlpcnFfc3RhdHVzID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7CiYjNDM7CWlmIChpcnFfc3RhdHVzICZsdDsgMCkgewomIzQzOwkJcGh5X2Vycm9yKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCEoaXJxX3N0YXR1cyAmYW1wOyBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKQomIzQzOwkJcmV0dXJuIElSUV9OT05FOwomIzQzOwomIzQzOwlpZiAoaXJxX3N0YXR1cyAmYW1wOyAoUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8CiYjNDM7CSAgICBSVEw4MjYxWF9JTlRfQVVUT05FR19FUlJPUiB8IFJUTDgyNjFYX0lOVF9KQUJCRVIpKQomIzQzOwkJcGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXUxNiBhZHZfMWcgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDsKJiM0MzsJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCwKJiM0MzsJCQkgICAgICBwaHlkZXYtJmd0O2FkdmVydGlzaW5nKSkKJiM0MzsJCWFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLAomIzQzOwkJCQkgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiwKJiM0MzsJCQkJICAgICBhZHZfMWcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJLyogVGhlIGZpcm13YXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlcnZlZCBhY3Jvc3MgSUVFRSBzb2Z0IHJlc2V0cyBhbmQKJiM0MzsJICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlcgomIzQzOwkgKiBjeWNsZSBvciBoYXJkIHJlc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2Z3X25hbWUgJmFtcDsmYW1wOyAhcHJpdi0mZ3Q7ZndfbG9hZGVkKQomIzQzOwkJcmV0dXJuIHJ0bDgyNjF4X2Z3X2xvYWQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydGw4MjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwpAQCAtMzAwMSw2ICYjNDM7MzM4OCwxOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKIAkJLnJlYWRfbW1kCT0gZ2VucGh5X3JlYWRfbW1kX3Vuc3VwcG9ydGVkLAogCQkud3JpdGVfbW1kCT0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCwKJiM0MzsJfSwgewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkmIzM0OywKJiM0MzsJCS5wcm9iZQkJCT0gcnRsODI2MXhfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0gcnRsODI2MXhfY29uZmlnX2luaXQsCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHJ0bDgyNjF4X2dldF9mZWF0dXJlcywKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBydGw4MjYxeF9jb25maWdfYW5lZywKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSBydGw4MjYxeF9yZWFkX3N0YXR1cywKJiM0MzsJCS5jb25maWdfaW50cgkJPSBydGw4MjYxeF9jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0CT0gcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IGdlbnBoeV9jNDVfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmZkLi4yNWE2NjMyMGRmNTZlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMzA5LDYgJiM0MzsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7CiAvKiBDbGF1c2UgNDUgUEhZICovCiBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7CiYjNDM7aW50IGdlbnBoeV9jNDVfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbGluayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3JlYWRfbHBhKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggYjI1NDFjOTQ4ZmMxZWIuLjA2ZjRiYzNjMjBjNzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKQEAgLTMzMiw4ICYjNDM7MzMyLDEzIEBACiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHCTB4MDA4MAkvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUcJMHgwMTAwCS8qIEFkdmVydGlzZSA1R0JBU0UtVCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHCTB4MTAwMAkvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFCTB4ODAwMAkvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRQkweDQwMDAJLyogTWFzdGVyL3NsYXZlIGNvbmZpZyB2YWx1ZSAoMT1NYXN0ZXIpICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFCTB4MjAwMAkvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi8KIAogLyogQU4gMTBHQkFTRS1UIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MzsjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVAkweDgwMDAJLyogTWFzdGVyL3NsYXZlIGZhdWx0ICovCiYjNDM7I2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTCTB4NDAwMAkvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovCiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcJMHgwMDIwICAvKiBMUCBpcyAyLjVHQlQgY2FwYWJsZSAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1RwkJMHgwMDQwICAvKiBMUCBpcyA1R0JUIGNhcGFibGUgKi8KICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSCTB4MDIwMAkvKiBMUCB0cmFpbmluZyByZXNldCByZXEuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgyNjFDIFBIWSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkuIEl0IHRvdWNoZXMgYHBoeS1jNDUuY2AgYW5kIGByZWFsdGVrX21haW4uY2AsIGFuZCBpdCBicmluZ3MgaW4gc29tZSBuZXcgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/CgpQSFkgZHJpdmVycyBhcmUgdXN1YWxseSByZWFjaGFibGUgd2hlbiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBhdCBsZWFzdCBlbXVsYXRlZC4gQnV0LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgc3BlY2lmaWMgUEhZcyBkaXJlY3RseSwgcmlnaHQ/IEl0JiMzOTtzIG1vcmUgYWJvdXQgaGF2aW5nIGdlbmVyaWMgbWVjaGFuaXNtcyBvciBwZXJoYXBzIHNwZWNpZmljIGVtdWxhdGlvbi4gSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZSBQSFlzLiBUaGV5JiMzOTtyZSB1c3VhbGx5IGNvbm5lY3RlZCB0byBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhyb3VnaCBhbiBNRElPIGJ1cy4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBNRElPIGJ1cyBlbXVsYXRvcj8gV2UgaGF2ZSBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGBuZXRkZXZzaW1gIGZvciBzb21lIG5ldGRldnMsIGJ1dCBub3RoaW5nIGp1bXBzIG91dCBmb3IgTURJTy4KCkhvbGQgb24sIGNhbiB3ZSB0cmlnZ2VyIHRoZSBQSFkgZHJpdmVyIGNvZGUgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHk/IEkgc2VlbSB0byByZW1lbWJlciBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlSRUdgIGlvY3Rscy4gQnV0IGFyZW4mIzM5O3QgdGhvc2UgdGllZCB0byBhIG5ldGRldiB0aGF0JiMzOTtzICp1c2luZyogYSBQSFk/IEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBldGh0b29sYCwgd2hpY2ggc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLiBCdXQgd2UmIzM5O3JlIHRyeWluZyB0byBnZXQgdG8gYHJ0bDgyNjF4X3Byb2JlYCwgd2hpY2ggbWVhbnMgd2UgbmVlZCBhIFBIWSBkZXZpY2Ugd2l0aCB0aGUgSUQgYFJUTF84MjYxQ19DR2AgKDB4MDAxY2M4OTgpIG9uIGFuIE1ESU8gYnVzLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdG8gaW5zdGFudGlhdGUgdGhhdCBzcGVjaWZpYyBQSFkuCgpJcyB0aGVyZSBhbnkga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIHN5emthbGxlciBjYW4gY29udHJvbCBpbiB0aGUga2VybmVsPyBMZXQgbWUgZXhwbG9yZSB0aGUgb3B0aW9ucy4gSG1tLCBgbWRpby1tb2NrdXBgLCBuby4gYG1kaW8tZ3Bpb2AsIHVubGlrZWx5LiBXaGF0IGFib3V0IGBmaXhlZC1waHlgPyBXb3J0aCBhIGxvb2ssIGJ1dCBJJiMzOTttIGRvdWJ0aW5nIHRoYXQgZ2l2ZXMgdXMgdGhlIGxldmVsIG9mIGNvbnRyb2wgd2UgbmVlZC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIHNlYXJjaCB0aGUgYGRyaXZlcnMvbmV0L3BoeS9gIGRpcmVjdG9yeSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgbWRpb2Agb3IgYHBoeWAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLiptb2NrdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTgwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBCdXMgU29mdHdhcmUgUHJvYmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGEgbWVudGFsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29mdHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgb3IgZHJpdmVyIGhhbmRsaW5nIHRoZSBNRElPIGJ1cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrbm93biBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFuZCBjaGVja2luZyB0aGVpciByZXNwZWN0aXZlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBhbmQgYW55IHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJ1aWxkIHRoZSBjb250ZXh0IG9mIGEgc3lzdGVtIHdoaWNoIHJlbGllcyBvbiBzdWNoIGEgbG93IGxldmVsIGJ1cy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlIE9TLCBvciBhbnkgbG93ZXIgbGV2ZWwgZmlybXdhcmUsIGhhcyBhbHJlYWR5IHRha2VuIHJlc3BvbnNpYmlsaXR5IGZvciB0aGlzIGludGVyZmFjZS4gSXQmIzM5O2xsIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBpZiBzb21lb25lIGVsc2UgaGFzIGFscmVhZHkgbGFpZCB0aGUgZ3JvdW5kd29yaywgYW5kIEkgY2FuIHNpbXBseSBsZXZlcmFnZSB0aGF0IGV4aXN0aW5nIGNvZGUuIElmIHRoZXJlJiMzOTtzIGFuIGV4aXN0aW5nIHNvZnR3YXJlIE1ESU8gYnVzIGluIHBsYWNlLCBJIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGF0IGJ1cywgYW5kIHZlcmlmeSBjb21wYXRpYmlsaXR5IHdpdGggbXkgdXNlLWNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLipzb2Z0d2FyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFZpcnR1YWwgUEhZIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlc2UgdmlydHVhbCBQSFlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSwgdGhlIGhlYXJ0IG9mIHRoZSBQSFkgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgeW91JiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIHByZWRpY3RhYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cCBpbiB0aGVyZS4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUEhZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTIyPWlmIFBIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDpjb25maWcgU1dQSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1LVx0Ym9vbFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjYtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNzpjb25maWcgUEhZX1BBQ0tBR0VcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4LVx0IHRyaXN0YXRlXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwOmNvbmZpZyBMRURfVFJJR0dFUl9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IExFRCB0cmlnZ2VycyBmb3IgdHJhY2tpbmcgbGluayBzdGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXHRkZWZfYm9vbCBPRlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTU1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NTY6Y29uZmlnIEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDtNRElPIEJ1cy9QSFkgZW11bGF0aW9uIHdpdGggZml4ZWQgc3BlZWQvbGluayBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2NTpjb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy02Ni0gICAgICAgIGJvb2wgXCYjMzQ7UnVzdCBQSFlMSUIgYWJzdHJhY3Rpb25zIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz03OT1jb21tZW50IFwmIzM0O01JSSBQSFkgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6ODE6Y29uZmlnIEFTMjFYWFhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy04Mi1cdHRyaXN0YXRlIFwmIzM0O0Flb25zZW1pIEFTMjF4eHggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTkyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTM6Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBBTjg4MDEgR2lnYWJpdCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEwNjpjb25maWcgQUlSX05FVF9QSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTEwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTExOmNvbmZpZyBBTURfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTItXHR0cmlzdGF0ZSBcJiMzNDtBTUQgYW5kIEFsdGltYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTE2OmNvbmZpZyBNRVNPTl9HWExfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtBbWxvZ2ljIE1lc29uIEdYTCBJbnRlcm5hbCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMjM6Y29uZmlnIEFESU5fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMzI6Y29uZmlnIEFESU4xMTAwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMzLVx0dHJpc3RhdGUgXCYjMzQ7QW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBUMUwgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEzOC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzOTpjb25maWcgQU1DQ19RVDIwMjVfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDAtXHR0cmlzdGF0ZSBcJiMzNDtBTUNDIFFUMjAyNSBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0xNDY9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNDg6Y29uZmlnIEFYODg3OTZCX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7QXNpeCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTUzLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU0OmNvbmZpZyBBWDg4Nzk2Ql9SVVNUX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtSdXN0IHJlZmVyZW5jZSBkcml2ZXIgZm9yIEFzaXggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2MS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE2Mjpjb25maWcgQlJPQURDT01fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSA1NFhYIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzAtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNzE6Y29uZmlnIEJDTTU0MTQwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gQkNNNTQxNDAgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgxLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTgyOmNvbmZpZyBCQ002M1hYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgzLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gNjN4eCBTT0NzIGludGVybmFsIFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE4OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE4OTpjb25maWcgQkNNN1hYWF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE5MC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIDd4eHggU09DcyBpbnRlcm5hbCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTk2OmNvbmZpZyBCQ004NDg4MV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTg0ODgxIFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwMTpjb25maWcgQkNNODdYWF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMi1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEJDTTg3MDYgYW5kIEJDTTg3MjcgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwNjpjb25maWcgQkNNX0NZR05VU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEN5Z251cy9PbWVnYSBTb0MgaW50ZXJuYWwgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjE4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjE5OmNvbmZpZyBCQ01fTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjIwLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIyMjpjb25maWcgQkNNX05FVF9QSFlQVFBcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMjU6Y29uZmlnIENJQ0FEQV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyNi1cdHRyaXN0YXRlIFwmIzM0O0NpY2FkYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjI5LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjMwOmNvbmZpZyBDT1JUSU5BX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMxLVx0dHJpc3RhdGUgXCYjMzQ7Q29ydGluYSBFREMgQ0RSIDEwRyBFdGhlcm5ldCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMzU6Y29uZmlnIERBVklDT01fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzYtXHR0cmlzdGF0ZSBcJiMzNDtEYXZpY29tIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzktXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDA6Y29uZmlnIElDUExVU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0MS1cdHRyaXN0YXRlIFwmIzM0O0lDUGx1cyBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjQ0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjQ1OmNvbmZpZyBMWFRfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBMWFQgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0OS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1MDpjb25maWcgSU5URUxfWFdBWV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1MS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFhXQVkgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1Ny1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1ODpjb25maWcgTFNJX0VUMTAxMUNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtMU0kgRVQxMDExQyBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNjM6Y29uZmlnIE1BUlZFTExfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjQtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFsYXNrYSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjY3LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjY4OmNvbmZpZyBNQVJWRUxMXzEwR19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2OS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgQWxhc2thIDEwR2JpdCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjcyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjczOmNvbmZpZyBNQVJWRUxMXzg4UTJYWFhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNzQtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIDg4UTJYWFggUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc5LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjgwOmNvbmZpZyBNQVJWRUxMXzg4WDIyMjJfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yODEtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIDg4WDIyMjIgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mjg2OmNvbmZpZyBNQVhMSU5FQVJfR1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg3LVx0dHJpc3RhdGUgXCYjMzQ7TWF4bGluZWFyIEV0aGVybmV0IFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOTMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyOTQ6Y29uZmlnIE1BWExJTkVBUl84NjExMF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5NS1cdHRyaXN0YXRlIFwmIzM0O01heExpbmVhciBNWEw4NjExMCBQSFkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMwNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMwNy1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwODpjb25maWcgTUlDUkVMX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzA5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcmVsIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTQtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMTU6Y29uZmlnIE1JQ1JPQ0hJUF9UMVNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgMTBCQVNFLVQxUyBFdGhlcm5ldCBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzIwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzIxOmNvbmZpZyBNSUNST0NISVBfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMyNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMyNjpjb25maWcgTUlDUk9DSElQX1QxX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzI3LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIFQxIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMzM6Y29uZmlnIE1JQ1JPQ0hJUF9QSFlfUkRTX1BUUFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMzg6Y29uZmlnIE1JQ1JPU0VNSV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMzOS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc2VtaSBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzQ3OmNvbmZpZyBNT1RPUkNPTU1fUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDgtXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM1Mi1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM1Mzpjb25maWcgTkFUSU9OQUxfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTQtXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTctXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNTg6Y29uZmlnIE5YUF9DQlRYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzU5LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIDEwMEJBU0UtVFggUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM2My1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM2NDpjb25maWcgTlhQX0M0NV9USkExMVhYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzY1LVx0dHJpc3RhdGUgXCYjMzQ7TlhQIEM0NSBUSkExMVhYIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNzEtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNzI6Y29uZmlnIE5YUF9USkExMVhYX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzczLVx0dHJpc3RhdGUgXCYjMzQ7TlhQIFRKQTExeHggUEhZcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc3LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzc4OmNvbmZpZyBOQ04yNjAwMF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3OS1cdHRyaXN0YXRlIFwmIzM0O09uc2VtaSAxMEJBU0UtVDFTIEV0aGVybmV0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTM4NT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGh5L3Fjb20vS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzg2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzg3OmNvbmZpZyBRU0VNSV9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4OC1cdHRyaXN0YXRlIFwmIzM0O1F1YWxpdHkgU2VtaWNvbmR1Y3RvciBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzkyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTMtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTQ6Y29uZmlnIFJFTkVTQVNfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTUtXHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTk6Y29uZmlnIFJPQ0tDSElQX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDAwLVx0dHJpc3RhdGUgXCYjMzQ7Um9ja2NoaXAgRXRoZXJuZXQgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwMy1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQwNDpjb25maWcgU01TQ19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwNS1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQxMD1jb25maWcgU1RFMTBYUFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQxNTpjb25maWcgVEVSQU5FVElDU19QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNi1cdHRyaXN0YXRlIFwmIzM0O1RlcmFuZXRpY3MgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxOS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyMDpjb25maWcgRFA4MzgyMl9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQyMS1cdHRyaXN0YXRlIFwmIzM0O1RleGFzIEluc3RydW1lbnRzIERQODM4MjIvODI1LzgyNiBQSFlzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDI1LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDI2OmNvbmZpZyBEUDgzVEM4MTFfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MjctXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEM4MTEgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDMxOmNvbmZpZyBEUDgzODQ4X1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMyLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4Mzg0OCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MzUtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzY6Y29uZmlnIERQODM4NjdfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MzctXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzODY3IEdpZ2FiaXQgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQwLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDQxOmNvbmZpZyBEUDgzODY5X1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQyLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4Mzg2OSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ0Ni1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ0Nzpjb25maWcgRFA4M1RENTEwX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgRFA4M1RENTEwIEV0aGVybmV0IDEwQmFzZS1UMUwgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDUyLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDUzOmNvbmZpZyBEUDgzVEc3MjBfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NTQtXHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEc3MjAgRXRoZXJuZXQgMTAwMEJhc2UtVDEgUEhZXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY2LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDY3OmNvbmZpZyBWSVRFU1NFX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY4LVx0dHJpc3RhdGUgXCYjMzQ7Vml0ZXNzZSBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipFbXVsYXRpbmcgYSBQSFkgLSBXaGVyZSB0byBTdGFydD8qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHNpbXVsYXRlIGEgUEhZIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nLCBpcyB0aGVyZSBhIGdvb2QgYXBwcm9hY2ggb3IgYSBwcmUtZXhpc3RpbmcgbWV0aG9kIHRvIGVtdWxhdGUgYSBwaHlzaWNhbCBsYXllciBkZXZpY2U/IExldCBtZSB0aGluay4uLiB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGNvZGUgcmVsYXRlZCB0byB0aGlzLiBZZXMsIHRoZXJlIGl0IGlzISAqZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jKi4gRXhjZWxsZW50LiBUaGF0JiMzOTtzIHByb2JhYmx5IG15IGJlc3Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIG15IGdvYWwgaXMgdG8gZW11bGF0ZSAqYW55KiBQSFkgSUQuIENhbiBJIGxldmVyYWdlIHRoaXMgYGZpeGVkX3BoeWAgZHJpdmVyIHRvIGFjaGlldmUgdGhhdD8gSSYjMzk7bSBob3BpbmcgSSBjYW4gY29uZmlndXJlIGl0IHRvIHByZXNlbnQgaXRzZWxmIHdpdGggYW4gYXJiaXRyYXJ5IFBIWSBJRC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoYXQgbW9kaWZpY2F0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbWVldCB0aGF0IGdvYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihwaHlkZXZzW2ldKSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0MjpcdFx0XHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXZzW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9GSVhFRF9QSFlTOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcdFx0cGh5ZGV2c1tpXSA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI3MzpcdFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMjc0LVx0XHRpZiAoIUlTX0VSUihwaHlkZXYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzIyLVx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjMyMzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjQtXHRtZGlvYnVzX3VucmVnaXN0ZXIobWlpX2J1cyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYz0xNDM5PWludCBiZ21hY19waHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IGJnbWFjICpiZ21hYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XHRzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmcGh5X3N0YXR1cyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0Mi1cdFx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM6MTQ0OTpcdHBoeV9kZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDUwLVx0aWYgKElTX0VSUihwaHlfZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTk3PXZvaWQgYmNtZ2VuZXRfbWlpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTE3OnN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMTg6XHRcdFx0XHRcdCAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTExOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTg2PXN0YXRpYyB2b2lkIGJjbWdlbmV0X21vY2FfcGh5X3NldHVwKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cdGlmIChiY21nZW5ldF9oYXNfbW9jYV9saW5rX2RldChwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjE4OTpcdFx0Zml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShwcml2LVx1MDAzZWRldi1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxOTA6XHRcdFx0XHRcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE5MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtNjYtLyogRm9yIE5DLVNJIHRvIHJlZ2lzdGVyIGEgZml4ZWQtbGluayBwaHkgZGV2aWNlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTY4LVx0LmxpbmsgPSAxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTc4MD1zdGF0aWMgdm9pZCBmdGdtYWMxMDBfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXHRpZiAocHJpdi1cdTAwM2V1c2VfbmNzaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODQ4PXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX25jc2koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE4Njc6XHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2bmNzaV9waHlfc3RhdHVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4NjgtXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODEtZXJyX3JlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE4ODMtZXJyX3JlZ2lzdGVyX25kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVx0XHRcdG5ldGRldl9pbmZvKG5kZXYsIFwmIzM0O25vIFBIWSwgYXNzdW1pbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gc3dpdGNoXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMwMDM6XHRcdFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cdFx0XHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxMy1cdFx0XHRpZiAocGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcdFx0XHRcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAxNS1cdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2NvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz00MjI4PWZlY19lbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQyNDMtXHRpZiAoIWZlcC1cdTAwM2VwaHlfbm9kZSBcdTAwMjZcdTAwMjYgcGh5X2lzX3BzZXVkb19maXhlZF9saW5rKHBoeV9kZXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcdFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MzEzMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDEtXHQubmRvX2dldF9zdGF0czY0ID0gZ2Zhcl9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcdC5uZG9fY2hhbmdlX2NhcnJpZXIgPSBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTMxNDMtXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjI4PXZvaWQgaGJnX3BoeV9zdG9wKHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjMzOnN0YXRpYyB2b2lkIGhiZ19maXhlZF9waHlfdW5pbml0KHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzNTpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKChzdHJ1Y3QgcGh5X2RldmljZSAqKWRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIzODpzdGF0aWMgaW50IGhiZ19maXhlZF9waHlfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI0MDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGhiZ19maXhlZF9waHlfc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXHRcdC5saW5rID0gMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjUxOlx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNmhiZ19maXhlZF9waHlfc3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjUyLVx0aWYgKElTX0VSUihwaHlkZXYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGhiZ19maXhlZF9waHlfdW5pbml0LCBwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM9MjY2PWludCBoYmdfbWRpb19pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI3NS1cdGlmIChtYWMtXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6Mjc2Olx0XHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDEzLXtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQxNDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDE1LVx0c3RydWN0IGRldmljZV9ub2RlICpmaXhlZF9saW5rX25vZGU7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDU5LXJlZ2lzdGVyX3BoeTpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ2MDpcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFx1MDAyNnN0YXR1cywgbnApKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ2MS19XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDY0PXZvaWQgb2ZfcGh5X2RlcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ3MjpcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19EUDgzVEc3MjBfUEhZKVx0JiM0Mzs9IGRwODN0ZzcyMC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcdFx0JiM0Mzs9IGZpeGVkX3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX0lDUExVU19QSFkpXHQmIzQzOz0gaWNwbHVzLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjctXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6Mjg6c3RydWN0IGZpeGVkX3BoeSB7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMwOlx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjMxOlx0aW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzMtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzQ6c3RhdGljIERFQ0xBUkVfQklUTUFQKGZpeGVkX3BoeV9pZHMsIE5VTV9GUCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zNi1zdGF0aWMgc3RydWN0IG1paV9idXMgKmZtYl9taWlfYnVzO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTM3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0zOS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDA6XHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyAmIzQzOyBhZGRyIDogTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDItXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NDM6aW50IGZpeGVkX3BoeV9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00NS1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjQ2Olx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTUwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYwLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjYzOlx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02Ni1cdGlmICghZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTc1PXN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo4NjppbnQgZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTg3LVx0XHRcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04OS17XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTA6XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6OTU6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTk2LVx0aWYgKCFmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTAzLX1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNjpzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMDcte1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwOS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTEtXHRpZiAoIWZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMTQtXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTU6XHRjbGVhcl9iaXQocGh5X2FkZHIsIGZpeGVkX3BoeV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE3LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjExODpzdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTIyLVx0ZG8ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEyMzpcdFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjQtXHRcdGlmIChhZGRyID09IE5VTV9GUClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjUtXHRcdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTI2Olx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTMxOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXR1cyxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDUtXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNDY6XHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVx0aWYgKHBoeV9hZGRyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNDktXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUwOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTUxOlx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cy5saW5rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1NC1cdGlmIChJU19FUlIocGh5KSkge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1NTpcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU2LVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY2LVx0XHRvZl9ub2RlX3B1dChucCk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTY3Olx0XHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjgtXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3OC1cdFx0LnNwZWVkXHQ9IFNQRUVEXzEwMCxcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODY6dm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4Ny17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4OS1cdG9mX25vZGVfcHV0KHBoeS1cdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTA6XHRmaXhlZF9waHlfZGVsKHBoeS1cdTAwM2VtZGlvLmFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5MS1cdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzYxPXN0YXRpYyBpbnQgcGh5bGlua19taWlfZW11bF9yZWFkKHVuc2lnbmVkIGludCByZWcsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM2NDpcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZzO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVx0dW5zaWduZWQgbG9uZyAqbHBhID0gc3RhdGUtXHUwMDNlbHBfYWR2ZXJ0aXNpbmc7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNC0gKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6NTogKiBDb2RlIHRha2VuIGZyb20gZml4ZWRfcGh5LmMgYnkgUnVzc2VsbCBLaW5nLlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTcxPXN0YXRpYyBpbnQgc3dwaHlfZGVjb2RlX3NwZWVkKGludCBzcGVlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjkzOmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9MTA2PUVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3ZhbGlkYXRlX3N0YXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTQtICovXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNC1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC02LVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6NzppbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC05LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NzpzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyB7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTgtXHRpbnQgc3BlZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0xNj1zdHJ1Y3QgbmV0X2RldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19GSVhFRF9QSFkpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjE5OmV4dGVybiBpbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTIzLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNDpleHRlcm4gdm9pZCBmaXhlZF9waHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI2LVx0XHRcdGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyNzpcdFx0XHRcdFx0ICAgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKikpO1xuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yOC0jZWxzZVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MzA6Zml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTMxLVx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjM2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCh2b2lkKVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0zNy17XG4tLVxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC00MC1cbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBQSFkgRW11bGF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIHVzaW5nIHRoZSByaWdodCB0b29sIGhlcmUuIGBmaXhlZF9waHlgIGlzIGRlZmluaXRlbHkgbm90IHRoZSB3YXkgdG8gZ28gZm9yIHRoaXM7IGl0JiMzOTtzIGRlc2lnbmVkIGZvciBmaXhlZCBsaW5rcywgbm90IGVtdWxhdGluZyBhcmJpdHJhcnkgUEhZIGJlaGF2aW9yLiBTbywgc2NyYXRjaCB0aGF0IGlkZWEuIEkgbmVlZCBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2guIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgdGhlcmU/IE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG1kaW8tbW9ja3VwYCwgYnV0Li4uIHdhaXQsIEkmIzM5O3ZlIGFscmVhZHkgdHJpZWQgc2VhcmNoaW5nIGZvciB0aGF0LCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBkaWQgYSBwcmV0dHkgdGhvcm91Z2ggc2VhcmNoLCBzcGVjaWZpY2FsbHkgdXNpbmcgYG1kaW8uKm1vY2t1cGAgYW5kIGNhbWUgdXAgZW1wdHkuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gYG1kaW8tZ3Bpb2AgZHJpdmVyIG9yIHNvbWV0aGluZyBvZiB0aGF0IG5hdHVyZT8gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBpbnNpZGUgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4cGxvcmUgdGhlIGxhbmRzY2FwZSBvZiBNRElPIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpX21kaW8uYyYjMzQ7LAogICAgJiMzNDtmd25vZGVfbWRpby5jJiMzNDssCiAgICAmIzM0O21kaW8tYWlyb2hhLmMmIzM0OywKICAgICYjMzQ7bWRpby1hc3BlZWQuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLXVuaW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYml0YmFuZy5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uaCYjMzQ7LAogICAgJiMzNDttZGlvLWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWhpc2ktZmVtYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWkyYy5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxNDAxOS5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxODA2NC5jJiMzNDssCiAgICAmIzM0O21kaW8tbW94YXJ0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tc2NjLW1paW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY202MzY4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWcxMmEuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1neGwuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tbWlvcmVnLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbXVsdGlwbGV4ZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXZ1c2IuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9jdGVvbi5jJiMzNDssCiAgICAmIzM0O21kaW8tcGljNjRocHNjLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlZ21hcC5jJiMzNDssCiAgICAmIzM0O21kaW8tc3VuNGkuYyYjMzQ7LAogICAgJiMzNDttZGlvLXRodW5kZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLXhnZW5lLmMmIzM0OywKICAgICYjMzQ7b2ZfbWRpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBCdXMgRW11bGF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYG1kaW8tbXZ1c2IuY2AgdGhpbmcuLi4gbm9wZSwgdGhhdCYjMzk7cyBNYXJ2ZWxsIFVTQiBNRElPLiBOb3Qgd2hhdCBJIG5lZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgY29uanVyZSB1cCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgb3V0IG9mIHRoaW4gYWlyIGZvciB0ZXN0aW5nPyBTeXprYWxsZXImIzM5O3MgZ290IHRob3NlIGBuZXRsaW5rYCBhbmQgYGV0aHRvb2xgIHRvb2xzIHRvIHRhbGsgdG8gZXhpc3RpbmcgUEhZcywgYnV0IEkgbmVlZCB0byBoaXQgYHJ0bDgyNjF4X3Byb2JlYCwgd2hpY2ggbWVhbnMgSSAqYWJzb2x1dGVseSogbmVlZCBhIFBIWSB3aXRoIHRoZSBJRCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkuIEEgZGlyZWN0IGluamVjdGlvbiBvZiB0aGUgUEhZIElEIHdvdWxkIGJlIGlkZWFsLCBidXQgaXMgdGhhdCBldmVuIHBvc3NpYmxlPwoKV2FpdCBhIG1pbnV0ZSwgaWYgU3l6a2FsbGVyIGNhbiBzcGluIHVwIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBhbmQgaGF2ZSBpdCByZWdpc3RlciBhbiBNRElPIGJ1cy4uLiBhbmQgKmlmKiBJIGNhbiBjb250cm9sIHRoZSByZXNwb25zZXMgZnJvbSB0aGF0IE1ESU8gYnVzLi4uIHRoYXQmIzM5O3MgdGhlIHRpY2tldCEgU28sIHdoZXJlJiMzOTtzIHRoZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgZG9lcyB0aGlzPyBMZXQmIzM5O3Mgc2VlLi4uIGBtYWNzZWNgPyBOb3BlLiBgdmV0aGA/IE5vIE1ESU8uIGBkdW1teWAsIGB0dW5gPyBOYWRhLiBPa2F5LCB3aGF0IGFib3V0IGBuZXRkZXZzaW1gPyBEb2VzIGBuZXRkZXZzaW1gIGhhdmUgYW4gTURJTyBidXM/IFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBnZXR0aW5nIGNsb3NlLCBzbyB0aGF0JiMzOTtzIHRoZSBuZXh0IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIEFkYXB0ZXIgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZXhwYW5kIHRoZSBmdXp6aW5nIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBVU0IgbmV0d29yayBhZGFwdGVyczsgc29tZSwgSSByZW1lbWJlciwgaW5jb3Jwb3JhdGUgTURJTyBidXNlcyBhbmQgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcyAoUEhZcykuIEFuZCB0aGVuIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZW11bGF0aW5nIFVTQiBkZXZpY2VzIHVzaW5nIGB2aGNpYC4gU28sIHRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBmb3IgU3l6a2FsbGVyIHRvIHNpbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciwgdGhpbmdzIGxpa2UgYHNtc2M5NXh4YCwgYHI4MTUyYCwgb3IgYGFzaXhgLCBmb3IgZXhhbXBsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgcmVnaXN0ZXJzLCBpdCBjb3VsZCBzdWJzZXF1ZW50bHkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBuZXh0IGF0dGFjayBzdXJmYWNlIGlzLiBUaGVyZWZvcmUsIGl0IG1ha2VzIHNlbnNlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYHI4MTUyYCBkcml2ZXIgbGV2ZXJhZ2VzIFBIWUxJQi4gVGhhdOKAmXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTY2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqTURJT2J1cyBSZWdpc3RlcjogQSBRdWljayBTY2FuKioKCldhaXQsIGBtZGlvYnVzX3JlZ2lzdGVyYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhleSYjMzk7cmUgdXNpbmc/IEludGVyZXN0aW5nLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRyeWluZyB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaGVyZSwgd2hhdCBraW5kIG9mIE1ESU8gYnVzIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSXMgdGhpcyBzdGFuZGFyZCBFdGhlcm5ldCwgc29tZXRoaW5nIHByb3ByaWV0YXJ5LCBvciBhIHNwZWNpYWxpemVkIHZhcmlhbnQ/IFRoZSBjaG9pY2Ugb2YgYG1kaW9idXNfcmVnaXN0ZXJgIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhZGQgYSBuZXcgTURJTyBidXMgaW5zdGFuY2UgdG8gdGhlIHN5c3RlbSwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIHRoZXkgYXJlIGVpdGhlciBkZWFsaW5nIHdpdGggYSBuZXcgaGFyZHdhcmUgZGV2aWNlLCBvciBkeW5hbWljYWxseSBtYW5hZ2luZyBhbiBleGlzdGluZyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBidXMgaXMgZGVzaWduZWQgdG8gdGFsayB0by4gSXMgaXQganVzdCBQSFlzLCBvciBhcmUgdGhlcmUgb3RoZXIgTURJTy1jb21wYXRpYmxlIGNvbXBvbmVudHMgaW4gdGhlIG1peD8gVGhpcyByZWdpc3RyYXRpb24gcG9pbnQgaXMgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwga2V5IHRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGNvbWUgdG8gbWluZDogd2hhdCBpcyBpdHMgZHJpdmVyIGFuZCBwbGF0Zm9ybSBkYXRhPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjgwOlx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtODEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDcwPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDttZGlvXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVx1MDAzZW1kaW9idXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQxLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTczOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIEJ1cyBNYW5pcHVsYXRpb24gdGhyb3VnaCBVU0IgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGlkZWEgYnJld2luZy4uLiBJIHNlZSB0aGF0IGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGF4ODgxNzJhYCwgYW5kIGBhc2l4X2RldmljZXNgIGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gSW50ZXJlc3RpbmchIElmIEkgY2FuIGxldmVyYWdlIHN5emthbGxlciB0byBlbXVsYXRlIG9uZSBvZiB0aGVzZSBVU0IgZGV2aWNlcyB1c2luZyBgdmhjaWAsIEkgY2FuIGludGVyY2VwdCB0aGUgVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGludm9sdmVkIGluIHJlYWRpbmcgYW5kIHdyaXRpbmcgTURJTyByZWdpc3RlcnMuIFRoZSBrZXkgaXMgaW4gdGhlIGNvbnRyb2wgdHJhbnNmZXJzLgoKSGFuZyBvbi4uLiBpZiBJIGZvY3VzIG9uIGVtdWxhdGluZyBgc21zYzk1eHhgLCB0aGUgYHNtc2M5NXh4YCBkcml2ZXIgd2lsbCB0cnkgdG8gZ2V0IHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMgdGhyb3VnaCBVU0IgY29udHJvbCBtZXNzYWdlcy4gQnJpbGxpYW50ISBJIGNhbiBoYXZlIHN5emthbGxlciByZXNwb25kIHRvIHRoaXMgd2l0aCB0aGUgUEhZIElEIG9mIGBSVExfODI2MUNfQ0dgLCB3aGljaCBpcyBgMHgwMDFjYzg5OGAuCgpUaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCB0aGUgUEhZIHN1YnN5c3RlbSAqc2hvdWxkKiB0aGVuIHBpY2sgdXAgb24gdGhpcyBJRCwgbG9hZCB0aGUgYHJlYWx0ZWtgIFBIWSBkcml2ZXIsIGFuZCB1bHRpbWF0ZWx5IGNhbGwgYHJ0bDgyNjF4X3Byb2JlYC4gVGhpcyBvcGVucyB1cCBhIHBvdGVudGlhbCB0ZXN0aW5nIHZlY3Rvci4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNtc2M5NXh4YCBkb2VzbiYjMzk7dCBoYXZlIHNvbWUga2luZCBvZiBzYW5pdHkgY2hlY2sgb24gdGhlIFBIWSBJRCBpdCByZWNlaXZlcywgdGhvdWdoLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IHZlcmlmeSBpZiBpdCBhbGxvd3MgYXJiaXRyYXJ5IFBIWSBJRHMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDc6XHRzdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbjExNDg6XHR7XG4xMTQ5Olx0XHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XG4xMTUwOlx0XHRjaGFyIHVzYl9wYXRoWzY0XTtcbjExNTE6XHRcdGludCByZXQsIHBoeV9pcnE7XG4xMTUyOlx0XHR1MzIgdmFsO1xuMTE1MzpcdFxuMTE1NDpcdFx0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbjExNTU6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjExNTY6XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbjExNTc6XHRcdFx0cmV0dXJuIHJldDtcbjExNTg6XHRcdH1cbjExNTk6XHRcbjExNjA6XHRcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcbjExNjE6XHRcdGlmICghcGRhdGEpXG4xMTYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE2MzpcdFxuMTE2NDpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcGRhdGE7XG4xMTY1Olx0XG4xMTY2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZGF0YS1cdTAwM2VtYWNfY3JfbG9jayk7XG4xMTY3Olx0XG4xMTY4Olx0XHQvKiBMQU45NXh4IGRldmljZXMgZG8gbm90IGFsdGVyIHRoZSBjb21wdXRlZCBjaGVja3N1bSBvZiAwIHRvIDB4ZmZmZi5cbjExNjk6XHRcdCAqIFJGQyAyNDYwLCBpcHY2IFVEUCBjYWxjdWxhdGVkIGNoZWNrc3VtIHlpZWxkcyBhIHJlc3VsdCBvZiB6ZXJvIG11c3RcbjExNzA6XHRcdCAqIGJlIGNoYW5nZWQgdG8gMHhmZmZmLiBSRkMgNzY4LCBpcHY0IFVEUCBjb21wdXRlZCBjaGVja3N1bSBpcyB6ZXJvLFxuMTE3MTpcdFx0ICogaXQgaXMgdHJhbnNtaXR0ZWQgYXMgYWxsIG9uZXMuIFRoZSB6ZXJvIHRyYW5zbWl0dGVkIGNoZWNrc3VtIG1lYW5zXG4xMTcyOlx0XHQgKiB0cmFuc21pdHRlciBnZW5lcmF0ZWQgbm8gY2hlY2tzdW0uIEhlbmNlLCBlbmFibGUgY3N1bSBvZmZsb2FkIG9ubHlcbjExNzM6XHRcdCAqIGZvciBpcHY0IHBhY2tldHMuXG4xMTc0Olx0XHQgKi9cbjExNzU6XHRcdGlmIChERUZBVUxUX1RYX0NTVU1fRU5BQkxFKVxuMTE3NjpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTtcbjExNzc6XHRcdGlmIChERUZBVUxUX1JYX0NTVU1fRU5BQkxFKVxuMTE3ODpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNO1xuMTE3OTpcdFxuMTE4MDpcdFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuMTE4MTpcdFx0c2V0X2JpdChFVkVOVF9OT19JUF9BTElHTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbjExODI6XHRcbjExODM6XHRcdHNtc2M5NXh4X2luaXRfbWFjX2FkZHJlc3MoZGV2KTtcbjExODQ6XHRcbjExODU6XHRcdC8qIEluaXQgYWxsIHJlZ2lzdGVycyAqL1xuMTE4NjpcdFx0cmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTtcbjExODc6XHRcdGlmIChyZXQpXG4xMTg4Olx0XHRcdGdvdG8gZnJlZV9wZGF0YTtcbjExODk6XHRcbjExOTA6XHRcdC8qIGNyZWF0ZSBpcnEgZG9tYWluIGZvciB1c2UgYnkgUEhZIGRyaXZlciBhbmQgR1BJTyBjb25zdW1lcnMgKi9cbjExOTE6XHRcdHVzYl9tYWtlX3BhdGgoZGV2LVx1MDAzZXVkZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTtcbjExOTI6XHRcdHBkYXRhLVx1MDAzZWlycWZ3bm9kZSA9IGlycV9kb21haW5fYWxsb2NfbmFtZWRfZndub2RlKHVzYl9wYXRoKTtcbjExOTM6XHRcdGlmICghcGRhdGEtXHUwMDNlaXJxZndub2RlKSB7XG4xMTk0Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xMTk1Olx0XHRcdGdvdG8gZnJlZV9wZGF0YTtcbjExOTY6XHRcdH1cbjExOTc6XHRcbjExOTg6XHRcdHBkYXRhLVx1MDAzZWlycWRvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2xpbmVhcihwZGF0YS1cdTAwM2VpcnFmd25vZGUsXG4xMTk5Olx0XHRcdFx0XHRcdFx0ICAgIFNNU0M5NVhYX05SX0lSUVMsXG4xMjAwOlx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlycV9kb21haW5fc2ltcGxlX29wcyxcbjEyMDE6XHRcdFx0XHRcdFx0XHQgICAgcGRhdGEpO1xuMTIwMjpcdFx0aWYgKCFwZGF0YS1cdTAwM2VpcnFkb21haW4pIHtcbjEyMDM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEyMDQ6XHRcdFx0Z290byBmcmVlX2lycWZ3bm9kZTtcbjEyMDU6XHRcdH1cbjEyMDY6XHRcbjEyMDc6XHRcdHBoeV9pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcocGRhdGEtXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpO1xuMTIwODpcdFx0aWYgKCFwaHlfaXJxKSB7XG4xMjA5Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xMjEwOlx0XHRcdGdvdG8gcmVtb3ZlX2lycWRvbWFpbjtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdHBkYXRhLVx1MDAzZWlycWNoaXAgPSBkdW1teV9pcnFfY2hpcDtcbjEyMTQ6XHRcdHBkYXRhLVx1MDAzZWlycWNoaXAubmFtZSA9IFNNU0NfQ0hJUE5BTUU7XG4xMjE1Olx0XHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShwaHlfaXJxLCBcdTAwMjZwZGF0YS1cdTAwM2VpcnFjaGlwLFxuMTIxNjpcdFx0XHRcdFx0ICAgICAgaGFuZGxlX3NpbXBsZV9pcnEsIFwmIzM0O3BoeVwmIzM0Oyk7XG4xMjE3Olx0XG4xMjE4Olx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xuMTIxOTpcdFx0aWYgKCFwZGF0YS1cdTAwM2VtZGlvYnVzKSB7XG4xMjIwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xMjIxOlx0XHRcdGdvdG8gZGlzcG9zZV9pcnE7XG4xMjIyOlx0XHR9XG4xMjIzOlx0XG4xMjI0Olx0XHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgXHUwMDI2dmFsKTtcbjEyMjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjI2Olx0XHRcdGdvdG8gZnJlZV9tZGlvO1xuMTIyNzpcdFxuMTIyODpcdFx0cGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5ID0gISh2YWwgXHUwMDI2IEhXX0NGR19QU0VMXyk7XG4xMjI5Olx0XHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuMTIzMDpcdFx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXBoeV9tYXNrID0gfigxdSBcdTAwM2NcdTAwM2MgU01TQzk1WFhfSU5URVJOQUxfUEhZX0lEKTtcbjEyMzE6XHRcbjEyMzI6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbjEyMzM6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcmVhZCA9IHNtc2M5NXh4X21kaW9idXNfcmVhZDtcbjEyMzQ6XHRcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xuMTIzNTpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZXNldCA9IHNtc2M5NXh4X21kaW9idXNfcmVzZXQ7XG4xMjM2Olx0XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtzbXNjOTV4eC1tZGlvYnVzXCYjMzQ7O1xuMTIzNzpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VwYXJlbnQgPSBcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG4xMjM4Olx0XG4xMjM5Olx0XHRzbnByaW50ZihwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlaWQpLFxuMTI0MDpcdFx0XHQgXCYjMzQ7dXNiLSUwM2Q6JTAzZFwmIzM0OywgZGV2LVx1MDAzZXVkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSwgZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2bnVtKTtcbjEyNDE6XHRcbjEyNDI6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG4xMjQzOlx0XHRpZiAocmV0KSB7XG4xMjQ0Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbjEyNDU6XHRcdFx0Z290byBmcmVlX21kaW87XG4xMjQ2Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTg1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkgQ29uZmlndXJhdGlvbiBmb3IgU01TQzk1WFggRHJpdmVyKioKCk9rYXksIHllcywgdGhpcyBpcyBnb29kLiBJZiBgSFdfQ0ZHX1BTRUxfYCBpcyBlbmFibGVkLCB0aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZXJuYWwgUEhZLCBhbmQgdGhhdCBvcGVucyB1cCB0aGUgYHBoeV9tYXNrYCDigJMgd2UgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgcmVzdHJpY3Rpb25zIHRoZXJlLiBFdmVuIGlmIGl0ICppcyogYW4gaW50ZXJuYWwgUEhZLCBTeXprYWxsZXIgY2FuIHN0aWxsIGhhbmQgdXMgdGhlIFBIWSBJRCB0aHJvdWdoIGBTTVNDOTVYWF9JTlRFUk5BTF9QSFlfSURgLCB3aGljaCBpcyBwcmVkaWN0YWJseSAxLgoKUmlnaHQsIHNvIHdoZW4gYG1kaW9idXNfcmVnaXN0ZXJgIGlzIGludm9rZWQsIHRoYXQmIzM5O3Mgd2hlbiB0aGUgUEhZIElEIHNjYW4gaGFwcGVucywgaXQmIzM5O3MgYWxsIGFib3V0IHJlYWRpbmcgdGhvc2UgSURzLiBBbmQgc2luY2UgU3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgdGhvc2UgVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGZvciBgc21zYzk1eHhfbWRpb2J1c19yZWFkYCwgd2UgY2FuIGZlZWQgaXQgdGhlIHZhbHVlcyBpdCYjMzk7cyBleHBlY3RpbmcuIExldCYjMzk7cyBzZWUuLi4gZm9yIFBIWSBJRCAxLCB3ZSBjYW4gcmV0dXJuIGAweDAwMWNgLCBhbmQgYDB4Yzg5OGAgZm9yIElEIDIsIGFuZCBzbyBvbi4KCldhaXQgYSBzZWNvbmQuLi4gV2hhdCYjMzk7cyB0aGlzIGFib3V0IGBSVExfODI2MUNfQ0dgPyBUaGF0IGxvb2tzIGxpa2UgYSBDbGF1c2UgNDUgUEhZLiBUaGF0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQmIzM5O3MgZGlnIGludG8gYHJlYWx0ZWtfbWFpbi5jYCBhbmQgc2VlIGlmIHRoZSBkcml2ZXIgY29ycmVjdGx5IGhhbmRsZXMgQ2xhdXNlIDIyIG9yIENsYXVzZSA0NSBhY2Nlc3Nlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIGFjY2VzcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBSVEwgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLiBHb3R0YSBjb25maXJtIHRoYXQgdGhlIGRyaXZlciBrbm93cyBob3cgdG8gdGFsayB0byB0aGlzIFBIWS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRMXzgyNjFDX0NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjU5LSNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcdFx0XHRcdDB4MDAxY2M4OThcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI2MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYz0zMDc0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkxLVx0fSwge1xuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM6MzM5MjpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFJUTF84MjYxQ19DRyksXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkzLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgxMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUEhZIElEIE1hdGNoaW5nIGFuZCBDbGF1c2UgNDUgU3VwcG9ydCoqCgpPa2F5LCBzbyBgUEhZX0lEX01BVENIX0VYQUNUYCBtZWFucyBhIHByZWNpc2UgUEhZIElEIG1hdGNoIOKAkyBub3RoaW5nIGFtYmlndW91cyB0aGVyZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHNwZWNpZmljIHNjZW5hcmlvIG5lY2Vzc2l0YXRlIENsYXVzZSA0NSBzdXBwb3J0PyBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYFJUTF84MjYxQ19DR2AgdXRpbGl6ZXMgQ2xhdXNlIDQ1LiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSBzdHJvbmcgY29ubmVjdGlvbiwgYXMgaXQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfcG1hX3N1c3BlbmRgLCBhbmQgYGdlbnBoeV9jNDVfcG1hX3Jlc3VtZWAgdG8gaXRzIGBwaHlfZHJpdmVyYCBzdHJ1Y3QuIEZ1cnRoZXJtb3JlLCBgcnRsODI2MXhfcHJvYmVgIGV4cGxpY2l0bHkgZW1wbG95cyBgcGh5X3dyaXRlX21tZGAgYW5kIGBwaHlfcmVhZF9tbWRgLCB3aGljaCBhcmUsIGJ5IGRlZmluaXRpb24sIENsYXVzZSA0NSBvcGVyYXRpb25zLiBUaGF0IGZlZWxzIHByZXR0eSBkZWZpbml0aXZlLgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIHRob3NlIGNhbGxzICpzdWdnZXN0KiBDbGF1c2UgNDUsIEkgcmVjYWxsIHRoYXQgYHBoeV9yZWFkX21tZGAgaGFzIGEgYml0IG9mIGZsZXhpYmlsaXR5LiBJdCAqY291bGQqIG9wZXJhdGUgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzLCBwcm92aWRlZCB0aGUgUEhZIGhhcyB0aGUgY2FwYWJpbGl0eSwgb3IgZGlyZWN0bHkgdXNpbmcgQ2xhdXNlIDQ1IGlmIHRoZSBidXMgc3VwcG9ydHMgaXQuIEkgbmVlZCB0byBrZWVwIHRoZSBhbWJpZ3VpdHkgaW4gbWluZC4KClNvLCAqZG9lcyogYHNtc2M5NXh4YCBoYXZlIENsYXVzZSA0NSBzdXBwb3J0PyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYHNtc2M5NXh4YCBoYW5kbGVzIGl0cyBNRElPIGJ1cyByZWFkcywganVzdCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjM2Olx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbiAyMzc6XHRcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFcnJvciB3cml0aW5nIE1JSV9EQVRBXFxuXCYjMzQ7KTtcbiAyMzg6XHRcdFx0Z290byBkb25lO1xuIDIzOTpcdFx0fVxuIDI0MDpcdFxuIDI0MTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXG4gMjQyOlx0XHRhZGRyID0gbWlpX2FkZHJlc3NfY21kKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEVfIHwgTUlJX0JVU1lfKTtcbiAyNDM6XHRcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcbiAyNDQ6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyNDU6XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuIDI0NjpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHdyaXRpbmcgTUlJX0FERFJcXG5cJiMzNDspO1xuIDI0NzpcdFx0XHRnb3RvIGRvbmU7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4gMjUwOlx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDI1MTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDI1MjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtUaW1lZCBvdXQgd3JpdGluZyBNSUkgcmVnICUwMlhcXG5cJiMzNDssIGlkeCk7XG4gMjUzOlx0XHRcdGdvdG8gZG9uZTtcbiAyNTQ6XHRcdH1cbiAyNTU6XHRcbiAyNTY6XHRkb25lOlxuIDI1NzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VwaHlfbXV0ZXgpO1xuIDI1ODpcdH1cbiAyNTk6XHRcbiAyNjA6XHRzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcbiAyNjE6XHR7XG4gMjYyOlx0XHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XG4gMjYzOlx0XHRzdHJ1Y3QgdXNibmV0ICpkZXY7XG4gMjY0Olx0XHR1MzIgdmFsO1xuIDI2NTpcdFx0aW50IHJldDtcbiAyNjY6XHRcbiAyNjc6XHRcdGRldiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDI2ODpcdFx0cGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjY5Olx0XG4gMjcwOlx0XHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuIDI3MTpcdFx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gMjc0Olx0XG4gMjc1Olx0XHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIFBNX0NUUkwsIFx1MDAyNnZhbCk7XG4gMjc2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI3NzpcdFx0XHRnb3RvIHJlc2V0X291dDtcbiAyNzg6XHRcbiAyNzk6XHRcdHZhbCB8PSBQTV9DVExfUEhZX1JTVF87XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBQTV9DVFJMLCB2YWwpO1xuIDI4MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyODM6XHRcdFx0Z290byByZXNldF9vdXQ7XG4gMjg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipUcmFjaW5nIGEgTWlzc2luZyBGdW5jdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGxvb2tpbmcgZm9yIGBzbXNjOTV4eF9tZGlvYnVzX3JlYWRgLCBidXQgaXQmIzM5O3Mgbm90IHBvcHBpbmcgdXAgd2hlcmUgSSBleHBlY3RlZC4gVGhhdCYjMzk7cyB1bnVzdWFsLiBJdCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gQWxyaWdodCwgbm8gdGltZSB0byB3YXN0ZSDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbXNjOTV4eF9tZGlvYnVzX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yNjA9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjk2LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6Mjk3OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzMi1cdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjM0LVx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IHNtc2M5NXh4X21kaW9idXNfd3JpdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc21zYzk1eHhfbWRpb2J1c19yZWFkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nIE1ESU8gYnVzIHRyYW5zYWN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSByZWFkIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBmb3IgdGhlIGtleSBlbGVtZW50czogaG93IGlzIHRoZSBNRElPIGFkZHJlc3MgY29uZmlndXJlZD8gV2hhdCYjMzk7cyB0aGUgdGltaW5nIGFuZCBzZXF1ZW5jZSBvZiBzaWduYWxzIGJlaW5nIGdlbmVyYXRlZD8gQXJlIHRoZXkgdXNpbmcgYW55IGhhcmR3YXJlIHNwZWNpZmljIHJlZ2lzdGVycyBvciBtYWNyb3M/IElzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgbGlrZSByZXRyaWVzIG9yIHRpbWVvdXQgbWVjaGFuaXNtcz8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgdHJhbnNsYXRpb24gb2YgdGhlIHN0YW5kYXJkIE1ESU8gcmVhZCBwcm90b2NvbCBpbnRvIHRoZSBjb2RlLCBhbmQgaG93IHRoZXkgYXJlIGFjY291bnRpbmcgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIFNNU0M5NXh4IFBIWSBjaGlwLiBJIHdpbGwgZXhwZWN0IGEgbG9vcCBhbmQgYSBzdGF0dXMgcmVhZCwgYW5kIHRoZSBvdmVyYWxsIG9iamVjdGl2ZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHJlbGlhYmxlIGRhdGEgcmV0cmlldmFsIGZyb20gdGhlIFBIWS4gSSBhbSBsb29raW5nIGZvciBlbGVnYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk3Olx0c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbiAyOTg6XHR7XG4gMjk5Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBidXMtXHUwMDNlcHJpdjtcbiAzMDA6XHRcbiAzMDE6XHRcdHJldHVybiBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIGlkeCk7XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuIDMwNTpcdFx0XHRcdFx0ICB1MTYgcmVndmFsKVxuIDMwNjpcdHtcbiAzMDc6XHRcdHN0cnVjdCB1c2JuZXQgKmRldiA9IGJ1cy1cdTAwM2Vwcml2O1xuIDMwODpcdFxuIDMwOTpcdFx0c21zYzk1eHhfbWRpb193cml0ZShkZXYsIHBoeV9pZCwgaWR4LCByZWd2YWwpO1xuIDMxMDpcdFx0cmV0dXJuIDA7XG4gMzExOlx0fVxuIDMxMjpcdFxuIDMxMzpcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dhaXRfZWVwcm9tKHN0cnVjdCB1c2JuZXQgKmRldilcbiAzMTQ6XHR7XG4gMzE1Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuIDMxNjpcdFx0dTMyIHZhbDtcbiAzMTc6XHRcdGludCByZXQ7XG4gMzE4Olx0XG4gMzE5Olx0XHRkbyB7XG4gMzIwOlx0XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgRTJQX0NNRCwgXHUwMDI2dmFsKTtcbiAzMjE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDMyMjpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHJlYWRpbmcgRTJQX0NNRFxcblwmIzM0Oyk7XG4gMzIzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMjQ6XHRcdFx0fVxuIDMyNTpcdFxuIDMyNjpcdFx0XHRpZiAoISh2YWwgXHUwMDI2IEUyUF9DTURfQlVTWV8pIHx8ICh2YWwgXHUwMDI2IEUyUF9DTURfVElNRU9VVF8pKVxuIDMyNzpcdFx0XHRcdGJyZWFrO1xuIDMyODpcdFx0XHR1ZGVsYXkoNDApO1xuIDMyOTpcdFx0fSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnRfdGltZSAmIzQzOyBIWikpO1xuIDMzMDpcdFxuIDMzMTpcdFx0aWYgKHZhbCBcdTAwMjYgKEUyUF9DTURfVElNRU9VVF8gfCBFMlBfQ01EX0JVU1lfKSkge1xuIDMzMjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dFxcblwmIzM0Oyk7XG4gMzMzOlx0XHRcdHJldHVybiAtRUlPO1xuIDMzNDpcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0cmV0dXJuIDA7XG4gMzM3Olx0fVxuIDMzODpcdFxuIDMzOTpcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X2VlcHJvbV9jb25maXJtX25vdF9idXN5KHN0cnVjdCB1c2JuZXQgKmRldilcbiAzNDA6XHR7XG4gMzQxOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuIDM0MjpcdFx0dTMyIHZhbDtcbiAzNDM6XHRcdGludCByZXQ7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRkbyB7XG4gMzQ2Olx0XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgRTJQX0NNRCwgXHUwMDI2dmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgc21zYzk1eHhfbWRpb19yZWFkYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBzbXNjOTV4eF9tZGlvX3JlYWRgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgc29tZSBzb3J0IG9mIGxvdy1sZXZlbCBkcml2ZXIgZnVuY3Rpb24sIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBkYXRhIGZyb20gdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvciBSZWR1Y2VkIE1JSSAoUk1JSSkgYnVzLCB3aGljaCBpcyBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgY29ubmVjdGluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgKFBIWSkgdG8gdGhlIE1BQy4KCk15IHByaW1hcnkgY29uY2VybiBpcyBlZmZpY2llbmN5IGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhcmVmdWwgYml0IG1hbmlwdWxhdGlvbiBoZXJlLCBsaWtlbHkgdXNpbmcgZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBmb2xsb3dpbmc6CiogICAqKkluaXRpYWxpemF0aW9uKio6IEkgbmVlZCB0byBrbm93IHRoZSBzdGF0ZSB0aGUgYnVzIGlzIGluaXRpYWxpemVkIHRvLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY29udHJvbGxlciBpcyBpbml0aWFsaXplZCBwcmlvciB0byByZWFkaW5nIG9yIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUuCiogICAqKkFkZHJlc3MgU2VsZWN0aW9uKio6IFRoZSBNRElPIGludGVyZmFjZSBpcyBiYXNlZCBvbiBzZWxlY3RpbmcgYW4gYWRkcmVzcywgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNwZWNpZmljIGNvbW1hbmRzIG9yIGJpdCBwYXR0ZXJucyB0byBzZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCByZWdpc3RlciBhZGRyZXNzIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHJlYWRpbmcuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhZGRyZXNzIGlzIGVuY29kZWQuCiogICAqKlJlYWQgT3BlcmF0aW9uKio6IFRoZSBjb3JlIG9mIGl0LiBXaGF0IHByZWNpc2UgYml0IHNlcXVlbmNlIGlzIGJlaW5nIHNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIGluaXRpYXRlIGEgcmVhZD8gSXMgdGhlcmUgYSBzdGFydCBjb25kaXRpb24sIGEgdHVybmFyb3VuZCBwaGFzZSwgdGhlIGFkZHJlc3MgaXRzZWxmLCBhbmQgdGhlbiB0aGUgcmVhZCBkYXRhPyBXaGF0JiMzOTtzIHRoZSB0aW1pbmc/IEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgaW1wbGVtZW50cyB0aGUgTURJTyBzcGVjaWZpY2F0aW9uLgoqICAgKipEYXRhIFJldHJpZXZhbCoqOiBIb3cgaXMgdGhlIGRhdGEgYWN0dWFsbHkgZmV0Y2hlZD8gSXMgaXQgcG9sbGVkLCBvciBpcyB0aGVyZSBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGFueSB3YWl0IHN0YXRlcyBvciBkZWxheXMgaW52b2x2ZWQsIHRvIGFsbG93IHRoZSBQSFkgdGltZSB0byByZXNwb25kPyBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBwcmV2ZW50aW5nIGJ1cyBjb250ZW50aW9uLgoqICAgKipFcnJvciBEZXRlY3Rpb24qKjogSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGVycm9yIGNoZWNrcy4gSG93IGlzIGl0IGhhbmRsZWQgaWYgdGhlIFBIWSBkb2VzbiYjMzk7dCByZXNwb25kPyBXaGF0IGFib3V0IHBhcml0eSBlcnJvcnMgb3Igb3RoZXIgY29tbXVuaWNhdGlvbiBmYWlsdXJlcz8gQXJlIHRoZXJlIHRpbWVvdXRzIGltcGxlbWVudGVkPyBXaGF0IGFib3V0IHJldHJpZXM/CiogICAqKlN5bmNocm9uaXphdGlvbioqOiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGJldHdlZW4gdGhlIE1BQyBhbmQgUEhZLiBJcyB0aGVyZSBhIG5lZWQgZm9yIGEgbG9jayBvciBtdXRleCB0byBwcmV2ZW50IG11bHRpcGxlIGFjY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWU/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciBidXMgdGltaW5nIGFuZCBjbG9jayBzcGVlZHM/CgpBbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBvdmVyYWxsIGRlc2lnbi4uLiBpcyBpdCBtb2R1bGFyPyBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2xlYXJseSBuYW1lZD8gQ2FuIEkgZWFzaWx5IHRyYWNlIHRoZSBkYXRhIGZsb3c/IEFuZCwgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gd29yayBwcm9wZXJseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQ/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBpbXBvcnRhbnQsIGJ1dCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBpcyB2aXRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21zYzk1eHhfbWRpb19yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNzAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTcyLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yOTc9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDAtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzozMDE6XHRyZXR1cm4gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGh5X2lkLCBpZHgpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAyLX1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMzUxPXN0YXRpYyBpbnQgc21zYzk1eHhfbGlua19vayhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1Ni1cdC8qIGZpcnN0LCBhIGR1bW15IHJlYWQsIG5lZWRlZCB0byBsYXRjaCBzb21lIE1JSSBwaHlzICovXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMzU3Olx0cmV0ID0gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGRhdGEtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1OC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM2MC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzNjE6XHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwZGF0YS1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBNSUlfQk1TUik7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzYyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xNDA3PXN0YXRpYyBpbnQgc21zYzk1eHhfZW50ZXJfc3VzcGVuZDEoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjAtXHQvKiBlbmFibGUgZW5lcmd5IGRldGVjdCBwb3dlci1kb3duIG1vZGUgKi9cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjE0MjE6XHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIFBIWV9NT0RFX0NUUkxfU1RTKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgc21zYzk1eHhfbWRpb19yZWFkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNtc2M5NXh4X21kaW9fcmVhZGAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGFib3V0IHJlYWRpbmcgZGF0YSBmcm9tIGFuIE1ESU8gYnVzLCBsaWtlbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUEhZIG9mIGFuIFNNU0M5NXh4IEV0aGVybmV0IGNvbnRyb2xsZXIuIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZXhwbGljaXQg4oCTIGBzbXNjOTV4eGAgY2xlYXJseSBpZGVudGlmaWVzIHRoZSBkZXZpY2UgZmFtaWx5LCBgbWRpb2AgcG9pbnRzIHRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UsIGFuZCBgcmVhZGAgaW5kaWNhdGVzIHRoZSBvcGVyYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIE1ESU8gY29tbXVuaWNhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgaW52b2x2aW5nIGNsb2NraW5nIHRoZSBNRElPIHNpZ25hbHMgKE1EQyBhbmQgTURJTyksIHBvdGVudGlhbGx5IHVzaW5nIGJpdC1iYW5naW5nIG9yIGEgZGVkaWNhdGVkIGhhcmR3YXJlIGludGVyZmFjZSBpZiBpdCYjMzk7cyBhdmFpbGFibGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJuczogc2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIEkgd2FudCB0byByZWFkLCBpc3N1aW5nIGEgcmVhZCBjb21tYW5kLCB3YWl0aW5nIGZvciB0aGUgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQgdGhlbiByZXRyaWV2aW5nIGl0LgoKSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIHRpbWluZyBjb25zdHJhaW50cy4gTURJTyBpcyBhIHNlcmlhbCBwcm90b2NvbCwgYW5kIHRoZXJlIGFyZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNsb2NrIGN5Y2xlIHJlcXVpcmVtZW50cyBmb3IgdmFyaW91cyBwaGFzZXMgKGxpa2UgcHJlYW1ibGUsIHN0YXJ0LCB0dXJuYXJvdW5kLCBhbmQgZGF0YSkuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGRlbGF5cyBvciB0aW1pbmcgbG9vcHMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHByb3BlciBvcGVyYXRpb24uCgpCZXlvbmQgdGhlIE1ESU8gc3BlY2lmaWNzLCBJJiMzOTttIGdvaW5nIHRvIGJlIGludGVyZXN0ZWQgaW4gZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgY29tbXVuaWNhdGlvbiBmYWlscz8gSXMgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbT8gQXJlIHBvdGVudGlhbCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBpc3N1ZXMgaGFuZGxlZCBncmFjZWZ1bGx5PyBBbnkgcG90ZW50aWFsIGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCByZWdpc3RlciBhZGRyZXNzZXMgd2lsbCBiZSBxdWlja2x5IG5vdGVkLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgZXhhbWluaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIuIFdoYXQgYXJlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzPyBXaGF0JiMzOTtzIHRoZSByZXR1cm5lZCB2YWx1ZT8gSXMgdGhlcmUgYW55IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBpbnZvbHZlZCwgb3IgaXMgdGhpcyB0aGUgZnVuZGFtZW50YWwgTURJTyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBkcml2ZXI/IEkmIzM5O20gaG9waW5nIGl0IGNvbmZvcm1zIHRvIHRoZSBzdGFuZGFyZCBNRElPIGludGVyZmFjZSBzdHJ1Y3R1cmUgb3IgYXQgbGVhc3QgaXMgZG9jdW1lbnRlZCB3ZWxsLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcxOlx0c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxuIDE3MjpcdHtcbiAxNzM6XHRcdHUzMiB2YWwsIGFkZHI7XG4gMTc0Olx0XHRpbnQgcmV0O1xuIDE3NTpcdFxuIDE3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlcGh5X211dGV4KTtcbiAxNzc6XHRcbiAxNzg6XHRcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXG4gMTc5Olx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDE4MDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE4MTpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDslczogTUlJIGlzIGJ1c3lcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAxODI6XHRcdFx0Z290byBkb25lO1xuIDE4MzpcdFx0fVxuIDE4NDpcdFxuIDE4NTpcdFx0Lyogc2V0IHRoZSBhZGRyZXNzLCBpbmRleCBcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xuIDE4NjpcdFx0YWRkciA9IG1paV9hZGRyZXNzX2NtZChwaHlfaWQsIGlkeCwgTUlJX1JFQURfIHwgTUlJX0JVU1lfKTtcbiAxODc6XHRcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcbiAxODg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxODk6XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuIDE5MDpcdFx0XHRcdG5ldGRldl93YXJuKGRldi1cdTAwM2VuZXQsIFwmIzM0O0Vycm9yIHdyaXRpbmcgTUlJX0FERFJcXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRnb3RvIGRvbmU7XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xuIDE5NTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE5NjpcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtUaW1lZCBvdXQgcmVhZGluZyBNSUkgcmVnICUwMlhcXG5cJiMzNDssIGlkeCk7XG4gMTk3Olx0XHRcdGdvdG8gZG9uZTtcbiAxOTg6XHRcdH1cbiAxOTk6XHRcbiAyMDA6XHRcdHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgTUlJX0RBVEEsIFx1MDAyNnZhbCk7XG4gMjAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjAyOlx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbiAyMDM6XHRcdFx0XHRuZXRkZXZfd2FybihkZXYtXHUwMDNlbmV0LCBcJiMzNDtFcnJvciByZWFkaW5nIE1JSV9EQVRBXFxuXCYjMzQ7KTtcbiAyMDQ6XHRcdFx0Z290byBkb25lO1xuIDIwNTpcdFx0fVxuIDIwNjpcdFxuIDIwNzpcdFx0cmV0ID0gKHUxNikodmFsIFx1MDAyNiAweEZGRkYpO1xuIDIwODpcdFxuIDIwOTpcdGRvbmU6XG4gMjEwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXBoeV9tdXRleCk7XG4gMjExOlx0XG4gMjEyOlx0XHQvKiBJZ25vcmUgLUVOT0RFViBlcnJvciBkdXJpbmcgZGlzY29ubmVjdCgpICovXG4gMjEzOlx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4gMjE0Olx0XHRcdHJldHVybiAwO1xuIDIxNTpcdFx0cmV0dXJuIHJldDtcbiAyMTY6XHR9XG4gMjE3Olx0XG4gMjE4Olx0c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG4gMjE5Olx0XHRcdFx0XHRpbnQgcmVndmFsKVxuIDIyMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQSFkgQWNjZXNzIE1ldGhvZCoqCgpPa2F5LCBzbyBJIHNlZSBgaWR4YCBiZWluZyBwYXNzZWQgdG8gYG1paV9hZGRyZXNzX2NtZGAuIFRoYXQgZnVuY3Rpb24gaXM6CgpgYGBjCnN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcCkKewoJcmV0dXJuIChwaHlfaWQgJmFtcDsgMHgxZikgJmx0OyZsdDsgMTEgfCAoaWR4ICZhbXA7IDB4MWYpICZsdDsmbHQ7IDYgfCBvcDsKfQpgYGAKClJpZ2h0LCB0aGUga2V5IGhlcmUgaXMgYGlkeGAgYmVpbmcgYml0d2lzZSBBTkRlZCB3aXRoIGAweDFmYC4gVGhhdCBnaXZlcyBpdCBhd2F5IGltbWVkaWF0ZWx5IC0gdGhpcyBpcyBhIENsYXVzZSAyMiBNRElPIGJ1cyBhY2Nlc3MhIEJ1dCB3YWl0LCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgQ2xhdXNlIDIyIGJ1cywgY2FuIHdlIHN0aWxsIHRhbGsgdG8gYSBDbGF1c2UgNDUgUEhZPwoKWWVzLCB3ZSBjYW4sIGJ1dCBpdCByZXF1aXJlcyBpbmRpcmVjdCBhY2Nlc3MuIFdl4oCZZCBuZWVkIHRvIHVzZSByZWdpc3RlcnMgMTMgYW5kIDE0IHRvIHNwZWNpZnkgdGhlIE1NRCAoTWFuYWdlbWVudCBNb2R1bGUgRGV2aWNlKSBhbmQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHRoZSBQSFkgc3Vic3lzdGVtIGludGVsbGlnZW50bHkgaGFuZGxlIHRoaXM/IElmIHRoZSBidXMgKmRvZXNuJiMzOTt0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NSwgd2lsbCBpdCBhdXRvbWF0aWNhbGx5IGRlZmF1bHQgdG8gaW5kaXJlY3QgYWNjZXNzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIENsYXVzZSA0NSBQSFk/CgpUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBgcGh5X3JlYWRfbW1kYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgdGhlIGNvcnJlY3QgYWNjZXNzIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3JlYWRfbW1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfd3JpdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2MDogKiBfX3BoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2MS0gKiBmcm9tIGFuIE1NRCBvbiBhIGdpdmVuIFBIWS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NjctICovXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0Njg6aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MC1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ4MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODMtICogZnJvbSBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDkwOmludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDkxLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTQtXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5Ni1cdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTUwMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjMzLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0Olx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTYzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDUyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciAmIzM0O3ByaXZhdGUmIzM0OyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IG1vc3Qgb3RoZXIgbW9kdWxlcy4gSXQmIzM5O3MgYSBsb3ctbGV2ZWwsIGNyaXRpY2FsIG9wZXJhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlICYjMzQ7TU1EJiMzNDsgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCYjMzk7cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhbmQgd2hhdCBpcyBpdCByZXR1cm5pbmcgYW5kIHdoYXQga2luZCBvZiBlcnJvci1oYW5kbGluZyBpdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY4Olx0aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbiA0Njk6XHR7XG4gNDcwOlx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA0NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VyZWFkX21tZClcbiA0NzQ6XHRcdFx0cmV0dXJuIHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLFxuIDQ3NzpcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcbiA0Nzg6XHR9XG4gNDc5Olx0RVhQT1JUX1NZTUJPTChfX3BoeV9yZWFkX21tZCk7XG4gNDgwOlx0XG4gNDgxOlx0LyoqXG4gNDgyOlx0ICogcGh5X3JlYWRfbW1kIC0gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSByZWdpc3RlclxuIDQ4MzpcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDQ4NDpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDQ4NTpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA0ODY6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNDg3Olx0ICpcbiA0ODg6XHQgKiBTYW1lIHJ1bGVzIGFzIGZvciBwaHlfcmVhZCgpO1xuIDQ4OTpcdCAqL1xuIDQ5MDpcdGludCBwaHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdGludCByZXQ7XG4gNDkzOlx0XG4gNDk0Olx0XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuIDQ5NTpcdFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcbiA0OTY6XHRcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbiA0OTc6XHRcbiA0OTg6XHRcdHJldHVybiByZXQ7XG4gNDk5Olx0fVxuIDUwMDpcdEVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcbiA1MDE6XHRcbiA1MDI6XHQvKipcbiA1MDM6XHQgKiBfX3BoeV93cml0ZV9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyXG4gNTA0Olx0ICogb24gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxuIDUwNTpcdCAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuIDUwNjpcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cbiA1MDc6XHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4gNTA4Olx0ICogQHZhbDogdmFsdWUgdG8gd3JpdGUgdG8gQHJlZ251bVxuIDUwOTpcdCAqXG4gNTEwOlx0ICogU2FtZSBydWxlcyBhcyBmb3IgX19waHlfd3JpdGUoKTtcbiA1MTE6XHQgKi9cbiA1MTI6XHRpbnQgX19waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcbiA1MTM6XHR7XG4gNTE0Olx0XHRpZiAocmVnbnVtIFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFx1MDAzZSAzMilcbiA1MTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTE2Olx0XG4gNTE3Olx0XHRpZiAocGh5ZGV2LVx1MDAzZWRydiBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWRydi1cdTAwM2V3cml0ZV9tbWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlY29kaW5nIGBtbWRfcGh5X3JlYWRgIGFuZCBpdHMgaW1wbGljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgZnVuY3Rpb24sIGBtbWRfcGh5X3JlYWRgLCBiZWNhdXNlIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBQSFkgb3BlcmF0ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IGl0IGhhbmRsZXMgdGhlIE1NRCAoTWFuYWdlbWVudCBNb2RlIERldmljZSkgaW50ZXJmYWNlLiBHaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWJvdXQgcmVhZGluZyBkYXRhIGZyb20gYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHRoZXNlIGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgTURJTyBhZGRyZXNzIHNwYWNlLiBUaGUgdGVybSAmIzM0O01NRCYjMzQ7IGl0c2VsZiBpcyBhIHByZXR0eSBzdGFuZGFyZCB3YXkgdG8gaWRlbnRpZnkgdGhlc2UgUEhZLWludGVybmFsIHJlZ2lzdGVycy4KCknigJltIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBXaGF0JiMzOTtzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQgc2V0LCBvciBkb2VzIGl0IGNvbmZvcm0gdG8gYSBtb3JlIGdlbmVyaWMgc3BlY2lmaWNhdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGhpbnRzIHJlZ2FyZGluZyB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUg4oCTIGhvdyB0aGUgTU1EIGFkZHJlc3MgYW5kIHRoZSBzdWItYWRkcmVzcy9yZWdpc3RlciB3aXRoaW4gdGhhdCBNTUQgYXJlIGhhbmRsZWQuIFRoZSBrZXkgd2lsbCBiZSB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBkaXJlY3QgcmVnaXN0ZXIgcmVhZCwgb3IgaWYgaXQgcmVxdWlyZXMgYSB0d28tc3RlcCB3cml0ZS9yZWFkIHNlcXVlbmNlIGZvciBhY2Nlc3Npbmcgc29tZSByZWdpc3RlcnMuIEFsc28sIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgY3JpdGljYWwgaGVyZTsgaG93IGlzIGl0IHBhc3NlZCB0aGUgTU1EIG51bWJlciwgdGhlIHJlZ2lzdGVyIG51bWJlciwgYW5kIHRoZSByZXN1bHQ/IEFyZSB0aGV5IHBhc3NlZCBhcyBhcmd1bWVudHMgb3IgcGFydCBvZiBhIHN0cnVjdHVyZT8KCkkmIzM5O20gbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgdG8gb3RoZXIgUEhZIHJlYWQgZnVuY3Rpb25zIEkmIzM5O3ZlIHdvcmtlZCB3aXRoLiBBcmUgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXM/IEhvdyBkb2VzIGl0IGRlYWwgd2l0aCBwb3RlbnRpYWwgYnVzIGNvbnRlbnRpb24gb3IgdGltZW91dCBzY2VuYXJpb3M/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGRlc2lnbmVkIHdpdGggc29tZSBsZXZlbCBvZiByb2J1c3RuZXNzLCBwYXJ0aWN1bGFybHkgaWYgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBhIHBvdGVudGlhbGx5IG5vaXN5IHBoeXNpY2FsIGludGVyZmFjZS4gSSYjMzk7bSBhbHNvIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGxpa2U6IERvZXMgaXQgcmV0dXJuIGEgc3RhdHVzIGNvZGUgb3IgdXNlIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIGluZGljYXRlIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBoYXZlIGFueSByZXRyeSBsb2dpYyBidWlsdCBpbj8gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcnJ1cHRzIGZyb20gdGhlIFBIWSBpdHNlbGYsIHdoaWNoIGNhbiBpbXBhY3QgdGhpcyByZWFkaW5nIHByb2Nlc3MuCgpNeSBtYWluIGZvY3VzIGlzIHRvIGVuc3VyZSB0aGF0IEkga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBhcHByb3ByaWF0ZSBtZWFuaW5nIHdpdGhpbiB0aGUgUEhZJiMzOTtzIGNvbnRleHQuIEkgbXVzdCBlbnN1cmUgdGhlIHJlZ2lzdGVyIHZhbHVlIGlzIGluIHRoZSBjb3JyZWN0IGZvcm1hdC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGF0YXNoZWV0IGZvciB0aGlzIFBIWSBvciBhdCBsZWFzdCBhIHNpbWlsYXIgb25lIHRvIGZpbmQgb3V0IHdoYXQgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZC4gVW5kZXJzdGFuZGluZyB0aGF0IGlzIGdvaW5nIHRvIGJlIHRoZSBseW5jaHBpbiBmb3IgYW55IG1lYW5pbmdmdWwgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWRfcGh5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00MjE9c3RhdGljIHZvaWQgbW1kX3BoeV9pbmRpcmVjdChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCBkZXZhZCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzQtXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0MzU6aW50IG1tZF9waHlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDM2LVx0XHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0NC19XG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NDU6RVhQT1JUX1NZTUJPTF9HUEwobW1kX3BoeV9yZWFkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz00Njg9aW50IF9fcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzUtXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NzY6XHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcixcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ3Ny1cdFx0XHQgICAgcGh5ZGV2LVx1MDAzZWlzX2M0NSwgZGV2YWQsIHJlZ251bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3QgbWF0dGVyIGFuZCBhcHByb2FjaGluZyBhIHNwZWNpZmljIGNvZGUgZnVuY3Rpb246CgoqKkFuYWx5emluZyBgbW1kX3BoeV9yZWFkYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbW1kX3BoeV9yZWFkYC4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCB0aGlzIGltcGxpZXMgYSByZWFkIG9wZXJhdGlvbiwgbGlrZWx5IGludm9sdmluZyBhIE1lZGlhLUluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBNYW5hZ2VtZW50IERhdGEgKE1NRCkgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhleSBoYW5kbGUgdGhlIHJlYWRpbmcgYW5kIHJldHJpZXZpbmcgb2YgZGF0YSBmcm9tIGEgUEhZIHZpYSBNTUQuJiMzNDsgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9yIGhvdyB0aGUgcmVhZCBjeWNsZSBpcyBpbml0aWF0ZWQgYW5kIGNvbXBsZXRlZC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyByZWdpc3RlciBpdCBpbnRlbmRzIHRvIHRhcmdldCwgdGhlIGJpdCBtYW5pcHVsYXRpb24gb2YgdGhlIHJlYWQgYW5kIHdyaXRlIGNvbW1hbmRzLCBhbmQgZGF0YSB0cmFuc21pc3Npb24uICYjMzQ7SXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nPyYjMzQ7IGlzIGEga2V5IHF1ZXN0aW9uIGluIHRoaXMgYXJlYS4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1pbmcgY29uc3RyYWludHMsIGFja25vd2xlZGdlIHNpZ25hbHMsIGFuZCBhbnkgcG90ZW50aWFsIHJldHJ5IG1lY2hhbmlzbXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3csIGFueSBkZXBlbmRlbmNpZXMgb24gaGFyZHdhcmUgb3Igb3RoZXIgbW9kdWxlcywgYW5kIHRoZSBnZW5lcmFsIHdheSB0aGUgTU1EIFBIWSByZWdpc3RlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkLiBUaGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyBvbmUgdG8gdW5wYWNrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzU6XHRpbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG4gNDM2Olx0XHRcdCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXG4gNDM3Olx0e1xuIDQzODpcdFx0aWYgKGlzX2M0NSlcbiA0Mzk6XHRcdFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcbiA0NDA6XHRcbiA0NDE6XHRcdG1tZF9waHlfaW5kaXJlY3QoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XG4gNDQyOlx0XHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbiA0NDM6XHRcdHJldHVybiBfX21kaW9idXNfcmVhZChidXMsIHBoeV9hZGRyLCBNSUlfTU1EX0RBVEEpO1xuIDQ0NDpcdH1cbiA0NDU6XHRFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xuIDQ0NjpcdFxuIDQ0NzpcdGludCBtbWRfcGh5X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXG4gNDQ4Olx0XHRcdCAgaW50IGRldmFkLCB1MzIgcmVnbnVtLCB1MTYgdmFsKVxuIDQ0OTpcdHtcbiA0NTA6XHRcdGlmIChpc19jNDUpXG4gNDUxOlx0XHRcdHJldHVybiBfX21kaW9idXNfYzQ1X3dyaXRlKGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0sIHZhbCk7XG4gNDUyOlx0XG4gNDUzOlx0XHRtbWRfcGh5X2luZGlyZWN0KGJ1cywgcGh5X2FkZHIsIGRldmFkLCByZWdudW0pO1xuIDQ1NDpcdFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxMzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWSBEZXZpY2UgQWNjZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBsb2dpYyBhbmQgaXQgc2VlbXMgdGhhdCBpZiBgaXNfYzQ1YCBpcyAqZmFsc2UqLCB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBhY2Nlc3NpbmcgcmVnaXN0ZXJzIDEzIGFuZCAxNCB1c2luZyBpbmRpcmVjdCBhY2Nlc3MsIHdoaWNoIGFsaWducyB3aXRoIENsYXVzZSAyMiBQSFkgYWNjZXNzLCBuYXR1cmFsbHkuIE15IGNvbmNlcm4gbm93LCBhcyBpdCBhbHdheXMgaXMgd2hlbiBzZWVpbmcgYSBjb25kaXRpb25hbCBsaWtlIHRoaXMsIGlzIGhvdyB0aGF0IGJvb2xlYW4sIGBpc19jNDVgLCBnZXRzIHNldCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUsIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uLgoKUmlnaHQsIEkgcmVtZW1iZXIgbm93LCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLCBgZ2V0X3BoeV9kZXZpY2VgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGRldmljZSBpZGVudGlmaWNhdGlvbiB1c3VhbGx5IGhhcHBlbnMuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBgaXNfYzQ1YCBkZXRlcm1pbmF0aW9uIGhhcHBlbnMuIFNvIEkgbmVlZCB0byBnbyBzdHJhaWdodCB0byBgZ2V0X3BoeV9kZXZpY2VgIGRlZmluaXRpb24gd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCB0byBzZWUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcGh5X2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDUwPUVYUE9SVF9TWU1CT0woZndub2RlX2dldF9waHlfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA1Mi0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA1MzogKiBnZXRfcGh5X2RldmljZSAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgUEhZIGRldmljZSBhbmQgcmV0dXJucyBpdHMgQHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA1NC0gKlx0XHQgICAgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDcwLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDcxOnN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNzIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDM6RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcgYGdldF9waHlfZGV2aWNlYCoqCgpBbHJpZ2h0LCBJIHNlZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZ2V0X3BoeV9kZXZpY2VgLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IElzIHRoaXMgcGFydCBvZiBhIGRyaXZlciwgYSBuZXR3b3JrIHN0YWNrLCBhIHN5c3RlbSB1dGlsaXR5PyBUaGUgbmFtZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGdldHRpbmcgdGhpcyAmIzM0O1BIWSBkZXZpY2UuJiMzNDsgSXMgaXQgZW51bWVyYXRpbmcgaGFyZHdhcmUsIHF1ZXJ5aW5nIGEgY29uZmlndXJhdGlvbiBkYXRhYmFzZSwgb3IgcGVyaGFwcyBhY2Nlc3NpbmcgYSBwbGF0Zm9ybS1zcGVjaWZpYyBBUEk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gb2YgZGV2aWNlIGRpc2NvdmVyeSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGVtcGxveWVkLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZTogd2hhdCBhcmd1bWVudHMgYXJlIGJlaW5nIHBhc3NlZD8gQXJlIHRoZXJlIGRldmljZSBpZGVudGlmaWVycywgYWRkcmVzc2VzLCBvciBzb21lIHNvcnQgb2YgY29udGV4dD8gVGhlIHJldHVybiB2YWx1ZSBpcyBjcnVjaWFsIHRvby4gSXMgaXQgcmV0dXJuaW5nIGEgcG9pbnRlciwgYSBoYW5kbGUsIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBIWT8gQW5kIHdoYXQgYWJvdXQgcG90ZW50aWFsIGVycm9yIGNvZGVzPyBBIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBncmFjZWZ1bGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZGV2aWNlIGlzbiYjMzk7dCBmb3VuZCBvciBhbiBlcnJvciBvY2N1cnMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllczogSW52YWxpZCBhZGRyZXNzLCBkZXZpY2Ugbm90IHByZXNlbnQsIG5vIHBlcm1pc3Npb24sIGhhcmR3YXJlIGZhaWx1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24mIzM5O3MgYm9keSBmb3IgZmxvdyBjb250cm9sIGFuZCBsb2dpYy4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGludGVybmFsIHZhcmlhYmxlcyBiZWluZyBkZWNsYXJlZCBhbmQgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZGF0YSB0eXBlcywgc2luY2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgYW5kIHRoZXJlIGNvdWxkIGJlIGltcG9ydGFudCBpbnRlcmFjdGlvbnMgYW5kIHNoYXJlZCBhY2Nlc3MgaGFwcGVuaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGhvdyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4gQWxzbywgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLCBhbmQgaWYgdGhlcmUgY291bGQgYmUgYW55IHBvdGVudGlhbCBkYXRhIHJhY2VzLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uICpmaW5kcyogYW5kICpyZXR1cm5zKiBhIHBoeXNpY2FsIGxheWVyIGRldmljZSwgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZG9pbmcgc28gaW4gYSB3YXkgdGhhdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgcmVsaWFiaWxpdHksIGVmZmljaWVuY3ksIGFuZCBwb3J0YWJpbGl0eSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc2Vuc2l0aXZpdHkgb2YgbG93LWxldmVsIGRldmljZSBpbnRlcmFjdGlvbnMuIFRoZW4sIGFuZCBvbmx5IHRoZW4sIGNhbiBJIG1ha2UgYSBqdWRnbWVudCBvbiBpdHMgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcxOlx0c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbjEwNzI6XHR7XG4xMDczOlx0XHRzdHJ1Y3QgcGh5X2M0NV9kZXZpY2VfaWRzIGM0NV9pZHM7XG4xMDc0Olx0XHR1MzIgcGh5X2lkID0gMDtcbjEwNzU6XHRcdGludCByO1xuMTA3NjpcdFxuMTA3NzpcdFx0YzQ1X2lkcy5kZXZpY2VzX2luX3BhY2thZ2UgPSAwO1xuMTA3ODpcdFx0YzQ1X2lkcy5tbWRzX3ByZXNlbnQgPSAwO1xuMTA3OTpcdFx0bWVtc2V0KGM0NV9pZHMuZGV2aWNlX2lkcywgMHhmZiwgc2l6ZW9mKGM0NV9pZHMuZGV2aWNlX2lkcykpO1xuMTA4MDpcdFxuMTA4MTpcdFx0aWYgKGlzX2M0NSlcbjEwODI6XHRcdFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFx1MDAyNmM0NV9pZHMpO1xuMTA4MzpcdFx0ZWxzZVxuMTA4NDpcdFx0XHRyID0gZ2V0X3BoeV9jMjJfaWQoYnVzLCBhZGRyLCBcdTAwMjZwaHlfaWQpO1xuMTA4NTpcdFxuMTA4NjpcdFx0aWYgKHIpXG4xMDg3Olx0XHRcdHJldHVybiBFUlJfUFRSKHIpO1xuMTA4ODpcdFxuMTA4OTpcdFx0LyogUEhZIGRldmljZSBzdWNoIGFzIHRoZSBNYXJ2ZWxsIEFsYXNrYSA4OEUyMTEwIHdpbGwgcmV0dXJuIGEgUEhZIElEXG4xMDkwOlx0XHQgKiBvZiAwIHdoZW4gcHJvYmVkIHVzaW5nIGdldF9waHlfYzIyX2lkKCkgd2l0aCBubyBlcnJvci4gUHJvY2VlZCB0b1xuMTA5MTpcdFx0ICogcHJvYmUgd2l0aCBDNDUgdG8gc2VlIGlmIHdlJiMzOTtyZSBhYmxlIHRvIGdldCBhIHZhbGlkIFBIWSBJRCBpbiB0aGUgQzQ1XG4xMDkyOlx0XHQgKiBzcGFjZSwgaWYgc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBDNDUgUEhZIGRldmljZS5cbjEwOTM6XHRcdCAqL1xuMTA5NDpcdFx0aWYgKCFpc19jNDUgXHUwMDI2XHUwMDI2IHBoeV9pZCA9PSAwIFx1MDAyNlx1MDAyNiBidXMtXHUwMDNlcmVhZF9jNDUpIHtcbjEwOTU6XHRcdFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFx1MDAyNmM0NV9pZHMpO1xuMTA5NjpcdFx0XHRpZiAoIXIpXG4xMDk3Olx0XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuMTA5ODpcdFx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbjEwOTk6XHRcdH1cbjExMDA6XHRcbjExMDE6XHRcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcdTAwMjZjNDVfaWRzKTtcbjExMDI6XHR9XG4xMTAzOlx0RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4xMTA0Olx0XG4xMTA1Olx0LyoqXG4xMTA2Olx0ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuMTEwNzpcdCAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuMTEwODpcdCAqL1xuMTEwOTpcdGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTEwOlx0e1xuMTExMTpcdFx0aW50IGVycjtcbjExMTI6XHRcbjExMTM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbjExMTQ6XHRcdGlmIChlcnIpXG4xMTE1Olx0XHRcdHJldHVybiBlcnI7XG4xMTE2Olx0XG4xMTE3Olx0XHQvKiBEZWFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4xMTE4Olx0XHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMCk7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMTA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBTY2FuKioKCk9rYXksIHNvIHRoZSBgZ2V0X3BoeV9kZXZpY2VgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIGJ5IGRlZmF1bHQsIHRoZSBgaXNfYzQ1YCBmbGFnIGlzIHNldCB0byBgZmFsc2VgIGR1cmluZyB0aGlzIE1ESU8gYnVzIHNjYW4uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFNpbmNlIGBpc19jNDVgIGlzIGZhbHNlLCB0aGUgY29kZSBpcyBleGVjdXRpbmcgdGhlIGBnZXRfcGh5X2MyMl9pZGAgZnVuY3Rpb24uIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYGdldF9waHlfYzIyX2lkYCBhbmQgZmlndXJlIG91dCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIE1ESU8gYnVzIHNjYW4gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3BoeV9jMjJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9OTA2PXN0YXRpYyBpbnQgZ2V0X3BoeV9jNDVfaWRzKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtOTkxLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo5OTI6ICogZ2V0X3BoeV9jMjJfaWQgLSByZWFkcyB0aGUgc3BlY2lmaWVkIGFkZHIgZm9yIGl0cyBjbGF1c2UgMjIgSUQuXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5My0gKiBAYnVzOiB0aGUgdGFyZ2V0IE1JSSBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwMDI6c3RhdGljIGludCBnZXRfcGh5X2MyMl9pZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyICpwaHlfaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwMDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA4My1cdGVsc2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA4NDpcdFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXHUwMDI2cGh5X2lkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA4NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwODktXHQvKiBQSFkgZGV2aWNlIHN1Y2ggYXMgdGhlIE1hcnZlbGwgQWxhc2thIDg4RTIxMTAgd2lsbCByZXR1cm4gYSBQSFkgSURcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5MDpcdCAqIG9mIDAgd2hlbiBwcm9iZWQgdXNpbmcgZ2V0X3BoeV9jMjJfaWQoKSB3aXRoIG5vIGVycm9yLiBQcm9jZWVkIHRvXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTEtXHQgKiBwcm9iZSB3aXRoIEM0NSB0byBzZWUgaWYgd2UmIzM5O3JlIGFibGUgdG8gZ2V0IGEgdmFsaWQgUEhZIElEIGluIHRoZSBDNDVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogZ2V0XF9waHlcX2MyMlxfaWQqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGllY2Ugb2YgY29kZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgbmFtZSwgYGdldF9waHlfYzIyX2lkYCwgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyByZXRyaWV2aW5nIGFuIGlkZW50aWZpZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzb21ldGhpbmcgcGh5c2ljYWwgKGBwaHlgKSwgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aCBhIEMyMiBzeXN0ZW0gb3IgY29tcG9uZW50LiBUaGUgJiMzNDtnZXQmIzM0OyBwcmVmaXggaXMgY2xlYXI7IGl0IGltcGxpZXMgYSByZXRyaWV2YWwgZnVuY3Rpb24uIE15IGd1dCBmZWVsaW5nIGlzIGl0JiMzOTtzIHB1bGxpbmcgYSB1bmlxdWUgSUQgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnQgb3IgYSBwaWVjZSBvZiBjb25maWd1cmF0aW9uIGRhdGEuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDI6XHRzdGF0aWMgaW50IGdldF9waHlfYzIyX2lkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgKnBoeV9pZClcbjEwMDM6XHR7XG4xMDA0Olx0XHRpbnQgcGh5X3JlZztcbjEwMDU6XHRcbjEwMDY6XHRcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjEsIGFuZCBwdXQgdGhlbSBpbiB0aGUgdXBwZXIgaGFsZiAqL1xuMTAwNzpcdFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQxKTtcbjEwMDg6XHRcdGlmIChwaHlfcmVnIFx1MDAzYyAwKSB7XG4xMDA5Olx0XHRcdC8qIHJldHVybmluZyAtRU5PREVWIGRvZXNuJiMzOTt0IHN0b3AgYnVzIHNjYW5uaW5nICovXG4xMDEwOlx0XHRcdHJldHVybiAocGh5X3JlZyA9PSAtRUlPIHx8IHBoeV9yZWcgPT0gLUVOT0RFVikgPyAtRU5PREVWIDogLUVJTztcbjEwMTE6XHRcdH1cbjEwMTI6XHRcbjEwMTM6XHRcdCpwaHlfaWQgPSBwaHlfcmVnIFx1MDAzY1x1MDAzYyAxNjtcbjEwMTQ6XHRcbjEwMTU6XHRcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFsZiAqL1xuMTAxNjpcdFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQyKTtcbjEwMTc6XHRcdGlmIChwaHlfcmVnIFx1MDAzYyAwKSB7XG4xMDE4Olx0XHRcdC8qIHJldHVybmluZyAtRU5PREVWIGRvZXNuJiMzOTt0IHN0b3AgYnVzIHNjYW5uaW5nICovXG4xMDE5Olx0XHRcdHJldHVybiAocGh5X3JlZyA9PSAtRUlPIHx8IHBoeV9yZWcgPT0gLUVOT0RFVikgPyAtRU5PREVWIDogLUVJTztcbjEwMjA6XHRcdH1cbjEwMjE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0NTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU3l6a2FsbGVyJiMzOTtzIFVTQiBEZXZpY2UgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZm9sbG93aW5nIHRoaXMgc3l6a2FsbGVyIGVtdWxhdGlvbiBwYXRoIGFuZCBpdCBzZWVtcyBwcmV0dHkgaW50ZXJlc3RpbmcuIElmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgdGhlIHN5c3RlbSYjMzk7cyBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgdGhlIGBzbXNjOTV4eGAuIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBpbnRlcmNlcHQgdGhlIGBtZGlvYnVzX3JlYWRgIGNhbGxzLCBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAgcmVnaXN0ZXJzLiBCeSByZXR1cm5pbmcgYDB4MDAxY2AgYW5kIGAweGM4OThgIHJlc3BlY3RpdmVseSwgdGhlIGNvZGUgaXMgY29uc3RydWN0aW5nIHRoYXQgYHBoeV9pZGAgdG8gYmUgYDB4MDAxY2M4OThgLgoKVGhpcyBsZWFkcyB0byB0aGUgY3J1Y2lhbCBgcGh5X2RldmljZV9jcmVhdGVgIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IGBpc19jNDVgIGlzIHNldCB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIHdpbGwgdXNlIGluZGlyZWN0IGFjY2Vzcy4gTm93IHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBkb2VzIHRoZSBgcmVhbHRla2AgZHJpdmVyIHRoYXQmIzM5O3MgbGlrZWx5IGJlaW5nIHByb2JlZCBzdXBwb3J0IHRoaXMgaW5kaXJlY3QgYWNjZXNzPyBJIG5lZWQgdG8gY2hlY2suCgpBaCwgeWVzLiBJIHNlZSBpdC4gVGhlIGBtbWRfcGh5X2luZGlyZWN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIGByZWFsdGVrYCBkcml2ZXIgY29uZmlybXMgdGhpcyBieSB3cml0aW5nIHRvIHJlZ2lzdGVycyAxMyBhbmQgMTQsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgQ2xhdXNlIDIyIHJlZ2lzdGVycyB1c2VkIGZvciBpbmRpcmVjdCBDbGF1c2UgNDUgYWNjZXNzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBjb25kaXRpb25zIGZvciBhbiBpbnRlcmVzdGluZyBwcm9iZSB0byBvY2N1ci4KClRoZXJlZm9yZSwgdGhpcyB3aG9sZSBzZXF1ZW5jZSBzaG91bGQgdHJpZ2dlciBgcnRsODI2MXhfcHJvYmVgIGV2ZW50dWFsbHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgcnRsODI2MXhfcHJvYmVgIG5vdyBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoYXQgd2lsbCBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg3Olx0c3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDM4ODpcdHtcbiAzODk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiAzOTA6XHRcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2O1xuIDM5MTpcdFx0aW50IHN1Yl9waHlfaWQsIHJldDtcbiAzOTI6XHRcbiAzOTM6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiAzOTQ6XHRcdGlmICghcHJpdilcbiAzOTU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk2Olx0XG4gMzk3Olx0XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4gMzk4Olx0XG4gMzk5Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcbiA0MDA6XHRcdFx0XHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XG4gNDAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDQwMjpcdFx0XHRyZXR1cm4gcmV0O1xuIDQwMzpcdFxuIDQwNDpcdFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9EQVRBX1JFRyk7XG4gNDA1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDQwNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDQwNzpcdFxuIDQwODpcdFx0c3ViX3BoeV9pZCA9IChyZXQgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmO1xuIDQwOTpcdFxuIDQxMDpcdFx0c3dpdGNoIChzdWJfcGh5X2lkKSB7XG4gNDExOlx0XHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxuIDQxMjpcdFx0XHRwcml2LVx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xuIDQxMzpcdFx0XHRwaHlkZXZfaW5mbyhwaHlkZXYsIFwmIzM0O1JUTDgyNjFDIGRldGVjdGVkIChzdWJfaWQgMHglMDJ4KVxcblwmIzM0Oywgc3ViX3BoeV9pZCk7XG4gNDE0Olx0XHRcdGJyZWFrO1xuIDQxNTpcdFxuIDQxNjpcdFx0ZGVmYXVsdDpcbiA0MTc6XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXG5cJiMzNDssIHN1Yl9waHlfaWQpO1xuIDQxODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiAwO1xuIDQyMjpcdH1cbiA0MjM6XHRcbiA0MjQ6XHRzdGF0aWMgaW50IHJ0bDgyNjF4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDQyNTpcdHtcbiA0MjY6XHRcdGludCByZXQ7XG4gNDI3Olx0XG4gNDI4Olx0XHRyZXQgPSBnZW5waHlfYzQ1X3BtYV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpO1xuIDQyOTpcdFx0aWYgKHJldClcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdC8qXG4gNDMyOlx0XHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcbiA0MzM6XHRcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXG4gNDM0Olx0XHQgKi9cbiA0MzU6XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuIDQzNjpcdFx0XHRcdCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEFuYWx5emluZyB0aGUgUlRMODI2MXggRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBgcnRsODI2MXhfcHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gVGhlIHNlcXVlbmNlIGlzIGNsZWFyOiB3ZSB3cml0ZSB0byBgTURJT19NTURfVkVORDJgIHRocm91Z2ggYFJUTDgyNjFYX0VYVF9BRERSX1JFR2AsIHNldHRpbmcgdGhlIGFkZHJlc3MgdG8gYFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJgLiBXZSB0aGVuIHJlYWQgZnJvbSBgUlRMODI2MVhfRVhUX0RBVEFfUkVHYC4gU3l6a2FsbGVyIGludGVyY2VwdHMgdGhhdCByZWFkLCB3aGljaCBpcyBmYXNjaW5hdGluZywgYW5kIGluamVjdHMgYSB2YWx1ZSwgYFJUTDgyNjFDX0NFX01PREVMYCBzaGlmdGVkLCByZXN1bHRpbmcgaW4gYDB4MDAwMGAuIFRoaXMgdHJpZ2dlcnMgdGhlIHNldHRpbmcgb2YgYHByaXYtJmd0O2Z3X25hbWVgIHRvIGBSVEw4MjYxQ19DRV9GV19OQU1FYC4gRnJvbSB0aGVyZSwgYGNvbmZpZ19pbml0YCBjYWxscyBgcnRsODI2MXhfZndfbG9hZGAsIHdoaWNoIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggU3l6a2FsbGVyIGNhbiBwcm92aWRlLiBUaGUgZmlybXdhcmUgbG9hZCBpcyBzdWNjZXNzZnVsIGFzIGlzIHRoZSBzdWJzZXF1ZW50IHZlcmlmaWNhdGlvbiBhbmQgZXhlY3V0aW9uIG9mIGZpcm13YXJlIGVudHJpZXMgdmlhIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YC4gQWxsIG9mIHRoYXQmIzM5O3MgYSBkaXJlY3QgcGF0aCwgbm8gcXVlc3Rpb24uCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN1cHBvcnRpbmcgUEhZIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBvdGhlciByZWxhdGVkIGNvZGUsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIEdlbmVyaWMgUEhZIEM0NSBpbnRlcmZhY2Ugd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jYC4gU3BlY2lmaWNhbGx5LCBhcmUgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgdXNlZCBieSBvdXIgZHJpdmVyPyBUaGV5IGFyZSwgaW5kZWVkLiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCBpcyBleHBvcnRlZCBhbmQgdXNlZCBhcyBgLnNvZnRfcmVzZXRgLCB3aGljaCBpcyBleGNlbGxlbnQuIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAgaXMgY2FsbGVkIGJ5IGBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCBieSBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AuIGBydGw4MjYxeGAgdXNlcyBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AgYW5kIGBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzYCB2aWEgYHJ0bDgyNjF4X2NvbmZpZ19hbmVnYCBhbmQgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCByZXNwZWN0aXZlbHksIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRvdWNoZWQuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpPa2F5LCBuZXh0IEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgdGhlIGtleS4gSXQmIzM5O3MgbmVlZGVkIGZvciBgcmVhbHRla19tYWluLmNgLiBUaGUgU3l6a2FsbGVyIHNldHVwIGFwcGVhcnMgdG8gYmUgZW5hYmxpbmcgdmFyaW91cyBVU0IgbmV0IGRyaXZlcnMgYWxyZWFkeSwgd2hpY2ggbWlnaHQgYmUgaGVscGZ1bC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyBlbmFibGVkIGV4cGxpY2l0bHkuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlLiBJIGNhbiBjb25maXJtIHRoaXMgdXNpbmcgYG1lbnVjb25maWdgLiBZZXAsIGl0JiMzOTtzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkmIzM5O2xsIHNwZWNpZnkgdGhhdC4gVGhhbmtmdWxseSBgQ09ORklHX1BIWUxJQmAgaXMgc2VsZWN0ZWQgYnkgYFJFQUxURUtfUEhZYCBvciBgTkVUREVWSUNFU2AsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC4gV2l0aCB0aGUgY29uZmlndXJhdGlvbiBxdWVzdGlvbiBoYW5kbGVkLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBJIGhhdmUgYSBmdW5jdGlvbmFsIHBhdGggZm9yIGV4ZXJjaXNpbmcgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkVBTFRFS19QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWc6Mjpjb25maWcgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUEhZc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWc9OD1pZiBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy05LVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMTEtXHRib29sIFwmIzM0O0hXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBQSFkgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYSBwYXRjaCBqdXN0IGNhbWUgYWNyb3NzIG15IGRlc2ssIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheSBoZXJlPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBsYW5kc2NhcGUuCgpUaGVuLCBJIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCB0aGlzIHNwZWNpZmljIGZpbGUsIGBwaHktYzQ1LmNgLCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgdGhlIFBIWUxJQiBjb25maWd1cmF0aW9uLiBTbywgaWYgYENPTkZJR19QSFlMSUJgIGlzIGVuYWJsZWQsICp0aGVuKiB0aGlzIGNvZGUgaXMgY29tcGlsZWQuIEdvb2QsIHRoYXQgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29vZCB0byBrbm93IGNvbnRleHR1YWxseSBiZWZvcmUgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHktYzQ1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkgQ29uZmlndXJhdGlvbiBmb3IgRW5oYW5jZWQgVGVzdGluZyoqCgpPa2F5LCBzbyBgcGh5LWM0NS5vYCBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgbGlicGh5LXlgLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2ZS4gR29vZC4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBjcml0aWNhbCBmb3IgbXkgYW5hbHlzaXMuIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAKKiAgIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAKKiAgIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYAoqICAgYHJ0bDgyNjF4X3Byb2JlYAoqICAgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AKKiAgIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AKKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgCiogICBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAKKiAgIGBydGw4MjYxeF9md19sb2FkYAoqICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYAoqICAgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgcnRsODI2MXhfY29uZmlnX2FuZWdgCiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgCgpUaGVzZSBhbGwgbG9vayBsaWtlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgVVNCX05FVF9TTVNDOTVYWGAgZGVwZW5kZW5jeS4gV2l0aCBTeXprYWxsZXImIzM5O3MgYHZoY2lgIGVtdWxhdGluZyBhbnkgVVNCIGRldmljZSwgSSBkb24mIzM5O3QgKnN0cmljdGx5KiBuZWVkIGBzbXNjOTV4eGAuIEl0JiMzOTtzIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgYWxsb3dzIGFyYml0cmFyeSBQSFkgSURzLCBzbyB0aGVvcmV0aWNhbGx5LCBJIGNvdWxkIHVzZSBzb21ldGhpbmcgZWxzZS4gSG93ZXZlciwgaXQmIzM5O3MgYSBnb29kIGRlZmF1bHQsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQganVzdCBpbiBjYXNlLCB3aGlsZSBhbHNvIGNoZWNraW5nIGlmIGl0JiMzOTtzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBVU0JfTkVUX1NNU0M5NVhYYCBpcyB0aGUgY29ycmVjdCBjb25maWcgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9ORVRfU01TQzk1WFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM1MTpjb25maWcgVVNCX05FVF9TTVNDOTVYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUyLVx0dHJpc3RhdGUgXCYjMzQ7U01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBVU0JfTEFONzhYWCBJbnRlZ3JhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBhbHNvIGdpdmUgYFVTQl9MQU43OFhYYCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIFdl4oCZdmUgY292ZXJlZCB0aGUgb3RoZXIgYXNwZWN0cywgYnV0IHRoaXMgZHJpdmVyLCBpbiBwYXJ0aWN1bGFyLCBjb3VsZCBwcmVzZW50IHNvbWUgdW5pcXVlIGNoYWxsZW5nZXMgb3Igc3VidGxlIGludGVncmF0aW9uIHF1aXJrcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBwb3RlbnRpYWwgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGF0IHBhcnRpY3VsYXIgVVNCLXRvLUV0aGVybmV0IGNvbnRyb2xsZXIuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWzigJlzIFVTQiBzdWJzeXN0ZW0gaXMgc2VhbWxlc3MsIHRoYXQgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZyByZXF1aXJlbWVudHMsIGFuZCB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9zZWQgYW5kIGRvY3VtZW50ZWQuIFRoZSBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGRlcGVuZCBvbiBnZXR0aW5nIHRoZSBgVVNCX0xBTjc4WFhgIHBhcnQgcmlnaHQsIHNvIGFub3RoZXIgY2hlY2sgd29uJiMzOTt0IGh1cnQuIFRpbWUgdG8gZGl2ZSBiYWNrIGluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IHNwZWNpZmljIGNvbXBhdGliaWxpdHkgbm90ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfTEFONzhYWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9OTk9Y29uZmlnIFVTQl9SVEw4MTUyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTEyLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTEzOmNvbmZpZyBVU0JfTEFONzhYWFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTE0LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTg0CgkJCQkJCQlvdXRwdXQ6IDM4NwoJCQkJCQkJdGhvdWdodHM6IDYyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgUlRMODI2MUMgUEhZKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBuZXcgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGRyaXZlci4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGZ1bmN0aW9ucyBhZGRlZCBieSB0aGUgcGF0Y2guIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGVtIGFnYWluOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBOb3BlLCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBmdWxsIHNldC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgaW5kZWVkIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbmV3IFBIWSBkcml2ZXIsIGJ1dCBpdCBhbHNvIGludHJvZHVjZXMgbmV3IENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIE1ESU8gYnVzIGVtdWxhdGlvbi4gVGhpcyBtZWFucyB3ZSBjYW4gcmVhY2ggdGhlIG5ldyBmdW5jdGlvbnMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgaWRlYWwgZm9yIFN5emthbGxlci4KCkhlcmXigJlzIHRoZSByZWFzb25pbmc6IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBVU0JfTkVUX1NNU0M5NVhYYCBvciBgVVNCX0xBTjc4WFhgIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHdlIGNhbiBtYWtlIHRoZW0gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciwgZXhlY3V0aW5nIHRoZSBuZXcgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYW5kIGV2ZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYmVjYXVzZSB3ZSBjYW4gYWxzbyBsZXZlcmFnZSBTeXprYWxsZXLigJlzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgdGhlcmUuCgpTbywgaW4gdGVybXMgb2YgZm9jdXMsIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyB0aHJvdWdoIHRob3NlIGZ1bmN0aW9uczogYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZWAsIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYCwgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2dldF9mZWF0dXJlc2AsIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AsIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgLCBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAsIGBydGw4MjYxeF9md19sb2FkYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYCwgYHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRgLCBgcnRsODI2MXhfY29uZmlnX2FuZWdgLCBhbmQgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YC4KClRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGFyZSBgUkVBTFRFS19QSFlgLCBgVVNCX05FVF9TTVNDOTVYWGAsIGFuZCBgVVNCX0xBTjc4WFhgLgoKQWxyaWdodCwgSSB0aGluayB0aGlzIHBsYW4gaXMgc29saWQuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkVBTFRFS19QSFkmIzM0OywKICAgICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LAogICAgJiMzNDtVU0JfTEFONzhYWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbnBoeV9jNDVfc29mdF9yZXNldCYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZSYjMzQ7LAogICAgJiMzNDtnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X3Byb2JlJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2dldF9mZWF0dXJlcyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9yZWFkX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtydGw4MjYxeF9md19sb2FkJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3J0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7cnRsODI2MXhfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjAyMDg2ODI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDQ5MDk2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJFQUxURUtfUEhZXCIsXG4gICAgXCJVU0JfTkVUX1NNU0M5NVhYXCIsXG4gICAgXCJVU0JfTEFONzhYWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbnBoeV9jNDVfc29mdF9yZXNldFwiLFxuICAgIFwiZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcImdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVcIixcbiAgICBcInJ0bDgyNjF4X3Byb2JlXCIsXG4gICAgXCJydGw4MjYxeF9nZXRfZmVhdHVyZXNcIixcbiAgICBcInJ0bDgyNjF4X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlcIixcbiAgICBcInJ0bDgyNjF4X2Z3X2xvYWRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0XCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfYW5lZ1wiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgYW5kIGludHJvZHVjZXMgbmV3IENsYXVzZSA0NSBQSFkgZnVuY3Rpb25zIGZvciBzb2Z0IHJlc2V0IGFuZCBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIChsaWtlIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cyBhbmQgY2FuIGJlIG1hZGUgdG8gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciBhbmQgZXhlY3V0ZSB0aGUgbmV3IHByb2JlLCBjb25maWcsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHJvdXRpbmVzLiBUaGUgZmlybXdhcmUgbG9hZGluZyBjYW4gYWxzbyBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjAyMDg3MzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA2NjgxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMjJkYTJhYWJjYWZmMWNjZTA5NmRjZmUyNjk0MzFmYjdlMmVhMGUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTA6NDE6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5pbmRleCAxMjY5NTE3NDE0Mjg4Zi4uZGY2ODJkM2ViZDVhMWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5AQCAtMzg0LDYgKzM4NCwxMTkgQEAgaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcXG4gXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSBwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLFxcbitcXHRcXHRcXHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX0NUUkwxLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAhKHZhbCBcXHUwMDI2IE1ESU9fQ1RSTDFfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgNTAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xcbitcXG4rLyoqXFxuKyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxcbisgKiAxMEdCQVNFLVQgY29udHJvbCByZWdpc3RlciAoTU1EIDcsIFJlZ2lzdGVyIDB4MDAyMCkgYWNjb3JkaW5nIHRvXFxuKyAqIElFRUUgODAyLjMgc3RhbmRhcmRzLlxcbisgKlxcbisgKiBSZXR1cm46IG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFpbHVyZSwgMCBpZiBNYXN0ZXIvU2xhdmUgZGlkbid0IGNoYW5nZSxcXG4rICogb3IgMSBpZiBNYXN0ZXIvU2xhdmUgbW9kZXMgY2hhbmdlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHR1MTYgY3RsID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAocGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc2V0KSB7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfUFJFRkVSUkVEOlxcbitcXHRcXHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfCBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfU0xBVkVfRk9SQ0U6XFxuK1xcdFxcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcXG4rXFx0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEOlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgTWFzdGVyL1NsYXZlIG1vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRSB8XFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSB8XFxuK1xcdFxcdFxcdFxcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlIC0gcmVhZCBtYXN0ZXIvc2xhdmUgc3RhdHVzXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogUmVhZCB0aGUgTWFzdGVyL1NsYXZlIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1c1xcbisgKiBmcm9tIDEwR0JBU0UtVCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKE1NRCA3LCBSZWcgMHgwMDIwIGFuZCAweDAwMjEpLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19VTktOT1dOO1xcbitcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xcbitcXG4rXFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCk7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUpIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19NQVNURVJfRk9SQ0U7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUpXFxuK1xcdFxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDtcXG4rXFx0fVxcbitcXG4rXFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVCkge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7XFxuK1xcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VsaW5rKSB7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfUkVTKVxcbitcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9NQVNURVI7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfU0xBVkU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogZ2VucGh5X2M0NV9hbmVnX2RvbmUgLSByZXR1cm4gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSBzdGF0dXNcXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuQEAgLTExOTIsNiArMTMwNSwxMCBAQCBpbnQgZ2VucGh5X2M0NV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X2Jhc2V0MV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xcbkBAIC0xMjI1LDYgKzEzNDIsMTQgQEAgaW50IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0aWYgKHJldCBcXHUwMDNlIDApXFxuIFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbiBcXG4rXFx0aWYgKCFnZW5waHlfYzQ1X2Jhc2V0MV9hYmxlKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhwaHlkZXYsIGNoYW5nZWQpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuaW5kZXggMjcyNjg4MTFmNTY0ZjIuLjEwYzhhYmZlYmU4NDdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5AQCAtOCw3ICs4LDkgQEBcXG4gICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMzMi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXFx1MDAzZVxcbkBAIC0xNDEsNiArMTQzLDEwIEBAXFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMVxcdFxcdDE3XFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMlxcdFxcdDE4XFxuIFxcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9BRERSX1JFR1xcdFxcdFxcdDB4YTQzNlxcbisjZGVmaW5lIFJUTDgyNjFYX0VYVF9EQVRBX1JFR1xcdFxcdFxcdDB4YTQzOFxcbisjZGVmaW5lIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJcXHRcXHQweDgwMWRcXG4rXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05cXHRcXHRcXHQweDY5N2FcXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTl9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDUsIDApXFxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV8yNTAwQkFTRVhfU0dNSUlcXHRcXHQwXFxuQEAgLTI1MSw2ICsyNTcsNjkgQEBcXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcXHRcXHRcXHRcXHQweDAwMWNjODRhXFxuICNkZWZpbmUgUlRMXzgyNTFCXFx0XFx0XFx0XFx0MHgwMDFjYzg2MlxcbiAjZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG4rI2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuK1xcbisjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXFx0XFx0MHgwMFxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXFx0QklUKDApXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX1BBR0VfUkVDVlxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkVcXHRCSVQoMylcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTElOS19DSEdcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1NcXHRCSVQoNSlcXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcXHRcXHRCSVQoMTApXFxuK1xcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9NQVNLX0RFRkFVTFRcXHQoUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0pBQkJFUilcXG4rXFxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfQUxMXFx0XFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX1BBR0VfUkVDViB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUEhZX1JFR19BQ0NFU1MgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBSVEw4MjYxWF9JTlRfUE1FIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXFxuK1xcbisjZGVmaW5lIEZXX01BSU5fTUFHSUNcXHRcXHRcXHQweDUyNTQ0QzM4XFxuKyNkZWZpbmUgRldfU1VCX01BR0lDXzgyNjFDXFx0XFx0MHgzMjM2MzE0M1xcbisjZGVmaW5lIFJUTDgyNjFYX1BPTExfVElNRU9VVF9NU1xcdDEwMFxcbisjZGVmaW5lIFJUTDgyNjFYX01BWF9NTURfREVWXFx0XFx0MzFcXG4rXFxuKyNkZWZpbmUgUlRMODI2MUNfQ0VfRldfTkFNRVxcdFxcXCJydGxfbmljL3J0bDgyNjFjLmJpblxcXCJcXG4rTU9EVUxFX0ZJUk1XQVJFKFJUTDgyNjFDX0NFX0ZXX05BTUUpO1xcbitcXG4rZW51bSBydGw4MjYxeF9md19vcCB7XFxuK1xcdE9QX1dSSVRFID0gMHgwMCxcXHQvKiBXcml0ZSAqL1xcbitcXHRPUF9QT0xMICA9IDB4MDIsXFx0LyogUG9sbGluZyAqL1xcbit9O1xcbitcXG4rc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciB7XFxuK1xcdF9fbGUzMiBtYWluX21hZ2ljO1xcdC8qIE1haW4gbWFnaWMgbnVtYmVyICovXFxuK1xcdF9fbGUzMiBzdWJfbWFnaWM7XFx0LyogU3ViIG1hZ2ljIG51bWJlciAqL1xcbitcXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcXHQvKiBNYWpvciB2ZXJzaW9uICovXFxuK1xcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1xcdC8qIE1pbm9yIHZlcnNpb24gKi9cXG4rXFx0X19sZTE2IG51bV9lbnRyaWVzO1xcdC8qIE51bWJlciBvZiBlbnRyaWVzICovXFxuK1xcdF9fbGUxNiByZXNlcnZlZDtcXHQvKiBSZXNlcnZlZCAqL1xcbitcXHRfX2xlMzIgY3JjMzI7XFx0XFx0LyogQ1JDMzIgY2hlY2tzdW0gKi9cXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MjYxeF9md19lbnRyeSB7XFxuK1xcdF9fdTggIHR5cGU7XFx0XFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXFxuK1xcdF9fdTggIGRldjtcXHRcXHQvKiBNTUQgZGV2aWNlICovXFxuK1xcdF9fbGUxNiBhZGRyO1xcdFxcdC8qIFJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4rXFx0X191OCAgbXNiO1xcdFxcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cXG4rXFx0X191OCAgbHNiO1xcdFxcdC8qIExTQiBiaXQgcG9zaXRpb24gKi9cXG4rXFx0X19sZTE2IHZhbHVlO1xcdFxcdC8qIFZhbHVlIHRvIHdyaXRlL2NvbXBhcmUgKi9cXG4rXFx0X19sZTE2IHRpbWVvdXRfbXM7XFx0LyogUG9sbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xcbitcXHRfX3U4ICBwb2xsX3NldDtcXHRcXHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXFxuK1xcdF9fdTggIHJlc2VydmVkO1xcdFxcdC8qIFJlc2VydmVkICovXFxuK307XFxuK1xcbisjZGVmaW5lIEZXX0hFQURFUl9TSVpFXFx0XFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXFxuKyNkZWZpbmUgRldfRU5UUllfU0laRVxcdFxcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXFxuIFxcbiAvKiBSVEw4MjExRSBhbmQgUlRMODIxMUYgc3VwcG9ydCB1cCB0byB0aHJlZSBMRURzICovXFxuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXFx0XFx0XFx0M1xcbkBAIC0yNzAsNiArMzM5LDExIEBAIHN0cnVjdCBydGw4MjF4X3ByaXYge1xcbiBcXHR1MTYgaW5lcjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcXG4rXFx0Y29uc3QgY2hhciAqZndfbmFtZTtcXG4rXFx0Ym9vbCBmd19sb2FkZWQ7XFxuK307XFxuK1xcbiBzdGF0aWMgaW50IHJ0bDgyMXhfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBSVEw4MjF4X1BBR0VfU0VMRUNUKTtcXG5AQCAtMzEwLDYgKzM4NCwzMTkgQEAgc3RhdGljIGludCBydGw4MjF4X21vZGlmeV9leHRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgZXh0X3BhZ2UsXFxuIFxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MjYxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHN1Yl9waHlfaWQsIHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcbitcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyNjFYX0VYVF9BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN1Yl9waHlfaWQgPSAocmV0IFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZjtcXG4rXFxuK1xcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xcbitcXHRjYXNlIFJUTDgyNjFDX0NFX01PREVMOlxcbitcXHRcXHRwcml2LVxcdTAwM2Vmd19uYW1lID0gUlRMODI2MUNfQ0VfRldfTkFNRTtcXG4rXFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsIFxcXCJVbmtub3duIHN1Yl9pZCAweCUwMngsIGRlZmF1bHQgYmVoYXZpb3JcXFxcblxcXCIsIHN1Yl9waHlfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFN1cHBsZW1lbnQgTXVsdGktR2lnIHNwZWVkcyB0aGF0IG1heSBub3QgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZFxcbitcXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfNTAwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFIFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0XFx0ICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX1NUQVQxMDAwKSk7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXG4rXFx0XFx0bWlpX3N0YXQxMDAwX21vZF9saW5rbW9kZV9scGFfdChwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLCB2YWwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xcbitcXHR1MzIgY2FsY19jcmMsIGZpbGVfY3JjO1xcbitcXHRzaXplX3QgZGF0YV9sZW47XFxuK1xcdHUxNiBudW1fZW50cmllcztcXG4rXFxuK1xcdGlmIChmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIEZXX0hFQURFUl9TSVpFKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgdG9vIHNtYWxsOiAlenUgYnl0ZXNcXFxcblxcXCIsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICopZnctXFx1MDAzZWRhdGE7XFxuK1xcbitcXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VtYWluX21hZ2ljKTtcXG4rXFx0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkludmFsaWQgZmlybXdhcmUgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgbWFpbl9tYWdpYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzdWJfbWFnaWMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZXN1Yl9tYWdpYyk7XFxuK1xcdGlmIChzdWJfbWFnaWMgIT0gRldfU1VCX01BR0lDXzgyNjFDKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiSW52YWxpZCBzdWIgbWFnaWM6IDB4JTA4eFxcXFxuXFxcIiwgc3ViX21hZ2ljKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9lbnRyaWVzID0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdGRhdGFfbGVuID0gbnVtX2VudHJpZXMgKiBGV19FTlRSWV9TSVpFO1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICE9IHNpemVvZigqaGRyKSArIGRhdGFfbGVuKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmlybXdhcmUgc2l6ZSBtaXNtYXRjaFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRjYWxjX2NyYyA9IGNyYzMyKH4wLCBmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFLCBkYXRhX2xlbikgXiB+MDtcXG4rXFx0ZmlsZV9jcmMgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWNyYzMyKTtcXG4rXFxuK1xcdGlmIChjYWxjX2NyYyAhPSBmaWxlX2NyYykge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkNSQzMyIG1pc21hdGNoOiBjYWxjdWxhdGVkPTB4JTA4eCBmaWxlPTB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5KVxcbit7XFxuK1xcdHUxNiBhZGRyLCB2YWx1ZSwgdGltZW91dF9tcztcXG4rXFx0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XFxuK1xcdHUzMiBiaXRzLCBleHBlY3RfdmFsO1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbitcXHRhZGRyID0gbGUxNl90b19jcHUoZW50cnktXFx1MDAzZWFkZHIpO1xcbitcXHRtc2IgPSBlbnRyeS1cXHUwMDNlbXNiO1xcbitcXHRsc2IgPSBlbnRyeS1cXHUwMDNlbHNiO1xcbitcXHR2YWx1ZSA9IGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2V2YWx1ZSk7XFxuK1xcdHRpbWVvdXRfbXMgPSBsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNldGltZW91dF9tcyk7XFxuK1xcdHBvbGxfc2V0ID0gZW50cnktXFx1MDAzZXBvbGxfc2V0O1xcbitcXG4rXFx0aWYgKHRpbWVvdXRfbXMgPT0gMClcXG4rXFx0XFx0dGltZW91dF9tcyA9IFJUTDgyNjFYX1BPTExfVElNRU9VVF9NUztcXG4rXFxuK1xcdGlmIChkZXYgXFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgTU1EIGRldmljZTogZGV2PSV1XFxcXG5cXFwiLCBkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1zYiBcXHUwMDNlIDE1IHx8IGxzYiBcXHUwMDNlIG1zYikge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXFxcblxcXCIsIG1zYiwgbHNiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZW50cnktXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBPUF9XUklURTpcXG4rXFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgR0VOTUFTSyhtc2IsIGxzYiksICh2YWx1ZSBcXHUwMDNjXFx1MDAzYyBsc2IpIFxcdTAwMjYgR0VOTUFTSyhtc2IsIGxzYikpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgT1BfUE9MTDpcXG4rXFx0XFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xcbitcXHRcXHRleHBlY3RfdmFsID0gKHZhbHVlIFxcdTAwM2NcXHUwMDNjIGxzYikgXFx1MDAyNiBiaXRzO1xcbitcXG4rXFx0XFx0aWYgKHBvbGxfc2V0KVxcbitcXHRcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCh2YWwgXFx1MDAyNiBiaXRzKSA9PSBleHBlY3RfdmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQxMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBkZXYsIGFkZHIsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZhbCBcXHUwMDI2IGJpdHMpICE9IGV4cGVjdF92YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2Z3X2xvYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODI2MXhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2VudHJ5ICplbnRyeTtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vmd19uYW1lKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmZ3LCBwcml2LVxcdTAwM2Vmd19uYW1lLCBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlczogJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWZ3X25hbWUsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZShwaHlkZXYsIGZ3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlX2Z3O1xcbitcXG4rXFx0aGRyID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIgKilmdy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdGVudHJ5ID0gKGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqKShmdy1cXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbnVtX2VudHJpZXMpOyBpKyssIGVudHJ5KyspIHtcXG4rXFx0XFx0cmV0ID0gcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeShwaHlkZXYsIGVudHJ5KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkVudHJ5ICVkIGZhaWxlZDogJWRcXFxcblxcXCIsIGksIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVsZWFzZV9mdztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xcbitcXG4rcmVsZWFzZV9mdzpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5TUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsXFxuK1xcdFxcdFxcdFxcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTkVSLCAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBpcnFfc3RhdHVzO1xcbitcXG4rXFx0aXJxX3N0YXR1cyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xcbitcXHRpZiAoaXJxX3N0YXR1cyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5X2Vycm9yKHBoeWRldik7XFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEoaXJxX3N0YXR1cyBcXHUwMDI2IFJUTDgyNjFYX0lOVF9NQVNLX0FMTCkpXFxuK1xcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4rXFxuK1xcdGlmIChpcnFfc3RhdHVzIFxcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxcbitcXHQgICAgUlRMODI2MVhfSU5UX0FVVE9ORUdfRVJST1IgfCBSVEw4MjYxWF9JTlRfSkFCQkVSKSlcXG4rXFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0dTE2IGFkdl8xZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyA9IEFEVkVSVElTRV8xMDAwRlVMTDtcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdGFkdl8xZyB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUlRMODIyWF9WTkQyX0MyMl9SRUcoTUlJX0NUUkwxMDAwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYWR2XzFnKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgyNjF4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxcbitcXHQgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMuIFJlbG9hZGluZyBpcyBvbmx5IG5lY2Vzc2FyeSBhZnRlciBhIHBvd2VyXFxuK1xcdCAqIGN5Y2xlIG9yIGhhcmQgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlZndfbmFtZSBcXHUwMDI2XFx1MDAyNiAhcHJpdi1cXHUwMDNlZndfbG9hZGVkKVxcbitcXHRcXHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbkBAIC0zMDAxLDYgKzMzODgsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcXG4gXFx0XFx0LndyaXRlX21tZFxcdD0gZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZCxcXG4rXFx0fSwge1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcXFwiLFxcbitcXHRcXHQucHJvYmVcXHRcXHRcXHQ9IHJ0bDgyNjF4X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBydGw4MjYxeF9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0gcnRsODI2MXhfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5jb25maWdfaW50clxcdFxcdD0gcnRsODI2MXhfY29uZmlnX2ludHIsXFxuK1xcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxcbitcXHRcXHQuc29mdF9yZXNldFxcdFxcdD0gZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZ2VucGh5X2M0NV9wbWFfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMjVhNjYzMjBkZjU2ZWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjMwOSw2ICsyMzA5LDcgQEAgaW50IGdlbnBoeV9jMzdfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCAqY2hhbmdlZCk7XFxuIC8qIENsYXVzZSA0NSBQSFkgKi9cXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydCk7XFxuK2ludCBnZW5waHlfYzQ1X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcmVhZF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xwYShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCBiMjU0MWM5NDhmYzFlYi4uMDZmNGJjM2MyMGM3MTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5AQCAtMzMyLDggKzMzMiwxMyBAQFxcbiAjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHXFx0MHgwMDgwXFx0LyogQWR2ZXJ0aXNlIDIuNUdCQVNFLVQgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWNUdcXHQweDAxMDBcXHQvKiBBZHZlcnRpc2UgNUdCQVNFLVQgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMTBHXFx0MHgxMDAwXFx0LyogQWR2ZXJ0aXNlIDEwR0JBU0UtVCAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEVcXHQweDgwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgbWFudWFsIGNvbmZpZyBlbmFibGUgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfVkFMVUVcXHQweDQwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgY29uZmlnIHZhbHVlICgxPU1hc3RlcikgKi9cXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfUE9SVF9UWVBFXFx0MHgyMDAwXFx0LyogTWFzdGVyIFByZWZlcnJlZCBUeXBlICovXFxuIFxcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19GQVVMVFxcdDB4ODAwMFxcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xcbisjZGVmaW5lIE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVNcXHQweDQwMDBcXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81R1xcdDB4MDAyMCAgLyogTFAgaXMgMi41R0JUIGNhcGFibGUgKi9cXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1xcdFxcdDB4MDA0MCAgLyogTFAgaXMgNUdCVCBjYXBhYmxlICovXFxuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXFx0MHgwMjAwXFx0LyogTFAgdHJhaW5pbmcgcmVzZXQgcmVxLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MToxOS40OTIzMTgwMTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mzk3NzYzNzk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiVVNCX0xBTjc4WFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBmaXJtd2FyZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyMmRhMmFhYmNhZmYxY2NlMDk2ZGNmZTI2OTQzMWZiN2UyZWEwZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDEwOjQxOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDEyNjk1MTc0MTQyODhmLi5kZjY4MmQzZWJkNWExZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0zODQsNiArMzg0LDExOSBAQCBpbnQgZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcmVzdGFydClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKTtcbiBcbisvKipcbisgKiBnZW5waHlfYzQ1X3NvZnRfcmVzZXQgLSBzb2Z0d2FyZSByZXNldCB0aGUgUEhZIHZpYSBDbGF1c2UgNDUgUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCwgdmFsO1xuK1xuK1x0cmV0ID0gcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSxcbitcdFx0XHQgICAgICAgTURJT19DVFJMMV9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsXG4rXHRcdFx0XHRcdCBNRElPX0NUUkwxLCB2YWwsXG4rXHRcdFx0XHRcdCAhKHZhbCBcdTAwMjYgTURJT19DVFJMMV9SRVNFVCksXG4rXHRcdFx0XHRcdCA1MDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3NvZnRfcmVzZXQpO1xuK1xuKy8qKlxuKyAqIGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlIC0gQ29uZmlndXJlIE1hc3Rlci9TbGF2ZSBzZXR0aW5nIGZvciBDNDUgUEhZc1xuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogRGVzY3JpcHRpb246IENvbmZpZ3VyZSB0aGUgZm9yY2VkIG9yIHByZWZlcnJlZCBNYXN0ZXIvU2xhdmUgcm9sZVxuKyAqIDEwR0JBU0UtVCBjb250cm9sIHJlZ2lzdGVyIChNTUQgNywgUmVnaXN0ZXIgMHgwMDIwKSBhY2NvcmRpbmcgdG9cbisgKiBJRUVFIDgwMi4zIHN0YW5kYXJkcy5cbisgKlxuKyAqIFJldHVybjogbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLCAwIGlmIE1hc3Rlci9TbGF2ZSBkaWRuJ3QgY2hhbmdlLFxuKyAqIG9yIDEgaWYgTWFzdGVyL1NsYXZlIG1vZGVzIGNoYW5nZWQuXG4rICovXG4rc3RhdGljIGludCBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHUxNiBjdGwgPSAwO1xuK1xuK1x0c3dpdGNoIChwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3NldCkge1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX01BU1RFUl9QUkVGRVJSRUQ6XG4rXHRcdGN0bCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX1BSRUZFUlJFRDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFOlxuK1x0XHRjdGwgPSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFIHwgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9GT1JDRTpcbitcdFx0Y3RsID0gTURJT19BTl8xMEdCVF9DVFJMX01TX0VOQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjpcbitcdGNhc2UgTUFTVEVSX1NMQVZFX0NGR19VTlNVUFBPUlRFRDpcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiVW5zdXBwb3J0ZWQgTWFzdGVyL1NsYXZlIG1vZGVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19FTkFCTEUgfFxuK1x0XHRcdFx0ICAgICAgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFIHxcbitcdFx0XHRcdCAgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19QT1JUX1RZUEUsIGN0bCk7XG4rfVxuK1xuKy8qKlxuKyAqIGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUgLSByZWFkIG1hc3Rlci9zbGF2ZSBzdGF0dXNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBSZWFkIHRoZSBNYXN0ZXIvU2xhdmUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXG4rICogZnJvbSAxMEdCQVNFLVQgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzIChNTUQgNywgUmVnIDB4MDAyMCBhbmQgMHgwMDIxKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitzdGF0aWMgaW50IGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XG4rXHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOS05PV047XG4rXG4rXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFKSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfQ1RSTF9NU19WQUxVRSlcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX0ZPUkNFO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1NMQVZFX0ZPUkNFO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRSlcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfTUFTVEVSX1BSRUZFUlJFRDtcbitcdFx0ZWxzZVxuK1x0XHRcdHBoeWRldi1cdTAwM2VtYXN0ZXJfc2xhdmVfZ2V0ID0gTUFTVEVSX1NMQVZFX0NGR19TTEFWRV9QUkVGRVJSRUQ7XG4rXHR9XG4rXG4rXHR2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiB2YWw7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfTVNfRkFVTFQpIHtcbitcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9FUlI7XG4rXHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VsaW5rKSB7XG4rXHRcdGlmICh2YWwgXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9NU19SRVMpXG4rXHRcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9NQVNURVI7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1NMQVZFO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTktOT1dOO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfYW5lZ19kb25lIC0gcmV0dXJuIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgc3RhdHVzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5AQCAtMTE5Miw2ICsxMzA1LDEwIEBAIGludCBnZW5waHlfYzQ1X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdFx0cmV0ID0gZ2VucGh5X2M0NV9iYXNldDFfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbiBcdFx0cGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpO1xuQEAgLTEyMjUsNiArMTM0MiwxNCBAQCBpbnQgZ2VucGh5X2M0NV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0Y2hhbmdlZCA9IHRydWU7XG4gXG4rXHRpZiAoIWdlbnBoeV9jNDVfYmFzZXQxX2FibGUocGh5ZGV2KSkge1xuK1x0XHRyZXQgPSBnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gZ2VucGh5X2M0NV9jaGVja19hbmRfcmVzdGFydF9hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfY29uZmlnX2FuZWcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbmluZGV4IDI3MjY4ODExZjU2NGYyLi4xMGM4YWJmZWJlODQ3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuQEAgLTgsNyArOCw5IEBAXG4gICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maXJtd2FyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZWlycS5oXHUwMDNlXG5AQCAtMTQxLDYgKzE0MywxMCBAQFxuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMVx0XHQxN1xuICNkZWZpbmUgUlRMODIxMUZfUEhZU0lDQUxfQUREUl9XT1JEMlx0XHQxOFxuIFxuKyNkZWZpbmUgUlRMODI2MVhfRVhUX0FERFJfUkVHXHRcdFx0MHhhNDM2XG4rI2RlZmluZSBSVEw4MjYxWF9FWFRfREFUQV9SRUdcdFx0XHQweGE0MzhcbisjZGVmaW5lIFJUTF84MjYxWF9TVUJfUEhZX0lEX0FERFJcdFx0MHg4MDFkXG4rXG4gI2RlZmluZSBSVEw4MjJYX1ZORDFfU0VSREVTX09QVElPTlx0XHRcdDB4Njk3YVxuICNkZWZpbmUgUlRMODIyWF9WTkQxX1NFUkRFU19PUFRJT05fTU9ERV9NQVNLXHRcdEdFTk1BU0soNSwgMClcbiAjZGVmaW5lIFJUTDgyMlhfVk5EMV9TRVJERVNfT1BUSU9OX01PREVfMjUwMEJBU0VYX1NHTUlJXHRcdDBcbkBAIC0yNTEsNiArMjU3LDY5IEBAXG4gI2RlZmluZSBSVExfODIyMUJfVk1fQ0dcdFx0XHRcdDB4MDAxY2M4NGFcbiAjZGVmaW5lIFJUTF84MjUxQlx0XHRcdFx0MHgwMDFjYzg2MlxuICNkZWZpbmUgUlRMXzgyNjFDXHRcdFx0XHQweDAwMWNjODkwXG4rI2RlZmluZSBSVExfODI2MUNfQ0dcdFx0XHRcdDB4MDAxY2M4OThcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX01PREVMXHRcdDB4MDBcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SXHRCSVQoMClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1ZcdFx0QklUKDIpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfQVVUT05FR19ET05FXHRCSVQoMylcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9MSU5LX0NIR1x0XHRCSVQoNClcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9QSFlfUkVHX0FDQ0VTU1x0QklUKDUpXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfUE1FXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRMODI2MVhfSU5UX0FMRFBTX0NIR1x0XHRCSVQoOSlcbisjZGVmaW5lIFJUTDgyNjFYX0lOVF9KQUJCRVJcdFx0QklUKDEwKVxuK1xuKyNkZWZpbmUgUlRMODI2MVhfSU5UX01BU0tfREVGQVVMVFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0xJTktfQ0hHIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9KQUJCRVIpXG4rXG4rI2RlZmluZSBSVEw4MjYxWF9JTlRfTUFTS19BTExcdFx0KFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QQUdFX1JFQ1YgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FVVE9ORUdfRE9ORSB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfTElOS19DSEcgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX1BIWV9SRUdfQUNDRVNTIHwgXFxcbitcdFx0XHRcdFx0IFJUTDgyNjFYX0lOVF9QTUUgfCBcXFxuK1x0XHRcdFx0XHQgUlRMODI2MVhfSU5UX0FMRFBTX0NIRyB8IFxcXG4rXHRcdFx0XHRcdCBSVEw4MjYxWF9JTlRfSkFCQkVSKVxuK1xuKyNkZWZpbmUgRldfTUFJTl9NQUdJQ1x0XHRcdDB4NTI1NDRDMzhcbisjZGVmaW5lIEZXX1NVQl9NQUdJQ184MjYxQ1x0XHQweDMyMzYzMTQzXG4rI2RlZmluZSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVNcdDEwMFxuKyNkZWZpbmUgUlRMODI2MVhfTUFYX01NRF9ERVZcdFx0MzFcbitcbisjZGVmaW5lIFJUTDgyNjFDX0NFX0ZXX05BTUVcdFwicnRsX25pYy9ydGw4MjYxYy5iaW5cIlxuK01PRFVMRV9GSVJNV0FSRShSVEw4MjYxQ19DRV9GV19OQU1FKTtcbitcbitlbnVtIHJ0bDgyNjF4X2Z3X29wIHtcbitcdE9QX1dSSVRFID0gMHgwMCxcdC8qIFdyaXRlICovXG4rXHRPUF9QT0xMICA9IDB4MDIsXHQvKiBQb2xsaW5nICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyIHtcbitcdF9fbGUzMiBtYWluX21hZ2ljO1x0LyogTWFpbiBtYWdpYyBudW1iZXIgKi9cbitcdF9fbGUzMiBzdWJfbWFnaWM7XHQvKiBTdWIgbWFnaWMgbnVtYmVyICovXG4rXHRfX2xlMTYgdmVyc2lvbl9tYWpvcjtcdC8qIE1ham9yIHZlcnNpb24gKi9cbitcdF9fbGUxNiB2ZXJzaW9uX21pbm9yO1x0LyogTWlub3IgdmVyc2lvbiAqL1xuK1x0X19sZTE2IG51bV9lbnRyaWVzO1x0LyogTnVtYmVyIG9mIGVudHJpZXMgKi9cbitcdF9fbGUxNiByZXNlcnZlZDtcdC8qIFJlc2VydmVkICovXG4rXHRfX2xlMzIgY3JjMzI7XHRcdC8qIENSQzMyIGNoZWNrc3VtICovXG4rfTtcbitcbitzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkge1xuK1x0X191OCAgdHlwZTtcdFx0LyogT3BlcmF0aW9uIHR5cGUgKE9QXyopICovXG4rXHRfX3U4ICBkZXY7XHRcdC8qIE1NRCBkZXZpY2UgKi9cbitcdF9fbGUxNiBhZGRyO1x0XHQvKiBSZWdpc3RlciBhZGRyZXNzICovXG4rXHRfX3U4ICBtc2I7XHRcdC8qIE1TQiBiaXQgcG9zaXRpb24gKi9cbitcdF9fdTggIGxzYjtcdFx0LyogTFNCIGJpdCBwb3NpdGlvbiAqL1xuK1x0X19sZTE2IHZhbHVlO1x0XHQvKiBWYWx1ZSB0byB3cml0ZS9jb21wYXJlICovXG4rXHRfX2xlMTYgdGltZW91dF9tcztcdC8qIFBvbGwgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbitcdF9fdTggIHBvbGxfc2V0O1x0XHQvKiBQb2xsIHVudGlsIGVxdWFsICgxKSBvciBub3QgZXF1YWwgKDApICovXG4rXHRfX3U4ICByZXNlcnZlZDtcdFx0LyogUmVzZXJ2ZWQgKi9cbit9O1xuK1xuKyNkZWZpbmUgRldfSEVBREVSX1NJWkVcdFx0c2l6ZW9mKHN0cnVjdCBydGw4MjYxeF9md19oZWFkZXIpXG4rI2RlZmluZSBGV19FTlRSWV9TSVpFXHRcdHNpemVvZihzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkpXG4gXG4gLyogUlRMODIxMUUgYW5kIFJUTDgyMTFGIHN1cHBvcnQgdXAgdG8gdGhyZWUgTEVEcyAqL1xuICNkZWZpbmUgUlRMODIxMXhfTEVEX0NPVU5UXHRcdFx0M1xuQEAgLTI3MCw2ICszMzksMTEgQEAgc3RydWN0IHJ0bDgyMXhfcHJpdiB7XG4gXHR1MTYgaW5lcjtcbiB9O1xuIFxuK3N0cnVjdCBydGw4MjYxeF9wcml2IHtcbitcdGNvbnN0IGNoYXIgKmZ3X25hbWU7XG4rXHRib29sIGZ3X2xvYWRlZDtcbit9O1xuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIFJUTDgyMXhfUEFHRV9TRUxFQ1QpO1xuQEAgLTMxMCw2ICszODQsMzE5IEBAIHN0YXRpYyBpbnQgcnRsODIxeF9tb2RpZnlfZXh0X3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IGV4dF9wYWdlLFxuIFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgyNjF4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XG4rXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0FERFJfUkVHLFxuK1x0XHRcdCAgICBSVExfODI2MVhfU1VCX1BIWV9JRF9BRERSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODI2MVhfRVhUX0RBVEFfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdWJfcGh5X2lkID0gKHJldCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRzd2l0Y2ggKHN1Yl9waHlfaWQpIHtcbitcdGNhc2UgUlRMODI2MUNfQ0VfTU9ERUw6XG4rXHRcdHByaXYtXHUwMDNlZndfbmFtZSA9IFJUTDgyNjFDX0NFX0ZXX05BTUU7XG4rXHRcdHBoeWRldl9pbmZvKHBoeWRldiwgXCJSVEw4MjYxQyBkZXRlY3RlZCAoc3ViX2lkIDB4JTAyeClcXG5cIiwgc3ViX3BoeV9pZCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0ZGVmYXVsdDpcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIlVua25vd24gc3ViX2lkIDB4JTAyeCwgZGVmYXVsdCBiZWhhdmlvclxcblwiLCBzdWJfcGh5X2lkKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKlxuK1x0ICogU3VwcGxlbWVudCBNdWx0aS1HaWcgc3BlZWRzIHRoYXQgbWF5IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkXG4rXHQgKiBSVEw4MjYxWCBzdXBwb3J0cyAyLjVHLzVHIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIDEwR1xuK1x0ICovXG4rXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzUwMDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfU1RBVDEwMDApKTtcbitcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdmFsO1xuK1xuK1x0XHRtaWlfc3RhdDEwMDBfbW9kX2xpbmttb2RlX2xwYV90KHBoeWRldi1cdTAwM2VscF9hZHZlcnRpc2luZywgdmFsKTtcbitcdH1cbitcbitcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfaGVhZGVyICpoZHI7XG4rXHR1MzIgbWFpbl9tYWdpYywgc3ViX21hZ2ljO1xuK1x0dTMyIGNhbGNfY3JjLCBmaWxlX2NyYztcbitcdHNpemVfdCBkYXRhX2xlbjtcbitcdHUxNiBudW1fZW50cmllcztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBGV19IRUFERVJfU0laRSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGaXJtd2FyZSB0b28gc21hbGw6ICV6dSBieXRlc1xcblwiLCBmdy1cdTAwM2VzaXplKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4rXG4rXHRtYWluX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZW1haW5fbWFnaWMpO1xuK1x0aWYgKG1haW5fbWFnaWMgIT0gRldfTUFJTl9NQUdJQykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJJbnZhbGlkIGZpcm13YXJlIG1hZ2ljOiAweCUwOHhcXG5cIiwgbWFpbl9tYWdpYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3ViX21hZ2ljID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZXN1Yl9tYWdpYyk7XG4rXHRpZiAoc3ViX21hZ2ljICE9IEZXX1NVQl9NQUdJQ184MjYxQykge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJJbnZhbGlkIHN1YiBtYWdpYzogMHglMDh4XFxuXCIsIHN1Yl9tYWdpYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0bnVtX2VudHJpZXMgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlbnVtX2VudHJpZXMpO1xuK1x0ZGF0YV9sZW4gPSBudW1fZW50cmllcyAqIEZXX0VOVFJZX1NJWkU7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAhPSBzaXplb2YoKmhkcikgKyBkYXRhX2xlbikge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGaXJtd2FyZSBzaXplIG1pc21hdGNoXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGNhbGNfY3JjID0gY3JjMzIofjAsIGZ3LVx1MDAzZWRhdGEgKyBGV19IRUFERVJfU0laRSwgZGF0YV9sZW4pIF4gfjA7XG4rXHRmaWxlX2NyYyA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VjcmMzMik7XG4rXG4rXHRpZiAoY2FsY19jcmMgIT0gZmlsZV9jcmMpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ1JDMzIgbWlzbWF0Y2g6IGNhbGN1bGF0ZWQ9MHglMDh4IGZpbGU9MHglMDh4XFxuXCIsXG4rXHRcdFx0ICAgY2FsY19jcmMsIGZpbGVfY3JjKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBydGw4MjYxeF9md19lbnRyeSAqZW50cnkpXG4re1xuK1x0dTE2IGFkZHIsIHZhbHVlLCB0aW1lb3V0X21zO1xuK1x0dTggZGV2LCBtc2IsIGxzYiwgcG9sbF9zZXQ7XG4rXHR1MzIgYml0cywgZXhwZWN0X3ZhbDtcbitcdGludCByZXQsIHZhbDtcbitcbitcdGRldiA9IGVudHJ5LVx1MDAzZWRldjtcbitcdGFkZHIgPSBsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VhZGRyKTtcbitcdG1zYiA9IGVudHJ5LVx1MDAzZW1zYjtcbitcdGxzYiA9IGVudHJ5LVx1MDAzZWxzYjtcbitcdHZhbHVlID0gbGUxNl90b19jcHUoZW50cnktXHUwMDNldmFsdWUpO1xuK1x0dGltZW91dF9tcyA9IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZXRpbWVvdXRfbXMpO1xuK1x0cG9sbF9zZXQgPSBlbnRyeS1cdTAwM2Vwb2xsX3NldDtcbitcbitcdGlmICh0aW1lb3V0X21zID09IDApXG4rXHRcdHRpbWVvdXRfbXMgPSBSVEw4MjYxWF9QT0xMX1RJTUVPVVRfTVM7XG4rXG4rXHRpZiAoZGV2IFx1MDAzZSBSVEw4MjYxWF9NQVhfTU1EX0RFVikge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJpbnZhbGlkIGZpcm13YXJlIE1NRCBkZXZpY2U6IGRldj0ldVxcblwiLCBkZXYpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChtc2IgXHUwMDNlIDE1IHx8IGxzYiBcdTAwM2UgbXNiKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImludmFsaWQgZmlybXdhcmUgYml0czogbXNiPSV1LCBsc2I9JXVcXG5cIiwgbXNiLCBsc2IpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHN3aXRjaCAoZW50cnktXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBPUF9XUklURTpcbitcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBkZXYsIGFkZHIsXG4rXHRcdFx0XHQgICAgIEdFTk1BU0sobXNiLCBsc2IpLCAodmFsdWUgXHUwMDNjXHUwMDNjIGxzYikgXHUwMDI2IEdFTk1BU0sobXNiLCBsc2IpKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgT1BfUE9MTDpcbitcdFx0Yml0cyA9IEdFTk1BU0sobXNiLCBsc2IpO1xuK1x0XHRleHBlY3RfdmFsID0gKHZhbHVlIFx1MDAzY1x1MDAzYyBsc2IpIFx1MDAyNiBiaXRzO1xuK1xuK1x0XHRpZiAocG9sbF9zZXQpXG4rXHRcdFx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIGRldiwgYWRkciwgdmFsLFxuK1x0XHRcdFx0XHRcdFx0KHZhbCBcdTAwMjYgYml0cykgPT0gZXhwZWN0X3ZhbCxcbitcdFx0XHRcdFx0XHRcdDEwMDAsIHRpbWVvdXRfbXMgKiAxMDAwLCBmYWxzZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgZGV2LCBhZGRyLCB2YWwsXG4rXHRcdFx0XHRcdFx0XHQodmFsIFx1MDAyNiBiaXRzKSAhPSBleHBlY3RfdmFsLFxuK1x0XHRcdFx0XHRcdFx0MTAwMCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODI2MXhfZndfbG9hZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKmVudHJ5O1xuK1x0Y29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqaGRyO1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcbitcdGludCByZXQsIGk7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlZndfbmFtZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmZ3LCBwcml2LVx1MDAzZWZ3X25hbWUsIFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxcblwiLCBwcml2LVx1MDAzZWZ3X25hbWUsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmUocGh5ZGV2LCBmdyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlbGVhc2VfZnc7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IHJ0bDgyNjF4X2Z3X2hlYWRlciAqKWZ3LVx1MDAzZWRhdGE7XG4rXG4rXHRlbnRyeSA9IChjb25zdCBzdHJ1Y3QgcnRsODI2MXhfZndfZW50cnkgKikoZnctXHUwMDNlZGF0YSArIEZXX0hFQURFUl9TSVpFKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VudW1fZW50cmllcyk7IGkrKywgZW50cnkrKykge1xuK1x0XHRyZXQgPSBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5KHBoeWRldiwgZW50cnkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiRW50cnkgJWQgZmFpbGVkOiAlZFxcblwiLCBpLCByZXQpO1xuK1x0XHRcdGdvdG8gcmVsZWFzZV9mdztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vmd19sb2FkZWQgPSB0cnVlO1xuK1xuK3JlbGVhc2VfZnc6XG4rXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODI2MXhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIFJUTDgyMjFCX1ZORDJfSU5FUixcbitcdFx0XHRcdCAgICBSVEw4MjYxWF9JTlRfTUFTS19ERUZBVUxUKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lORVIsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjIxQl9WTkQyX0lOU1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgaXJxX3N0YXR1cztcbitcbitcdGlycV9zdGF0dXMgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgUlRMODIyMUJfVk5EMl9JTlNSKTtcbitcdGlmIChpcnFfc3RhdHVzIFx1MDAzYyAwKSB7XG4rXHRcdHBoeV9lcnJvcihwaHlkZXYpO1xuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rXHR9XG4rXG4rXHRpZiAoIShpcnFfc3RhdHVzIFx1MDAyNiBSVEw4MjYxWF9JTlRfTUFTS19BTEwpKVxuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rXG4rXHRpZiAoaXJxX3N0YXR1cyBcdTAwMjYgKFJUTDgyNjFYX0lOVF9MSU5LX0NIRyB8IFJUTDgyNjFYX0lOVF9BVVRPTkVHX0RPTkUgfFxuK1x0ICAgIFJUTDgyNjFYX0lOVF9BVVRPTkVHX0VSUk9SIHwgUlRMODI2MVhfSU5UX0pBQkJFUikpXG4rXHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHUxNiBhZHZfMWcgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfY29uZmlnX2FuZWcocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0YWR2XzFnID0gQURWRVJUSVNFXzEwMDBGVUxMO1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9IYWxmX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRhZHZfMWcgfD0gQURWRVJUSVNFXzEwMDBIQUxGO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuK1x0XHRcdFx0ICAgICBSVEw4MjJYX1ZORDJfQzIyX1JFRyhNSUlfQ1RSTDEwMDApLFxuK1x0XHRcdFx0ICAgICBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEYsXG4rXHRcdFx0XHQgICAgIGFkdl8xZyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0dXJuIGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MjYxeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MjYxeF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXG4rXHQvKiBUaGUgZmlybXdhcmUgcGFyYW1ldGVycyBhcmUgcHJlc2VydmVkIGFjcm9zcyBJRUVFIHNvZnQgcmVzZXRzIGFuZFxuK1x0ICogc3VzcGVuZC9yZXN1bWUgY3ljbGVzLiBSZWxvYWRpbmcgaXMgb25seSBuZWNlc3NhcnkgYWZ0ZXIgYSBwb3dlclxuK1x0ICogY3ljbGUgb3IgaGFyZCByZXNldC5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlZndfbmFtZSBcdTAwMjZcdTAwMjYgIXByaXYtXHUwMDNlZndfbG9hZGVkKVxuK1x0XHRyZXR1cm4gcnRsODI2MXhfZndfbG9hZChwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsODIxeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbkBAIC0zMDAxLDYgKzMzODgsMTkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZCxcbiBcdFx0LndyaXRlX21tZFx0PSBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkLFxuK1x0fSwge1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUlRMXzgyNjFDX0NHKSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZXCIsXG4rXHRcdC5wcm9iZVx0XHRcdD0gcnRsODI2MXhfcHJvYmUsXG4rXHRcdC5jb25maWdfaW5pdFx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbml0LFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gcnRsODI2MXhfZ2V0X2ZlYXR1cmVzLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSBydGw4MjYxeF9jb25maWdfYW5lZyxcbitcdFx0LnJlYWRfc3RhdHVzXHRcdD0gcnRsODI2MXhfcmVhZF9zdGF0dXMsXG4rXHRcdC5jb25maWdfaW50clx0XHQ9IHJ0bDgyNjF4X2NvbmZpZ19pbnRyLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0LFxuK1x0XHQuc29mdF9yZXNldFx0XHQ9IGdlbnBoeV9jNDVfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kLFxuK1x0XHQucmVzdW1lXHRcdFx0PSBnZW5waHlfYzQ1X3BtYV9yZXN1bWUsXG4gXHR9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4yNWE2NjMyMGRmNTZlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzA5LDYgKzIzMDksNyBAQCBpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sICpjaGFuZ2VkKTtcbiAvKiBDbGF1c2UgNDUgUEhZICovXG4gaW50IGdlbnBoeV9jNDVfcmVzdGFydF9hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCByZXN0YXJ0KTtcbitpbnQgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcmVhZF9scGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IGIyNTQxYzk0OGZjMWViLi4wNmY0YmMzYzIwYzcxNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC0zMzIsOCArMzMyLDEzIEBAXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81R1x0MHgwMDgwXHQvKiBBZHZlcnRpc2UgMi41R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjVHXHQweDAxMDBcdC8qIEFkdmVydGlzZSA1R0JBU0UtVCAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX0FEVjEwR1x0MHgxMDAwXHQvKiBBZHZlcnRpc2UgMTBHQkFTRS1UICovXG4rI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkxfTVNfRU5BQkxFXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBtYW51YWwgY29uZmlnIGVuYWJsZSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1ZBTFVFXHQweDQwMDBcdC8qIE1hc3Rlci9zbGF2ZSBjb25maWcgdmFsdWUgKDE9TWFzdGVyKSAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9DVFJMX01TX1BPUlRfVFlQRVx0MHgyMDAwXHQvKiBNYXN0ZXIgUHJlZmVycmVkIFR5cGUgKi9cbiBcbiAvKiBBTiAxMEdCQVNFLVQgc3RhdHVzIHJlZ2lzdGVyLiAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX0ZBVUxUXHQweDgwMDBcdC8qIE1hc3Rlci9zbGF2ZSBmYXVsdCAqL1xuKyNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TX1JFU1x0MHg0MDAwXHQvKiBNYXN0ZXIvc2xhdmUgcmVzb2x1dGlvbiAoMT1NYXN0ZXIpICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHXHQweDAwMjAgIC8qIExQIGlzIDIuNUdCVCBjYXBhYmxlICovXG4gI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTFA1R1x0XHQweDAwNDAgIC8qIExQIGlzIDVHQlQgY2FwYWJsZSAqL1xuICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX0xQVFJSXHQweDAyMDBcdC8qIExQIHRyYWluaW5nIHJlc2V0IHJlcS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjE5LjQ5MjMyMDAxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDIzNzQzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFJlYWx0ZWsgUlRMODI2MUMgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkuIEl0IHRvdWNoZXMgYHBoeS1jNDUuY2AgYW5kIGByZWFsdGVrX21haW4uY2AsIGFuZCBpdCBicmluZ3MgaW4gc29tZSBuZXcgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYW5kIGBnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpoaXQqIHRoaXMgY29kZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/XG5cblBIWSBkcml2ZXJzIGFyZSB1c3VhbGx5IHJlYWNoYWJsZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IG9yIGF0IGxlYXN0IGVtdWxhdGVkLiBCdXQsIHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBlbXVsYXRlIHNwZWNpZmljIFBIWXMgZGlyZWN0bHksIHJpZ2h0PyBJdCdzIG1vcmUgYWJvdXQgaGF2aW5nIGdlbmVyaWMgbWVjaGFuaXNtcyBvciBwZXJoYXBzIHNwZWNpZmljIGVtdWxhdGlvbi4gSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIFBIWXMuIFRoZXkncmUgdXN1YWxseSBjb25uZWN0ZWQgdG8gYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRocm91Z2ggYW4gTURJTyBidXMuIERvZXMgc3l6a2FsbGVyIGhhdmUgYW4gTURJTyBidXMgZW11bGF0b3I/IFdlIGhhdmUgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGFuZCBgbmV0ZGV2c2ltYCBmb3Igc29tZSBuZXRkZXZzLCBidXQgbm90aGluZyBqdW1wcyBvdXQgZm9yIE1ESU8uXG5cbkhvbGQgb24sIGNhbiB3ZSB0cmlnZ2VyIHRoZSBQSFkgZHJpdmVyIGNvZGUgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHk/IEkgc2VlbSB0byByZW1lbWJlciBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlSRUdgIGlvY3Rscy4gQnV0IGFyZW4ndCB0aG9zZSB0aWVkIHRvIGEgbmV0ZGV2IHRoYXQncyAqdXNpbmcqIGEgUEhZPyBBbmQgdGhlbiB0aGVyZSdzIGBldGh0b29sYCwgd2hpY2ggc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBQSFlzLiBCdXQgd2UncmUgdHJ5aW5nIHRvIGdldCB0byBgcnRsODI2MXhfcHJvYmVgLCB3aGljaCBtZWFucyB3ZSBuZWVkIGEgUEhZIGRldmljZSB3aXRoIHRoZSBJRCBgUlRMXzgyNjFDX0NHYCAoMHgwMDFjYzg5OCkgb24gYW4gTURJTyBidXMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBpbnN0YW50aWF0ZSB0aGF0IHNwZWNpZmljIFBIWS5cblxuSXMgdGhlcmUgYW55IGtpbmQgb2YgdmlydHVhbCBNRElPIGJ1cyBzeXprYWxsZXIgY2FuIGNvbnRyb2wgaW4gdGhlIGtlcm5lbD8gTGV0IG1lIGV4cGxvcmUgdGhlIG9wdGlvbnMuIEhtbSwgYG1kaW8tbW9ja3VwYCwgbm8uIGBtZGlvLWdwaW9gLCB1bmxpa2VseS4gV2hhdCBhYm91dCBgZml4ZWQtcGh5YD8gV29ydGggYSBsb29rLCBidXQgSSdtIGRvdWJ0aW5nIHRoYXQgZ2l2ZXMgdXMgdGhlIGxldmVsIG9mIGNvbnRyb2wgd2UgbmVlZC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBtZGlvYCBvciBgcGh5YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MToyOC4yMzQ2OTY0MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNDE0NzI1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTozMC45Mzg4NDk1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwMzUwODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPIEJ1cyBTb2Z0d2FyZSBQcm9iZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgYSBtZW50YWwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIGRyaXZlciBoYW5kbGluZyB0aGUgTURJTyBidXMuIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrbm93biBkcml2ZXJzLCBvZiBjb3Vyc2UsIGFuZCBjaGVja2luZyB0aGVpciByZXNwZWN0aXZlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBhbmQgYW55IHBvdGVudGlhbCBwcm9iaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYnVpbGQgdGhlIGNvbnRleHQgb2YgYSBzeXN0ZW0gd2hpY2ggcmVsaWVzIG9uIHN1Y2ggYSBsb3cgbGV2ZWwgYnVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGUgT1MsIG9yIGFueSBsb3dlciBsZXZlbCBmaXJtd2FyZSwgaGFzIGFscmVhZHkgdGFrZW4gcmVzcG9uc2liaWxpdHkgZm9yIHRoaXMgaW50ZXJmYWNlLiBJdCdsbCBzYXZlIG1lIGEgbG90IG9mIHRpbWUgaWYgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IGxhaWQgdGhlIGdyb3VuZHdvcmssIGFuZCBJIGNhbiBzaW1wbHkgbGV2ZXJhZ2UgdGhhdCBleGlzdGluZyBjb2RlLiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHNvZnR3YXJlIE1ESU8gYnVzIGluIHBsYWNlLCBJIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGF0IGJ1cywgYW5kIHZlcmlmeSBjb21wYXRpYmlsaXR5IHdpdGggbXkgdXNlLWNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6MzUuMjA5MjAyODU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjI4MTEyNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKnNvZnR3YXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTozNy43MzIwMTk4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM5NzEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBQSFkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZXNlIHZpcnR1YWwgUEhZcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSwgdGhlIGhlYXJ0IG9mIHRoZSBQSFkgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgeW91J2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRoZSBwcmVkaWN0YWJsZSBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cCBpbiB0aGVyZS4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDIuOTc1OTk0MzA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzIwMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MjI9aWYgUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjQ6Y29uZmlnIFNXUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI3OmNvbmZpZyBQSFlfUEFDS0FHRVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4LVxcdCB0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMwOmNvbmZpZyBMRURfVFJJR0dFUl9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IExFRCB0cmlnZ2VycyBmb3IgdHJhY2tpbmcgbGluayBzdGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy01NS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo1Njpjb25maWcgRklYRURfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcIk1ESU8gQnVzL1BIWSBlbXVsYXRpb24gd2l0aCBmaXhlZCBzcGVlZC9saW5rIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2NTpjb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNjYtICAgICAgICBib29sIFxcXCJSdXN0IFBIWUxJQiBhYnN0cmFjdGlvbnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTc5PWNvbW1lbnQgXFxcIk1JSSBQSFkgZGV2aWNlIGRyaXZlcnNcXFwiXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctODAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6ODE6Y29uZmlnIEFTMjFYWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctODItXFx0dHJpc3RhdGUgXFxcIkFlb25zZW1pIEFTMjF4eHggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTkyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjkzOmNvbmZpZyBBSVJfQU44ODAxX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctOTgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEwNjpjb25maWcgQUlSX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDctXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTExMC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxMTE6Y29uZmlnIEFNRF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGUgXFxcIkFNRCBhbmQgQWx0aW1hIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTE2OmNvbmZpZyBNRVNPTl9HWExfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIE1lc29uIEdYTCBJbnRlcm5hbCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMjItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTIzOmNvbmZpZyBBRElOX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZSBcXFwiQW5hbG9nIERldmljZXMgSW5kdXN0cmlhbCBFdGhlcm5ldCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMxLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzMjpjb25maWcgQURJTjExMDBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTMzLVxcdHRyaXN0YXRlIFxcXCJBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFQxTCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTM4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjEzOTpjb25maWcgQU1DQ19RVDIwMjVfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQwLVxcdHRyaXN0YXRlIFxcXCJBTUNDIFFUMjAyNSBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0xNDY9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvYXF1YW50aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTQ4OmNvbmZpZyBBWDg4Nzk2Ql9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcIkFzaXggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE1My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTQ6Y29uZmlnIEFYODg3OTZCX1JVU1RfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlJ1c3QgcmVmZXJlbmNlIGRyaXZlciBmb3IgQXNpeCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYxLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE2Mjpjb25maWcgQlJPQURDT01fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSA1NFhYIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTcxOmNvbmZpZyBCQ001NDE0MF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNzItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEJDTTU0MTQwIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE4MS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxODI6Y29uZmlnIEJDTTYzWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTgzLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSA2M3h4IFNPQ3MgaW50ZXJuYWwgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE4OTpjb25maWcgQkNNN1hYWF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xOTAtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIDd4eHggU09DcyBpbnRlcm5hbCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE5Njpjb25maWcgQkNNODQ4ODFfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ004NDg4MSBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMDAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjAxOmNvbmZpZyBCQ004N1hYX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIwMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gQkNNODcwNiBhbmQgQkNNODcyNyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIwNjpjb25maWcgQkNNX0NZR05VU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEN5Z251cy9PbWVnYSBTb0MgaW50ZXJuYWwgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIxOTpjb25maWcgQkNNX05FVF9QSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjEtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjIyOmNvbmZpZyBCQ01fTkVUX1BIWVBUUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIyNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyMjU6Y29uZmlnIENJQ0FEQV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMjYtXFx0dHJpc3RhdGUgXFxcIkNpY2FkYSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjI5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIzMDpjb25maWcgQ09SVElOQV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIkNvcnRpbmEgRURDIENEUiAxMEcgRXRoZXJuZXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjM0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjIzNTpjb25maWcgREFWSUNPTV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yMzYtXFx0dHJpc3RhdGUgXFxcIkRhdmljb20gUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTIzOS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNDA6Y29uZmlnIElDUExVU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDEtXFx0dHJpc3RhdGUgXFxcIklDUGx1cyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI0NTpjb25maWcgTFhUX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgTFhUIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNDktXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjUwOmNvbmZpZyBJTlRFTF9YV0FZX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI1MS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgWFdBWSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjU3LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI1ODpjb25maWcgTFNJX0VUMTAxMUNfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJMU0kgRVQxMDExQyBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNjItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjYzOmNvbmZpZyBNQVJWRUxMX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2NC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBBbGFza2EgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2Ny1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyNjg6Y29uZmlnIE1BUlZFTExfMTBHX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI2OS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBBbGFza2EgMTBHYml0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MjczOmNvbmZpZyBNQVJWRUxMXzg4UTJYWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc0LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4UTJYWFggUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjc5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjI4MDpjb25maWcgTUFSVkVMTF84OFgyMjIyX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4MS1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFgyMjIyIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI4NS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyODY6Y29uZmlnIE1BWExJTkVBUl9HUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMjg3LVxcdHRyaXN0YXRlIFxcXCJNYXhsaW5lYXIgRXRoZXJuZXQgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTI5My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoyOTQ6Y29uZmlnIE1BWExJTkVBUl84NjExMF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0yOTUtXFx0dHJpc3RhdGUgXFxcIk1heExpbmVhciBNWEw4NjExMCBQSFkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMwNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMDg6Y29uZmlnIE1JQ1JFTF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMDktXFx0dHJpc3RhdGUgXFxcIk1pY3JlbCBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzE0LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMxNTpjb25maWcgTUlDUk9DSElQX1QxU19QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCAxMEJBU0UtVDFTIEV0aGVybmV0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjAtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzIxOmNvbmZpZyBNSUNST0NISVBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTMyNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozMjY6Y29uZmlnIE1JQ1JPQ0hJUF9UMV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMjctXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBUMSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzMyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjMzMzpjb25maWcgTUlDUk9DSElQX1BIWV9SRFNfUFRQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zMzctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzM4OmNvbmZpZyBNSUNST1NFTUlfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzM5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NlbWkgUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM0Ni1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNDc6Y29uZmlnIE1PVE9SQ09NTV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDgtXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzUyLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM1Mzpjb25maWcgTkFUSU9OQUxfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzU0LVxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTctXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzU4OmNvbmZpZyBOWFBfQ0JUWF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNTktXFx0dHJpc3RhdGUgXFxcIk5YUCAxMDBCQVNFLVRYIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNjMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzY0OmNvbmZpZyBOWFBfQzQ1X1RKQTExWFhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJOWFAgQzQ1IFRKQTExWFggUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3MS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozNzI6Y29uZmlnIE5YUF9USkExMVhYX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM3My1cXHR0cmlzdGF0ZSBcXFwiTlhQIFRKQTExeHggUEhZcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc3LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM3ODpjb25maWcgTkNOMjYwMDBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzc5LVxcdHRyaXN0YXRlIFxcXCJPbnNlbWkgMTBCQVNFLVQxUyBFdGhlcm5ldCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0zODU9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvcWNvbS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4Ni1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozODc6Y29uZmlnIFFTRU1JX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM4OC1cXHR0cmlzdGF0ZSBcXFwiUXVhbGl0eSBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz0zOTI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM5My1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzozOTQ6Y29uZmlnIFJFTkVTQVNfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zOTgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Mzk5OmNvbmZpZyBST0NLQ0hJUF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIlJvY2tjaGlwIEV0aGVybmV0IFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MDMtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDA0OmNvbmZpZyBTTVNDX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQwNS1cXHR0cmlzdGF0ZSBcXFwiU01TQyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDEwPWNvbmZpZyBTVEUxMFhQXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDE1OmNvbmZpZyBURVJBTkVUSUNTX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQxNi1cXHR0cmlzdGF0ZSBcXFwiVGVyYW5ldGljcyBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDE5LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyMDpjb25maWcgRFA4MzgyMl9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00MjEtXFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIERQODM4MjIvODI1LzgyNiBQSFlzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDI1LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQyNjpjb25maWcgRFA4M1RDODExX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQyNy1cXHR0cmlzdGF0ZSBcXFwiVGV4YXMgSW5zdHJ1bWVudHMgRFA4M1RDODExIFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQzMC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzE6Y29uZmlnIERQODM4NDhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDMyLVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzODQ4IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQzNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0MzY6Y29uZmlnIERQODM4NjdfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDM3LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzODY3IEdpZ2FiaXQgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQwLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ0MTpjb25maWcgRFA4Mzg2OV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NDItXFx0dHJpc3RhdGUgXFxcIlRleGFzIEluc3RydW1lbnRzIERQODM4NjkgR2lnYWJpdCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NDYtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDQ3OmNvbmZpZyBEUDgzVEQ1MTBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEQ1MTAgRXRoZXJuZXQgMTBCYXNlLVQxTCBQSFlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NTItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDUzOmNvbmZpZyBEUDgzVEc3MjBfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBEUDgzVEc3MjAgRXRoZXJuZXQgMTAwMEJhc2UtVDEgUEhZXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDY2LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ2Nzpjb25maWcgVklURVNTRV9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00NjgtXFx0dHJpc3RhdGUgXFxcIlZpdGVzc2UgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDMuMDM0NzIwODQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjY0MDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW11bGF0aW5nIGEgUEhZIC0gV2hlcmUgdG8gU3RhcnQ/KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHNpbXVsYXRlIGEgUEhZIGhlcmUuIEknbSB3b25kZXJpbmcsIGlzIHRoZXJlIGEgZ29vZCBhcHByb2FjaCBvciBhIHByZS1leGlzdGluZyBtZXRob2QgdG8gZW11bGF0ZSBhIHBoeXNpY2FsIGxheWVyIGRldmljZT8gTGV0IG1lIHRoaW5rLi4uIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBjb2RlIHJlbGF0ZWQgdG8gdGhpcy4gWWVzLCB0aGVyZSBpdCBpcyEgKmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyouIEV4Y2VsbGVudC4gVGhhdCdzIHByb2JhYmx5IG15IGJlc3Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbXkgZ29hbCBpcyB0byBlbXVsYXRlICphbnkqIFBIWSBJRC4gQ2FuIEkgbGV2ZXJhZ2UgdGhpcyBgZml4ZWRfcGh5YCBkcml2ZXIgdG8gYWNoaWV2ZSB0aGF0PyBJJ20gaG9waW5nIEkgY2FuIGNvbmZpZ3VyZSBpdCB0byBwcmVzZW50IGl0c2VsZiB3aXRoIGFuIGFyYml0cmFyeSBQSFkgSUQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdoYXQgbW9kaWZpY2F0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbWVldCB0aGF0IGdvYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDYuNjE3MzY0MDg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMjExMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2c1tpXSkpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQyOlxcdFxcdFxcdGZpeGVkX3BoeV91bnJlZ2lzdGVyKHBoeWRldnNbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOVU1fRklYRURfUEhZUzsgaSsrKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5MjpcXHRcXHRwaHlkZXZzW2ldID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjczOlxcdFxcdHBoeWRldiA9IGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNzQtXFx0XFx0aWYgKCFJU19FUlIocGh5ZGV2KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIzMTM9c3RhdGljIHZvaWQgYjQ0X3VucmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMjItXFx0aWYgKHBoeV9pc19wc2V1ZG9fZml4ZWRfbGluayhwaHlkZXYpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjIzMjM6XFx0XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy0yMzI0LVxcdG1kaW9idXNfdW5yZWdpc3RlcihtaWlfYnVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmM9MTQzOT1pbnQgYmdtYWNfcGh5X2Nvbm5lY3RfZGlyZWN0KHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDE6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnBoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMuYy0xNDQyLVxcdFxcdC5saW5rID0gMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jOjE0NDk6XFx0cGh5X2RldiA9IGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2ZnBoeV9zdGF0dXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMtMTQ1MC1cXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz05Nz12b2lkIGJjbWdlbmV0X21paV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExNzpzdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjExODpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE4Nj1zdGF0aWMgdm9pZCBiY21nZW5ldF9tb2NhX3BoeV9zZXR1cChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTE4OC1cXHRpZiAoYmNtZ2VuZXRfaGFzX21vY2FfbGlua19kZXQocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTg5OlxcdFxcdGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTkwOlxcdFxcdFxcdFxcdFxcdCAgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz00Mz1zdHJ1Y3QgZnRnbWFjMTAwX21hdGNoX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02Ni0vKiBGb3IgTkMtU0kgdG8gcmVnaXN0ZXIgYSBmaXhlZC1saW5rIHBoeSBkZXZpY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjY3OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBuY3NpX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy02OC1cXHQubGluayA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3ODA9c3RhdGljIHZvaWQgZnRnbWFjMTAwX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3OTItXFx0aWYgKHByaXYtXFx1MDAzZXVzZV9uY3NpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc5MzpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc5NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4NDg9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfbmNzaShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xODY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg2NzpcXHRwaHlkZXYgPSBmaXhlZF9waHlfcmVnaXN0ZXIoXFx1MDAyNm5jc2lfcGh5X3N0YXR1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg2OC1cXHRpZiAoSVNfRVJSKHBoeWRldikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4MS1lcnJfcmVnaXN0ZXJfcGh5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTg4MjpcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTg4My1lcnJfcmVnaXN0ZXJfbmRldjpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI5ODE9c3RhdGljIGludCBmZWNfZW5ldF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDAyLVxcdFxcdFxcdG5ldGRldl9pbmZvKG5kZXYsIFxcXCJubyBQSFksIGFzc3VtaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHN3aXRjaFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAwMzpcXHRcXHRcXHRwaHlfZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAwNC1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeV9kZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDEzLVxcdFxcdFxcdGlmIChwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAxNDpcXHRcXHRcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDE1LVxcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTQyMjg9ZmVjX2VuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQzLVxcdGlmICghZmVwLVxcdTAwM2VwaHlfbm9kZSBcXHUwMDI2XFx1MDAyNiBwaHlfaXNfcHNldWRvX2ZpeGVkX2xpbmsocGh5X2RldikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDI0NDpcXHRcXHRmaXhlZF9waHlfdW5yZWdpc3RlcihwaHlfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00MjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0zMTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYy0zMTQxLVxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBnZmFyX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MzE0MjpcXHQubmRvX2NoYW5nZV9jYXJyaWVyID0gZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMzE0My1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdmYXJfc2V0X21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yMjg9dm9pZCBoYmdfcGh5X3N0b3Aoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzM6c3RhdGljIHZvaWQgaGJnX2ZpeGVkX3BoeV91bmluaXQodm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMzU6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIoKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMzYtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmM6MjM4OnN0YXRpYyBpbnQgaGJnX2ZpeGVkX3BoeV9pbml0KHN0cnVjdCBoYmdfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIzOS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNDA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgaGJnX2ZpeGVkX3BoeV9zdGF0dXMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNDEtXFx0XFx0LmxpbmsgPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyNTE6XFx0cGh5ZGV2ID0gZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZoYmdfZml4ZWRfcGh5X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNTItXFx0aWYgKElTX0VSUihwaHlkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI1ODpcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBoYmdfZml4ZWRfcGh5X3VuaW5pdCwgcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI1OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yNzUtXFx0aWYgKG1hYy1cXHUwMDNlcGh5X2FkZHIgPT0gSEJHX05PX1BIWSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI3NjpcXHRcXHRyZXR1cm4gaGJnX2ZpeGVkX3BoeV9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjc3LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9NDEyPWludCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxMy17XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDE0OlxcdHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHN0YXR1cyA9IHt9O1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxNS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpeGVkX2xpbmtfbm9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ1OS1yZWdpc3Rlcl9waHk6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDYwOlxcdHJldHVybiBQVFJfRVJSX09SX1pFUk8oZml4ZWRfcGh5X3JlZ2lzdGVyKFxcdTAwMjZzdGF0dXMsIG5wKSk7XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDYxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTQ2ND12b2lkIG9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQ3MS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0NzI6XFx0Zml4ZWRfcGh5X3VucmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX0RQODNURzcyMF9QSFkpXFx0Kz0gZHA4M3RnNzIwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0ZJWEVEX1BIWSlcXHRcXHQrPSBmaXhlZF9waHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfSUNQTFVTX1BIWSlcXHQrPSBpY3BsdXMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyODpzdHJ1Y3QgZml4ZWRfcGh5IHtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjktXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzA6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozMTpcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMyLX07XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTMzLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzozNDpzdGF0aWMgREVDTEFSRV9CSVRNQVAoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MzU6c3RhdGljIHN0cnVjdCBmaXhlZF9waHkgZm1iX2ZpeGVkX3BoeXNbTlVNX0ZQXTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzYtc3RhdGljIHN0cnVjdCBtaWlfYnVzICpmbWJfbWlpX2J1cztcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzctXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjM4OnN0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5ICpmaXhlZF9waHlfZmluZChpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMzkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MDpcXHRyZXR1cm4gdGVzdF9iaXQoYWRkciwgZml4ZWRfcGh5X2lkcykgPyBmbWJfZml4ZWRfcGh5cyArIGFkZHIgOiBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy00MS19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQyLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0MzppbnQgZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTQ0LXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDUtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi1cXHUwMDNlcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo0NjpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNDctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNTAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjUxOlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy01Mi1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTU4LX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjM6XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTY0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2NTpcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjYtXFx0aWYgKCFmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz03NT1zdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy04NS0gKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6ODY6aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODctXFx0XFx0XFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjg4OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtODkte1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo5MDpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtOTQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjk1OlxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy05Ni1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwMy19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwNDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMDY6c3RhdGljIHZvaWQgZml4ZWRfcGh5X2RlbChpbnQgcGh5X2FkZHIpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEwNy17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEwODpcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTA5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMTA6XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExMS1cXHRpZiAoIWZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNC1cXHRtZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE1OlxcdGNsZWFyX2JpdChwaHlfYWRkciwgZml4ZWRfcGh5X2lkcyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTExNy1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTE4OnN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMjItXFx0ZG8ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjM6XFx0XFx0YWRkciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZml4ZWRfcGh5X2lkcywgTlVNX0ZQKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI0LVxcdFxcdGlmIChhZGRyID09IE5VTV9GUClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTI1LVxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMjY6XFx0fSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChhZGRyLCBmaXhlZF9waHlfaWRzKSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE0NS1cXHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTQ2OlxcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ3LVxcdGlmIChwaHlfYWRkciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTA6XFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE1MTpcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTU0LVxcdGlmIChJU19FUlIocGh5KSkge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNTU6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE1Ni1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNjYtXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjc6XFx0XFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgc3RhdHVzID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzgtXFx0XFx0LnNwZWVkXFx0PSBTUEVFRF8xMDAsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg2OnZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODktXFx0b2Zfbm9kZV9wdXQocGh5LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTkwOlxcdGZpeGVkX3BoeV9kZWwocGh5LVxcdTAwM2VtZGlvLmFkZHIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTEtXFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE5MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM2MT1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzYzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMzNjQ6XFx0c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZnM7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzY1LVxcdHVuc2lnbmVkIGxvbmcgKmxwYSA9IHN0YXRlLVxcdTAwM2VscF9hZHZlcnRpc2luZztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTQtICpcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzo1OiAqIENvZGUgdGFrZW4gZnJvbSBmaXhlZF9waHkuYyBieSBSdXNzZWxsIEtpbmcuXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtNi0gKlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM9NzE9c3RhdGljIGludCBzd3BoeV9kZWNvZGVfc3BlZWQoaW50IHNwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtOTItICovXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6OTM6aW50IHN3cGh5X3ZhbGlkYXRlX3N0YXRlKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy05NC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYz0xMDY9RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfdmFsaWRhdGVfc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE0LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaC00LVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjU6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXM7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtNi1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo3OmludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oOjg6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmgtOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNi1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjc6c3RydWN0IGZpeGVkX3BoeV9zdGF0dXMge1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtOC1cXHRpbnQgc3BlZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oPTE2PXN0cnVjdCBuZXRfZGV2aWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0xOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRklYRURfUEhZKVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MTk6ZXh0ZXJuIGludCBmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDoyMDpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjIyOnN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yMy1cXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI0OmV4dGVybiB2b2lkIGZpeGVkX3BoeV91bnJlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmg6MjU6ZXh0ZXJuIGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaC0yNi1cXHRcXHRcXHRpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKixcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKTtcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTI4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaD0yOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oOjMwOmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzEtXFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtMzUtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDozNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5X2ZpeGVkLmgtNDAtXFxuaW5jbHVkZS9saW51eC9waHlfZml4ZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZml4ZWRfcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5pbmNsdWRlL2xpbnV4L3BoeV9maXhlZC5oLTQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NDguNTMwNTgyNjc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzY5ODkwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUEhZIEVtdWxhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgc3VyZSBJJ20gdXNpbmcgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gYGZpeGVkX3BoeWAgaXMgZGVmaW5pdGVseSBub3QgdGhlIHdheSB0byBnbyBmb3IgdGhpczsgaXQncyBkZXNpZ25lZCBmb3IgZml4ZWQgbGlua3MsIG5vdCBlbXVsYXRpbmcgYXJiaXRyYXJ5IFBIWSBiZWhhdmlvci4gU28sIHNjcmF0Y2ggdGhhdCBpZGVhLiBJIG5lZWQgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoLiBXaGF0IG90aGVyIG9wdGlvbnMgYXJlIHRoZXJlPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtZGlvLW1vY2t1cGAsIGJ1dC4uLiB3YWl0LCBJJ3ZlIGFscmVhZHkgdHJpZWQgc2VhcmNoaW5nIGZvciB0aGF0LCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBkaWQgYSBwcmV0dHkgdGhvcm91Z2ggc2VhcmNoLCBzcGVjaWZpY2FsbHkgdXNpbmcgYG1kaW8uKm1vY2t1cGAgYW5kIGNhbWUgdXAgZW1wdHkuIFBlcmhhcHMgdGhlcmUncyBhbiBgbWRpby1ncGlvYCBkcml2ZXIgb3Igc29tZXRoaW5nIG9mIHRoYXQgbmF0dXJlPyBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgaW5zaWRlIHRoZSBgZHJpdmVycy9uZXQvbWRpby9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBleHBsb3JlIHRoZSBsYW5kc2NhcGUgb2YgTURJTyBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQxOjUyLjQwNzU3MzY4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpX21kaW8uY1wiLFxuICAgIFwiZndub2RlX21kaW8uY1wiLFxuICAgIFwibWRpby1haXJvaGEuY1wiLFxuICAgIFwibWRpby1hc3BlZWQuY1wiLFxuICAgIFwibWRpby1iY20taXByb2MuY1wiLFxuICAgIFwibWRpby1iY20tdW5pbWFjLmNcIixcbiAgICBcIm1kaW8tYml0YmFuZy5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5oXCIsXG4gICAgXCJtZGlvLWdwaW8uY1wiLFxuICAgIFwibWRpby1oaXNpLWZlbWFjLmNcIixcbiAgICBcIm1kaW8taTJjLmNcIixcbiAgICBcIm1kaW8taXBxNDAxOS5jXCIsXG4gICAgXCJtZGlvLWlwcTgwNjQuY1wiLFxuICAgIFwibWRpby1tb3hhcnQuY1wiLFxuICAgIFwibWRpby1tc2NjLW1paW0uY1wiLFxuICAgIFwibWRpby1tdXgtYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbTYzNjguY1wiLFxuICAgIFwibWRpby1tdXgtZ3Bpby5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1nMTJhLmNcIixcbiAgICBcIm1kaW8tbXV4LW1lc29uLWd4bC5jXCIsXG4gICAgXCJtZGlvLW11eC1tbWlvcmVnLmNcIixcbiAgICBcIm1kaW8tbXV4LW11bHRpcGxleGVyLmNcIixcbiAgICBcIm1kaW8tbXV4LmNcIixcbiAgICBcIm1kaW8tbXZ1c2IuY1wiLFxuICAgIFwibWRpby1vY3Rlb24uY1wiLFxuICAgIFwibWRpby1waWM2NGhwc2MuY1wiLFxuICAgIFwibWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICAgIFwibWRpby1yZWdtYXAuY1wiLFxuICAgIFwibWRpby1zdW40aS5jXCIsXG4gICAgXCJtZGlvLXRodW5kZXIuY1wiLFxuICAgIFwibWRpby14Z2VuZS5jXCIsXG4gICAgXCJvZl9tZGlvLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NTIuNDA3NjU3MzY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njg1NTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgRW11bGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBtZGlvLW12dXNiLmNgIHRoaW5nLi4uIG5vcGUsIHRoYXQncyBNYXJ2ZWxsIFVTQiBNRElPLiBOb3Qgd2hhdCBJIG5lZWQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgY29uanVyZSB1cCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgb3V0IG9mIHRoaW4gYWlyIGZvciB0ZXN0aW5nPyBTeXprYWxsZXIncyBnb3QgdGhvc2UgYG5ldGxpbmtgIGFuZCBgZXRodG9vbGAgdG9vbHMgdG8gdGFsayB0byBleGlzdGluZyBQSFlzLCBidXQgSSBuZWVkIHRvIGhpdCBgcnRsODI2MXhfcHJvYmVgLCB3aGljaCBtZWFucyBJICphYnNvbHV0ZWx5KiBuZWVkIGEgUEhZIHdpdGggdGhlIElEIGBSVExfODI2MUNfQ0dgICgweDAwMWNjODk4KS4gQSBkaXJlY3QgaW5qZWN0aW9uIG9mIHRoZSBQSFkgSUQgd291bGQgYmUgaWRlYWwsIGJ1dCBpcyB0aGF0IGV2ZW4gcG9zc2libGU/XG5cbldhaXQgYSBtaW51dGUsIGlmIFN5emthbGxlciBjYW4gc3BpbiB1cCBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgYW5kIGhhdmUgaXQgcmVnaXN0ZXIgYW4gTURJTyBidXMuLi4gYW5kICppZiogSSBjYW4gY29udHJvbCB0aGUgcmVzcG9uc2VzIGZyb20gdGhhdCBNRElPIGJ1cy4uLiB0aGF0J3MgdGhlIHRpY2tldCEgU28sIHdoZXJlJ3MgdGhlIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBkb2VzIHRoaXM/IExldCdzIHNlZS4uLiBgbWFjc2VjYD8gTm9wZS4gYHZldGhgPyBObyBNRElPLiBgZHVtbXlgLCBgdHVuYD8gTmFkYS4gT2theSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyBgbmV0ZGV2c2ltYCBoYXZlIGFuIE1ESU8gYnVzPyBUaGlzIGZlZWxzIGxpa2UgaXQncyBnZXR0aW5nIGNsb3NlLCBzbyB0aGF0J3MgdGhlIG5leHQgYXZlbnVlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MTo1OC4wNzYyMTkzNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTYyMzM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDE6NTguMTMzNzg4OTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzkwNzM4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgQWRhcHRlciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZXhwYW5kIHRoZSBmdXp6aW5nIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBVU0IgbmV0d29yayBhZGFwdGVyczsgc29tZSwgSSByZW1lbWJlciwgaW5jb3Jwb3JhdGUgTURJTyBidXNlcyBhbmQgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcyAoUEhZcykuIEFuZCB0aGVuIEkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZW11bGF0aW5nIFVTQiBkZXZpY2VzIHVzaW5nIGB2aGNpYC4gU28sIHRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBmb3IgU3l6a2FsbGVyIHRvIHNpbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciwgdGhpbmdzIGxpa2UgYHNtc2M5NXh4YCwgYHI4MTUyYCwgb3IgYGFzaXhgLCBmb3IgZXhhbXBsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgcmVnaXN0ZXJzLCBpdCBjb3VsZCBzdWJzZXF1ZW50bHkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXM7IHRoYXQncyB3aGVyZSB0aGUgbmV4dCBhdHRhY2sgc3VyZmFjZSBpcy4gVGhlcmVmb3JlLCBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGByODE1MmAgZHJpdmVyIGxldmVyYWdlcyBQSFlMSUIuIFRoYXTigJlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowMi42MTI4NjQ3MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTQ3ODg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowMi42NzE4MTg4OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzOTQ1NDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqTURJT2J1cyBSZWdpc3RlcjogQSBRdWljayBTY2FuKipcblxuV2FpdCwgYG1kaW9idXNfcmVnaXN0ZXJgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoZXkncmUgdXNpbmc/IEludGVyZXN0aW5nLiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFzc2VzcyB0aGUgY29udGV4dCBoZXJlLCB3aGF0IGtpbmQgb2YgTURJTyBidXMgYXJlIHRoZXkgd29ya2luZyB3aXRoPyBJcyB0aGlzIHN0YW5kYXJkIEV0aGVybmV0LCBzb21ldGhpbmcgcHJvcHJpZXRhcnksIG9yIGEgc3BlY2lhbGl6ZWQgdmFyaWFudD8gVGhlIGNob2ljZSBvZiBgbWRpb2J1c19yZWdpc3RlcmAgc3VnZ2VzdHMgdGhleSdyZSB0cnlpbmcgdG8gYWRkIGEgbmV3IE1ESU8gYnVzIGluc3RhbmNlIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIHR5cGljYWxseSBtZWFucyB0aGV5IGFyZSBlaXRoZXIgZGVhbGluZyB3aXRoIGEgbmV3IGhhcmR3YXJlIGRldmljZSwgb3IgZHluYW1pY2FsbHkgbWFuYWdpbmcgYW4gZXhpc3Rpbmcgb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYnVzIGlzIGRlc2lnbmVkIHRvIHRhbGsgdG8uIElzIGl0IGp1c3QgUEhZcywgb3IgYXJlIHRoZXJlIG90aGVyIE1ESU8tY29tcGF0aWJsZSBjb21wb25lbnRzIGluIHRoZSBtaXg/IFRoaXMgcmVnaXN0cmF0aW9uIHBvaW50IGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGtleSB0byBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBjb21lIHRvIG1pbmQ6IHdoYXQgaXMgaXRzIGRyaXZlciBhbmQgcGxhdGZvcm0gZGF0YT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjowNS45MTEyNzU3MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mjk5NDQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA3MD1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAwLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwMTpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTAyLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MDYuMjc0Mjc4MTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMjM5OTg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBNYW5pcHVsYXRpb24gdGhyb3VnaCBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBpZGVhIGJyZXdpbmcuLi4gSSBzZWUgdGhhdCBgc21zYzk1eHhgLCBgbGFuNzh4eGAsIGBheDg4MTcyYWAsIGFuZCBgYXNpeF9kZXZpY2VzYCBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIEludGVyZXN0aW5nISBJZiBJIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gZW11bGF0ZSBvbmUgb2YgdGhlc2UgVVNCIGRldmljZXMgdXNpbmcgYHZoY2lgLCBJIGNhbiBpbnRlcmNlcHQgdGhlIFVTQiBjb250cm9sIHRyYW5zZmVycyBpbnZvbHZlZCBpbiByZWFkaW5nIGFuZCB3cml0aW5nIE1ESU8gcmVnaXN0ZXJzLiBUaGUga2V5IGlzIGluIHRoZSBjb250cm9sIHRyYW5zZmVycy5cblxuSGFuZyBvbi4uLiBpZiBJIGZvY3VzIG9uIGVtdWxhdGluZyBgc21zYzk1eHhgLCB0aGUgYHNtc2M5NXh4YCBkcml2ZXIgd2lsbCB0cnkgdG8gZ2V0IHRoZSBQSFkgSUQgZnJvbSB0aGUgTURJTyBidXMgdGhyb3VnaCBVU0IgY29udHJvbCBtZXNzYWdlcy4gQnJpbGxpYW50ISBJIGNhbiBoYXZlIHN5emthbGxlciByZXNwb25kIHRvIHRoaXMgd2l0aCB0aGUgUEhZIElEIG9mIGBSVExfODI2MUNfQ0dgLCB3aGljaCBpcyBgMHgwMDFjYzg5OGAuXG5cblRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IHRoZSBQSFkgc3Vic3lzdGVtICpzaG91bGQqIHRoZW4gcGljayB1cCBvbiB0aGlzIElELCBsb2FkIHRoZSBgcmVhbHRla2AgUEhZIGRyaXZlciwgYW5kIHVsdGltYXRlbHkgY2FsbCBgcnRsODI2MXhfcHJvYmVgLiBUaGlzIG9wZW5zIHVwIGEgcG90ZW50aWFsIHRlc3RpbmcgdmVjdG9yLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzbXNjOTV4eGAgZG9lc24ndCBoYXZlIHNvbWUga2luZCBvZiBzYW5pdHkgY2hlY2sgb24gdGhlIFBIWSBJRCBpdCByZWNlaXZlcywgdGhvdWdoLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgdmVyaWZ5IGlmIGl0IGFsbG93cyBhcmJpdHJhcnkgUEhZIElEcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzM4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjExLjU3NjY4MTc0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDc6XFx0c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuMTE0ODpcXHR7XFxuMTE0OTpcXHRcXHRzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGE7XFxuMTE1MDpcXHRcXHRjaGFyIHVzYl9wYXRoWzY0XTtcXG4xMTUxOlxcdFxcdGludCByZXQsIHBoeV9pcnE7XFxuMTE1MjpcXHRcXHR1MzIgdmFsO1xcbjExNTM6XFx0XFxuMTE1NDpcXHRcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbjExNTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMTU2OlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwidXNibmV0X2dldF9lbmRwb2ludHMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMTU3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1ODpcXHRcXHR9XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdHBkYXRhID0ga3phbGxvY19vYmooKnBkYXRhKTtcXG4xMTYxOlxcdFxcdGlmICghcGRhdGEpXFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0ZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdiA9IHBkYXRhO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGRhdGEtXFx1MDAzZW1hY19jcl9sb2NrKTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0LyogTEFOOTV4eCBkZXZpY2VzIGRvIG5vdCBhbHRlciB0aGUgY29tcHV0ZWQgY2hlY2tzdW0gb2YgMCB0byAweGZmZmYuXFxuMTE2OTpcXHRcXHQgKiBSRkMgMjQ2MCwgaXB2NiBVRFAgY2FsY3VsYXRlZCBjaGVja3N1bSB5aWVsZHMgYSByZXN1bHQgb2YgemVybyBtdXN0XFxuMTE3MDpcXHRcXHQgKiBiZSBjaGFuZ2VkIHRvIDB4ZmZmZi4gUkZDIDc2OCwgaXB2NCBVRFAgY29tcHV0ZWQgY2hlY2tzdW0gaXMgemVybyxcXG4xMTcxOlxcdFxcdCAqIGl0IGlzIHRyYW5zbWl0dGVkIGFzIGFsbCBvbmVzLiBUaGUgemVybyB0cmFuc21pdHRlZCBjaGVja3N1bSBtZWFuc1xcbjExNzI6XFx0XFx0ICogdHJhbnNtaXR0ZXIgZ2VuZXJhdGVkIG5vIGNoZWNrc3VtLiBIZW5jZSwgZW5hYmxlIGNzdW0gb2ZmbG9hZCBvbmx5XFxuMTE3MzpcXHRcXHQgKiBmb3IgaXB2NCBwYWNrZXRzLlxcbjExNzQ6XFx0XFx0ICovXFxuMTE3NTpcXHRcXHRpZiAoREVGQVVMVF9UWF9DU1VNX0VOQUJMRSlcXG4xMTc2OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07XFxuMTE3NzpcXHRcXHRpZiAoREVGQVVMVF9SWF9DU1VNX0VOQUJMRSlcXG4xMTc4OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTtcXG4xMTc5OlxcdFxcbjExODA6XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07XFxuMTE4MTpcXHRcXHRzZXRfYml0KEVWRU5UX05PX0lQX0FMSUdOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHNtc2M5NXh4X2luaXRfbWFjX2FkZHJlc3MoZGV2KTtcXG4xMTg0OlxcdFxcbjExODU6XFx0XFx0LyogSW5pdCBhbGwgcmVnaXN0ZXJzICovXFxuMTE4NjpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZXNldChkZXYpO1xcbjExODc6XFx0XFx0aWYgKHJldClcXG4xMTg4OlxcdFxcdFxcdGdvdG8gZnJlZV9wZGF0YTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogY3JlYXRlIGlycSBkb21haW4gZm9yIHVzZSBieSBQSFkgZHJpdmVyIGFuZCBHUElPIGNvbnN1bWVycyAqL1xcbjExOTE6XFx0XFx0dXNiX21ha2VfcGF0aChkZXYtXFx1MDAzZXVkZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTtcXG4xMTkyOlxcdFxcdHBkYXRhLVxcdTAwM2VpcnFmd25vZGUgPSBpcnFfZG9tYWluX2FsbG9jX25hbWVkX2Z3bm9kZSh1c2JfcGF0aCk7XFxuMTE5MzpcXHRcXHRpZiAoIXBkYXRhLVxcdTAwM2VpcnFmd25vZGUpIHtcXG4xMTk0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTE5NTpcXHRcXHRcXHRnb3RvIGZyZWVfcGRhdGE7XFxuMTE5NjpcXHRcXHR9XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdHBkYXRhLVxcdTAwM2VpcnFkb21haW4gPSBpcnFfZG9tYWluX2NyZWF0ZV9saW5lYXIocGRhdGEtXFx1MDAzZWlycWZ3bm9kZSxcXG4xMTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTTVNDOTVYWF9OUl9JUlFTLFxcbjEyMDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpcnFfZG9tYWluX3NpbXBsZV9vcHMsXFxuMTIwMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGRhdGEpO1xcbjEyMDI6XFx0XFx0aWYgKCFwZGF0YS1cXHUwMDNlaXJxZG9tYWluKSB7XFxuMTIwMzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjEyMDQ6XFx0XFx0XFx0Z290byBmcmVlX2lycWZ3bm9kZTtcXG4xMjA1OlxcdFxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0XFx0cGh5X2lycSA9IGlycV9jcmVhdGVfbWFwcGluZyhwZGF0YS1cXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpO1xcbjEyMDg6XFx0XFx0aWYgKCFwaHlfaXJxKSB7XFxuMTIwOTpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjEyMTA6XFx0XFx0XFx0Z290byByZW1vdmVfaXJxZG9tYWluO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRcXHRwZGF0YS1cXHUwMDNlaXJxY2hpcCA9IGR1bW15X2lycV9jaGlwO1xcbjEyMTQ6XFx0XFx0cGRhdGEtXFx1MDAzZWlycWNoaXAubmFtZSA9IFNNU0NfQ0hJUE5BTUU7XFxuMTIxNTpcXHRcXHRpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShwaHlfaXJxLCBcXHUwMDI2cGRhdGEtXFx1MDAzZWlycWNoaXAsXFxuMTIxNjpcXHRcXHRcXHRcXHRcXHQgICAgICBoYW5kbGVfc2ltcGxlX2lycSwgXFxcInBoeVxcXCIpO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4xMjE5OlxcdFxcdGlmICghcGRhdGEtXFx1MDAzZW1kaW9idXMpIHtcXG4xMjIwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTIyMTpcXHRcXHRcXHRnb3RvIGRpc3Bvc2VfaXJxO1xcbjEyMjI6XFx0XFx0fVxcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgXFx1MDAyNnZhbCk7XFxuMTIyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjI2OlxcdFxcdFxcdGdvdG8gZnJlZV9tZGlvO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHRwZGF0YS1cXHUwMDNlaXNfaW50ZXJuYWxfcGh5ID0gISh2YWwgXFx1MDAyNiBIV19DRkdfUFNFTF8pO1xcbjEyMjk6XFx0XFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuMTIzMDpcXHRcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDF1IFxcdTAwM2NcXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XFxuMTIzMTpcXHRcXG4xMjMyOlxcdFxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbjEyMzM6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuMTIzNDpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcbjEyMzU6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlc2V0ID0gc21zYzk1eHhfbWRpb2J1c19yZXNldDtcXG4xMjM2OlxcdFxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcInNtc2M5NXh4LW1kaW9idXNcXFwiO1xcbjEyMzc6XFx0XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldjtcXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0c25wcmludGYocGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCksXFxuMTI0MDpcXHRcXHRcXHQgXFxcInVzYi0lMDNkOiUwM2RcXFwiLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuMTI0MTpcXHRcXG4xMjQyOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbjEyNDM6XFx0XFx0aWYgKHJldCkge1xcbjEyNDQ6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuMTI0NTpcXHRcXHRcXHRnb3RvIGZyZWVfbWRpbztcXG4xMjQ2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MTEuNTc2ODE1ODQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg4ODIwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBIWSBDb25maWd1cmF0aW9uIGZvciBTTVNDOTVYWCBEcml2ZXIqKlxuXG5Pa2F5LCB5ZXMsIHRoaXMgaXMgZ29vZC4gSWYgYEhXX0NGR19QU0VMX2AgaXMgZW5hYmxlZCwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gZXh0ZXJuYWwgUEhZLCBhbmQgdGhhdCBvcGVucyB1cCB0aGUgYHBoeV9tYXNrYCDigJMgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCByZXN0cmljdGlvbnMgdGhlcmUuIEV2ZW4gaWYgaXQgKmlzKiBhbiBpbnRlcm5hbCBQSFksIFN5emthbGxlciBjYW4gc3RpbGwgaGFuZCB1cyB0aGUgUEhZIElEIHRocm91Z2ggYFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRGAsIHdoaWNoIGlzIHByZWRpY3RhYmx5IDEuXG5cblJpZ2h0LCBzbyB3aGVuIGBtZGlvYnVzX3JlZ2lzdGVyYCBpcyBpbnZva2VkLCB0aGF0J3Mgd2hlbiB0aGUgUEhZIElEIHNjYW4gaGFwcGVucywgaXQncyBhbGwgYWJvdXQgcmVhZGluZyB0aG9zZSBJRHMuIEFuZCBzaW5jZSBTeXprYWxsZXIgY2FuIGludGVyY2VwdCB0aG9zZSBVU0IgY29udHJvbCB0cmFuc2ZlcnMgZm9yIGBzbXNjOTV4eF9tZGlvYnVzX3JlYWRgLCB3ZSBjYW4gZmVlZCBpdCB0aGUgdmFsdWVzIGl0J3MgZXhwZWN0aW5nLiBMZXQncyBzZWUuLi4gZm9yIFBIWSBJRCAxLCB3ZSBjYW4gcmV0dXJuIGAweDAwMWNgLCBhbmQgYDB4Yzg5OGAgZm9yIElEIDIsIGFuZCBzbyBvbi5cblxuV2FpdCBhIHNlY29uZC4uLiBXaGF0J3MgdGhpcyBhYm91dCBgUlRMXzgyNjFDX0NHYD8gVGhhdCBsb29rcyBsaWtlIGEgQ2xhdXNlIDQ1IFBIWS4gVGhhdCBuZWVkcyB0byBiZSB2ZXJpZmllZC4gTGV0J3MgZGlnIGludG8gYHJlYWx0ZWtfbWFpbi5jYCBhbmQgc2VlIGlmIHRoZSBkcml2ZXIgY29ycmVjdGx5IGhhbmRsZXMgQ2xhdXNlIDIyIG9yIENsYXVzZSA0NSBhY2Nlc3Nlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgUEhZIGFjY2VzcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBSVEwgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24uIEdvdHRhIGNvbmZpcm0gdGhhdCB0aGUgZHJpdmVyIGtub3dzIGhvdyB0byB0YWxrIHRvIHRoaXMgUEhZLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjE2Ljk1NTY5OTc4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxMzk1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRMXzgyNjFDX0NHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTI1OS0jZGVmaW5lIFJUTF84MjYxQ1xcdFxcdFxcdFxcdDB4MDAxY2M4OTBcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzoyNjA6I2RlZmluZSBSVExfODI2MUNfQ0dcXHRcXHRcXHRcXHQweDAwMWNjODk4XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA3ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYy0zMzkxLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozMzkyOlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChSVExfODI2MUNfQ0cpLFxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTMzOTMtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFlcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjoxNy4wMzI4NDQwNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0OTI4OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUEhZIElEIE1hdGNoaW5nIGFuZCBDbGF1c2UgNDUgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBQSFlfSURfTUFUQ0hfRVhBQ1RgIG1lYW5zIGEgcHJlY2lzZSBQSFkgSUQgbWF0Y2gg4oCTIG5vdGhpbmcgYW1iaWd1b3VzIHRoZXJlLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gbmVjZXNzaXRhdGUgQ2xhdXNlIDQ1IHN1cHBvcnQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBSVExfODI2MUNfQ0dgIHV0aWxpemVzIENsYXVzZSA0NS4gVGhlIHBhdGNoIHN1Z2dlc3RzIGEgc3Ryb25nIGNvbm5lY3Rpb24sIGFzIGl0IGFkZHMgZnVuY3Rpb25zIGxpa2UgYGdlbnBoeV9jNDVfc29mdF9yZXNldGAsIGBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kYCwgYW5kIGBnZW5waHlfYzQ1X3BtYV9yZXN1bWVgIHRvIGl0cyBgcGh5X2RyaXZlcmAgc3RydWN0LiBGdXJ0aGVybW9yZSwgYHJ0bDgyNjF4X3Byb2JlYCBleHBsaWNpdGx5IGVtcGxveXMgYHBoeV93cml0ZV9tbWRgIGFuZCBgcGh5X3JlYWRfbW1kYCwgd2hpY2ggYXJlLCBieSBkZWZpbml0aW9uLCBDbGF1c2UgNDUgb3BlcmF0aW9ucy4gVGhhdCBmZWVscyBwcmV0dHkgZGVmaW5pdGl2ZS5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIHRob3NlIGNhbGxzICpzdWdnZXN0KiBDbGF1c2UgNDUsIEkgcmVjYWxsIHRoYXQgYHBoeV9yZWFkX21tZGAgaGFzIGEgYml0IG9mIGZsZXhpYmlsaXR5LiBJdCAqY291bGQqIG9wZXJhdGUgb3ZlciBDbGF1c2UgMjIgdXNpbmcgaW5kaXJlY3QgYWNjZXNzLCBwcm92aWRlZCB0aGUgUEhZIGhhcyB0aGUgY2FwYWJpbGl0eSwgb3IgZGlyZWN0bHkgdXNpbmcgQ2xhdXNlIDQ1IGlmIHRoZSBidXMgc3VwcG9ydHMgaXQuIEkgbmVlZCB0byBrZWVwIHRoZSBhbWJpZ3VpdHkgaW4gbWluZC5cblxuU28sICpkb2VzKiBgc21zYzk1eHhgIGhhdmUgQ2xhdXNlIDQ1IHN1cHBvcnQ/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgc21zYzk1eHhgIGhhbmRsZXMgaXRzIE1ESU8gYnVzIHJlYWRzLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjIyLjE4MjEzNzY3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIzNjpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDIzNzpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0RBVEFcXFxcblxcXCIpO1xcbiAyMzg6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMzk6XFx0XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uICh3cml0ZSB0byBQSFkpICovXFxuIDI0MjpcXHRcXHRhZGRyID0gbWlpX2FkZHJlc3NfY21kKHBoeV9pZCwgaWR4LCBNSUlfV1JJVEVfIHwgTUlJX0JVU1lfKTtcXG4gMjQzOlxcdFxcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcXG4gMjQ0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDI0NTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDI0NjpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0FERFJcXFxcblxcXCIpO1xcbiAyNDc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xcbiAyNTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjUyOlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiVGltZWQgb3V0IHdyaXRpbmcgTUlJIHJlZyAlMDJYXFxcXG5cXFwiLCBpZHgpO1xcbiAyNTM6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNTQ6XFx0XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRkb25lOlxcbiAyNTc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBoeV9tdXRleCk7XFxuIDI1ODpcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0c3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhO1xcbiAyNjM6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2O1xcbiAyNjQ6XFx0XFx0dTMyIHZhbDtcXG4gMjY1OlxcdFxcdGludCByZXQ7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGRldiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gMjY4OlxcdFxcdHBkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuIDI3MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIFBNX0NUUkwsIFxcdTAwMjZ2YWwpO1xcbiAyNzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI3NzpcXHRcXHRcXHRnb3RvIHJlc2V0X291dDtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0dmFsIHw9IFBNX0NUTF9QSFlfUlNUXztcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0cmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgUE1fQ1RSTCwgdmFsKTtcXG4gMjgyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyODM6XFx0XFx0XFx0Z290byByZXNldF9vdXQ7XFxuIDI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MjIuMTgyMjY2OTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTMxMTUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqVHJhY2luZyBhIE1pc3NpbmcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBmb3IgYHNtc2M5NXh4X21kaW9idXNfcmVhZGAsIGJ1dCBpdCdzIG5vdCBwb3BwaW5nIHVwIHdoZXJlIEkgZXhwZWN0ZWQuIFRoYXQncyB1bnVzdWFsLiBJdCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gQWxyaWdodCwgbm8gdGltZSB0byB3YXN0ZSDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEknbGwgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjI1LjA3NTM4NDI3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjI1MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtc2M5NXh4X21kaW9idXNfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yNjA9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTYtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6Mjk3OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMyLVxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzNC1cXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjoyNS4zMjE2MTQ3NzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MjQxMzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNtc2M5NXh4X21kaW9idXNfcmVhZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBoYW5kbGluZyBNRElPIGJ1cyB0cmFuc2FjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgcmVhZCBvcGVyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGxvb2sgZm9yIHRoZSBrZXkgZWxlbWVudHM6IGhvdyBpcyB0aGUgTURJTyBhZGRyZXNzIGNvbmZpZ3VyZWQ/IFdoYXQncyB0aGUgdGltaW5nIGFuZCBzZXF1ZW5jZSBvZiBzaWduYWxzIGJlaW5nIGdlbmVyYXRlZD8gQXJlIHRoZXkgdXNpbmcgYW55IGhhcmR3YXJlIHNwZWNpZmljIHJlZ2lzdGVycyBvciBtYWNyb3M/IElzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgbGlrZSByZXRyaWVzIG9yIHRpbWVvdXQgbWVjaGFuaXNtcz8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhciB0cmFuc2xhdGlvbiBvZiB0aGUgc3RhbmRhcmQgTURJTyByZWFkIHByb3RvY29sIGludG8gdGhlIGNvZGUsIGFuZCBob3cgdGhleSBhcmUgYWNjb3VudGluZyBmb3IgdGhlIHNwZWNpZmljcyBvZiB0aGUgU01TQzk1eHggUEhZIGNoaXAuIEkgd2lsbCBleHBlY3QgYSBsb29wIGFuZCBhIHN0YXR1cyByZWFkLCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgcmVsaWFibGUgZGF0YSByZXRyaWV2YWwgZnJvbSB0aGUgUEhZLiBJIGFtIGxvb2tpbmcgZm9yIGVsZWdhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDYxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjI4LjU3NDAzMDYyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk3OlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuIDI5ODpcXHR7XFxuIDI5OTpcXHRcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBidXMtXFx1MDAzZXByaXY7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdHJldHVybiBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIGlkeCk7XFxuIDMwMjpcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdHN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbiAzMDU6XFx0XFx0XFx0XFx0XFx0ICB1MTYgcmVndmFsKVxcbiAzMDY6XFx0e1xcbiAzMDc6XFx0XFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRzbXNjOTV4eF9tZGlvX3dyaXRlKGRldiwgcGh5X2lkLCBpZHgsIHJlZ3ZhbCk7XFxuIDMxMDpcXHRcXHRyZXR1cm4gMDtcXG4gMzExOlxcdH1cXG4gMzEyOlxcdFxcbiAzMTM6XFx0c3RhdGljIGludCBfX211c3RfY2hlY2sgc21zYzk1eHhfd2FpdF9lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAzMTQ6XFx0e1xcbiAzMTU6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lID0gamlmZmllcztcXG4gMzE2OlxcdFxcdHUzMiB2YWw7XFxuIDMxNzpcXHRcXHRpbnQgcmV0O1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRkbyB7XFxuIDMyMDpcXHRcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEUyUF9DTUQsIFxcdTAwMjZ2YWwpO1xcbiAzMjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzIyOlxcdFxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiRXJyb3IgcmVhZGluZyBFMlBfQ01EXFxcXG5cXFwiKTtcXG4gMzIzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMyNDpcXHRcXHRcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdFxcdGlmICghKHZhbCBcXHUwMDI2IEUyUF9DTURfQlVTWV8pIHx8ICh2YWwgXFx1MDAyNiBFMlBfQ01EX1RJTUVPVVRfKSlcXG4gMzI3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0XFx0dWRlbGF5KDQwKTtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0X3RpbWUgKyBIWikpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodmFsIFxcdTAwMjYgKEUyUF9DTURfVElNRU9VVF8gfCBFMlBfQ01EX0JVU1lfKSkge1xcbiAzMzI6XFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LVxcdTAwM2VuZXQsIFxcXCJFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dFxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0cmV0dXJuIDA7XFxuIDMzNzpcXHR9XFxuIDMzODpcXHRcXG4gMzM5OlxcdHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X2VlcHJvbV9jb25maXJtX25vdF9idXN5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuIDM0MjpcXHRcXHR1MzIgdmFsO1xcbiAzNDM6XFx0XFx0aW50IHJldDtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0ZG8ge1xcbiAzNDY6XFx0XFx0XFx0cmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBFMlBfQ01ELCBcXHUwMDI2dmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6MjguNTc0MTU2ODYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTEzMTIwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBzbXNjOTV4eF9tZGlvX3JlYWRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBzbXNjOTV4eF9tZGlvX3JlYWRgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBzb21lIHNvcnQgb2YgbG93LWxldmVsIGRyaXZlciBmdW5jdGlvbiwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgZnJvbSB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIG9yIFJlZHVjZWQgTUlJIChSTUlJKSBidXMsIHdoaWNoIGlzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBjb25uZWN0aW5nIHRoZSBwaHlzaWNhbCBsYXllciAoUEhZKSB0byB0aGUgTUFDLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgZWZmaWNpZW5jeSBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhcmVmdWwgYml0IG1hbmlwdWxhdGlvbiBoZXJlLCBsaWtlbHkgdXNpbmcgZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBlbGVtZW50cz8gSSdkIGV4cGVjdCB0byBzZWUgdGhlIGZvbGxvd2luZzpcbiogICAqKkluaXRpYWxpemF0aW9uKio6IEkgbmVlZCB0byBrbm93IHRoZSBzdGF0ZSB0aGUgYnVzIGlzIGluaXRpYWxpemVkIHRvLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY29udHJvbGxlciBpcyBpbml0aWFsaXplZCBwcmlvciB0byByZWFkaW5nIG9yIHdoZXRoZXIgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUuXG4qICAgKipBZGRyZXNzIFNlbGVjdGlvbioqOiBUaGUgTURJTyBpbnRlcmZhY2UgaXMgYmFzZWQgb24gc2VsZWN0aW5nIGFuIGFkZHJlc3MsIHNvIEknbSBleHBlY3RpbmcgdG8gc2VlIHNwZWNpZmljIGNvbW1hbmRzIG9yIGJpdCBwYXR0ZXJucyB0byBzZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCByZWdpc3RlciBhZGRyZXNzIHRoYXQgSSdtIGludGVyZXN0ZWQgaW4gcmVhZGluZy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgZW5jb2RlZC5cbiogICAqKlJlYWQgT3BlcmF0aW9uKio6IFRoZSBjb3JlIG9mIGl0LiBXaGF0IHByZWNpc2UgYml0IHNlcXVlbmNlIGlzIGJlaW5nIHNlbnQgb24gdGhlIE1ESU8gYnVzIHRvIGluaXRpYXRlIGEgcmVhZD8gSXMgdGhlcmUgYSBzdGFydCBjb25kaXRpb24sIGEgdHVybmFyb3VuZCBwaGFzZSwgdGhlIGFkZHJlc3MgaXRzZWxmLCBhbmQgdGhlbiB0aGUgcmVhZCBkYXRhPyBXaGF0J3MgdGhlIHRpbWluZz8gSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBpbXBsZW1lbnRzIHRoZSBNRElPIHNwZWNpZmljYXRpb24uXG4qICAgKipEYXRhIFJldHJpZXZhbCoqOiBIb3cgaXMgdGhlIGRhdGEgYWN0dWFsbHkgZmV0Y2hlZD8gSXMgaXQgcG9sbGVkLCBvciBpcyB0aGVyZSBhbiBpbnRlcnJ1cHQtZHJpdmVuIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGFueSB3YWl0IHN0YXRlcyBvciBkZWxheXMgaW52b2x2ZWQsIHRvIGFsbG93IHRoZSBQSFkgdGltZSB0byByZXNwb25kPyBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBwcmV2ZW50aW5nIGJ1cyBjb250ZW50aW9uLlxuKiAgICoqRXJyb3IgRGV0ZWN0aW9uKio6IEkgd2lsbCBiZSBsb29raW5nIGZvciBlcnJvciBjaGVja3MuIEhvdyBpcyBpdCBoYW5kbGVkIGlmIHRoZSBQSFkgZG9lc24ndCByZXNwb25kPyBXaGF0IGFib3V0IHBhcml0eSBlcnJvcnMgb3Igb3RoZXIgY29tbXVuaWNhdGlvbiBmYWlsdXJlcz8gQXJlIHRoZXJlIHRpbWVvdXRzIGltcGxlbWVudGVkPyBXaGF0IGFib3V0IHJldHJpZXM/XG4qICAgKipTeW5jaHJvbml6YXRpb24qKjogSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cyBiZXR3ZWVuIHRoZSBNQUMgYW5kIFBIWS4gSXMgdGhlcmUgYSBuZWVkIGZvciBhIGxvY2sgb3IgbXV0ZXggdG8gcHJldmVudCBtdWx0aXBsZSBhY2Nlc3NlcyBhdCB0aGUgc2FtZSB0aW1lPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHJlcXVpcmVtZW50cyBmb3IgYnVzIHRpbWluZyBhbmQgY2xvY2sgc3BlZWRzP1xuXG5BbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBvdmVyYWxsIGRlc2lnbi4uLiBpcyBpdCBtb2R1bGFyPyBJcyBpdCB3ZWxsLWRvY3VtZW50ZWQ/IEFyZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2xlYXJseSBuYW1lZD8gQ2FuIEkgZWFzaWx5IHRyYWNlIHRoZSBkYXRhIGZsb3c/IEFuZCwgaW1wb3J0YW50bHksIGlzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgdG8gd29yayBwcm9wZXJseSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQ/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBpbXBvcnRhbnQsIGJ1dCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBpcyB2aXRhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2MTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjMzLjgyNTQ3MDU2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDY5NjM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbXNjOTV4eF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTY2PXN0YXRpYyB1MzIgbWlpX2FkZHJlc3NfY21kKGludCBwaHlfaWQsIGludCBpZHgsIHUxNiBvcClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3MC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxNzE6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvX3JlYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgaWR4KVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yOTc9c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTMwMC1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzozMDE6XFx0cmV0dXJuIHNtc2M5NXh4X21kaW9fcmVhZChkZXYsIHBoeV9pZCwgaWR4KTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTM1MT1zdGF0aWMgaW50IHNtc2M5NXh4X2xpbmtfb2soc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1Ni1cXHQvKiBmaXJzdCwgYSBkdW1teSByZWFkLCBuZWVkZWQgdG8gbGF0Y2ggc29tZSBNSUkgcGh5cyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzNTc6XFx0cmV0ID0gc21zYzk1eHhfbWRpb19yZWFkKGRldiwgcGRhdGEtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTM1OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzNjAtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTM2MTpcXHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTQwNz1zdGF0aWMgaW50IHNtc2M5NXh4X2VudGVyX3N1c3BlbmQxKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE0MjAtXFx0LyogZW5hYmxlIGVuZXJneSBkZXRlY3QgcG93ZXItZG93biBtb2RlICovXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTQyMTpcXHRyZXQgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LCBwaHlfaWQsIFBIWV9NT0RFX0NUUkxfU1RTKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xNDIyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozNS4xOTAxNzU3NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTAxODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHNtc2M5NXh4X21kaW9fcmVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc21zYzk1eHhfbWRpb19yZWFkYCBmdW5jdGlvbi4gSSBzZWUgaXQncyBhYm91dCByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggdGhlIFBIWSBvZiBhbiBTTVNDOTV4eCBFdGhlcm5ldCBjb250cm9sbGVyLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0IOKAkyBgc21zYzk1eHhgIGNsZWFybHkgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGZhbWlseSwgYG1kaW9gIHBvaW50cyB0byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlLCBhbmQgYHJlYWRgIGluZGljYXRlcyB0aGUgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIE1ESU8gY29tbXVuaWNhdGlvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBpbnZvbHZpbmcgY2xvY2tpbmcgdGhlIE1ESU8gc2lnbmFscyAoTURDIGFuZCBNRElPKSwgcG90ZW50aWFsbHkgdXNpbmcgYml0LWJhbmdpbmcgb3IgYSBkZWRpY2F0ZWQgaGFyZHdhcmUgaW50ZXJmYWNlIGlmIGl0J3MgYXZhaWxhYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJuczogc2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIEkgd2FudCB0byByZWFkLCBpc3N1aW5nIGEgcmVhZCBjb21tYW5kLCB3YWl0aW5nIGZvciB0aGUgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQgdGhlbiByZXRyaWV2aW5nIGl0LlxuXG5JJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuIE1ESU8gaXMgYSBzZXJpYWwgcHJvdG9jb2wsIGFuZCB0aGVyZSBhcmUgbWluaW11bSBhbmQgbWF4aW11bSBjbG9jayBjeWNsZSByZXF1aXJlbWVudHMgZm9yIHZhcmlvdXMgcGhhc2VzIChsaWtlIHByZWFtYmxlLCBzdGFydCwgdHVybmFyb3VuZCwgYW5kIGRhdGEpLiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGRlbGF5cyBvciB0aW1pbmcgbG9vcHMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIHByb3BlciBvcGVyYXRpb24uXG5cbkJleW9uZCB0aGUgTURJTyBzcGVjaWZpY3MsIEknbSBnb2luZyB0byBiZSBpbnRlcmVzdGVkIGluIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW11bmljYXRpb24gZmFpbHM/IElzIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc20/IEFyZSBwb3RlbnRpYWwgaGFyZHdhcmUgb3Igc29mdHdhcmUgaXNzdWVzIGhhbmRsZWQgZ3JhY2VmdWxseT8gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzc2VzIHdpbGwgYmUgcXVpY2tseSBub3RlZC5cblxuRmluYWxseSwgSSdsbCBiZSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gV2hhdCdzIHRoZSByZXR1cm5lZCB2YWx1ZT8gSXMgdGhlcmUgYW55IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBpbnZvbHZlZCwgb3IgaXMgdGhpcyB0aGUgZnVuZGFtZW50YWwgTURJTyBpbnRlcmZhY2Ugd2l0aGluIHRoZSBkcml2ZXI/IEknbSBob3BpbmcgaXQgY29uZm9ybXMgdG8gdGhlIHN0YW5kYXJkIE1ESU8gaW50ZXJmYWNlIHN0cnVjdHVyZSBvciBhdCBsZWFzdCBpcyBkb2N1bWVudGVkIHdlbGwuIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozOS42NDkxOTcwNDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MTpcXHRzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9fcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHR1MzIgdmFsLCBhZGRyO1xcbiAxNzQ6XFx0XFx0aW50IHJldDtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VwaHlfbXV0ZXgpO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xcbiAxNzk6XFx0XFx0cmV0ID0gc21zYzk1eHhfcGh5X3dhaXRfbm90X2J1c3koZGV2KTtcXG4gMTgwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4MTpcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIiVzOiBNSUkgaXMgYnVzeVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAxODI6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxODM6XFx0XFx0fVxcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHQvKiBzZXQgdGhlIGFkZHJlc3MsIGluZGV4IFxcdTAwMjYgZGlyZWN0aW9uIChyZWFkIGZyb20gUEhZKSAqL1xcbiAxODY6XFx0XFx0YWRkciA9IG1paV9hZGRyZXNzX2NtZChwaHlfaWQsIGlkeCwgTUlJX1JFQURfIHwgTUlJX0JVU1lfKTtcXG4gMTg3OlxcdFxcdHJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTtcXG4gMTg4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE4OTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDE5MDpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHdyaXRpbmcgTUlJX0FERFJcXFxcblxcXCIpO1xcbiAxOTE6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpO1xcbiAxOTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTk2OlxcdFxcdFxcdG5ldGRldl93YXJuKGRldi1cXHUwMDNlbmV0LCBcXFwiVGltZWQgb3V0IHJlYWRpbmcgTUlJIHJlZyAlMDJYXFxcXG5cXFwiLCBpZHgpO1xcbiAxOTc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAxOTg6XFx0XFx0fVxcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIE1JSV9EQVRBLCBcXHUwMDI2dmFsKTtcXG4gMjAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIwMjpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuIDIwMzpcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYtXFx1MDAzZW5ldCwgXFxcIkVycm9yIHJlYWRpbmcgTUlJX0RBVEFcXFxcblxcXCIpO1xcbiAyMDQ6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMDU6XFx0XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRyZXQgPSAodTE2KSh2YWwgXFx1MDAyNiAweEZGRkYpO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRkb25lOlxcbiAyMTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXBoeV9tdXRleCk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdC8qIElnbm9yZSAtRU5PREVWIGVycm9yIGR1cmluZyBkaXNjb25uZWN0KCkgKi9cXG4gMjEzOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4gMjE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMTU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE2OlxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXFxuIDIxOTpcXHRcXHRcXHRcXHRcXHRpbnQgcmVndmFsKVxcbiAyMjA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MjozOS42NDkzMzU3MDFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1MjQ3NzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBIWSBBY2Nlc3MgTWV0aG9kKipcblxuT2theSwgc28gSSBzZWUgYGlkeGAgYmVpbmcgcGFzc2VkIHRvIGBtaWlfYWRkcmVzc19jbWRgLiBUaGF0IGZ1bmN0aW9uIGlzOlxuXG5gYGBjXG5zdGF0aWMgdTMyIG1paV9hZGRyZXNzX2NtZChpbnQgcGh5X2lkLCBpbnQgaWR4LCB1MTYgb3ApXG57XG5cdHJldHVybiAocGh5X2lkIFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgMTEgfCAoaWR4IFx1MDAyNiAweDFmKSBcdTAwM2NcdTAwM2MgNiB8IG9wO1xufVxuYGBgXG5cblJpZ2h0LCB0aGUga2V5IGhlcmUgaXMgYGlkeGAgYmVpbmcgYml0d2lzZSBBTkRlZCB3aXRoIGAweDFmYC4gVGhhdCBnaXZlcyBpdCBhd2F5IGltbWVkaWF0ZWx5IC0gdGhpcyBpcyBhIENsYXVzZSAyMiBNRElPIGJ1cyBhY2Nlc3MhIEJ1dCB3YWl0LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBDbGF1c2UgMjIgYnVzLCBjYW4gd2Ugc3RpbGwgdGFsayB0byBhIENsYXVzZSA0NSBQSFk/XG5cblllcywgd2UgY2FuLCBidXQgaXQgcmVxdWlyZXMgaW5kaXJlY3QgYWNjZXNzLiBXZeKAmWQgbmVlZCB0byB1c2UgcmVnaXN0ZXJzIDEzIGFuZCAxNCB0byBzcGVjaWZ5IHRoZSBNTUQgKE1hbmFnZW1lbnQgTW9kdWxlIERldmljZSkgYW5kIHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzcy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyB0aGUgUEhZIHN1YnN5c3RlbSBpbnRlbGxpZ2VudGx5IGhhbmRsZSB0aGlzPyBJZiB0aGUgYnVzICpkb2Vzbid0KiBuYXRpdmVseSBzdXBwb3J0IENsYXVzZSA0NSwgd2lsbCBpdCBhdXRvbWF0aWNhbGx5IGRlZmF1bHQgdG8gaW5kaXJlY3QgYWNjZXNzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIENsYXVzZSA0NSBQSFk/XG5cblRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuY2AuIExldCdzIHNlZSBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHRoZSBjb3JyZWN0IGFjY2VzcyBtZXRob2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NDYuOTAxODE0Nzk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI0NTg2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3JlYWRfbW1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTQ1Nz1FWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3dyaXRlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ1OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYzo0NjA6ICogX19waHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDYxLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDY3LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ2ODppbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzgtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ3OTpFWFBPUlRfU1lNQk9MKF9fcGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00ODAtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ4MjogKiBwaHlfcmVhZF9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDgzLSAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDg5LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjQ5MDppbnQgcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00OTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk0LVxcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDk1OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDk2LVxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ5OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NTAwOkVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy01MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz02Mjk9aW50IF9fcGh5X21vZGlmeV9tbWRfY2hhbmdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy02MzMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NjM0OlxcdHJldCA9IF9fcGh5X3JlYWRfbW1kKHBoeWRldiwgZGV2YWQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNjM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mjo0Ny4yOTQyODI5MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MjMxNjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBzZWVpbmcgYF9fcGh5X3JlYWRfbW1kYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdW5kZXJzY29yZXMgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uLCBsaWtlbHkgdGllZCB0byBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGludGVyZmFjZSBhbmQgc29tZSBzb3J0IG9mIG11bHRpLW1vZGUgZGV2aWNlIChNTUQpIGFjY2Vzcy4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCB1c3VhbGx5IGluZGljYXRlcyBhbiBpbnRlcm5hbCBvciBcInByaXZhdGVcIiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgYnkgbW9zdCBvdGhlciBtb2R1bGVzLiBJdCdzIGEgbG93LWxldmVsLCBjcml0aWNhbCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcm91dGluZSBmb3IgZWl0aGVyIHJlYWRpbmcgb3IgY29uZmlndXJpbmcgcmVnaXN0ZXJzIHdpdGhpbiBhIFBIWSBjaGlwLCBhbmQgdGhlIFwiTU1EXCIgc3VnZ2VzdHMgdGhhdCB0aGUgUEhZIHN1cHBvcnRzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYmxvY2tzLCBlYWNoIG1hcHBlZCB0byBhIHNwZWNpZmljIE1NRCBhZGRyZXNzLiBUaGlzIGltcGxpZXMgc29tZSBraW5kIG9mIGluZGlyZWN0IGFkZHJlc3Npbmcgc2NoZW1lLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgdG8gZGV2aWNlIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIG9yIG9wZXJhdGlvbmFsIG1vbml0b3JpbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCdzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFuZCB3aGF0IGlzIGl0IHJldHVybmluZyBhbmQgd2hhdCBraW5kIG9mIGVycm9yLWhhbmRsaW5nIGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NDUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NTIuNTQ2NjAxOTk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2ODpcXHRpbnQgX19waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Njk6XFx0e1xcbiA0NzA6XFx0XFx0aWYgKHJlZ251bSBcXHUwMDNlICh1MTYpfjAgfHwgZGV2YWQgXFx1MDAzZSAzMilcXG4gNDcxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VkcnYgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXJlYWRfbW1kKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VyZWFkX21tZChwaHlkZXYsIGRldmFkLCByZWdudW0pO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRyZXR1cm4gbW1kX3BoeV9yZWFkKHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLFxcbiA0Nzc6XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaXNfYzQ1LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdEVYUE9SVF9TWU1CT0woX19waHlfcmVhZF9tbWQpO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKipcXG4gNDgyOlxcdCAqIHBoeV9yZWFkX21tZCAtIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgcmVnaXN0ZXJcXG4gNDgzOlxcdCAqIGZyb20gYW4gTU1EIG9uIGEgZ2l2ZW4gUEhZLlxcbiA0ODQ6XFx0ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQ4NTpcXHQgKiBAZGV2YWQ6IFRoZSBNTUQgdG8gcmVhZCBmcm9tXFxuIDQ4NjpcXHQgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXFxuIDQ4NzpcXHQgKlxcbiA0ODg6XFx0ICogU2FtZSBydWxlcyBhcyBmb3IgcGh5X3JlYWQoKTtcXG4gNDg5OlxcdCAqL1xcbiA0OTA6XFx0aW50IHBoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuIDQ5MTpcXHR7XFxuIDQ5MjpcXHRcXHRpbnQgcmV0O1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbiA0OTU6XFx0XFx0cmV0ID0gX19waHlfcmVhZF9tbWQocGh5ZGV2LCBkZXZhZCwgcmVnbnVtKTtcXG4gNDk2OlxcdFxcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDk5OlxcdH1cXG4gNTAwOlxcdEVYUE9SVF9TWU1CT0wocGh5X3JlYWRfbW1kKTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0LyoqXFxuIDUwMzpcXHQgKiBfX3BoeV93cml0ZV9tbWQgLSBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyXFxuIDUwNDpcXHQgKiBvbiBhbiBNTUQgb24gYSBnaXZlbiBQSFkuXFxuIDUwNTpcXHQgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcXG4gNTA2OlxcdCAqIEBkZXZhZDogVGhlIE1NRCB0byByZWFkIGZyb21cXG4gNTA3OlxcdCAqIEByZWdudW06IFRoZSByZWdpc3RlciBvbiB0aGUgTU1EIHRvIHJlYWRcXG4gNTA4OlxcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlIHRvIEByZWdudW1cXG4gNTA5OlxcdCAqXFxuIDUxMDpcXHQgKiBTYW1lIHJ1bGVzIGFzIGZvciBfX3BoeV93cml0ZSgpO1xcbiA1MTE6XFx0ICovXFxuIDUxMjpcXHRpbnQgX19waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZhZCwgdTMyIHJlZ251bSwgdTE2IHZhbClcXG4gNTEzOlxcdHtcXG4gNTE0OlxcdFxcdGlmIChyZWdudW0gXFx1MDAzZSAodTE2KX4wIHx8IGRldmFkIFxcdTAwM2UgMzIpXFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTE2OlxcdFxcbiA1MTc6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2V3cml0ZV9tbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjUyLjU0NjY5ODMzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMxNjM1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIGBtbWRfcGh5X3JlYWRgIGFuZCBpdHMgaW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGZ1bmN0aW9uLCBgbW1kX3BoeV9yZWFkYCwgYmVjYXVzZSBJJ20gYmV0dGluZyBpdCdzIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIFBIWSBvcGVyYXRlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgaXQgaGFuZGxlcyB0aGUgTU1EIChNYW5hZ2VtZW50IE1vZGUgRGV2aWNlKSBpbnRlcmZhY2UuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHJlYWRpbmcgZGF0YSBmcm9tIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHRoZXNlIGFyZW4ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBNRElPIGFkZHJlc3Mgc3BhY2UuIFRoZSB0ZXJtIFwiTU1EXCIgaXRzZWxmIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBpZGVudGlmeSB0aGVzZSBQSFktaW50ZXJuYWwgcmVnaXN0ZXJzLlxuXG5J4oCZbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gV2hhdCdzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvci1kZWZpbmVkIGNvbW1hbmQgc2V0LCBvciBkb2VzIGl0IGNvbmZvcm0gdG8gYSBtb3JlIGdlbmVyaWMgc3BlY2lmaWNhdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGhpbnRzIHJlZ2FyZGluZyB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBzY2hlbWUg4oCTIGhvdyB0aGUgTU1EIGFkZHJlc3MgYW5kIHRoZSBzdWItYWRkcmVzcy9yZWdpc3RlciB3aXRoaW4gdGhhdCBNTUQgYXJlIGhhbmRsZWQuIFRoZSBrZXkgd2lsbCBiZSB0byBkZXRlcm1pbmUgaWYgaXQncyBhIGRpcmVjdCByZWdpc3RlciByZWFkLCBvciBpZiBpdCByZXF1aXJlcyBhIHR3by1zdGVwIHdyaXRlL3JlYWQgc2VxdWVuY2UgZm9yIGFjY2Vzc2luZyBzb21lIHJlZ2lzdGVycy4gQWxzbywgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBjcml0aWNhbCBoZXJlOyBob3cgaXMgaXQgcGFzc2VkIHRoZSBNTUQgbnVtYmVyLCB0aGUgcmVnaXN0ZXIgbnVtYmVyLCBhbmQgdGhlIHJlc3VsdD8gQXJlIHRoZXkgcGFzc2VkIGFzIGFyZ3VtZW50cyBvciBwYXJ0IG9mIGEgc3RydWN0dXJlP1xuXG5JJ20gbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgdG8gb3RoZXIgUEhZIHJlYWQgZnVuY3Rpb25zIEkndmUgd29ya2VkIHdpdGguIEFyZSB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcz8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHBvdGVudGlhbCBidXMgY29udGVudGlvbiBvciB0aW1lb3V0IHNjZW5hcmlvcz8gSSdtIGhvcGluZyBpdCdzIGRlc2lnbmVkIHdpdGggc29tZSBsZXZlbCBvZiByb2J1c3RuZXNzLCBwYXJ0aWN1bGFybHkgaWYgaXQncyBpbnRlcmFjdGluZyB3aXRoIGEgcG90ZW50aWFsbHkgbm9pc3kgcGh5c2ljYWwgaW50ZXJmYWNlLiBJJ20gYWxzbyBhc2tpbmcgbXlzZWxmIHF1ZXN0aW9ucyBsaWtlOiBEb2VzIGl0IHJldHVybiBhIHN0YXR1cyBjb2RlIG9yIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmU/IERvZXMgaXQgaGF2ZSBhbnkgcmV0cnkgbG9naWMgYnVpbHQgaW4/IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW50ZXJydXB0cyBmcm9tIHRoZSBQSFkgaXRzZWxmLCB3aGljaCBjYW4gaW1wYWN0IHRoaXMgcmVhZGluZyBwcm9jZXNzLlxuXG5NeSBtYWluIGZvY3VzIGlzIHRvIGVuc3VyZSB0aGF0IEkga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBhcHByb3ByaWF0ZSBtZWFuaW5nIHdpdGhpbiB0aGUgUEhZJ3MgY29udGV4dC4gSSBtdXN0IGVuc3VyZSB0aGUgcmVnaXN0ZXIgdmFsdWUgaXMgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRhdGFzaGVldCBmb3IgdGhpcyBQSFkgb3IgYXQgbGVhc3QgYSBzaW1pbGFyIG9uZSB0byBmaW5kIG91dCB3aGF0IHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQuIFVuZGVyc3RhbmRpbmcgdGhhdCBpcyBnb2luZyB0byBiZSB0aGUgbHluY2hwaW4gZm9yIGFueSBtZWFuaW5nZnVsIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDI6NTguNjc4MzM1MzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTAyMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbWRfcGh5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDIxPXN0YXRpYyB2b2lkIG1tZF9waHlfaW5kaXJlY3Qoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgZGV2YWQsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzQtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDM1OmludCBtbWRfcGh5X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBib29sIGlzX2M0NSxcXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00MzYtXFx0XFx0IGludCBkZXZhZCwgdTMyIHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTQ0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKG1tZF9waHlfcmVhZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9NDY4PWludCBfX3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2YWQsIHUzMiByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy00NzUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6NDc2OlxcdHJldHVybiBtbWRfcGh5X3JlYWQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtNDc3LVxcdFxcdFxcdCAgICBwaHlkZXYtXFx1MDAzZWlzX2M0NSwgZGV2YWQsIHJlZ251bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQyOjU4LjczNzM2MDg2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc1NjI4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXIgYW5kIGFwcHJvYWNoaW5nIGEgc3BlY2lmaWMgY29kZSBmdW5jdGlvbjpcblxuKipBbmFseXppbmcgYG1tZF9waHlfcmVhZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbW1kX3BoeV9yZWFkYC4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgdGhpcyBpbXBsaWVzIGEgcmVhZCBvcGVyYXRpb24sIGxpa2VseSBpbnZvbHZpbmcgYSBNZWRpYS1JbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgTWFuYWdlbWVudCBEYXRhIChNTUQpIFBIWSAoUGh5c2ljYWwgTGF5ZXIpIGRldmljZS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3cgbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhleSBoYW5kbGUgdGhlIHJlYWRpbmcgYW5kIHJldHJpZXZpbmcgb2YgZGF0YSBmcm9tIGEgUEhZIHZpYSBNTUQuXCIgSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSByZWFkIGN5Y2xlIGlzIGluaXRpYXRlZCBhbmQgY29tcGxldGVkLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgaXQgaW50ZW5kcyB0byB0YXJnZXQsIHRoZSBiaXQgbWFuaXB1bGF0aW9uIG9mIHRoZSByZWFkIGFuZCB3cml0ZSBjb21tYW5kcywgYW5kIGRhdGEgdHJhbnNtaXNzaW9uLiBcIklzIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZz9cIiBpcyBhIGtleSBxdWVzdGlvbiBpbiB0aGlzIGFyZWEuIEknbGwgYmUgZm9jdXNlZCBvbiB0aGluZ3MgbGlrZSB0aW1pbmcgY29uc3RyYWludHMsIGFja25vd2xlZGdlIHNpZ25hbHMsIGFuZCBhbnkgcG90ZW50aWFsIHJldHJ5IG1lY2hhbmlzbXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgZmxvdywgYW55IGRlcGVuZGVuY2llcyBvbiBoYXJkd2FyZSBvciBvdGhlciBtb2R1bGVzLCBhbmQgdGhlIGdlbmVyYWwgd2F5IHRoZSBNTUQgUEhZIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQuIFRoaXMgc2hvdWxkIGJlIGFuIGludGVyZXN0aW5nIG9uZSB0byB1bnBhY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NDE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDIuMTEyOTkyNTM5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzNTpcXHRpbnQgbW1kX3BoeV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgYm9vbCBpc19jNDUsXFxuIDQzNjpcXHRcXHRcXHQgaW50IGRldmFkLCB1MzIgcmVnbnVtKVxcbiA0Mzc6XFx0e1xcbiA0Mzg6XFx0XFx0aWYgKGlzX2M0NSlcXG4gNDM5OlxcdFxcdFxcdHJldHVybiBfX21kaW9idXNfYzQ1X3JlYWQoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdG1tZF9waHlfaW5kaXJlY3QoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuIDQ0MjpcXHRcXHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xcbiA0NDM6XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5X2FkZHIsIE1JSV9NTURfREFUQSk7XFxuIDQ0NDpcXHR9XFxuIDQ0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChtbWRfcGh5X3JlYWQpO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRpbnQgbW1kX3BoeV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGJvb2wgaXNfYzQ1LFxcbiA0NDg6XFx0XFx0XFx0ICBpbnQgZGV2YWQsIHUzMiByZWdudW0sIHUxNiB2YWwpXFxuIDQ0OTpcXHR7XFxuIDQ1MDpcXHRcXHRpZiAoaXNfYzQ1KVxcbiA0NTE6XFx0XFx0XFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBwaHlfYWRkciwgZGV2YWQsIHJlZ251bSwgdmFsKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0bW1kX3BoeV9pbmRpcmVjdChidXMsIHBoeV9hZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4gNDU0OlxcdFxcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDIuMTEzMDkwMTY5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzk0NDUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGxvZ2ljIGFuZCBpdCBzZWVtcyB0aGF0IGlmIGBpc19jNDVgIGlzICpmYWxzZSosIHRoZSBjb2RlIGlzIGdvaW5nIHRvIGJlIGFjY2Vzc2luZyByZWdpc3RlcnMgMTMgYW5kIDE0IHVzaW5nIGluZGlyZWN0IGFjY2Vzcywgd2hpY2ggYWxpZ25zIHdpdGggQ2xhdXNlIDIyIFBIWSBhY2Nlc3MsIG5hdHVyYWxseS4gTXkgY29uY2VybiBub3csIGFzIGl0IGFsd2F5cyBpcyB3aGVuIHNlZWluZyBhIGNvbmRpdGlvbmFsIGxpa2UgdGhpcywgaXMgaG93IHRoYXQgYm9vbGVhbiwgYGlzX2M0NWAsIGdldHMgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLCB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbi5cblxuUmlnaHQsIEkgcmVtZW1iZXIgbm93LCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLCBgZ2V0X3BoeV9kZXZpY2VgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgZGV2aWNlIGlkZW50aWZpY2F0aW9uIHVzdWFsbHkgaGFwcGVucy4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgYGlzX2M0NWAgZGV0ZXJtaW5hdGlvbiBoYXBwZW5zLiBTbyBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gYGdldF9waHlfZGV2aWNlYCBkZWZpbml0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxMzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjA2LjE5MjUzNzgyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4ODQyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9waHlfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDUwPUVYUE9SVF9TWU1CT0woZndub2RlX2dldF9waHlfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDUyLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA1MzogKiBnZXRfcGh5X2RldmljZSAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgUEhZIGRldmljZSBhbmQgcmV0dXJucyBpdHMgQHBoeV9kZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNTQtICpcXHRcXHQgICAgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwNzAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDcxOnN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTAzOkVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MDYuMzgxMzg0NTk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDU4NDU3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQW5hbHl6aW5nIGBnZXRfcGh5X2RldmljZWAqKlxuXG5BbHJpZ2h0LCBJIHNlZSB3ZSdyZSBsb29raW5nIGF0IGBnZXRfcGh5X2RldmljZWAuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb250ZXh0PyBJcyB0aGlzIHBhcnQgb2YgYSBkcml2ZXIsIGEgbmV0d29yayBzdGFjaywgYSBzeXN0ZW0gdXRpbGl0eT8gVGhlIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgZ2V0dGluZyB0aGlzIFwiUEhZIGRldmljZS5cIiBJcyBpdCBlbnVtZXJhdGluZyBoYXJkd2FyZSwgcXVlcnlpbmcgYSBjb25maWd1cmF0aW9uIGRhdGFiYXNlLCBvciBwZXJoYXBzIGFjY2Vzc2luZyBhIHBsYXRmb3JtLXNwZWNpZmljIEFQST8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbSBvZiBkZXZpY2UgZGlzY292ZXJ5IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHRoYXQncyBiZWluZyBlbXBsb3llZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlOiB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkPyBBcmUgdGhlcmUgZGV2aWNlIGlkZW50aWZpZXJzLCBhZGRyZXNzZXMsIG9yIHNvbWUgc29ydCBvZiBjb250ZXh0PyBUaGUgcmV0dXJuIHZhbHVlIGlzIGNydWNpYWwgdG9vLiBJcyBpdCByZXR1cm5pbmcgYSBwb2ludGVyLCBhIGhhbmRsZSwgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEhZPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgZXJyb3IgY29kZXM/IEEgcm9idXN0IGltcGxlbWVudGF0aW9uICpzaG91bGQqIGdyYWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBkZXZpY2UgaXNuJ3QgZm91bmQgb3IgYW4gZXJyb3Igb2NjdXJzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcG9zc2liaWxpdGllczogSW52YWxpZCBhZGRyZXNzLCBkZXZpY2Ugbm90IHByZXNlbnQsIG5vIHBlcm1pc3Npb24sIGhhcmR3YXJlIGZhaWx1cmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbidzIGJvZHkgZm9yIGZsb3cgY29udHJvbCBhbmQgbG9naWMuIEknbGwgc2VhcmNoIGZvciB0aGluZ3MgbGlrZSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgYW5kIGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGJlaW5nIGRlY2xhcmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRhdGEgdHlwZXMsIHNpbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGFuZCB0aGVyZSBjb3VsZCBiZSBpbXBvcnRhbnQgaW50ZXJhY3Rpb25zIGFuZCBzaGFyZWQgYWNjZXNzIGhhcHBlbmluZy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIHJlc291cmNlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBob3cgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEFsc28sIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBpZiB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgYW5kIGlmIHRoZXJlIGNvdWxkIGJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcy5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uICpmaW5kcyogYW5kICpyZXR1cm5zKiBhIHBoeXNpY2FsIGxheWVyIGRldmljZSwgYW5kIHdoZXRoZXIgaXQncyBkb2luZyBzbyBpbiBhIHdheSB0aGF0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciByZWxpYWJpbGl0eSwgZWZmaWNpZW5jeSwgYW5kIHBvcnRhYmlsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBsb3ctbGV2ZWwgZGV2aWNlIGludGVyYWN0aW9ucy4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgY2FuIEkgbWFrZSBhIGp1ZGdtZW50IG9uIGl0cyBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjEyLjcyNzIzMjE4MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDcxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcxOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuMTA3MjpcXHR7XFxuMTA3MzpcXHRcXHRzdHJ1Y3QgcGh5X2M0NV9kZXZpY2VfaWRzIGM0NV9pZHM7XFxuMTA3NDpcXHRcXHR1MzIgcGh5X2lkID0gMDtcXG4xMDc1OlxcdFxcdGludCByO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRjNDVfaWRzLmRldmljZXNfaW5fcGFja2FnZSA9IDA7XFxuMTA3ODpcXHRcXHRjNDVfaWRzLm1tZHNfcHJlc2VudCA9IDA7XFxuMTA3OTpcXHRcXHRtZW1zZXQoYzQ1X2lkcy5kZXZpY2VfaWRzLCAweGZmLCBzaXplb2YoYzQ1X2lkcy5kZXZpY2VfaWRzKSk7XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdGlmIChpc19jNDUpXFxuMTA4MjpcXHRcXHRcXHRyID0gZ2V0X3BoeV9jNDVfaWRzKGJ1cywgYWRkciwgXFx1MDAyNmM0NV9pZHMpO1xcbjEwODM6XFx0XFx0ZWxzZVxcbjEwODQ6XFx0XFx0XFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXFx1MDAyNnBoeV9pZCk7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlmIChyKVxcbjEwODc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocik7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdC8qIFBIWSBkZXZpY2Ugc3VjaCBhcyB0aGUgTWFydmVsbCBBbGFza2EgODhFMjExMCB3aWxsIHJldHVybiBhIFBIWSBJRFxcbjEwOTA6XFx0XFx0ICogb2YgMCB3aGVuIHByb2JlZCB1c2luZyBnZXRfcGh5X2MyMl9pZCgpIHdpdGggbm8gZXJyb3IuIFByb2NlZWQgdG9cXG4xMDkxOlxcdFxcdCAqIHByb2JlIHdpdGggQzQ1IHRvIHNlZSBpZiB3ZSdyZSBhYmxlIHRvIGdldCBhIHZhbGlkIFBIWSBJRCBpbiB0aGUgQzQ1XFxuMTA5MjpcXHRcXHQgKiBzcGFjZSwgaWYgc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBDNDUgUEhZIGRldmljZS5cXG4xMDkzOlxcdFxcdCAqL1xcbjEwOTQ6XFx0XFx0aWYgKCFpc19jNDUgXFx1MDAyNlxcdTAwMjYgcGh5X2lkID09IDAgXFx1MDAyNlxcdTAwMjYgYnVzLVxcdTAwM2VyZWFkX2M0NSkge1xcbjEwOTU6XFx0XFx0XFx0ciA9IGdldF9waHlfYzQ1X2lkcyhidXMsIGFkZHIsIFxcdTAwMjZjNDVfaWRzKTtcXG4xMDk2OlxcdFxcdFxcdGlmICghcilcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG4xMDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlLCBcXHUwMDI2YzQ1X2lkcyk7XFxuMTA5OTpcXHRcXHR9XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgaXNfYzQ1LCBcXHUwMDI2YzQ1X2lkcyk7XFxuMTEwMjpcXHR9XFxuMTEwMzpcXHRFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4xMTA0OlxcdFxcbjExMDU6XFx0LyoqXFxuMTEwNjpcXHQgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuMTEwNzpcXHQgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG4xMTA4OlxcdCAqL1xcbjExMDk6XFx0aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xMTEwOlxcdHtcXG4xMTExOlxcdFxcdGludCBlcnI7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbjExMTQ6XFx0XFx0aWYgKGVycilcXG4xMTE1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdC8qIERlYXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4xMTE4OlxcdFxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAwKTtcXG4xMTE5OlxcdFxcbjExMjA6XFx0XFx0LyogUnVuIGFsbCBvZiB0aGUgZml4dXBzIGZvciB0aGlzIFBIWSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzoxMi43Mjc0MDg3MTJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2Mzk4NDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gQnVzIFNjYW4qKlxuXG5Pa2F5LCBzbyB0aGUgYGdldF9waHlfZGV2aWNlYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQsIGFuZCBieSBkZWZhdWx0LCB0aGUgYGlzX2M0NWAgZmxhZyBpcyBzZXQgdG8gYGZhbHNlYCBkdXJpbmcgdGhpcyBNRElPIGJ1cyBzY2FuLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gU2luY2UgYGlzX2M0NWAgaXMgZmFsc2UsIHRoZSBjb2RlIGlzIGV4ZWN1dGluZyB0aGUgYGdldF9waHlfYzIyX2lkYCBmdW5jdGlvbi4gQWxyaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBnZXRfcGh5X2MyMl9pZGAgYW5kIGZpZ3VyZSBvdXQgaG93IGl0J3MgaGFuZGxpbmcgdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIE1ESU8gYnVzIHNjYW4gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxMDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjE2LjE5MTM5NTY0OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NDYyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9waHlfYzIyX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz05MDY9c3RhdGljIGludCBnZXRfcGh5X2M0NV9pZHMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5MS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjk5MjogKiBnZXRfcGh5X2MyMl9pZCAtIHJlYWRzIHRoZSBzcGVjaWZpZWQgYWRkciBmb3IgaXRzIGNsYXVzZSAyMiBJRC5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTk5My0gKiBAYnVzOiB0aGUgdGFyZ2V0IE1JSSBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTAwMS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwMDI6c3RhdGljIGludCBnZXRfcGh5X2MyMl9pZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyICpwaHlfaWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDgzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwODQ6XFx0XFx0ciA9IGdldF9waHlfYzIyX2lkKGJ1cywgYWRkciwgXFx1MDAyNnBoeV9pZCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDg1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDg5LVxcdC8qIFBIWSBkZXZpY2Ugc3VjaCBhcyB0aGUgTWFydmVsbCBBbGFza2EgODhFMjExMCB3aWxsIHJldHVybiBhIFBIWSBJRFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTA5MDpcXHQgKiBvZiAwIHdoZW4gcHJvYmVkIHVzaW5nIGdldF9waHlfYzIyX2lkKCkgd2l0aCBubyBlcnJvci4gUHJvY2VlZCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5MS1cXHQgKiBwcm9iZSB3aXRoIEM0NSB0byBzZWUgaWYgd2UncmUgYWJsZSB0byBnZXQgYSB2YWxpZCBQSFkgSUQgaW4gdGhlIEM0NVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzoxNi4zODc4NjIxMjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MjkyODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBnZXRcXF9waHlcXF9jMjJcXF9pZCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBpZWNlIG9mIGNvZGUgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgbmFtZSwgYGdldF9waHlfYzIyX2lkYCwgc3VnZ2VzdHMgdGhhdCBpdCdzIHJldHJpZXZpbmcgYW4gaWRlbnRpZmllci4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHNvbWV0aGluZyBwaHlzaWNhbCAoYHBoeWApLCBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoIGEgQzIyIHN5c3RlbSBvciBjb21wb25lbnQuIFRoZSBcImdldFwiIHByZWZpeCBpcyBjbGVhcjsgaXQgaW1wbGllcyBhIHJldHJpZXZhbCBmdW5jdGlvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwdWxsaW5nIGEgdW5pcXVlIElEIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGEgcGllY2Ugb2YgY29uZmlndXJhdGlvbiBkYXRhLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjE5LjQ0MDc5MjgzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAyOlxcdHN0YXRpYyBpbnQgZ2V0X3BoeV9jMjJfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKVxcbjEwMDM6XFx0e1xcbjEwMDQ6XFx0XFx0aW50IHBoeV9yZWc7XFxuMTAwNTpcXHRcXG4xMDA2OlxcdFxcdC8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjEsIGFuZCBwdXQgdGhlbSBpbiB0aGUgdXBwZXIgaGFsZiAqL1xcbjEwMDc6XFx0XFx0cGh5X3JlZyA9IG1kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQxKTtcXG4xMDA4OlxcdFxcdGlmIChwaHlfcmVnIFxcdTAwM2MgMCkge1xcbjEwMDk6XFx0XFx0XFx0LyogcmV0dXJuaW5nIC1FTk9ERVYgZG9lc24ndCBzdG9wIGJ1cyBzY2FubmluZyAqL1xcbjEwMTA6XFx0XFx0XFx0cmV0dXJuIChwaHlfcmVnID09IC1FSU8gfHwgcGh5X3JlZyA9PSAtRU5PREVWKSA/IC1FTk9ERVYgOiAtRUlPO1xcbjEwMTE6XFx0XFx0fVxcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHQqcGh5X2lkID0gcGh5X3JlZyBcXHUwMDNjXFx1MDAzYyAxNjtcXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0LyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMiwgYW5kIHB1dCB0aGVtIGluIHRoZSBsb3dlciBoYWxmICovXFxuMTAxNjpcXHRcXHRwaHlfcmVnID0gbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX1BIWVNJRDIpO1xcbjEwMTc6XFx0XFx0aWYgKHBoeV9yZWcgXFx1MDAzYyAwKSB7XFxuMTAxODpcXHRcXHRcXHQvKiByZXR1cm5pbmcgLUVOT0RFViBkb2Vzbid0IHN0b3AgYnVzIHNjYW5uaW5nICovXFxuMTAxOTpcXHRcXHRcXHRyZXR1cm4gKHBoeV9yZWcgPT0gLUVJTyB8fCBwaHlfcmVnID09IC1FTk9ERVYpID8gLUVOT0RFViA6IC1FSU87XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MTkuNDQxMDA1Njc3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTIwODU2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU3l6a2FsbGVyJ3MgVVNCIERldmljZSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9sbG93aW5nIHRoaXMgc3l6a2FsbGVyIGVtdWxhdGlvbiBwYXRoIGFuZCBpdCBzZWVtcyBwcmV0dHkgaW50ZXJlc3RpbmcuIElmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgdGhlIHN5c3RlbSdzIGVtdWxhdGluZyBhIFVTQiBkZXZpY2UsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSB0aGUgYHNtc2M5NXh4YC4gVGhlIGtleSBpcyB0aGF0IGl0J3MgZ29pbmcgdG8gaW50ZXJjZXB0IHRoZSBgbWRpb2J1c19yZWFkYCBjYWxscywgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgIHJlZ2lzdGVycy4gQnkgcmV0dXJuaW5nIGAweDAwMWNgIGFuZCBgMHhjODk4YCByZXNwZWN0aXZlbHksIHRoZSBjb2RlIGlzIGNvbnN0cnVjdGluZyB0aGF0IGBwaHlfaWRgIHRvIGJlIGAweDAwMWNjODk4YC5cblxuVGhpcyBsZWFkcyB0byB0aGUgY3J1Y2lhbCBgcGh5X2RldmljZV9jcmVhdGVgIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IGBpc19jNDVgIGlzIHNldCB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGBwaHlfcmVhZF9tbWRgIGZ1bmN0aW9uIHdpbGwgdXNlIGluZGlyZWN0IGFjY2Vzcy4gTm93IHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBkb2VzIHRoZSBgcmVhbHRla2AgZHJpdmVyIHRoYXQncyBsaWtlbHkgYmVpbmcgcHJvYmVkIHN1cHBvcnQgdGhpcyBpbmRpcmVjdCBhY2Nlc3M/IEkgbmVlZCB0byBjaGVjay5cblxuQWgsIHllcy4gSSBzZWUgaXQuIFRoZSBgbW1kX3BoeV9pbmRpcmVjdGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgcmVhbHRla2AgZHJpdmVyIGNvbmZpcm1zIHRoaXMgYnkgd3JpdGluZyB0byByZWdpc3RlcnMgMTMgYW5kIDE0LCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIENsYXVzZSAyMiByZWdpc3RlcnMgdXNlZCBmb3IgaW5kaXJlY3QgQ2xhdXNlIDQ1IGFjY2Vzcy4gVGhpcyBtZWFucyB3ZSdyZSBzZXR0aW5nIHVwIHRoZSBjb25kaXRpb25zIGZvciBhbiBpbnRlcmVzdGluZyBwcm9iZSB0byBvY2N1ci5cblxuVGhlcmVmb3JlLCB0aGlzIHdob2xlIHNlcXVlbmNlIHNob3VsZCB0cmlnZ2VyIGBydGw4MjYxeF9wcm9iZWAgZXZlbnR1YWxseS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBydGw4MjYxeF9wcm9iZWAgbm93IGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhhdCB3aWxsIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ1OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjI0LjY5MzA5NDYyNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg3OlxcdHN0YXRpYyBpbnQgcnRsODI2MXhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzg4OlxcdHtcXG4gMzg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbiAzOTA6XFx0XFx0c3RydWN0IHJ0bDgyNjF4X3ByaXYgKnByaXY7XFxuIDM5MTpcXHRcXHRpbnQgc3ViX3BoeV9pZCwgcmV0O1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDM5NDpcXHRcXHRpZiAoIXByaXYpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfQUREUl9SRUcsXFxuIDQwMDpcXHRcXHRcXHRcXHQgICAgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUik7XFxuIDQwMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNDAyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBSVEw4MjYxWF9FWFRfREFUQV9SRUcpO1xcbiA0MDU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQwNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRzdWJfcGh5X2lkID0gKHJldCBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdHN3aXRjaCAoc3ViX3BoeV9pZCkge1xcbiA0MTE6XFx0XFx0Y2FzZSBSVEw4MjYxQ19DRV9NT0RFTDpcXG4gNDEyOlxcdFxcdFxcdHByaXYtXFx1MDAzZWZ3X25hbWUgPSBSVEw4MjYxQ19DRV9GV19OQU1FO1xcbiA0MTM6XFx0XFx0XFx0cGh5ZGV2X2luZm8ocGh5ZGV2LCBcXFwiUlRMODI2MUMgZGV0ZWN0ZWQgKHN1Yl9pZCAweCUwMngpXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4gNDE0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRcXHRkZWZhdWx0OlxcbiA0MTc6XFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiVW5rbm93biBzdWJfaWQgMHglMDJ4LCBkZWZhdWx0IGJlaGF2aW9yXFxcXG5cXFwiLCBzdWJfcGh5X2lkKTtcXG4gNDE4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gMDtcXG4gNDIyOlxcdH1cXG4gNDIzOlxcdFxcbiA0MjQ6XFx0c3RhdGljIGludCBydGw4MjYxeF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdGludCByZXQ7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdHJldCA9IGdlbnBoeV9jNDVfcG1hX3JlYWRfYWJpbGl0aWVzKHBoeWRldik7XFxuIDQyOTpcXHRcXHRpZiAocmV0KVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDMxOlxcdFxcdC8qXFxuIDQzMjpcXHRcXHQgKiBTdXBwbGVtZW50IE11bHRpLUdpZyBzcGVlZHMgdGhhdCBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWRcXG4gNDMzOlxcdFxcdCAqIFJUTDgyNjFYIHN1cHBvcnRzIDIuNUcvNUcgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgMTBHXFxuIDQzNDpcXHRcXHQgKi9cXG4gNDM1OlxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbiA0MzY6XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MjQuNjkzMjcwNDU0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjAzMDQ0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBBbmFseXppbmcgdGhlIFJUTDgyNjF4IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBydGw4MjYxeF9wcm9iZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGFwcGVhcnMgdG8gYmUgZnVuY3Rpb25pbmcgY29ycmVjdGx5LiBUaGUgc2VxdWVuY2UgaXMgY2xlYXI6IHdlIHdyaXRlIHRvIGBNRElPX01NRF9WRU5EMmAgdGhyb3VnaCBgUlRMODI2MVhfRVhUX0FERFJfUkVHYCwgc2V0dGluZyB0aGUgYWRkcmVzcyB0byBgUlRMXzgyNjFYX1NVQl9QSFlfSURfQUREUmAuIFdlIHRoZW4gcmVhZCBmcm9tIGBSVEw4MjYxWF9FWFRfREFUQV9SRUdgLiBTeXprYWxsZXIgaW50ZXJjZXB0cyB0aGF0IHJlYWQsIHdoaWNoIGlzIGZhc2NpbmF0aW5nLCBhbmQgaW5qZWN0cyBhIHZhbHVlLCBgUlRMODI2MUNfQ0VfTU9ERUxgIHNoaWZ0ZWQsIHJlc3VsdGluZyBpbiBgMHgwMDAwYC4gVGhpcyB0cmlnZ2VycyB0aGUgc2V0dGluZyBvZiBgcHJpdi1cdTAwM2Vmd19uYW1lYCB0byBgUlRMODI2MUNfQ0VfRldfTkFNRWAuIEZyb20gdGhlcmUsIGBjb25maWdfaW5pdGAgY2FsbHMgYHJ0bDgyNjF4X2Z3X2xvYWRgLCB3aGljaCBjYWxscyBgcmVxdWVzdF9maXJtd2FyZWAsIHdoaWNoIFN5emthbGxlciBjYW4gcHJvdmlkZS4gVGhlIGZpcm13YXJlIGxvYWQgaXMgc3VjY2Vzc2Z1bCBhcyBpcyB0aGUgc3Vic2VxdWVudCB2ZXJpZmljYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBmaXJtd2FyZSBlbnRyaWVzIHZpYSBgcnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeWAuIEFsbCBvZiB0aGF0J3MgYSBkaXJlY3QgcGF0aCwgbm8gcXVlc3Rpb24uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdXBwb3J0aW5nIFBIWSBmdW5jdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2Ygb3RoZXIgcmVsYXRlZCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBHZW5lcmljIFBIWSBDNDUgaW50ZXJmYWNlIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIFNwZWNpZmljYWxseSwgYXJlIGBnZW5waHlfYzQ1X3NvZnRfcmVzZXRgLCBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgLCBhbmQgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgIHVzZWQgYnkgb3VyIGRyaXZlcj8gVGhleSBhcmUsIGluZGVlZC4gYGdlbnBoeV9jNDVfc29mdF9yZXNldGAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYXMgYC5zb2Z0X3Jlc2V0YCwgd2hpY2ggaXMgZXhjZWxsZW50LiBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgIGlzIGNhbGxlZCBieSBgZ2VucGh5X2M0NV9jb25maWdfYW5lZ2AsIGFuZCBgZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZWAgYnkgYGdlbnBoeV9jNDVfcmVhZF9zdGF0dXNgLiBgcnRsODI2MXhgIHVzZXMgYGdlbnBoeV9jNDVfY29uZmlnX2FuZWdgIGFuZCBgZ2VucGh5X2M0NV9yZWFkX3N0YXR1c2AgdmlhIGBydGw4MjYxeF9jb25maWdfYW5lZ2AgYW5kIGBydGw4MjYxeF9yZWFkX3N0YXR1c2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0b3VjaGVkLiBJdCdzIGFsbCBjb25uZWN0ZWQuXG5cbk9rYXksIG5leHQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyB0aGUga2V5LiBJdCdzIG5lZWRlZCBmb3IgYHJlYWx0ZWtfbWFpbi5jYC4gVGhlIFN5emthbGxlciBzZXR1cCBhcHBlYXJzIHRvIGJlIGVuYWJsaW5nIHZhcmlvdXMgVVNCIG5ldCBkcml2ZXJzIGFscmVhZHksIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19SRUFMVEVLX1BIWWAgaXMgZW5hYmxlZCBleHBsaWNpdGx5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gSSBjYW4gY29uZmlybSB0aGlzIHVzaW5nIGBtZW51Y29uZmlnYC4gWWVwLCBpdCdzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbGwgc3BlY2lmeSB0aGF0LiBUaGFua2Z1bGx5IGBDT05GSUdfUEhZTElCYCBpcyBzZWxlY3RlZCBieSBgUkVBTFRFS19QSFlgIG9yIGBORVRERVZJQ0VTYCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuIFdpdGggdGhlIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb24gaGFuZGxlZCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBJIGhhdmUgYSBmdW5jdGlvbmFsIHBhdGggZm9yIGV4ZXJjaXNpbmcgdGhpcyBjb2RlIHdpdGggU3l6a2FsbGVyLCB3aGljaCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg4OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjM1LjI5NjMxNzM4OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MTE1NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSRUFMVEVLX1BIWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnOjI6Y29uZmlnIFJFQUxURUtfUEhZXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFBIWXNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnPTg9aWYgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTktXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvS2NvbmZpZzoxMDpjb25maWcgUkVBTFRFS19QSFlfSFdNT05cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkhXTU9OIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTA6NDM6MzUuNTM0NDM4NTQxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjEzNTIyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBQSFkgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGEgcGF0Y2gganVzdCBjYW1lIGFjcm9zcyBteSBkZXNrLCBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheSBoZXJlPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxhbmRzY2FwZS5cblxuVGhlbiwgSSBpbW1lZGlhdGVseSBub3RlIHRoYXQgdGhpcyBzcGVjaWZpYyBmaWxlLCBgcGh5LWM0NS5jYCwgZmFsbHMgdW5kZXIgdGhlIHVtYnJlbGxhIG9mIHRoZSBQSFlMSUIgY29uZmlndXJhdGlvbi4gU28sIGlmIGBDT05GSUdfUEhZTElCYCBpcyBlbmFibGVkLCAqdGhlbiogdGhpcyBjb2RlIGlzIGNvbXBpbGVkLiBHb29kLCB0aGF0IGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBUaGlzIGlzIGdvb2QgdG8ga25vdyBjb250ZXh0dWFsbHkgYmVmb3JlIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzozOS41OTU3OTMzMTdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTI3Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeS1jNDVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0MzozOS42NTQ5MjU1MjZaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5MjMxMjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUEhZIENvbmZpZ3VyYXRpb24gZm9yIEVuaGFuY2VkIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBgcGh5LWM0NS5vYCBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgbGlicGh5LXlgLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2ZS4gR29vZC4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBteSBhbmFseXNpcy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGdlbnBoeV9jNDVfc29mdF9yZXNldGBcbiogICBgZ2VucGh5X2M0NV9hbl9zZXR1cF9tYXN0ZXJfc2xhdmVgXG4qICAgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgXG4qICAgYHJ0bDgyNjF4X3Byb2JlYFxuKiAgIGBydGw4MjYxeF9nZXRfZmVhdHVyZXNgXG4qICAgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYFxuKiAgIGBydGw4MjYxeF92ZXJpZnlfZmlybXdhcmVgXG4qICAgYHJ0bDgyNjF4X2Z3X2V4ZWN1dGVfZW50cnlgXG4qICAgYHJ0bDgyNjF4X2Z3X2xvYWRgXG4qICAgYHJ0bDgyNjF4X2NvbmZpZ19pbnRyYFxuKiAgIGBydGw4MjYxeF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGBydGw4MjYxeF9jb25maWdfYW5lZ2BcbiogICBgcnRsODI2MXhfY29uZmlnX2luaXRgXG5cblRoZXNlIGFsbCBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuXG5cbk5vdywgYSBxdWljayBjaGVjayBvbiB0aGUgYFVTQl9ORVRfU01TQzk1WFhgIGRlcGVuZGVuY3kuIFdpdGggU3l6a2FsbGVyJ3MgYHZoY2lgIGVtdWxhdGluZyBhbnkgVVNCIGRldmljZSwgSSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgYHNtc2M5NXh4YC4gSXQncyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIGFsbG93cyBhcmJpdHJhcnkgUEhZIElEcywgc28gdGhlb3JldGljYWxseSwgSSBjb3VsZCB1c2Ugc29tZXRoaW5nIGVsc2UuIEhvd2V2ZXIsIGl0J3MgYSBnb29kIGRlZmF1bHQsIHNvIEknbGwgaW5jbHVkZSBpdCBqdXN0IGluIGNhc2UsIHdoaWxlIGFsc28gY2hlY2tpbmcgaWYgaXQncyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVVNCX05FVF9TTVNDOTVYWGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjQ2LjM0NzI0MDQzNFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzMjY4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9ORVRfU01TQzk1WFhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTE6Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXFx0dHJpc3RhdGUgXFxcIlNNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mzo0Ni40MTM1NzUyMDFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MTcxOTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgVVNCX0xBTjc4WFggSW50ZWdyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGFsc28gZ2l2ZSBgVVNCX0xBTjc4WFhgIGEgdGhvcm91Z2ggZ29pbmctb3Zlci4gV2XigJl2ZSBjb3ZlcmVkIHRoZSBvdGhlciBhc3BlY3RzLCBidXQgdGhpcyBkcml2ZXIsIGluIHBhcnRpY3VsYXIsIGNvdWxkIHByZXNlbnQgc29tZSB1bmlxdWUgY2hhbGxlbmdlcyBvciBzdWJ0bGUgaW50ZWdyYXRpb24gcXVpcmtzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlIGRlcGVuZGVuY2llcywgcmVzb3VyY2UgY29uZmxpY3RzLCBvciBldmVuIHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgc3BlY2lmaWMgdG8gdGhhdCBwYXJ0aWN1bGFyIFVTQi10by1FdGhlcm5ldCBjb250cm9sbGVyLiBJIG5lZWQgdG8gYmUgY2VydGFpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVs4oCZcyBVU0Igc3Vic3lzdGVtIGlzIHNlYW1sZXNzLCB0aGF0IHdlJ3ZlIGFjY291bnRlZCBmb3IgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZyByZXF1aXJlbWVudHMsIGFuZCB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb3Blcmx5IGV4cG9zZWQgYW5kIGRvY3VtZW50ZWQuIFRoZSBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGRlcGVuZCBvbiBnZXR0aW5nIHRoZSBgVVNCX0xBTjc4WFhgIHBhcnQgcmlnaHQsIHNvIGFub3RoZXIgY2hlY2sgd29uJ3QgaHVydC4gVGltZSB0byBkaXZlIGJhY2sgaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IG5vdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEwOjQzOjUyLjE2NTI5NzAzOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9MQU43OFhYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9OTk9Y29uZmlnIFVTQl9SVEw4MTUyXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMTItXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTEzOmNvbmZpZyBVU0JfTEFONzhYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTExNC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0Mzo1Mi4yMjU1MTY2NzZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNjg2MjkxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIFJUTDgyNjFDIFBIWSoqXG5cbk9rYXksIGxldCdzIHNvbGlkaWZ5IHRoZSBmdXp6aW5nIGFwcHJvYWNoIGZvciB0aGlzIG5ldyBSZWFsdGVrIFJUTDgyNjFDIDEwR2JwcyBQSFkgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBmdW5jdGlvbnMgYWRkZWQgYnkgdGhlIHBhdGNoLiBMZXQncyBydW4gdGhyb3VnaCB0aGVtIGFnYWluOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLiBOb3BlLCB0aGF0IHNlZW1zIHRvIGJlIHRoZSBmdWxsIHNldC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyBpbmRlZWQgd29ydGggZnV6emluZy4gSXQncyBub3QganVzdCBhIG5ldyBQSFkgZHJpdmVyLCBidXQgaXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHZpYSBNRElPIGJ1cyBlbXVsYXRpb24uIFRoaXMgbWVhbnMgd2UgY2FuIHJlYWNoIHRoZSBuZXcgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGlkZWFsIGZvciBTeXprYWxsZXIuXG5cbkhlcmXigJlzIHRoZSByZWFzb25pbmc6IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyBsaWtlIGBVU0JfTkVUX1NNU0M5NVhYYCBvciBgVVNCX0xBTjc4WFhgIHZpYSBWSENJLiBUaGVzZSBhZGFwdGVycyByZWdpc3RlciBhbiBNRElPIGJ1cywgYW5kIHdlIGNhbiBtYWtlIHRoZW0gcmVwb3J0IHRoZSBSVEw4MjYxQyBQSFkgSUQgKDB4MDAxY2M4OTgpIGR1cmluZyBidXMgc2Nhbm5pbmcuIFRoZSBQSFkgc3Vic3lzdGVtIHdpbGwgdGhlbiBsb2FkIHRoZSByZWFsdGVrIGRyaXZlciwgZXhlY3V0aW5nIHRoZSBuZXcgYHJ0bDgyNjF4X3Byb2JlYCwgYHJ0bDgyNjF4X2NvbmZpZ19pbml0YCwgYW5kIGV2ZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYmVjYXVzZSB3ZSBjYW4gYWxzbyBsZXZlcmFnZSBTeXprYWxsZXLigJlzIGZpcm13YXJlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgdGhlcmUuXG5cblNvLCBpbiB0ZXJtcyBvZiBmb2N1cywgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zOiBgZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0YCwgYGdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlYCwgYGdlbnBoeV9jNDVfcmVhZF9tYXN0ZXJfc2xhdmVgLCBgcnRsODI2MXhfcHJvYmVgLCBgcnRsODI2MXhfZ2V0X2ZlYXR1cmVzYCwgYHJ0bDgyNjF4X3JlYWRfc3RhdHVzYCwgYHJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZWAsIGBydGw4MjYxeF9md19leGVjdXRlX2VudHJ5YCwgYHJ0bDgyNjF4X2Z3X2xvYWRgLCBgcnRsODI2MXhfY29uZmlnX2ludHJgLCBgcnRsODI2MXhfaGFuZGxlX2ludGVycnVwdGAsIGBydGw4MjYxeF9jb25maWdfYW5lZ2AsIGFuZCBgcnRsODI2MXhfY29uZmlnX2luaXRgLlxuXG5UaGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgYFJFQUxURUtfUEhZYCwgYFVTQl9ORVRfU01TQzk1WFhgLCBhbmQgYFVTQl9MQU43OFhYYC5cblxuQWxyaWdodCwgSSB0aGluayB0aGlzIHBsYW4gaXMgc29saWQuIEl0J3MgdGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIHRlc3QgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTg0LCJPdXRwdXRUb2tlbnMiOjM4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMDo0NDowMy4zOTQxNDc5MzhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgwMjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkVBTFRFS19QSFlcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIlVTQl9MQU43OFhYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VucGh5X2M0NV9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJnZW5waHlfYzQ1X2FuX3NldHVwX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwiZ2VucGh5X2M0NV9yZWFkX21hc3Rlcl9zbGF2ZVwiLFxuICAgIFwicnRsODI2MXhfcHJvYmVcIixcbiAgICBcInJ0bDgyNjF4X2dldF9mZWF0dXJlc1wiLFxuICAgIFwicnRsODI2MXhfcmVhZF9zdGF0dXNcIixcbiAgICBcInJ0bDgyNjF4X3ZlcmlmeV9maXJtd2FyZVwiLFxuICAgIFwicnRsODI2MXhfZndfZXhlY3V0ZV9lbnRyeVwiLFxuICAgIFwicnRsODI2MXhfZndfbG9hZFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2ludHJcIixcbiAgICBcInJ0bDgyNjF4X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODI2MUMgMTBHYnBzIFBIWSBhbmQgaW50cm9kdWNlcyBuZXcgQ2xhdXNlIDQ1IFBIWSBmdW5jdGlvbnMgZm9yIHNvZnQgcmVzZXQgYW5kIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKGxpa2Ugc21zYzk1eHggb3IgbGFuNzh4eCkgdmlhIFZIQ0kuIFRoZXNlIGFkYXB0ZXJzIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBjYW4gYmUgbWFkZSB0byByZXBvcnQgdGhlIFJUTDgyNjFDIFBIWSBJRCAoMHgwMDFjYzg5OCkgZHVyaW5nIGJ1cyBzY2FubmluZy4gVGhlIFBIWSBzdWJzeXN0ZW0gd2lsbCB0aGVuIGxvYWQgdGhlIHJlYWx0ZWsgZHJpdmVyIGFuZCBleGVjdXRlIHRoZSBuZXcgcHJvYmUsIGNvbmZpZywgYW5kIGZpcm13YXJlIGxvYWRpbmcgcm91dGluZXMuIFRoZSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBhbHNvIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRUFMVEVLX1BIWVwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiVVNCX0xBTjc4WFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5waHlfYzQ1X3NvZnRfcmVzZXRcIixcbiAgICBcImdlbnBoeV9jNDVfYW5fc2V0dXBfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJnZW5waHlfYzQ1X3JlYWRfbWFzdGVyX3NsYXZlXCIsXG4gICAgXCJydGw4MjYxeF9wcm9iZVwiLFxuICAgIFwicnRsODI2MXhfZ2V0X2ZlYXR1cmVzXCIsXG4gICAgXCJydGw4MjYxeF9yZWFkX3N0YXR1c1wiLFxuICAgIFwicnRsODI2MXhfdmVyaWZ5X2Zpcm13YXJlXCIsXG4gICAgXCJydGw4MjYxeF9md19leGVjdXRlX2VudHJ5XCIsXG4gICAgXCJydGw4MjYxeF9md19sb2FkXCIsXG4gICAgXCJydGw4MjYxeF9jb25maWdfaW50clwiLFxuICAgIFwicnRsODI2MXhfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwicnRsODI2MXhfY29uZmlnX2FuZWdcIixcbiAgICBcInJ0bDgyNjF4X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MjYxQyAxMEdicHMgUEhZIGFuZCBpbnRyb2R1Y2VzIG5ldyBDbGF1c2UgNDUgUEhZIGZ1bmN0aW9ucyBmb3Igc29mdCByZXNldCBhbmQgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgbmV0d29yayBhZGFwdGVycyAobGlrZSBzbXNjOTV4eCBvciBsYW43OHh4KSB2aWEgVkhDSS4gVGhlc2UgYWRhcHRlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGNhbiBiZSBtYWRlIHRvIHJlcG9ydCB0aGUgUlRMODI2MUMgUEhZIElEICgweDAwMWNjODk4KSBkdXJpbmcgYnVzIHNjYW5uaW5nLiBUaGUgUEhZIHN1YnN5c3RlbSB3aWxsIHRoZW4gbG9hZCB0aGUgcmVhbHRlayBkcml2ZXIgYW5kIGV4ZWN1dGUgdGhlIG5ldyBwcm9iZSwgY29uZmlnLCBhbmQgZmlybXdhcmUgbG9hZGluZyByb3V0aW5lcy4gVGhlIGZpcm13YXJlIGxvYWRpbmcgY2FuIGFsc28gYmUgZnV6emVkIHZpYSBzeXprYWxsZXIncyBmaXJtd2FyZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[1] Phase: Succeeded StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 10:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 10:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2] Phase: Succeeded StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 10:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 10:46:04 +0000 UTC FinishedAt: 2026-07-02 10:46:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxnqxx/series-workflowxnqxx-convert-artifact-1707385140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 10:46:14 +0000 UTC FinishedAt: 2026-07-02 11:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 10:46:14 +0000 UTC FinishedAt: 2026-07-02 11:23:45 +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:*338264b0-e483-45ff-8e58-d30c7ecaf833,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-workflowxnqxx/series-workflowxnqxx-convert-artifact-1707385140/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": "87eb8551-2222-448f-b63f-436e26662ccc", "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-workflowxnqxx/series-workflowxnqxx-build-action-3257423666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 10:46:14 +0000 UTC FinishedAt: 2026-07-02 11:23:13 +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:*338264b0-e483-45ff-8e58-d30c7ecaf833,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-workflowxnqxx/series-workflowxnqxx-convert-artifact-1707385140/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": "87eb8551-2222-448f-b63f-436e26662ccc", "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-workflowxnqxx/series-workflowxnqxx-build-action-3257423666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 11:23:45 +0000 UTC FinishedAt: 2026-07-02 11:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 11:23:45 +0000 UTC FinishedAt: 2026-07-02 11:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 11:23:45 +0000 UTC FinishedAt: 2026-07-02 11:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 11:23:45 +0000 UTC FinishedAt: 2026-07-02 11:24:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxnqxx/series-workflowxnqxx-convert-artifact-1576952051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 11:24:50 +0000 UTC FinishedAt: 2026-07-02 11:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 11:24:50 +0000 UTC FinishedAt: 2026-07-02 11:26:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87eb8551-2222-448f-b63f-436e26662ccc,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-workflowxnqxx/series-workflowxnqxx-build-action-3257423666/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-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 11:26:52 +0000 UTC FinishedAt: 2026-07-02 11:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 11:26:52 +0000 UTC FinishedAt: 2026-07-02 11:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 11:26:52 +0000 UTC FinishedAt: 2026-07-02 11:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 11:26:52 +0000 UTC FinishedAt: 2026-07-02 11:59:42 +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:*338264b0-e483-45ff-8e58-d30c7ecaf833,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-workflowxnqxx/series-workflowxnqxx-convert-artifact-1576952051/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": "ce0f9fae-cb3e-495d-8b06-3c4940775c1d", "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-workflowxnqxx/series-workflowxnqxx-build-action-3273988263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 11:26:52 +0000 UTC FinishedAt: 2026-07-02 11:58:00 +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:*338264b0-e483-45ff-8e58-d30c7ecaf833,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-workflowxnqxx/series-workflowxnqxx-convert-artifact-1576952051/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": "ce0f9fae-cb3e-495d-8b06-3c4940775c1d", "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-workflowxnqxx/series-workflowxnqxx-build-action-3273988263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 11:59:42 +0000 UTC FinishedAt: 2026-07-02 11:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 11:59:42 +0000 UTC FinishedAt: 2026-07-02 11:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 11:59:42 +0000 UTC FinishedAt: 2026-07-02 12:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 11:59:42 +0000 UTC FinishedAt: 2026-07-02 12:01:44 +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:*ce0f9fae-cb3e-495d-8b06-3c4940775c1d,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-workflowxnqxx/series-workflowxnqxx-build-action-3273988263/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-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +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":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"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:*87eb8551-2222-448f-b63f-436e26662ccc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce0f9fae-cb3e-495d-8b06-3c4940775c1d,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-workflowxnqxx/series-workflowxnqxx-build-action-3257423666/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-workflowxnqxx/series-workflowxnqxx-build-action-3273988263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:02:12 +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":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"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-workflowxnqxx/series-workflowxnqxx-convert-artifact-886320620/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 12:01:54 +0000 UTC FinishedAt: 2026-07-02 12:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 12:02:17 +0000 UTC FinishedAt: 2026-07-02 12:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxnqxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["genphy_c45_soft_reset","genphy_c45_an_setup_master_slave","genphy_c45_read_master_slave","rtl8261x_probe","rtl8261x_get_features","rtl8261x_read_status","rtl8261x_verify_firmware","rtl8261x_fw_execute_entry","rtl8261x_fw_load","rtl8261x_config_intr","rtl8261x_handle_interrupt","rtl8261x_config_aneg","rtl8261x_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["REALTEK_PHY","USB_NET_SMSC95XX","USB_LAN78XX"],"series_id":"161f5898-eb04-4fbe-8cbb-e0c194a8e057","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 12:02:17 +0000 UTC FinishedAt: 2026-07-02 12:57:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87eb8551-2222-448f-b63f-436e26662ccc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce0f9fae-cb3e-495d-8b06-3c4940775c1d,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-workflowxnqxx/series-workflowxnqxx-build-action-3257423666/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-workflowxnqxx/series-workflowxnqxx-build-action-3273988263/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-workflowxnqxx/series-workflowxnqxx-convert-artifact-886320620/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,}