Name: series-workflowkmg4b Phase: Succeeded StartedAt: 2026-08-12 20:01:03 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[0] Phase: Succeeded StartedAt: 2026-08-12 20:01:03 +0000 UTC FinishedAt: 2026-08-12 20:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 20:01:03 +0000 UTC FinishedAt: 2026-08-12 20:50:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PTP_1588_CLOCK", "PTP_1588_CLOCK_MOCK" ], "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": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PTP_1588_CLOCK", "PTP_1588_CLOCK_MOCK" ], "series_id": "c19a13fd-1715-45c6-a4c4-1a5e362b1dfb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_set_ts_config", "nsim_get_ts_config", "nsim_get_ts_info", "mock_phc_get_ptp_info" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19NT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9zZXRfdHNfY29uZmlnJiMzNDssCiAgICAmIzM0O25zaW1fZ2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19pbmZvJiMzNDssCiAgICAmIzM0O21vY2tfcGhjX2dldF9wdHBfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxuXG5BbmFseXNpcyBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUga2VybmVsIHRoZW4gY29waWVzIG9ubHkgdGhlIGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgIGZpZWxkcyB0byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCAod2hpY2ggaGFzIG5vIHBhZGRpbmcpIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cbjQuIFRoZSBjaGFuZ2VzIGluIGBwdHBfbW9jay5jYCBhZGRyZXNzIGEgbG9ja2luZyBjb250ZXh0IGlzc3VlIChjaGFuZ2luZyBgc3Bpbl9sb2NrYCB0byBgc3Bpbl9sb2NrX2lycXNhdmVgKSwgd2hpY2ggaXMgYSBjb25jdXJyZW5jeSBidWcgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzY1MmFlNTYxNDdmNjY2MzVkZTE4M2ZhOWUyMTliMDdkMzI4ZjE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDY6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmNcbmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5AQCAtMjAwLDcgJiM0MzsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuJiM0MztcdGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcbiYjNDM7XG4gXHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IG1vY2tfcGhjX2luZGV4KG5zLVx1MDAzZXBoYyk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcbiYjNDM7XHRcdFx0XHQgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1x0aW5mby1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjdhMjY4YTFhNTQ1NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTMwLDYgJiM0MzszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWNvdW50ZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O25ldGRldnNpbS5oXCYjMzQ7XG4gXG5AQCAtMTIyLDEyICYjNDM7MTI0LDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LFxuIFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb190eCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb19yeCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjtcbiBcdHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0ID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpwZWVyX2RldjtcbiBcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucztcbiBcdHN0cnVjdCBuZXRkZXZfY29uZmlnICpjZmc7XG4mIzQzO1x0aW50IHJ4X2ZpbHRlciwgdHhfdHlwZTtcbiBcdHN0cnVjdCBuc2ltX3JxICpycTtcbiBcdGludCByeHE7XG4gXHRpbnQgZHI7XG5AQCAtMTY0LDYgJiM0MzsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4mIzQzO1x0cnhfZmlsdGVyID0gUkVBRF9PTkNFKHBlZXJfbnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIpO1xuJiM0MztcdHR4X3R5cGUgPSBSRUFEX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSlcbiYjNDM7XHRcdHB0cF9pbmZvX3J4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKHBlZXJfbnMtXHUwMDNlcGhjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjYgU0tCVFhfSFdfVFNUQU1QIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0eF90eXBlID09IEhXVFNUQU1QX1RYX09OKVxuJiM0MztcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnRcbiYjNDM7XHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHB0cF9pbmZvX3R4KSB7XG4mIzQzO1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4mIzQzO1x0XHQgKiBmb3IgYmV0dGVyIGFjY3VyYWN5XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuJiM0MztcdFx0aWYgKGxpa2VseShwdHBfaW5mb19yeCkpXG4mIzQzO1x0XHRcdHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXHUwMDI2cnhfdHMpO1xuJiM0MztcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbiYjNDM7XHRcdHNrYl90c3RhbXBfdHgoc2tiX29yaWcsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4mIzM5O3QgYmUgcmV0dXJuZWQgYnkgYSBzaW5nbGUgc2tiLlxuJiM0MztcdFx0ICogQ29weSB0aGUgc2tiIHRvIHJldHVybiBib3RoIHRpbWVzdGFtcHMuIElmIHRoZSBjb3B5IGZhaWxzLFxuJiM0MztcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4mIzQzO1x0XHQgKiBhYm92ZSB3aWxsIGJlIHJldHVybmVkIGFzIGJvdGggVHggYW5kIFJ4IHRpbWVzdGFtcC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHNrYilcbiYjNDM7XHRcdFx0Y29uc3VtZV9za2Ioc2tiX29yaWcpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRza2IgPSBza2Jfb3JpZztcbiYjNDM7XHR9IGVsc2UgaWYgKHB0cF9pbmZvX3J4KSB7XG4mIzQzO1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdHBfaW5mb19yeClcbiYjNDM7XHRcdHNrYl9od3RzdGFtcHMoc2tiKS1cdTAwM2Vod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpO1xuJiM0MztcbiBcdGlmICh1bmxpa2VseShuc2ltX2ZvcndhcmRfc2tiKGRldiwgcGVlcl9kZXYsXG4gXHRcdFx0XHQgICAgICBza2IsIHJxLCBwc3BfZXh0KSA9PSBORVRfUlhfRFJPUCkpXG4gXHRcdGdvdG8gb3V0X2Ryb3BfY250O1xuQEAgLTE4NSw2ICYjNDM7MjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5zaW1fc2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0aW50IHJ4X2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucy1cdTAwM2VwaGMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXR4X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiYjNDM7XHRcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PRkYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbiYjNDM7XHRcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUTpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUTpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbiYjNDM7XHRcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcucnhfZmlsdGVyLCByeF9maWx0ZXIpO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgJiM0Mzs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fdmxhbl9yeF9hZGRfdmlkXHQ9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCxcbiBcdC5uZXRfc2hhcGVyX29wc1x0XHQ9IFx1MDAyNm5zaW1fc2hhcGVyX29wcyxcbiYjNDM7XHQubmRvX2h3dHN0YW1wX2dldFx0PSBuc2ltX2dldF90c19jb25maWcsXG4mIzQzO1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiAmIzQzOzEwOCw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXY7XG4gXHRzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydDtcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xuIFx0c3RydWN0IG1vY2tfcGhjICpwaGM7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqKnJxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jXG5pbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuQEAgLTQ5LDE1ICYjNDM7NDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzNjQgYWRqO1xuIFxuIFx0YWRqID0gKHM2NClzY2FsZWRfcHBtIFx1MDAzY1x1MDAzYyBNT0NLX1BIQ19GQURKX1NISUZUO1xuIFx0YWRqID0gZGl2X3M2NChhZGosIE1PQ0tfUEhDX0ZBREpfREVOT01JTkFUT1IpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfcmVhZChcdTAwMjZwaGMtXHUwMDNldGMpO1xuIFx0cGhjLVx1MDAzZWNjLm11bHQgPSBNT0NLX1BIQ19DQ19NVUxUICYjNDM7IGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjUsMTAgJiM0Mzs2NiwxMSBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4gc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2FkanRpbWUoXHUwMDI2cGhjLVx1MDAzZXRjLCBkZWx0YSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc4LDEwICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfaW5pdChcdTAwMjZwaGMtXHUwMDNldGMsIFx1MDAyNnBoYy1cdTAwM2VjYywgbnMpO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSAmIzQzOzkyLDEyIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiBzdGF0aWMgaW50IG1vY2tfcGhjX2dldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgbnM7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHQqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTtcbiBcbkBAIC0xNzEsNSAmIzQzOzE3NSwxMSBAQCB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xuIFxuJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjZwaGMtXHUwMDNlaW5mbztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19nZXRfcHRwX2luZm8pO1xuJiM0MztcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEAgc3RydWN0IG1vY2tfcGhjO1xuIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTtcbiBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4gXG4gI2Vsc2VcbiBcbkBAIC0zMyw2ICYjNDM7MzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX1BUUF9NT0NLX0hfICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxuaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxuQEAgLTE5LDYgJiM0MzsxOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldHBvbGxfYmFzaWMucHkgXFxcbiBcdHBpbmcucHkgXFxcbiBcdHBzcC5weSBcXFxuJiM0MztcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgJiM0MzsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxuIENPTkZJR19QUFA9eVxuIENPTkZJR19QUFBPRT15XG4mIzQzO0NPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLPXlcbiBDT05GSUdfVkxBTl84MDIxUT1tXG4gQ09ORklHX1hEUF9TT0NLRVRTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MmE5NDNkY2JiMDY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcbkBAIC0wLDAgJiM0MzsxLDgyIEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBCeSBNYWNpZWsgTWFjaG5pa293c2tpIFx1MDAzY21hY2lla0BtYWNobmlrb3dza2kubmV0XHUwMDNlIChjKSAyMDI2LFxuJiM0MztcbiYjNDM7XCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1Rlc3Qgc3VpdGUgZm9yIFBUUCBzeW5jIHVzaW5nIHB0cDRsLlxuJiM0MztcbiYjNDM7U3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuJiM0MztsZWFkZXIgKHN0YXRlIHMyKVxuJiM0MztcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO2ltcG9ydCB0aW1lXG4mIzQzO1xuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKFxuJiM0MzsgICAgTmV0RHJ2RXBFbnYsXG4mIzQzOyAgICBia2csXG4mIzQzOyAgICBmZF9yZWFkX3RpbWVvdXQsXG4mIzQzOyAgICBrc2Z0X2V4aXQsXG4mIzQzOyAgICBrc2Z0X3ByLFxuJiM0MzsgICAga3NmdF9ydW4sXG4mIzQzOyAgICBrc2Z0X3RydWUsXG4mIzQzOylcbiYjNDM7XG4mIzQzO1BUUDRMX1NZTkNfVElNRU9VVCA9IDQwXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIHRpbWVvdXQpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmVhZCB0aGUgZm9sbG93ZXIgc3Rkb3V0IHBpcGUgdW50aWwgcHRwNGwgcmVwb3J0cyBzeW5jIHN0YXRlIHMyLlxuJiM0MztcbiYjNDM7ICAgIFJldHVybnMgYSB0dXBsZSAoc3luY2VkLCBvdXRwdXQpIHdoZXJlIG91dHB1dCBpcyB0aGUgdGV4dCByZWFkIHNvIGZhci5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4mIzQzOyAgICBmZCA9IGZkX2ZpbGUuZmlsZW5vKClcbiYjNDM7ICAgIGJ1ZiA9IGJcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSAmIzQzOyB0aW1lb3V0XG4mIzQzOyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIFx1MDAzYyBkZWFkbGluZTpcbiYjNDM7ICAgICAgICBpZiBiXCYjMzQ7IHMyIFwmIzM0OyBpbiBidWY6XG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKClcbiYjNDM7ICAgICAgICAgICAgaWYgY2h1bms6XG4mIzQzOyAgICAgICAgICAgICAgICBidWYgJiM0Mzs9IGNodW5rXG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICByZW1haW5pbmcgPSBkZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKClcbiYjNDM7ICAgICAgICAgICAgYnVmICYjNDM7PSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXJyb3I6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICByZXR1cm4gYlwmIzM0OyBzMiBcJiMzNDsgaW4gYnVmLCBidWYuZGVjb2RlKFwmIzM0O3V0Zi04XCYjMzQ7LCBcJiMzNDtyZXBsYWNlXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtWZXJpZnkgcHRwNGwgbGVhZGVyL2ZvbGxvd2VyIHN5bmNocm9uaXphdGlvbiByZWFjaGVzIHN0YXRlIHMyLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfY21kKFwmIzM0O3B0cDRsXCYjMzQ7LCByZW1vdGU9VHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICBsZWFkZXJfY21kID0gZlwmIzM0O3B0cDRsIC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW0gLTJcJiMzNDtcbiYjNDM7ICAgIGZvbGxvd2VyX2NtZCA9IGZcJiMzNDtwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTJcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIGJrZyhsZWFkZXJfY21kLCBob3N0PWNmZy5yZW1vdGUpLCBcXFxuJiM0MzsgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjpcbiYjNDM7ICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbiYjNDM7XG4mIzQzOyAgICBpZiBzeW5jZWQ6XG4mIzQzOyAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAga3NmdF9wcihmXCYjMzQ7cHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDt7UFRQNExfU1lOQ19USU1FT1VUfXNcJiMzNDspXG4mIzQzOyAgICB0YWlsID0gb3V0cHV0LnN0cmlwKCkuc3BsaXQoXCYjMzQ7XFxuXCYjMzQ7KVstMTA6XVxuJiM0MzsgICAga3NmdF9wcihcJiMzNDtGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcJiMzNDsgJiM0MzsgXCYjMzQ7IHwgXCYjMzQ7LmpvaW4odGFpbCkpXG4mIzQzOyAgICBrc2Z0X3RydWUoRmFsc2UsIFwmIzM0O1BUUCBzeW5jIHRpbWVvdXRcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIG1haW4oKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBrc2Z0IHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuJiM0MzsgICAgICAgIGtzZnRfcnVuKFtwdHBfc3luY190ZXN0XSwgYXJncz0oY2ZnLCApKVxuJiM0MzsgICAga3NmdF9leGl0KClcbiYjNDM7XG4mIzQzO1xuJiM0MztpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjNDM7ICAgIG1haW4oKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfTU9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fc2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfaW5mbyYjMzQ7LAogICAgJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jCmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYwpAQCAtMjAwLDcgJiM0MzsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwogCiYjNDM7CWV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTsKJiM0MzsKIAlpbmZvLSZndDtwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy0mZ3Q7cGhjKTsKJiM0MzsJaWYgKGluZm8tJmd0O3BoY19pbmRleCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfAomIzQzOwkJCQkgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8CiYjNDM7CQkJCSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7dHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7CiYjNDM7CWluZm8tJmd0O3J4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHwgQklUKEhXVFNUQU1QX0ZJTFRFUl9BTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKaW5kZXggNGU5ZDdlMTBiNTI3ZS4uN2EyNjhhMWE1NDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwpAQCAtMzAsNiAmIzQzOzMwLDggQEAKICNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcF90dW5uZWwuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvYnVzeV9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZWNvdW50ZXIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtuZXRkZXZzaW0uaCYjMzQ7CiAKQEAgLTEyMiwxMiAmIzQzOzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldiwKIAogc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHMgPSB7fTsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb190eCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMOwogCXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29yaWcgPSBza2I7CiAJc3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpwZWVyX2RldjsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IG5ldGRldnNpbSAqcGVlcl9uczsKIAlzdHJ1Y3QgbmV0ZGV2X2NvbmZpZyAqY2ZnOwomIzQzOwlpbnQgcnhfZmlsdGVyLCB0eF90eXBlOwogCXN0cnVjdCBuc2ltX3JxICpycTsKIAlpbnQgcnhxOwogCWludCBkcjsKQEAgLTE2NCw2ICYjNDM7MTcyLDQ2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJc2tiX2xpbmVhcml6ZShza2IpOwogCiAJc2tiX3R4X3RpbWVzdGFtcChza2IpOwomIzQzOwlyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy0mZ3Q7dHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIpOwomIzQzOwl0eF90eXBlID0gUkVBRF9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnR4X3R5cGUpOwomIzQzOwomIzQzOwlpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKQomIzQzOwkJcHRwX2luZm9fcnggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8ocGVlcl9ucy0mZ3Q7cGhjKTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9zaGluZm8oc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsgU0tCVFhfSFdfVFNUQU1QICZhbXA7JmFtcDsKJiM0MzsJICAgIHR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pCiYjNDM7CQlwdHBfaW5mb190eCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhucy0mZ3Q7cGhjKTsKJiM0MzsKJiM0MzsJLyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnQKJiM0MzsJICogdGhlIFRYIHRpbWVzdGFtcCBiYWNrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHB0cF9pbmZvX3R4KSB7CiYjNDM7CQkvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyCiYjNDM7CQkgKiBmb3IgYmV0dGVyIGFjY3VyYWN5CiYjNDM7CQkgKi8KJiM0MzsJCXB0cF9pbmZvX3R4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fdHgsICZhbXA7dHhfdHMpOwomIzQzOwkJaWYgKGxpa2VseShwdHBfaW5mb19yeCkpCiYjNDM7CQkJcHRwX2luZm9fcngtJmd0O2dldHRpbWU2NChwdHBfaW5mb19yeCwgJmFtcDtyeF90cyk7CiYjNDM7CQlzaGh3dHN0YW1wcy5od3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUodHhfdHMpOwomIzQzOwkJc2tiX3RzdGFtcF90eChza2Jfb3JpZywgJmFtcDtzaGh3dHN0YW1wcyk7CiYjNDM7CiYjNDM7CQkvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4mIzM5O3QgYmUgcmV0dXJuZWQgYnkgYSBzaW5nbGUgc2tiLgomIzQzOwkJICogQ29weSB0aGUgc2tiIHRvIHJldHVybiBib3RoIHRpbWVzdGFtcHMuIElmIHRoZSBjb3B5IGZhaWxzLAomIzQzOwkJICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkCiYjNDM7CQkgKiBhYm92ZSB3aWxsIGJlIHJldHVybmVkIGFzIGJvdGggVHggYW5kIFJ4IHRpbWVzdGFtcC4KJiM0MzsJCSAqLwomIzQzOwkJc2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKHNrYikKJiM0MzsJCQljb25zdW1lX3NrYihza2Jfb3JpZyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2tiID0gc2tiX29yaWc7CiYjNDM7CX0gZWxzZSBpZiAocHRwX2luZm9fcngpIHsKJiM0MzsJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwdHBfaW5mb19yeCkKJiM0MzsJCXNrYl9od3RzdGFtcHMoc2tiKS0mZ3Q7aHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHJ4X3RzKTsKJiM0MzsKIAlpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LAogCQkJCSAgICAgIHNrYiwgcnEsIHBzcF9leHQpID09IE5FVF9SWF9EUk9QKSkKIAkJZ290byBvdXRfZHJvcF9jbnQ7CkBAIC0xODUsNiAmIzQzOzIzMyw2MyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWludCByeF9maWx0ZXI7CiYjNDM7CiYjNDM7CWlmICghbnMtJmd0O3BoYykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CiYjNDM7CQlXUklURV9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTjoKJiM0MzsJCVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT04pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7cnhfZmlsdGVyKSB7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlciwgcnhfZmlsdGVyKTsKJiM0MzsJY29uZmlnLSZndDtyeF9maWx0ZXIgPSByeF9maWx0ZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CSpjb25maWcgPSBucy0mZ3Q7dHN0YW1wX2NvbmZpZzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuc2ltX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLAogCQkJICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYykKQEAgLTY0Nyw2ICYjNDM7NzUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7CiAJLm5kb192bGFuX3J4X2FkZF92aWQJPSBuc2ltX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBuc2ltX3ZsYW5fcnhfa2lsbF92aWQsCiAJLm5ldF9zaGFwZXJfb3BzCQk9ICZhbXA7bnNpbV9zaGFwZXJfb3BzLAomIzQzOwkubmRvX2h3dHN0YW1wX2dldAk9IG5zaW1fZ2V0X3RzX2NvbmZpZywKJiM0MzsJLm5kb19od3RzdGFtcF9zZXQJPSBuc2ltX3NldF90c19jb25maWcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fdmZfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAppbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCkBAIC0xMDgsNiAmIzQzOzEwOCw3IEBAIHN0cnVjdCBuZXRkZXZzaW0gewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjsKIAlzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydDsKJiM0MzsJc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZzsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYzsKIAlzdHJ1Y3QgbnNpbV9ycSAqKnJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suYwppbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMKQEAgLTQ5LDE1ICYjNDM7NDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKQogc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJczY0IGFkajsKIAogCWFkaiA9IChzNjQpc2NhbGVkX3BwbSAmbHQ7Jmx0OyBNT0NLX1BIQ19GQURKX1NISUZUOwogCWFkaiA9IGRpdl9zNjQoYWRqLCBNT0NLX1BIQ19GQURKX0RFTk9NSU5BVE9SKTsKIAotCXNwaW5fbG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAJdGltZWNvdW50ZXJfcmVhZCgmYW1wO3BoYy0mZ3Q7dGMpOwogCXBoYy0mZ3Q7Y2MubXVsdCA9IE1PQ0tfUEhDX0NDX01VTFQgJiM0MzsgYWRqOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NSwxMCAmIzQzOzY2LDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9hZGp0aW1lKCZhbXA7cGhjLSZndDt0YywgZGVsdGEpOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03OCwxMCAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwogCXU2NCBucyA9IHRpbWVzcGVjNjRfdG9fbnModHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9pbml0KCZhbXA7cGhjLSZndDt0YywgJmFtcDtwaGMtJmd0O2NjLCBucyk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5LDExICYjNDM7OTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogc3RhdGljIGludCBtb2NrX3BoY19nZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IG1vY2tfcGhjICpwaGMgPSBpbmZvX3RvX3BoYyhpbmZvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgbnM7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCW5zID0gdGltZWNvdW50ZXJfcmVhZCgmYW1wO3BoYy0mZ3Q7dGMpOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJKnRzID0gbnNfdG9fdGltZXNwZWM2NChucyk7CiAKQEAgLTE3MSw1ICYjNDM7MTc1LDExIEBAIHZvaWQgbW9ja19waGNfZGVzdHJveShzdHJ1Y3QgbW9ja19waGMgKnBoYykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpOwogCiYjNDM7c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDtwaGMtJmd0O2luZm87CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb2NrLXVwIFBUUCBIYXJkd2FyZSBDbG9jayBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaAppbmRleCA3MmViNDAxMDM0ZDkzLi5lMzMxODhkZWMyYjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7CiBzdHJ1Y3QgbW9ja19waGMgKm1vY2tfcGhjX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTsKIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7CiYjNDM7c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpOwogCiAjZWxzZQogCkBAIC0zMyw2ICYjNDM7MzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpCiAJcmV0dXJuIC0xOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX1BUUF9NT0NLX0hfICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGQ1YmY0Y2I2MzhhOGMuLjE4YmI3YzY5M2I2OWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xOSw2ICYjNDM7MTksNyBAQCBURVNUX1BST0dTIDo9IFwKIAluZXRwb2xsX2Jhc2ljLnB5IFwKIAlwaW5nLnB5IFwKIAlwc3AucHkgXAomIzQzOwlwdHAucHkgXAogCXF1ZXVlcy5weSBcCiAJcmluZ19yZWNvbmZpZy5weSBcCiAJc2hhcGVyLnB5IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi43YmUzMGE3MmUxMTk3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLPXkKIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19YRFBfU09DS0VUUz15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weQpAQCAtMCwwICYjNDM7MSw4MiBAQAomIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBCeSBNYWNpZWsgTWFjaG5pa293c2tpICZsdDttYWNpZWtAbWFjaG5pa293c2tpLm5ldCZndDsgKGMpIDIwMjYsCiYjNDM7CiYjNDM7JiMzNDsmIzM0OyYjMzQ7CiYjNDM7VGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuCiYjNDM7CiYjNDM7U3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZQomIzQzO2xlYWRlciAoc3RhdGUgczIpCiYjNDM7JiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7aW1wb3J0IHRpbWUKJiM0MzsKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKAomIzQzOyAgICBOZXREcnZFcEVudiwKJiM0MzsgICAgYmtnLAomIzQzOyAgICBmZF9yZWFkX3RpbWVvdXQsCiYjNDM7ICAgIGtzZnRfZXhpdCwKJiM0MzsgICAga3NmdF9wciwKJiM0MzsgICAga3NmdF9ydW4sCiYjNDM7ICAgIGtzZnRfdHJ1ZSwKJiM0MzspCiYjNDM7CiYjNDM7UFRQNExfU1lOQ19USU1FT1VUID0gNDAKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi4KJiM0MzsKJiM0MzsgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0CiYjNDM7ICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKQomIzQzOyAgICBidWYgPSBiJiMzNDsmIzM0OwomIzQzOyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgJiM0MzsgdGltZW91dAomIzQzOyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpICZsdDsgZGVhZGxpbmU6CiYjNDM7ICAgICAgICBpZiBiJiMzNDsgczIgJiMzNDsgaW4gYnVmOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICBpZiBmb2xsb3dlci5wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBjaHVuayA9IGZkX2ZpbGUucmVhZCgpCiYjNDM7ICAgICAgICAgICAgaWYgY2h1bms6CiYjNDM7ICAgICAgICAgICAgICAgIGJ1ZiAmIzQzOz0gY2h1bmsKJiM0MzsgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKQomIzQzOyAgICAgICAgICAgIGJ1ZiAmIzQzOz0gZmRfcmVhZF90aW1lb3V0KGZkLCBtaW4oMSwgcmVtYWluaW5nKSkKJiM0MzsgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXJyb3I6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgcmV0dXJuIGImIzM0OyBzMiAmIzM0OyBpbiBidWYsIGJ1Zi5kZWNvZGUoJiMzNDt1dGYtOCYjMzQ7LCAmIzM0O3JlcGxhY2UmIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgcHRwX3N5bmNfdGVzdChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtWZXJpZnkgcHRwNGwgbGVhZGVyL2ZvbGxvd2VyIHN5bmNocm9uaXphdGlvbiByZWFjaGVzIHN0YXRlIHMyLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoJiMzNDtwdHA0bCYjMzQ7LCByZW1vdGU9VHJ1ZSkKJiM0MzsKJiM0MzsgICAgbGVhZGVyX2NtZCA9IGYmIzM0O3B0cDRsIC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW0gLTImIzM0OwomIzQzOyAgICBmb2xsb3dlcl9jbWQgPSBmJiMzNDtwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTImIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIGJrZyhsZWFkZXJfY21kLCBob3N0PWNmZy5yZW1vdGUpLCBcCiYjNDM7ICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6CiYjNDM7ICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVCkKJiM0MzsKJiM0MzsgICAgaWYgc3luY2VkOgomIzQzOyAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgIGtzZnRfcHIoZiYjMzQ7cHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gJiMzNDsKJiM0MzsgICAgICAgICAgICBmJiMzNDt7UFRQNExfU1lOQ19USU1FT1VUfXMmIzM0OykKJiM0MzsgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KCYjMzQ7XG4mIzM0OylbLTEwOl0KJiM0MzsgICAga3NmdF9wcigmIzM0O0ZvbGxvd2VyIGxvZyAobGFzdCAxMCBsaW5lcyk6ICYjMzQ7ICYjNDM7ICYjMzQ7IHwgJiMzNDsuam9pbih0YWlsKSkKJiM0MzsgICAga3NmdF90cnVlKEZhbHNlLCAmIzM0O1BUUCBzeW5jIHRpbWVvdXQmIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgbWFpbigpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4ga3NmdCB0ZXN0cy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOgomIzQzOyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpCiYjNDM7ICAgIGtzZnRfZXhpdCgpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBtYWluKCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYXJkd2FyZSBUaW1lc3RhbXBpbmcgUGF0Y2ggZm9yIGBuZXRkZXZzaW1gKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIGhhcmR3YXJlIHRpbWVzdGFtcGluZyB0byB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBhIGZldyBmaWxlczogdGhlIGNvcmUgYG5ldGRldnNpbWAgZmlsZXMgKGBldGh0b29sLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgKSwgYHB0cF9tb2NrLmNgIGFuZCBgcHRwX21vY2suaGAsIGFuZCBpdCBhbHNvIGluY2x1ZGVzIGEgc2VsZnRlc3QuIEJhc2ljYWxseSwgaXQmIzM5O3MgdXNpbmcgdGhlIGBtb2NrX3BoY2Ag4oCTIHRoZSBQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jayDigJMgdG8gcHJvdmlkZSB0aGVzZSB0aW1lc3RhbXBzIGZvciB0aGUgc2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlLgoKVGhlIG1haW4gd29yayBzZWVtcyB0byBiZSBpbiBpbXBsZW1lbnRpbmcgdGhlIGBuZG9faHd0c3RhbXBfZ2V0YCBhbmQgYG5kb19od3RzdGFtcF9zZXRgIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgd2l0aGluIGBuZXRkZXZzaW1gLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYG5zaW1fc3RhcnRfeG1pdGAgdG8gZ3JhYiBUWCBhbmQgUlggdGltZXN0YW1wcy4gQWgsIGFuZCB0aGV5IGhhZCB0byBtb2RpZnkgdGhlIGBtb2NrX3BoY2AgZnVuY3Rpb25zIHRvIHVzZSBgc3Bpbl9sb2NrX2lycXNhdmVgIGluc3RlYWQgb2YgYHNwaW5fbG9ja2AgYmVjYXVzZSBgbnNpbV9zdGFydF94bWl0YCBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgc2VjdGlvbiBpc3N1ZS4gR29vZCBjYXRjaCB0aGVyZS4KCkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYG5ldGRldnNpbWAgaXMsIGFmdGVyIGFsbCwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2Ugc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBBbmQgeWVzLCBpdOKAmXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBBbnkgdGltZSB3ZSBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkg4oCTIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgaGFyZHdhcmUgdGltZXN0YW1waW5nIHRoYXQgdG91Y2hlcyBkaWZmZXJlbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSB0aGluZ3MgbGlrZSBgZXRodG9vbGAgYW5kIGBza2JgIHRyYW5zbWlzc2lvbiDigJMgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldC4gRnV6emluZyBjYW4gZXhwb3NlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgYmVoYXZpb3Igb2YgdGhpcyBuZXcgZmVhdHVyZSB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIG9idmlvdXMgb25lIGlzIGBDT05GSUdfTkVUREVWU0lNYCwgYW5kIHRoZW4gYENPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLYCBpcyBhbHNvIHJlcXVpcmVkLCBhbmQgYXBwZWFycyB0byBiZSBhZGRlZCB0byB0aGUgc2VsZnRlc3QgY29uZmlnLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIEtjb25maWcgc2V0dXAgZm9yIGJvdGggYE5FVERFVlNJTWAgYW5kIGBQVFBfMTU4OF9DTE9DS19NT0NLYCB0byBlbnN1cmUgdGhlIHBhdGNoIGlzIGJ1aWx0IGNvcnJlY3RseS4gT2theSwgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBzdGF0dXMgb2YgdGhlIG1vZHVsZSwgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgaXQgaGF2ZSBhdCBpdHMgZGlzcG9zYWw/IFNwZWNpZmljYWxseSwgaXMgaXQgdXAgYW5kIHJ1bm5pbmcgYXMgYSBjbG9jaywgb3IgaXMgaXQgYmVoYXZpbmcgYXMgaXQgc2hvdWxkIGFzIGEgbW9jay4gV2hhdCBpbnRlcmZhY2VzIGRvZXMgaXQgZXhwb3NlLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBXaGF0IGtpbmQgb2YgdGVzdHMgaGF2ZSBiZWVuIHJ1biBhZ2FpbnN0IHRoaXMgY29tcG9uZW50LCBhbmQgZG8gdGhvc2UgcmVzdWx0cyBzdWdnZXN0IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgdGhhdCB3YXJyYW50IGltbWVkaWF0ZSBzY3J1dGlueT8gRG9lcyB0aGUgbW9ja2luZyBiZWhhdmlvciBhbGlnbiB3aXRoIHRoZSBkZWZpbmVkIHJlcXVpcmVtZW50cyBhbmQgZXhwZWN0ZWQgb3V0Y29tZXMgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbz8gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgYXMgYSBtb2NrIHdpbGwgYWZmZWN0IGRlcGVuZGVuY2llcyBhcyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9MTc1PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xODYtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xODgtXHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYFBUUF8xNTg4X0NMT0NLX01PQ0tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgYmVhc3QgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyZSB0byBlaXRoZXIgd29yayB3aXRoIG9yIHJlcGxhY2UgdGhpcy4gVGhlICYjMzQ7bW9jayYjMzQ7IHBhcnQgaW1wbGllcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHNpbXVsYXRpbmcgYSBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBjbG9jaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgYSByZWFsIFBUUCBpbXBsZW1lbnRhdGlvbiBpdCBpcyBzdGFuZGluZyBpbiBmb3IuIFRoaXMgbWVhbnMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzLCBpbiB0aGUgc291cmNlIGNvZGUgb3IgbWFrZSBmaWxlcywgd2hhdGV2ZXImIzM5O3MgcmVsZXZhbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwgZm9yIGNvbXByZWhlbmRpbmcgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCB0byBkZXRlcm1pbmUgd2hlcmUgaXQgZml0cywgYW5kIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LiBTbywgbGV0IG1lIHN0YXJ0IHBva2luZyBhcm91bmQgYW5kIHVucmF2ZWwgdGhpcyBkZXBlbmRlbmN5IHdlYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHVzaW5nIFJlbmVzYXMgRmVtdG9DbG9jazMgV2lyZWxlc3NcbiAxODE6XHRcdCAgYXMgYSBQVFAgY2xvY2suIFRoaXMgY2xvY2sgaXMgb25seSB1c2VmdWwgaWYgeW91ciB0aW1lIHN0YW1waW5nXG4gMTgyOlx0XHQgIE1BQyBpcyBjb25uZWN0ZWQgdG8gdGhlIFJFTkVTQVMgY2hpcC5cbiAxODM6XHRcbiAxODQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE4NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfZmMzLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLXG4gMTg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuIDE4OTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuIDE5MDpcdFx0aGVscFxuIDE5MTpcdFx0ICBUaGlzIGRyaXZlciBvZmZlcnMgYSBzZXQgb2YgUFRQIGNsb2NrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zIG92ZXJcbiAxOTI6XHRcdCAgdGhlIHN5c3RlbSBtb25vdG9uaWMgdGltZS4gSXQgY2FuIGJlIHVzZWQgYnkgdmlydHVhbCBuZXR3b3JrIGRldmljZVxuIDE5MzpcdFx0ICBkcml2ZXJzIHRvIGVtdWxhdGUgUFRQIGNhcGFiaWxpdGllcy5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE5NjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfbW9jay5cbiAxOTc6XHRcbiAxOTg6XHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXG4gMTk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgdmlydHVhbCBQVFAgY2xvY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgUFRQXzE1ODhfQ0xPQ0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IHJlYWxseSBoaW5nZXMgb24gdGhhdCBgUFRQXzE1ODhfQ0xPQ0tgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gYW55IHBhcnRpY3VsYXIgcGF0aCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIHJlbGllcyBvbiB0aGlzLCBzbyBJIGNhbiBwbGFuIGFwcHJvcHJpYXRlbHkuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTkVUREVWU0lNYCBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgc2ltdWxhdG9yIGlzIGltcGFjdGVkLCBvciBpZiBpdCBpbXBhY3RzIGBQVFBfMTU4OF9DTE9DS2AsIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ24gZGVjaXNpb25zLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkb21pbm8gZWZmZWN0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgem9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcbiA2MDE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1wmIzM0O1xuIDYwMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuIDYwMzpcdFxuIDYwNDpcdGNvbmZpZyBORVRERVZTSU1cbiA2MDU6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuIDYwNjpcdFx0ZGVwZW5kcyBvbiBERUJVR19GU1xuIDYwNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNjA4Olx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4gNjEwOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiA2MTE6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiA2MTI6XHRcdHNlbGVjdCBORVRfU0hBUEVSXG4gNjEzOlx0XHRoZWxwXG4gNjE0Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cbiA2MTU6XHRcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxuIDYxNjpcdFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXG4gNjE3Olx0XG4gNjE4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA2MTk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjA2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgbmV0ZGV2c2ltIGFuZCBQVFAgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0ZXN0IHRoaXMgYE5FVERFVlNJTWAgc3R1ZmYsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGNhcGFiaWxpdGllcy4gIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGEgbGl0dGxlIGxlc3MgY2xlYXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBgTkVUREVWU0lNYCAqY29uZGl0aW9uYWxseSogZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AsIG9yIGF0IGxlYXN0IHRoZSBgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uYCBjYXNlLiBUbyBiZSBjbGVhciwgdG8gdGVzdCB0aGUgbmV3IGZlYXR1cmUgcHJvcGVybHksIHdoaWNoIGluY2x1ZGVzIHRpbWUgc3luY2hyb25pemF0aW9uLCBJICpkbyogbmVlZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBQVFBfMTU4OF9DTE9DS2AgaXRzZWxmIGlzIGFsc28gcmVxdWlyZWQuIFNvLCB0aGUgY29tcGxldGUgc2V0IG9mIGVuYWJsZWQgY29uZmlndXJhdGlvbnMgZm9yIGEgcm9idXN0IHRlc3QgbmVlZHMgdG8gYmUgYE5FVERFVlNJTWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHRpbWUgc3luY2hyb25pemF0aW9uIGNvZGUgbGl2ZXMuICBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzOgoqICAgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AgaGFzIGBuc2ltX3NldF90c19jb25maWdgLCBgbnNpbV9nZXRfdHNfY29uZmlnYCwgYW5kIGBuc2ltX3N0YXJ0X3htaXRgLiBIb3dldmVyLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgYG5zaW1fc3RhcnRfeG1pdGAgYXMgYSBwb3RlbnRpYWwgaG90LXBhdGg7IGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGF2b2lkIHRoYXQgb25lIGZvciBub3cgdG8gYXZvaWQgY29tcGxleGl0eS4KKiAgIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jYCBhbHNvIGNvbnRhaW5zIGBuc2ltX2dldF90c19pbmZvYC4KClNvLCB0aGUgY2xlYXIgcHJpb3JpdGllcyBhcmUgZ29pbmcgdG8gYmUgZnV6emluZyBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBpdGVyYXRlIGFzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnNpbV9zZXRfdHNfY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjU9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MjM2OnN0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMjM3LVx0XHRcdCAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTczMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzU1LVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjc1NjpcdC5uZG9faHd0c3RhbXBfc2V0XHQ9IG5zaW1fc2V0X3RzX2NvbmZpZyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NTctfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBBUEkgQ2hvaWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSSBpbml0aWFsbHkgdGhvdWdodCwgJiMzNDtTdGF0aWM/IEhtbSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YW50cyBtZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLiYjMzQ7IEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgaG9sZCBvbiBhIHNlY29uZCEgYG5zaW1fc2V0X3RzX2NvbmZpZ2AgaXMgKmFjdHVhbGx5KiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBuZG9faHd0c3RhbXBfc2V0YC4gVGhhdCBtZWFucyBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkLCBhbmQgdGhlIGNvbXBpbGVyICp3b24mIzM5O3QqIGlubGluZSBpdCwgcmlnaHQ/IFNvLCB0aGUgd2hvbGUgcG9pbnQgb2YgYXZvaWRpbmcgc3RhdGljIGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGFkZHJlc3MgdmlzaWJpbGl0eSBpcyBhbHJlYWR5IGNvdmVyZWQuIFRoZSBwcm9tcHQgYWxzbyBzYXlzICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywmIzM0OyBhbmQgdGhhdCBtZWFucyBpdHMgYW4gZW50cnlwb2ludC4uLml0JiMzOTtzIGdvb2QhCgpJIHN0YXJ0ZWQgdG8gd29uZGVyIGlmIHRoZXJlIHdhcyBhbm90aGVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuCgpgbnNpbV9zZXRfdHNfY29uZmlnYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYmAgb3IgYGRldl9zZXRfaHd0c3RhbXBgLCB3aGljaCBhcmUgZ2VuZXJpYywgYnV0IGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQuIAoKU28sIEkgdGhpbmsgSSYjMzk7bGwgZ28gd2l0aCBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIFRoZXkgc2VlbSBsaWtlIHRoZSBtb3N0IGRpcmVjdCBmaXQgYW5kIHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZSBnaXZlbiB0aGUgY29udGV4dC4KCldhaXQuLi4gaXMgYG5zaW1fZ2V0X3RzX2luZm9gIHN0YXRpYyB0b28/IEkgbmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX2dldF90c19pbmZvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MTc2PW5zaW1fZ2V0X2ZlY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9mZWNfc3RhdHMgKmZlY19zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTE5Ny1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MTk4OnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0xOTktXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MjE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbnNpbV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIzNS1cdC5nZXRfZmVjX3N0YXRzXHRcdFx0PSBuc2ltX2dldF9mZWNfc3RhdHMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jOjIzNjpcdC5nZXRfdHNfaW5mb1x0XHRcdD0gbnNpbV9nZXRfdHNfaW5mbyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBBc3NpZ25tZW50cyoqCgpSaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBvcGVyYXRpb25zIHN0cnVjdHVyZXMsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBkZXNpZ24gc3RhbmRwb2ludCwga2VlcGluZyB0aGUgc2NvcGUgbGltaXRlZC4gQnV0LCB0aGVuIEkgc2F3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gLiBUaGlzIG9uZSBpcyBub24tc3RhdGljIGFuZCAqZXhwb3J0ZWQqLiBUaGF0JiMzOTtzIHRoZSBrZXkgZGlmZmVyZW5jZSBJIG5lZWQgdG8gY29uc2lkZXIuIEkgd29uZGVyIHdoYXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhhdCBkZXNpZ24gZGVjaXNpb24gd2FzLiBDbGVhcmx5IHRoZXJlIGlzIGFuIGludGVuZGVkIHB1cnBvc2UgdG8gb3BlbiB0aGF0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEyNT1zdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE3OC1cdGlmIChyeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTc5Olx0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTgwLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xODItXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxODM6XHRcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVx1MDAzZXBoYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTg0LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9MTc2PUVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xNzctXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE3ODpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTc5LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4MS19XG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE4MjpFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19nZXRfcHRwX2luZm8pO1xuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xODMtXG4tLVxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oPTE4PWludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmg6MTk6c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTIwLVxuLS1cbmluY2x1ZGUvbGludXgvcHRwX21vY2suaD0zMj1zdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYylcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgtMzYtXG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmg6Mzc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaC0zOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAzCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHB0cF9tb2NrLmNgIENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyB3ZSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtb2NrX3BoY19hZGpmaW5lYCwgYG1vY2tfcGhjX2FkanRpbWVgLCBgbW9ja19waGNfc2V0dGltZTY0YCwgYW5kIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGVzZSBhcmUgbm93IHVzaW5nIGBzcGluX2xvY2tfaXJxc2F2ZWAgaW5zdGVhZCBvZiBgc3Bpbl9sb2NrYC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGBwdHBfY2xvY2tfaW5mb2Agb3BzIGlzIGltcG9ydGFudCB0byBub3RlLiBUaGlzIGltcGxpZXMgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgY29yZSBtb2NrIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5LgoKTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8gYmUgc3VyZTogYG5zaW1fc2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19jb25maWdgLCBgbnNpbV9nZXRfdHNfaW5mb2AsIGFuZCBgbW9ja19waGNfZ2V0X3B0cF9pbmZvYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE5vdywgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgdGhvc2UgZm91ciBmdW5jdGlvbnMgaW4gbXkgY292ZXJhZ2Ugc3RyYXRlZ3kuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgaGVyZS4gSSBrbm93IGBORVRERVZTSU1gIGRlcGVuZHMgb24gYElORVRgIGFuZCBgREVCVUdfRlNgLiBBbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgIGRlcGVuZHMgb24gYFBUUF8xNTg4X0NMT0NLYC4gU28sIG15IGVuYWJsZSBjb25maWcgbGlzdCBzaG91bGQgZGVmaW5pdGVseSBjb250YWluIGBORVRERVZTSU1gLCBgUFRQXzE1ODhfQ0xPQ0tgLCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgYG1vY2tfcGhjX2dldF9wdHBfaW5mb2AgdGhlICpvbmx5KiBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZD8gWWVzLCB0aGF0JiMzOTtzIGNvcnJlY3QuIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIGEgbmV3IGFkZGl0aW9uLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIGBuZXRkZXZzaW1gLCBvdXIgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIFRoZSBrZXkgb3BlcmF0aW9ucyBiZWluZyBpbXBsZW1lbnRlZCBhcmUgYG5kb19od3RzdGFtcF9nZXRgIGFuZCBgbmRvX2h3dHN0YW1wX3NldGAuIFRoZSB0cmFuc21pdCBwYXRoIChgbnNpbV9zdGFydF94bWl0YCkgaXMgYWxzbyB1cGRhdGVkIHRvIGNhcHR1cmUgaGFyZHdhcmUgdGltZXN0YW1wcy4gSXQmIzM5O3MgdXNpbmcgdGhlIGBtb2NrX3BoY2AgZm9yIHRoaXMsIGFuZCB0aGUgdXNlIG9mIGBzcGluX2xvY2tfaXJxc2F2ZWAgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGVzZSB0aW1lc3RhbXBzIGNhbiBiZSBjYXB0dXJlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIFRoaXMgYWxsIG1lYW5zIHdlIGhhdmUgbmV3IGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gYG5ldGRldnNpbWAgYW5kIGBwdHBfbW9ja2AgdGhhdCBhcmUgdHJpZ2dlcmVkIHZpYSBgZXRodG9vbGAgYW5kIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgaW50ZXJydXB0IGNvbnRleHQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfTU9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fc2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfaW5mbyYjMzQ7LAogICAgJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX01PQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX3NldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfY29uZmlnJiMzNDssCiAgICAmIzM0O25zaW1fZ2V0X3RzX2luZm8mIzM0OywKICAgICYjMzQ7bW9ja19waGNfZ2V0X3B0cF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXG5cbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYC4gVGhlIGBuZXRkZXZzaW1gIHByaXZhdGUgc3RydWN0dXJlIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBgYWxsb2NfbmV0ZGV2X21xYCwgc28gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cbjMuIEluIGBuc2ltX3N0YXJ0X3htaXRgLCBsb2NhbCB2YXJpYWJsZXMgYHR4X3RzYCBhbmQgYHJ4X3RzYCBhcmUgb25seSB1c2VkIGlmIHRoZWlyIHJlc3BlY3RpdmUgYHB0cF9pbmZvX3R4YCBhbmQgYHB0cF9pbmZvX3J4YCBwb2ludGVycyBhcmUgbm9uLU5VTEwuIFdoZW4gbm9uLU5VTEwsIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGUgYHNoaHd0c3RhbXBzYCBzdHJ1Y3QgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7fWApLlxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXG5cblNpbmNlIGFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjc2NTJhZTU2MTQ3ZjY2NjM1ZGUxODNmYTllMjE5YjA3ZDMyOGYxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMKaW5kZXggMDI1ZWE3OTg3OWYzYS4uNjI4ODc4YWNkMTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jCkBAIC0yMDAsNyAmIzQzOzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7CiAKJiM0MzsJZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pOwomIzQzOwogCWluZm8tJmd0O3BoY19pbmRleCA9IG1vY2tfcGhjX2luZGV4KG5zLSZndDtwaGMpOwomIzQzOwlpZiAoaW5mby0mZ3Q7cGhjX2luZGV4ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpbmZvLSZndDtzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8CiYjNDM7CQkJCSBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHwKJiM0MzsJCQkJIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOwomIzQzOwomIzQzOwlpbmZvLSZndDt0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTsKJiM0MzsJaW5mby0mZ3Q7cnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0zMCw2ICYjNDM7MzAsOCBAQAogI2luY2x1ZGUgJmx0O25ldC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdWRwX3R1bm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9idXN5X3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lY291bnRlci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O25ldGRldnNpbS5oJiMzNDsKIApAQCAtMTIyLDEyICYjNDM7MTI0LDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LAogCiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb19yeCA9IE5VTEw7CiAJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjsKIAlzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2OwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItJmd0O2xlbjsKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zOwogCXN0cnVjdCBuZXRkZXZfY29uZmlnICpjZmc7CiYjNDM7CWludCByeF9maWx0ZXIsIHR4X3R5cGU7CiAJc3RydWN0IG5zaW1fcnEgKnJxOwogCWludCByeHE7CiAJaW50IGRyOwpAQCAtMTY0LDYgJiM0MzsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlza2JfbGluZWFyaXplKHNrYik7CiAKIAlza2JfdHhfdGltZXN0YW1wKHNrYik7CiYjNDM7CXJ4X2ZpbHRlciA9IFJFQURfT05DRShwZWVyX25zLSZndDt0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7CiYjNDM7CXR4X3R5cGUgPSBSRUFEX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChyeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUpCiYjNDM7CQlwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLSZndDtwaGMpOwomIzQzOwomIzQzOwlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyAmYW1wOyBTS0JUWF9IV19UU1RBTVAgJmFtcDsmYW1wOwomIzQzOwkgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTikKJiM0MzsJCXB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLSZndDtwaGMpOwomIzQzOwomIzQzOwkvKiBJZiBUWCBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgaXMgZW5hYmxlZCwgc2FtcGxlIG91ciBQSEMgYW5kIHJlcG9ydAomIzQzOwkgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAocHRwX2luZm9fdHgpIHsKJiM0MzsJCS8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXIKJiM0MzsJCSAqIGZvciBiZXR0ZXIgYWNjdXJhY3kKJiM0MzsJCSAqLwomIzQzOwkJcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NChwdHBfaW5mb190eCwgJmFtcDt0eF90cyk7CiYjNDM7CQlpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSkKJiM0MzsJCQlwdHBfaW5mb19yeC0mZ3Q7Z2V0dGltZTY0KHB0cF9pbmZvX3J4LCAmYW1wO3J4X3RzKTsKJiM0MzsJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7CiYjNDM7CQlza2JfdHN0YW1wX3R4KHNrYl9vcmlnLCAmYW1wO3NoaHd0c3RhbXBzKTsKJiM0MzsKJiM0MzsJCS8qIFR4IGFuZCBSeCB0aW1lc3RhbXBzIGNhbiYjMzk7dCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuCiYjNDM7CQkgKiBDb3B5IHRoZSBza2IgdG8gcmV0dXJuIGJvdGggdGltZXN0YW1wcy4gSWYgdGhlIGNvcHkgZmFpbHMsCiYjNDM7CQkgKiB0aGUgb3JpZ2luYWwgc2tiIGlzIHVzZWQgYW5kIHRoZSBSeCB0aW1lc3RhbXAgY2FwdHVyZWQKJiM0MzsJCSAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY29weShza2Jfb3JpZywgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoc2tiKQomIzQzOwkJCWNvbnN1bWVfc2tiKHNrYl9vcmlnKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2IgPSBza2Jfb3JpZzsKJiM0MzsJfSBlbHNlIGlmIChwdHBfaW5mb19yeCkgewomIzQzOwkJcHRwX2luZm9fcngtJmd0O2dldHRpbWU2NChwdHBfaW5mb19yeCwgJmFtcDtyeF90cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHB0cF9pbmZvX3J4KQomIzQzOwkJc2tiX2h3dHN0YW1wcyhza2IpLSZndDtod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpOwomIzQzOwogCWlmICh1bmxpa2VseShuc2ltX2ZvcndhcmRfc2tiKGRldiwgcGVlcl9kZXYsCiAJCQkJICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKQogCQlnb3RvIG91dF9kcm9wX2NudDsKQEAgLTE4NSw2ICYjNDM7MjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiYjNDM7c3RhdGljIGludCBuc2ltX3NldF90c19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJaWYgKCFucy0mZ3Q7cGhjKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09GRjoKJiM0MzsJCVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT0ZGKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09OOgomIzQzOwkJV1JJVEVfT05DRShucy0mZ3Q7dHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PTik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05UUF9BTEw6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDoKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcucnhfZmlsdGVyLCByeF9maWx0ZXIpOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJKmNvbmZpZyA9IG5zLSZndDt0c3RhbXBfY29uZmlnOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKQpAQCAtNjQ3LDYgJiM0Mzs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHsKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCwKIAkubmV0X3NoYXBlcl9vcHMJCT0gJmFtcDtuc2ltX3NoYXBlcl9vcHMsCiYjNDM7CS5uZG9faHd0c3RhbXBfZ2V0CT0gbnNpbV9nZXRfdHNfY29uZmlnLAomIzQzOwkubmRvX2h3dHN0YW1wX3NldAk9IG5zaW1fc2V0X3RzX2NvbmZpZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjVjZGQxZTI5NDQ0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTEwOCw2ICYjNDM7MTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2OwogCXN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0OwomIzQzOwlzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnOwogCXN0cnVjdCBtb2NrX3BoYyAqcGhjOwogCXN0cnVjdCBuc2ltX3JxICoqcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jCmluZGV4IDRkNjZiNjE0NzEyMTAuLjdhNGU1ZjMyNzRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX21vY2suYwpAQCAtNDksMTUgJiM0Mzs0OSwxNiBAQCBzdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpCiBzdGF0aWMgaW50IG1vY2tfcGhjX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiB7CiAJc3RydWN0IG1vY2tfcGhjICpwaGMgPSBpbmZvX3RvX3BoYyhpbmZvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzNjQgYWRqOwogCiAJYWRqID0gKHM2NClzY2FsZWRfcHBtICZsdDsmbHQ7IE1PQ0tfUEhDX0ZBREpfU0hJRlQ7CiAJYWRqID0gZGl2X3M2NChhZGosIE1PQ0tfUEhDX0ZBREpfREVOT01JTkFUT1IpOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9yZWFkKCZhbXA7cGhjLSZndDt0Yyk7CiAJcGhjLSZndDtjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCAmIzQzOyBhZGo7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1LDEwICYjNDM7NjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQogc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXRpbWVjb3VudGVyX2FkanRpbWUoJmFtcDtwaGMtJmd0O3RjLCBkZWx0YSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc4LDEwICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiAJdTY0IG5zID0gdGltZXNwZWM2NF90b19ucyh0cyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXRpbWVjb3VudGVyX2luaXQoJmFtcDtwaGMtJmd0O3RjLCAmYW1wO3BoYy0mZ3Q7Y2MsIG5zKTsKLQlzcGluX3VubG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtODksMTEgJiM0Mzs5MiwxMiBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiBzdGF0aWMgaW50IG1vY2tfcGhjX2dldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBuczsKIAotCXNwaW5fbG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAJbnMgPSB0aW1lY291bnRlcl9yZWFkKCZhbXA7cGhjLSZndDt0Yyk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAkqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTsKIApAQCAtMTcxLDUgJiM0MzsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZGVzdHJveSk7CiAKJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYykKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wO3BoYy0mZ3Q7aW5mbzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vY2stdXAgUFRQIEhhcmR3YXJlIENsb2NrIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oCmluZGV4IDcyZWI0MDEwMzRkOTMuLmUzMzE4OGRlYzJiN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgKQEAgLTE2LDYgJiM0MzsxNiw3IEBAIHN0cnVjdCBtb2NrX3BoYzsKIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7CiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpOwogaW50IG1vY2tfcGhjX2luZGV4KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTsKJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7CiAKICNlbHNlCiAKQEAgLTMzLDYgJiM0MzszNCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYykKIAlyZXR1cm4gLTE7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE5LDYgJiM0MzsxOSw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCW5ldHBvbGxfYmFzaWMucHkgXAogCXBpbmcucHkgXAogCXBzcC5weSBcCiYjNDM7CXB0cC5weSBcCiAJcXVldWVzLnB5IFwKIAlyaW5nX3JlY29uZmlnLnB5IFwKIAlzaGFwZXIucHkgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKQEAgLTIxLDUgJiM0MzsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eQogQ09ORklHX05FVF9TQ0hfUFJJTz1tCiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBPRT15CiYjNDM7Q09ORklHX1BUUF8xNTg4X0NMT0NLX01PQ0s9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi45MmE5NDNkY2JiMDY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5CkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgJmx0O21hY2lla0BtYWNobmlrb3dza2kubmV0Jmd0OyAoYykgMjAyNiwKJiM0MzsKJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MztUZXN0IHN1aXRlIGZvciBQVFAgc3luYyB1c2luZyBwdHA0bC4KJiM0MzsKJiM0MztTdGFydCBhIHB0cDRsIGxlYWRlciBhbmQgZm9sbG93ZXIgYW5kIGNoZWNrIHRoYXQgdGhlIGZvbGxvd2VyIGxvY2tzIG9udG8gdGhlCiYjNDM7bGVhZGVyIChzdGF0ZSBzMikKJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MztpbXBvcnQgdGltZQomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCAoCiYjNDM7ICAgIE5ldERydkVwRW52LAomIzQzOyAgICBia2csCiYjNDM7ICAgIGZkX3JlYWRfdGltZW91dCwKJiM0MzsgICAga3NmdF9leGl0LAomIzQzOyAgICBrc2Z0X3ByLAomIzQzOyAgICBrc2Z0X3J1biwKJiM0MzsgICAga3NmdF90cnVlLAomIzQzOykKJiM0MzsKJiM0MztQVFA0TF9TWU5DX1RJTUVPVVQgPSA0MAomIzQzOwomIzQzOwomIzQzO2RlZiBfcG9sbF9mb2xsb3dlcl9zeW5jKGZvbGxvd2VyLCB0aW1lb3V0KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UmVhZCB0aGUgZm9sbG93ZXIgc3Rkb3V0IHBpcGUgdW50aWwgcHRwNGwgcmVwb3J0cyBzeW5jIHN0YXRlIHMyLgomIzQzOwomIzQzOyAgICBSZXR1cm5zIGEgdHVwbGUgKHN5bmNlZCwgb3V0cHV0KSB3aGVyZSBvdXRwdXQgaXMgdGhlIHRleHQgcmVhZCBzbyBmYXIuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmZF9maWxlID0gZm9sbG93ZXIucHJvYy5zdGRvdXQKJiM0MzsgICAgZmQgPSBmZF9maWxlLmZpbGVubygpCiYjNDM7ICAgIGJ1ZiA9IGImIzM0OyYjMzQ7CiYjNDM7ICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSAmIzQzOyB0aW1lb3V0CiYjNDM7ICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgJmx0OyBkZWFkbGluZToKJiM0MzsgICAgICAgIGlmIGImIzM0OyBzMiAmIzM0OyBpbiBidWY6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgICAgIGlmIGZvbGxvd2VyLnByb2MucG9sbCgpIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKCkKJiM0MzsgICAgICAgICAgICBpZiBjaHVuazoKJiM0MzsgICAgICAgICAgICAgICAgYnVmICYjNDM7PSBjaHVuawomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgcmVtYWluaW5nID0gZGVhZGxpbmUgLSB0aW1lLm1vbm90b25pYygpCiYjNDM7ICAgICAgICAgICAgYnVmICYjNDM7PSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKQomIzQzOyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICByZXR1cm4gYiYjMzQ7IHMyICYjMzQ7IGluIGJ1ZiwgYnVmLmRlY29kZSgmIzM0O3V0Zi04JiMzNDssICYjMzQ7cmVwbGFjZSYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBwdHBfc3luY190ZXN0KGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1ZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2NtZCgmIzM0O3B0cDRsJiMzNDssIHJlbW90ZT1UcnVlKQomIzQzOwomIzQzOyAgICBsZWFkZXJfY21kID0gZiYjMzQ7cHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMiYjMzQ7CiYjNDM7ICAgIGZvbGxvd2VyX2NtZCA9IGYmIzM0O3B0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMiYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFwKJiM0MzsgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjoKJiM0MzsgICAgICAgIHN5bmNlZCwgb3V0cHV0ID0gX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgUFRQNExfU1lOQ19USU1FT1VUKQomIzQzOwomIzQzOyAgICBpZiBzeW5jZWQ6CiYjNDM7ICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDtwdHA0bCBmb2xsb3dlciBkaWQgbm90IHJlYWNoIGxvY2tlZCBzdGF0ZSAoczIpIHdpdGhpbiAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O3tQVFA0TF9TWU5DX1RJTUVPVVR9cyYjMzQ7KQomIzQzOyAgICB0YWlsID0gb3V0cHV0LnN0cmlwKCkuc3BsaXQoJiMzNDtcbiYjMzQ7KVstMTA6XQomIzQzOyAgICBrc2Z0X3ByKCYjMzQ7Rm9sbG93ZXIgbG9nIChsYXN0IDEwIGxpbmVzKTogJiMzNDsgJiM0MzsgJiMzNDsgfCAmIzM0Oy5qb2luKHRhaWwpKQomIzQzOyAgICBrc2Z0X3RydWUoRmFsc2UsICYjMzQ7UFRQIHN5bmMgdGltZW91dCYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBtYWluKCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1J1biBrc2Z0IHRlc3RzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiYjNDM7ICAgICAgICBrc2Z0X3J1bihbcHRwX3N5bmNfdGVzdF0sIGFyZ3M9KGNmZywgKSkKJiM0MzsgICAga3NmdF9leGl0KCkKJiM0MzsKJiM0MzsKJiM0MztpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CiYjNDM7ICAgIG1haW4oKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhhcmR3YXJlIFRpbWVzdGFtcGluZyBpbiBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtb2RpZmljYXRpb25zOiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBuc2ltX3N0YXJ0X3htaXRgLCBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGFuZCB0aGUgbmV3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGZ1bmN0aW9uIGluIGBwdHBfbW9jay5jYC4gIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuc2ltX3N0YXJ0X3htaXRgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHRpbWVzdGFtcGluZyBsb2dpYyBsaWtlbHkgcmVzaWRlcy4KClJpZ2h0IGF3YXksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wc2AgYW5kIGBzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7YC4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIGNhcHR1cmUgdHJhbnNtaXQgYW5kIHBvdGVudGlhbGx5IHJlY2VpdmUgdGltZXN0YW1wcy4gTG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKCWlmIChwdHBfaW5mb190eCkgewoJCS8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXIKCQkgKiBmb3IgYmV0dGVyIGFjY3VyYWN5CgkJICovCgkJcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NChwdHBfaW5mb190eCwgJmFtcDt0eF90cyk7CgkJaWYgKGxpa2VseShwdHBfaW5mb19yeCkpCgkJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwoJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7CgkJc2tiX3RzdGFtcF90eChza2Jfb3JpZywgJmFtcDtzaGh3dHN0YW1wcyk7Ci4uLgoJfSBlbHNlIGlmIChwdHBfaW5mb19yeCkgewoJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwoJfQoKCWlmIChwdHBfaW5mb19yeCkKCQlza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7CmBgYAoKT2theSwgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gY2FwdHVyZSBib3RoIHRpbWVzdGFtcHMgaWYgYHB0cF9pbmZvX3R4YCBpcyB0cnVlLCBvdGhlcndpc2UgaXQgY2FwdHVyZXMgb25seSB0aGUgcmVjZWl2ZSB0aW1lc3RhbXAgd2hlbiBgcHRwX2luZm9fcnhgIGlzIHRydWUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgYSBwb3RlbnRpYWwgYnVnLiBJIHNlZSB0aGF0IGByeF90c2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gIElmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgYnV0IGBwdHBfaW5mb19yeGAgaXMgZmFsc2UsIHRoZW4gYHJ4X3RzYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhlIGZpcnN0IGJsb2NrIGNvbXBsZXRlcywgYmVmb3JlIHRoZSBzZWNvbmQgYmxvY2sgYmVnaW5zLiBIb3dldmVyLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMga2luZCBvZiBhc3Nlc3NtZW50LiBUaGUgc3Vic2VxdWVudCBgaWYgKHB0cF9pbmZvX3J4KWAgY2hlY2sgYXQgdGhlIGVuZCB3aWxsIHByZXZlbnQgaXRzIHVzZSBpZiBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLiBTbywgSSBzZWUgaXQmIzM5O3Mgc2FmZSB0byB1c2UuCgpMZXQmIzM5O3MgdHJhY2UgaXQgY2FyZWZ1bGx5OiBpZiBgcHRwX2luZm9fdHhgIGlzIHRydWUgYW5kIGBwdHBfaW5mb19yeGAgaXMgZmFsc2UsIGByeF90c2AgaXMgbmV2ZXIgdXNlZC4gSWYgYHB0cF9pbmZvX3J4YCBpcyB0cnVlLCBgcnhfdHNgIGdldHMgYXNzaWduZWQgYSB2YWx1ZSwgZWl0aGVyIGluIHRoZSBmaXJzdCBgaWZgIG9yIGluIHRoZSBgZWxzZSBpZmAuIFRodXMsIGByeF90c2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgdXNlZC4gYHR4X3RzYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZCBvbmx5IHdoZW4gYHB0cF9pbmZvX3R4YCBpcyB0cnVlLiBMb29rcyBnb29kIHNvIGZhciwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIEFuZCwgaW1wb3J0YW50bHksIEkgc2VlIHRoYXQgYHNoaHd0c3RhbXBzYCBpcyBpbml0aWFsaXplZCB0byBge31gLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuc2ltX2dldF90c19jb25maWdgLgoKYGBgYwpzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAoJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKQp7CglzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CgoJKmNvbmZpZyA9IG5zLSZndDt0c3RhbXBfY29uZmlnOwoJcmV0dXJuIDA7Cn0KYGBgCgpUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgY29waWVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBjb25maWdgIHBvaW50ZXIuIEJ1dCBub3cgSSBoYXZlIHRvIGFzayBteXNlbGYsIHdoZXJlIGlzIHRoaXMgYG5zLSZndDt0c3RhbXBfY29uZmlnYCBpbml0aWFsaXplZD8gVGltZSB0byBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltLmhgIGhlYWRlci4gQWgsIHRoZXJlIGl0IGlzOgoKYGBgYwoJc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZzsKYGBgCgpJdCYjMzk7cyBhIG1lbWJlciBvZiB0aGUgYG5ldGRldnNpbWAgc3RydWN0IGl0c2VsZiwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTm93IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgc3RydWN0IGBuZXRkZXZzaW1gIGlzIHplcm8taW5pdGlhbGl6ZWQgc29tZXdoZXJlLiBCZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIFR5cGljYWxseSwgYGFsbG9jX25ldGRldmAgd2lsbCB6ZXJvLWluaXRpYWxpemUgcHJpdmF0ZSBkYXRhLiBCdXQgSSBiZXR0ZXIgdmVyaWZ5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjMzPXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyNDAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTI0MTpcdGRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2YoKm5zKSwgXCYjMzQ7ZXRoJWRcJiMzNDssIE5FVF9OQU1FX1VOS05PV04sIG5zaW1fc2V0dXAsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTI0Mi1cdFx0XHQgICAgICBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGFsbG9jX25ldGRldl9tcWAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCBpdCB1c2VzIGBremFsbG9jYCwgc28gdGhlIHByaXZhdGUgZGF0YSwgaW5jbHVkaW5nIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AsIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgc28gdGhlIHN0cnVjdHVyZSBJJiMzOTttIGxvb2tpbmcgYXQsIGBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AsIGhhcyBhIGJ1bmNoIG9mIGZpZWxkczogYGZsYWdzYCwgYHR4X3R5cGVgLCBgcnhfZmlsdGVyYCwgYGlmcmAsIGFuZCBgYnBmYCwgYW1vbmcgb3RoZXJzLiBHb3QgaXQuIEFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBjb3B5aW5nIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gYCpjb25maWdgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGdldHRpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uCgpCdXQgd2FpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3B5IGRvZXNuJiMzOTt0IGdldCBtZXNzZWQgdXAgYnkgcGFkZGluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBpdHNlbGYgaGFzIGFueSBwYWRkaW5nLiBJIG5lZWQgdG8gZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCBpbiBgaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhgIHJpZ2h0IG5vdyB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTM3PXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNjEtICovXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaDo2MjpzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC02My1cdGludCBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgVGltZXN0YW1waW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgdGltZXN0YW1waW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgNjIsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIGtleSB0aW1lc3RhbXBpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlZ2luIHRvIGFwcGVhci4gSSBhbnRpY2lwYXRlIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suIFRoaXMgc2hvdWxkIGNsYXJpZnkgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGFuZCBtYW5hZ2luZyB0aW1lc3RhbXBzIGZvciBuZXR3b3JrIHBhY2tldHMuIFRoaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgZGlmZmVyZW50IGRyaXZlcnMsIHByb3RvY29scywgYW5kIG1lY2hhbmlzbXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgc3ViamVjdCwgc28gdGhhdCBJIG1heSBiZSBhYmxlIHRvIGZ1bGx5IGV4YW1pbmUgdGhlIHRvcGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdCAqIGV4cG9zZWQgdG8gdGhlICVTSU9DR0hXVFNUQU1QIGFuZCAlU0lPQ1NIV1RTVEFNUCBpb2N0bCBVQVBJLlxuICA2MTpcdCAqL1xuICA2MjpcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHtcbiAgNjM6XHRcdGludCBmbGFncztcbiAgNjQ6XHRcdGludCB0eF90eXBlO1xuICA2NTpcdFx0aW50IHJ4X2ZpbHRlcjtcbiAgNjY6XHRcdHN0cnVjdCBpZnJlcSAqaWZyO1xuICA2NzpcdFx0Ym9vbCBjb3BpZWRfdG9fdXNlcjtcbiAgNjg6XHRcdGVudW0gaHd0c3RhbXBfc291cmNlIHNvdXJjZTtcbiAgNjk6XHRcdGVudW0gaHd0c3RhbXBfcHJvdmlkZXJfcXVhbGlmaWVyIHF1YWxpZmllcjtcbiAgNzA6XHR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfdG9fa2VybmVsKHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxuICA3MzpcdFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBod3RzdGFtcF9jb25maWcgKmNmZylcbiAgNzQ6XHR7XG4gIDc1Olx0XHRrZXJuZWxfY2ZnLVx1MDAzZWZsYWdzID0gY2ZnLVx1MDAzZWZsYWdzO1xuICA3NjpcdFx0a2VybmVsX2NmZy1cdTAwM2V0eF90eXBlID0gY2ZnLVx1MDAzZXR4X3R5cGU7XG4gIDc3Olx0XHRrZXJuZWxfY2ZnLVx1MDAzZXJ4X2ZpbHRlciA9IGNmZy1cdTAwM2VyeF9maWx0ZXI7XG4gIDc4Olx0fVxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIEhhcmR3YXJlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgd2UmIzM5O3JlIGV4cG9zaW5nIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIEludGVyZXN0aW5nLi4uIHRoZSBrZXJuZWwmIzM5O3MgYG5ldC9jb3JlL2Rldl9pb2N0bC5jYCBjb2RlIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbi4gSXQmIzM5O3MgY29udmVydGluZyB0aGUgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgIGludG8gYSBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgYmVmb3JlIHRoYXQgZGF0YSBnZXRzIHBhc3NlZCB1cC4gUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byBgZGV2X2lvY3RsLmNgIOKAkyBvciBtYXliZSBldmVuIG92ZXIgaW4gYGV0aHRvb2wvY29tbW9uLmNgIOKAkyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhleSYjMzk7cmUgdXNpbmcgdGhpcyBpbnRlcm5hbCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGtleSBsaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb252ZXJzaW9uIHByb2Nlc3MsIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIGNvbnN0cnVjdGVkLiBHb3R0YSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfaHd0c3RhbXBfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5oPTQwND1pbnQgZGV2X3NldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5oOjQwNTpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyxcbm5ldC9jb3JlL2Rldi5oLTQwNi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9jb3JlL2Rldi5oPTQwNz1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5oOjQwODpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5uZXQvY29yZS9kZXYuaDo0MDk6aW50IG5ldF9od3RzdGFtcF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbm5ldC9jb3JlL2Rldi5oLTQxMC1cbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0xNDA9c3RhdGljIGludCBkZXZfaWZzaW9jX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTE4OC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjE4OTppbnQgbmV0X2h3dHN0YW1wX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0xOTAte1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI1OD1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjI1OTpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI2MC17XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MjgyPXN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODQtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjg1Olx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjg2LVx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzI4PWludCBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6MzI5Olx0XHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMwLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMyLVx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcztcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjMzMzpcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIG9sZF9jZmcgPSB7fTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTMzNC1cdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTM3Ni1cdGlmIChwaHlfdHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VzZWVfYWxsX2h3dHN0YW1wX3JlcXVlc3RzKVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzc3Olx0XHRjaGFuZ2VkID0ga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKFx1MDAyNm9sZF9jZmcsIGNmZyk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zNzgtXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzkxPXN0YXRpYyBpbnQgZGV2X3NldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTMtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzk0Olx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzk1LVx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NDE9aW50IGdlbmVyaWNfaHd0c3RhbXBfZ2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NDI6XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDQzLXtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NjI6XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDYzLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBIYXJkd2FyZSBUaW1lc3RhbXBpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXRyaWV2ZXMgaGFyZHdhcmUgdGltZXN0YW1wIGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L2NvcmUvZGV2X2lvY3RsLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkZXZfZ2V0X2h3dHN0YW1wYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGZvciByZXRyaWV2aW5nIHRob3NlIGNydWNpYWwgdGltZXN0YW1wIHZhbHVlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MjpcdHN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiAyODM6XHR7XG4gMjg0Olx0XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuIDI4NTpcdFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xuIDI4NjpcdFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XG4gMjg3Olx0XHRpbnQgZXJyO1xuIDI4ODpcdFxuIDI4OTpcdFx0aWYgKCFvcHMtXHUwMDNlbmRvX2h3dHN0YW1wX2dldClcbiAyOTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDI5MzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyOTQ6XHRcbiAyOTU6XHRcdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xuIDI5NjpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4gMjk3Olx0XHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuIDI5ODpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiAyOTk6XHRcdGlmIChlcnIpXG4gMzAwOlx0XHRcdHJldHVybiBlcnI7XG4gMzAxOlx0XG4gMzAyOlx0XHQvKiBJZiB0aGUgcmVxdWVzdCB3YXMgcmVzb2x2ZWQgdGhyb3VnaCBhbiB1bmNvbnZlcnRlZCBkcml2ZXIsIG9taXRcbiAzMDM6XHRcdCAqIHRoZSBjb3B5X3RvX3VzZXIoKSwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGhhcyBhbHJlYWR5IGRvbmUgdGhhdFxuIDMwNDpcdFx0ICovXG4gMzA1Olx0XHRpZiAoIWtlcm5lbF9jZmcuY29waWVkX3RvX3VzZXIpIHtcbiAzMDY6XHRcdFx0aHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsKFx1MDAyNmNmZywgXHUwMDI2a2VybmVsX2NmZyk7XG4gMzA3Olx0XG4gMzA4Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoaWZyLVx1MDAzZWlmcl9kYXRhLCBcdTAwMjZjZmcsIHNpemVvZihjZmcpKSlcbiAzMDk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMTA6XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdHJldHVybiAwO1xuIDMxMzpcdH1cbiAzMTQ6XHRcbiAzMTU6XHQvKipcbiAzMTY6XHQgKiBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYigpIC0gQ2hhbmdlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBvZiBOSUNcbiAzMTc6XHQgKlx0b3Igb2YgYXR0YWNoZWQgcGh5bGliIFBIWVxuIDMxODpcdCAqIEBkZXY6IE5ldHdvcmsgZGV2aWNlXG4gMzE5Olx0ICogQGNmZzogVGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXG4gMzIwOlx0ICogQGV4dGFjazogTmV0bGluayBleHRlbmRlZCBhY2sgbWVzc2FnZSBzdHJ1Y3R1cmUsIGZvciBlcnJvciByZXBvcnRpbmdcbiAzMjE6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24gaW4gdGhlIE5ldHdvcmsgU2ltdWxhdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgdGltZXN0YW1waW5nIGxvZ2ljLiBJIHNlZSB0aGF0IHdpdGhpbiBgZGV2X2dldF9od3RzdGFtcGAsIGBrZXJuZWxfY2ZnYCBpcyBpbml0aWFsbHkgc2V0IHRvIGFuIGVtcHR5IHN0cnVjdC4gVGhlbiwgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYCBnZXRzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyLXNwZWNpZmljIGBvcHMtJmd0O25kb19od3RzdGFtcF9nZXQoZGV2LCAmYW1wO2tlcm5lbF9jZmcpYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBiZWdpbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuc2ltX2dldF90c19jb25maWdgIGZ1bmN0aW9uLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiAqY29tcGxldGVseSogb3ZlcndyaXRlcyB0aGUgY29udGVudHMgb2YgdGhlIGAqY29uZmlnYCBwb2ludGVyIHdpdGggYG5zLSZndDt0c3RhbXBfY29uZmlnYC4gSG1tLCBhbmQgYG5zLSZndDt0c3RhbXBfY29uZmlnYCB3YXMgemVyby1pbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBwcm9ibGVtIQoKV2FpdCBhIG1pbnV0ZSwgSSBzZWUgbm93IHRoYXQgYGRldl9nZXRfaHd0c3RhbXBgICpkb2VzKiBzZXQgYGtlcm5lbF9jZmcuaWZyID0gaWZyO2AgKmJlZm9yZSogY2FsbGluZyBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgLiBUaGlzIGlzIGtleS4gQnV0LCBpZiBgbnNpbV9nZXRfdHNfY29uZmlnYCB0aGVuIG92ZXJ3cml0ZXMgYCpjb25maWdgIHdpdGggdGhlIHplcm8taW5pdGlhbGl6ZWQgYG5zLSZndDt0c3RhbXBfY29uZmlnYCwgKnRoYXQqIG1lYW5zIHRoZSBgY29uZmlnLSZndDtpZnJgIGZpZWxkIHdpbGwgYWxzbyBiZSBjbG9iYmVyZWQgYW5kIHNldCB0byBgTlVMTGAhIFRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGNvbmZ1c2luZyB0aW1lc3RhbXBpbmcgYmVoYXZpb3IsIG9yIHdvcnNlLCBzZWdtZW50YXRpb24gZmF1bHRzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBvZiBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvci4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTg6XHRpbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAyNTk6XHRcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbiAyNjA6XHR7XG4gMjYxOlx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbiAyNjI6XHRcbiAyNjM6XHRcdGh3cHJvdiA9IG5ldGRldl9vcHNfbG9ja19kZXJlZmVyZW5jZShkZXYtXHUwMDNlaHdwcm92LCBkZXYpO1xuIDI2NDpcdFx0aWYgKGh3cHJvdikge1xuIDI2NTpcdFx0XHRjZmctXHUwMDNlcXVhbGlmaWVyID0gaHdwcm92LVx1MDAzZWRlc2MucXVhbGlmaWVyO1xuIDI2NjpcdFx0XHRpZiAoaHdwcm92LVx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfUEhZTElCIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHQgICAgaHdwcm92LVx1MDAzZXBoeWRldilcbiAyNjg6XHRcdFx0XHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChod3Byb3YtXHUwMDNlcGh5ZGV2LCBjZmcpO1xuIDI2OTpcdFxuIDI3MDpcdFx0XHRpZiAoaHdwcm92LVx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfTkVUREVWKVxuIDI3MTpcdFx0XHRcdHJldHVybiBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgY2ZnKTtcbiAyNzI6XHRcbiAyNzM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI3NDpcdFx0fVxuIDI3NTpcdFxuIDI3NjpcdFx0aWYgKHBoeV9pc19kZWZhdWx0X2h3dHN0YW1wKGRldi1cdTAwM2VwaHlkZXYpKVxuIDI3NzpcdFx0XHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChkZXYtXHUwMDNlcGh5ZGV2LCBjZmcpO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19od3RzdGFtcF9nZXQoZGV2LCBjZmcpO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBzZXR0aW5nIGBjb25maWctJmd0O2lmcmAgdG8gYE5VTExgLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyBhIHJlZCBmbGFnIGJlY2F1c2UgSSBrbm93IHRoYXQgYGRldl9nZXRfaHd0c3RhbXBgIHVzZXMgdGhhdCBgaWZyYCBzdHJ1Y3R1cmUuIEJ1dCB0aGVuIEkgc3RvcHBlZCBteXNlbGYuIExvb2tpbmcgZGVlcGVyIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBkZXZfZ2V0X2h3dHN0YW1wYCBmdW5jdGlvbiwgSSBjYW4gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBkZXJlZmVyZW5jZSBga2VybmVsX2NmZy5pZnJgLCBhcyBJIGluaXRpYWxseSBmZWFyZWQuIEluc3RlYWQsIGl0IHVzZXMgYGlmci0mZ3Q7aWZyX2RhdGFgIGZyb20gdGhlIG9yaWdpbmFsIGlucHV0IGBpZnJgIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4gVGhpcyBpcyBnb29kISBTbywgZXZlbiB0aG91Z2ggYGtlcm5lbF9jZmcuaWZyYCBpcyBiZWluZyBzZXQgdG8gYE5VTExgLCBpdCAqc2hvdWxkbiYjMzk7dCogY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jay4KCkhvd2V2ZXIsIGEgc21hbGwgdm9pY2UgaW4gbXkgaGVhZCBpcyBzYXlpbmcgJiMzNDtub3Qgc28gZmFzdCEmIzM0Oy4gYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgaXMgdXNlZCBieSB0aGUgYGRldl9nZXRfaHd0c3RhbXBgIGZ1bmN0aW9uIHRvIGNvcHkgZmllbGRzIGZyb20gYGtlcm5lbF9jZmdgIHRvIGBjZmdgLCB3aGljaCBpcyB0aGVuIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAqaXQqIGRvZXNuJiMzOTt0IGhhdmUgYSBwb3RlbnRpYWwgZmxhdy4gSSB0aGluayBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IG5vdy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC03OS1cbmluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnLFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtODEtXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGZ1bmN0aW9uLCBiYXNlZCBvbiB3aGF0JiMzOTtzIGltcGxpY2l0bHkgYW5kIGV4cGxpY2l0bHkgZ29pbmcgb24gaGVyZToKCioqTXkgTWVudGFsIFdhbGt0aHJvdWdoIG9mIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZSwgaXQmIzM5O3MgY2xlYXJseSByZWxhdGVkIHRvIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBjb25maWd1cmF0aW9uLCBsaWtlbHkgd2l0aGluIGEga2VybmVsIGNvbnRleHQuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIHB1cnBvc2U/IFdoYXQgc3BlY2lmaWNhbGx5IGlzIGl0IHJlc3BvbnNpYmxlIGZvciB3aXRoaW4gdGhlIGxhcmdlciBod3RzdGFtcCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYWJvdXQgKmdldHRpbmcqIGNvbmZpZ3VyYXRpb24sICpzZXR0aW5nKiBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgaW4tYmV0d2Vlbj8gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCByZXRyaWV2aW5nIG9yIGNvbnZlcnRpbmcgZXhpc3Rpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aHJvdWdoIHRoZSBhY3R1YWwgY29kZSwgb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRyaXZlcnMuIERvZXMgaXQgdHJhbnNsYXRlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgaW50byBzb21ldGhpbmcgdGhlIGhhcmR3YXJlIHVuZGVyc3RhbmRzLCBvciB2aWNlLXZlcnNhPyBJcyBpdCBhYm91dCBzeW5jaHJvbml6YXRpb24gb2YgdGhlIGhhcmR3YXJlIGNsb2NrIHdpdGggdGhlIHN5c3RlbSBjbG9jaz8gV2hhdCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgaGFyZHdhcmUgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gTklDcywgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzLCBvciBtYXliZSBzb21lIG90aGVyIGhhcmR3YXJlIGNsb2Nrcz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIHRpbWluZyBpc3N1ZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGhhbmRsZSB0aGVtLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGNsb2NrIGRvbWFpbnMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIG90aGVyIGZ1bmN0aW9ucywgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgdHlwZSBvZiB0aGUgc3RydWN0dXJlIHdlIGFyZSBwdWxsaW5nIGNvbmZpZ3VyYXRpb24gZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnLFxuICA4MTpcdFx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtlcm5lbF9jZmcpXG4gIDgyOlx0e1xuICA4MzpcdFx0Y2ZnLVx1MDAzZWZsYWdzID0ga2VybmVsX2NmZy1cdTAwM2VmbGFncztcbiAgODQ6XHRcdGNmZy1cdTAwM2V0eF90eXBlID0ga2VybmVsX2NmZy1cdTAwM2V0eF90eXBlO1xuICA4NTpcdFx0Y2ZnLVx1MDAzZXJ4X2ZpbHRlciA9IGtlcm5lbF9jZmctXHUwMDNlcnhfZmlsdGVyO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICphLFxuICA4OTpcdFx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBzcGVjaWZpY3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb3BlcmF0aW9uIGlzIGNvcHlpbmcgb3ZlciBhIGZldyBrZXkgZWxlbWVudHM6IGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgLiBFc3NlbnRpYWxseSwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGJlaW5nIGV4dHJhY3RlZCBhbmQgYXNzaWduZWQgdG8gYGNmZ2AuIEFoLCByaWdodCwgdGhhdCBgY2ZnYCB2YXJpYWJsZSBpcyBhY3R1YWxseSBvZiB0eXBlIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYC4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gdGhhdCBkZWZpbmVkIHNvbWV3aGVyZSBiZWZvcmUuLi4geWVwLCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmhgLiBPa2F5LCBiZXR0ZXIgZ28gY29uZmlybSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSB0aG9zZSBmaWVsZHMgYXJlIGJlaW5nIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGVzZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaD03Mj1zdHJ1Y3Qgc29fdGltZXN0YW1waW5nIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oLTg5LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaDo5MDpzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmgtOTEtXHRpbnQgZmxhZ3M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgaHd0c3RhbXBfY29uZmlnYCBzdHJ1Y3QuIEkmIzM5O3ZlIHNlZW4gdGhpcyB1c2VkIGluIGEgdmFyaWV0eSBvZiBjb250ZXh0cywgcGFydGljdWxhcmx5IGFyb3VuZCBuZXR3b3JrIHRpbWUgc3luY2hyb25pemF0aW9uIGFuZCBoYXJkd2FyZSB0aW1lc3RhbXBpbmcg4oCTIGJvdGggY3JpdGljYWwgZm9yIGxvdy1sYXRlbmN5IGFwcGxpY2F0aW9ucyBhbmQgcHJlY2lzZSB0aW1pbmcgYW5hbHlzaXMuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBzdHJ1Y3Qgd2lsbCBob2xkIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBleHBvc2VzIHRoZSB2YXJpb3VzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBhbmQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIGluZGljYXRpbmcgUlggYW5kIFRYIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQsIHBlcmhhcHMgc3BlY2lmaWMgbW9kZXMgb2Ygb3BlcmF0aW9uIChlLmcuLCBzb2Z0d2FyZSBmYWxsYmFjayksIGFuZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjbG9jayBzb3VyY2UuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIHRpbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgYXNzb2NpYXRlZCBjbG9jayYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNhbGlicmF0aW9uIGlmIHN1cHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0IGlzIHRoZSBrZXkgdG8gZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24sIHNvIGxldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHN0cnVjdCBod3RzdGFtcF9jb25maWcge1xuICA5MTpcdFx0aW50IGZsYWdzO1xuICA5MjpcdFx0aW50IHR4X3R5cGU7XG4gIDkzOlx0XHRpbnQgcnhfZmlsdGVyO1xuICA5NDpcdH07XG4gIDk1Olx0XG4gIDk2Olx0LyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctXHUwMDNlZmxhZ3MgKi9cbiAgOTc6XHRlbnVtIGh3dHN0YW1wX2ZsYWdzIHtcbiAgOTg6XHRcdC8qXG4gIDk5Olx0XHQgKiBXaXRoIHRoaXMgZmxhZywgdGhlIHVzZXIgY291bGQgZ2V0IGJvbmQgYWN0aXZlIGludGVyZmFjZSYjMzk7c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSFdUU1RBTVAgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFBhZGRpbmcgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGluaXRpYWxpemVzIHRoaXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIHNuZWFreSBwYWRkaW5nIGluIHRoZXJlLgoKSXQmIzM5O3MgZ290IHRocmVlIGBpbnRgIGZpZWxkcywgZWFjaCA0IGJ5dGVzLCBzbyB0aGF0JiMzOTtzIDEyIGJ5dGVzIHRvdGFsLiBPbiBhIDY0LWJpdCBzeXN0ZW0sIEkgaGF2ZSB0byBjb25zaWRlciBhbGlnbm1lbnQuIElzIGl0IHBhZGRlZCB0byAxNiBieXRlcz8gVGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcyA0IGJ5dGVzLCBiZWNhdXNlIGFsbCB0aGUgbWVtYmVycyBhcmUgYGludGAsIHNvIGBzaXplb2Yoc3RydWN0IGh3dHN0YW1wX2NvbmZpZylgIHNob3VsZCBqdXN0IGJlIDEyLiBObyBwYWRkaW5nIGF0IHRoZSBlbmQgdGhlbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgd2hlbiBgY29weV90b191c2VyYCBoYXBwZW5zLCB3ZSBhcmUgY29weWluZyAxMiBieXRlcyBhbmQgbm90IHNvbWUgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaHVzLCB3ZSBhcmUgbm90IGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIGBuc2ltX3NldF90c19jb25maWdgIGZ1bmN0aW9uLiBJIHNlZSBpdCB1cGRhdGVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZy50eF90eXBlYCBhbmQgYHJ4X2ZpbHRlcmAuIEJ1dCwgd2hhdCBhYm91dCBgbnMtJmd0O3RzdGFtcF9jb25maWcuZmxhZ3NgPyBIbW0sIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBiZWluZyB1cGRhdGVkIGFueXdoZXJlIGhlcmUuIFdoZW4gYG5zaW1fZ2V0X3RzX2NvbmZpZ2AgaXMgY2FsbGVkLCBpdCBhc3NpZ25zIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gYGNvbmZpZ2AsIGJ1dCBzaW5jZSBgbnMtJmd0O3RzdGFtcF9jb25maWdgIHdhcyB6ZXJvLWluaXRpYWxpemVkLCB0aGlzIG1lYW5zIGBmbGFnc2AgaXMganVzdCAwLiBTZWVtcyBmaW5lLCBidXQgaXQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4KCkZpbmFsbHksIEkmIzM5O20gY2hlY2tpbmcgYG5zaW1fZ2V0X3RzX2luZm9gLiBJdCBjYWxscyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgdG8gaW5pdGlhbGl6ZSBgaW5mb2AsIGJ1dCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGh0b29sX29wX2dldF90c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9Njg9RVhQT1JUX1NZTUJPTChldGh0b29sX29wX2dldF9saW5rKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNjktXG5uZXQvZXRodG9vbC9pb2N0bC5jOjcwOmludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9pb2N0bC5jLTcxLVx0XHRcdCAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNzktfVxubmV0L2V0aHRvb2wvaW9jdGwuYzo4MDpFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8pO1xubmV0L2V0aHRvb2wvaW9jdGwuYy04MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbnNpbV9nZXRfdHNfaW5mb2AgRnVuY3Rpb24gYW5kIFRpbWVzdGFtcGluZyBJbmZvcm1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBzaWduYXR1cmU6IGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mb2AuIFRoYXQmIzM5O3Mgd2hhdCBgbnNpbV9nZXRfdHNfaW5mb2AgaXMgc3VwcG9zZWQgdG8gdXNlLiBCdXQgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBuc2ltX2dldF90c19pbmZvYCBhcHBlYXJzIHRvIGJlIHRha2luZyBhIGBzdHJ1Y3QgZXRodG9vbF90c19pbmZvICppbmZvYCBpbnN0ZWFkPyBUaGF0IHNlZW1zIGxpa2UgYSB0eXBlIG1pc21hdGNoIGFuZCBjb3VsZCBiZSBhIHByb2JsZW0uIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmUgZGlyZWN0bHkgaW4gdGhlIHBhdGNoIGNvZGU6CgpgYGBjCnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCmBgYAoKQWgsIHRoZSBwYXRjaCAqZG9lcyogc2hvdyBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gLiBPa2F5LCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uPyBMZXQmIzM5O3MgbG9vayBjbG9zZWx5IGF0IHRoZSBwYXRjaCBkaWZmIGl0c2VsZjoKCmBgYGMKQEAgLTIwMCw3ICYjNDM7MjAwLDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwlldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7CmBgYAoKUmlnaHQsIHRoZSBjb250ZXh0IGxpbmVzIGRvbiYjMzk7dCBkaXJlY3RseSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGBpbmZvYCwgYnV0IEkgY2FuIGluZmVyIGl0JiMzOTtzIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mb2Agd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gIHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBnb2luZyB0byBiZSBwYXNzZWQgYmFjayB0byB0aGUgdXNlci4gSSYjMzk7bGwgcmVhZCBpbnRvIGBldGh0b29sX29wX2dldF90c19pbmZvYCBub3cgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSBkYXRhIGZsb3cgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdGludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDcxOlx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG4gIDcyOlx0e1xuICA3MzpcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPVxuICA3NDpcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiAgNzU6XHRcdFx0U09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4gIDc2Olx0XHRcdFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7XG4gIDc3Olx0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IC0xO1xuICA3ODpcdFx0cmV0dXJuIDA7XG4gIDc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGltZXN0YW1waW5nIEluZm9ybWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBgaW5mb2Agc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGFsbCBpdCBkb2VzIGRpcmVjdGx5IGlzIHNldCB0aGUgYHNvX3RpbWVzdGFtcGluZ2AgYW5kIGBwaGNfaW5kZXhgIGZpZWxkcy4gQSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgdGhpcyBmdW5jdGlvbiBpbXBsaWNpdGx5IHplcm8gb3V0IHRoZSByZXN0IG9mIHRoZSBgaW5mb2Agc3RydWN0LCBvciBpcyB0aGF0IGxlZnQgdG8gdGhlIGNhbGxlcj8gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUsIGJlY2F1c2UgaWYgdGhlcmUmIzM5O3Mgbm8gZ3VhcmFudGVlZCBpbml0aWFsaXphdGlvbiwgdGhlbiB3ZSBjb3VsZCBiZSByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIgaW4gdGhlIGtlcm5lbC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVuY3Rpb24uIFNpbmNlIGl0JiMzOTtzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLCBpdCYjMzk7cyBjYWxsZWQgc29tZXdoZXJlIGFzIHBhcnQgb2YgdGhlIGV0aHRvb2wgZnJhbWV3b3JrLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBhbGwgY2FsbCBzaXRlcyBmb3IgYG5zaW1fZ2V0X3RzX2luZm9gLCB3aGljaCBpdHNlbGYgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdGhhdCBsZWFkcyB0byBgbnNpbV9nZXRfdHNfaW5mb2AuIFRoYXQgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIHBsYWNlIGluIGBuZXQvZXRodG9vbC9gIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZC4gQW5kIGl0IG11c3QgYmUgaW4gZWl0aGVyIGB0c2luZm8uY2Agb3IgYGlvY3RsLmNgLgoKT25jZSBJJiMzOTt2ZSBmb3VuZCB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgSSAqbmVlZCogdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmZvYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLiBJcyBpdCBvbiB0aGUgc3RhY2s/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gQW5kIGNydWNpYWxseSwgaXMgaXQgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2A/IFRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIGV4aXN0cyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLCBhbmQgSSYjMzk7bGwgYmFzZSBteSB1bmRlcnN0YW5kaW5nIG9mIGJlaGF2aW9yIG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF90c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jPTk1OT1zdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2NS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjk2NjppbnQgZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uYy05NjctXHRcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy05NzItXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NzM6XHRpZiAoIW9wcy1cdTAwM2VnZXRfdHNfaW5mbylcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3NC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3OC1cdGluZm8tXHUwMDNlcGhjX3F1YWxpZmllciA9IGh3cHJvdl9kZXNjLVx1MDAzZXF1YWxpZmllcjtcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjk3OTpcdGVyciA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtOTgwLVx0aWYgKGVycilcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz05OTA9c3RydWN0IHBoeV9kZXZpY2UgKlxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTkxOmV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTkyLVx0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDM0LVxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTAzNTppbnQgZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwMzYtXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNDAtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDQxOlx0ZXJyID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0Mi1cdGlmIChlcnIgPT0gLUVOT0RFViB8fCBlcnIgPT0gLUVPUE5PVFNVUFApIHtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQ0LVxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA0NTpcdFx0cGh5ID0gZXRodG9vbF9waHlfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0Ni1cdFx0aWYgKElTX0VSUihwaHkpKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjYtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDY3OmludCBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjgtXHRcdFx0ICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDkwLVx0XHRcdH1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwOTE6XHRcdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldF90c19pbmZvKSB7XG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDkyOlx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA5My1cdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwaGNfaW5kZXggXHUwMDNlPSAwKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMDMtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTA0Olx0ZXJyID0gZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBpbmZvLCBcdTAwMjZod3Byb3YtXHUwMDNlZGVzYyk7XG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTA1LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmM9MTEzMD1pbnQgZXRodG9vbF9nZXRfcGhjX3ZjbG9ja3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICoqdmNsb2NrX2luZGV4KVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzQtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTM1Olx0aWYgKCFfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZpbmZvKSlcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzYtXHRcdG51bSA9IHB0cF9nZXRfdmNsb2Nrc19pbmRleChpbmZvLnBoY19pbmRleCwgdmNsb2NrX2luZGV4KTtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz0xMTQwPUVYUE9SVF9TWU1CT0woZXRodG9vbF9nZXRfcGhjX3ZjbG9ja3MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTE0MS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDI6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfbGF5ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQzLXtcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDQ6XHRyZXR1cm4gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgaW5mbyk7XG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQ1LX1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDY6RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKTtcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDctXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9NTc9aW50IGV0aHRvb2xfZ2V0X3J4X3JpbmdfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvZXRodG9vbC9jb21tb24uaC01OC1cbm5ldC9ldGh0b29sL2NvbW1vbi5oOjU5OmludCBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmg6NjA6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uaC02MS1cdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG5uZXQvZXRodG9vbC9jb21tb24uaC02Mi1cdFx0XHQgICAgICAgc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyX2Rlc2MgKmh3cHJvdl9kZXNjKTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjYzOmludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTY0LVx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9NjY9c3RydWN0IHBoeV9kZXZpY2UgKlxubmV0L2V0aHRvb2wvY29tbW9uLmg6Njc6ZXRodG9vbF9waHlfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uaC02OC1cdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz02OD1FWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X2xpbmspO1xubmV0L2V0aHRvb2wvaW9jdGwuYy02OS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NzA6aW50IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzEtXHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy03OS19XG5uZXQvZXRodG9vbC9pb2N0bC5jOjgwOkVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNfaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTgxLVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9Mjc3OT1zdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg0MS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg0MjpzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODQzLXtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDctXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI4NDg6XHRlcnIgPSBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZrZXJuZWxfaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDktXHRpZiAoZXJyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzUyMS1cdGNhc2UgRVRIVE9PTF9HRVRfVFNfSU5GTzpcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzUyMjpcdFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTIzLVx0XHRicmVhaztcbi0tXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTM1PXN0YXRpYyBpbnQgdHNjb25maWdfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy02OC1cdFx0dHNfaW5mby5waGNfaW5kZXggPSAtMTtcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM6Njk6XHRcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNnRzX2luZm8pO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy03MC1cdFx0aWYgKHJldClcbi0tXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTI2Mz10c2NvbmZpZ19zZXRfaHdwcm92X2Zyb21fZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjczLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzQ6XHRyZXQgPSBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcdTAwMjZ0c19pbmZvLCBod3Byb3ZfZGVzYyk7XG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTI3NS1cdGlmICghcmV0KSB7XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzgtXHR9IGVsc2Uge1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzk6XHRcdHBoeSA9IGV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhkZXYsIFx1MDAyNnRzX2luZm8sIGh3cHJvdl9kZXNjKTtcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjgwLVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz05Nj1zdGF0aWMgaW50IHRzaW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMDktXHRpZiAocmVxLVx1MDAzZWh3cHJvdl9kZXNjLmluZGV4ICE9IC0xKSB7XG5uZXQvZXRodG9vbC90c2luZm8uYzoxMTA6XHRcdHJldCA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0c19pbmZvLFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtMTExLVx0XHRcdFx0XHRcdCBcdTAwMjZyZXEtXHUwMDNlaHdwcm92X2Rlc2MpO1xuLS1cbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyMi1cbm5ldC9ldGh0b29sL3RzaW5mby5jOjEyMzpcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNldHNfaW5mbyk7XG5uZXQvZXRodG9vbC90c2luZm8uYy0xMjQtXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz0zODg9c3RhdGljIGludCBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0ZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtMzk4LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6Mzk5Olx0aWYgKCFvcHMtXHUwMDNlZ2V0X3RzX2luZm8pXG5uZXQvZXRodG9vbC90c2luZm8uYy00MDAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00MTQtXHRcdHJlcGx5X2RhdGEtXHUwMDNldHNfaW5mby5waGNfcXVhbGlmaWVyID0gY3R4LVx1MDAzZXBvc19waGNxdWFsaWZpZXI7XG5uZXQvZXRodG9vbC90c2luZm8uYzo0MTU6XHRcdHJldCA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIFx1MDAyNnJlcGx5X2RhdGEtXHUwMDNldHNfaW5mbyk7XG5uZXQvZXRodG9vbC90c2luZm8uYy00MTYtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGdldHRpbmcgdGltZXN0YW1waW5nIGluZm9ybWF0aW9uIHZpYSBldGh0b29sLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgYW5kIHByZXNlbnRpbmcgdGhlIHJlbGV2YW50IHRpbWVzdGFtcGluZyBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg0MjpcdHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4yODQzOlx0e1xuMjg0NDpcdFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ga2VybmVsX2luZm87XG4yODQ1Olx0XHRzdHJ1Y3QgZXRodG9vbF90c19pbmZvIGluZm8gPSB7fTtcbjI4NDY6XHRcdGludCBlcnI7XG4yODQ3Olx0XG4yODQ4Olx0XHRlcnIgPSBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZrZXJuZWxfaW5mbyk7XG4yODQ5Olx0XHRpZiAoZXJyKVxuMjg1MDpcdFx0XHRyZXR1cm4gZXJyO1xuMjg1MTpcdFxuMjg1MjpcdFx0aW5mby5jbWQgPSBrZXJuZWxfaW5mby5jbWQ7XG4yODUzOlx0XHRpbmZvLnNvX3RpbWVzdGFtcGluZyA9IGtlcm5lbF9pbmZvLnNvX3RpbWVzdGFtcGluZztcbjI4NTQ6XHRcdGluZm8ucGhjX2luZGV4ID0ga2VybmVsX2luZm8ucGhjX2luZGV4O1xuMjg1NTpcdFx0aW5mby50eF90eXBlcyA9IGtlcm5lbF9pbmZvLnR4X3R5cGVzO1xuMjg1NjpcdFx0aW5mby5yeF9maWx0ZXJzID0ga2VybmVsX2luZm8ucnhfZmlsdGVycztcbjI4NTc6XHRcbjI4NTg6XHRcdGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXG4yODU5Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjg2MDpcdFxuMjg2MTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgQnVnKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBpc24mIzM5O3Qgc2l0dGluZyByaWdodCB3aXRoIHRoaXMgY29kZSBzbmlwcGV0LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0LCB3aGljaCBpcyBhIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mb2AsIGlzbiYjMzk7dCBiZWluZyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AuIFdlJiMzOTtyZSBkZWNsYXJpbmcgaXQsIGNyZWF0aW5nIGEgbG9jYWwgdmFyaWFibGUgZm9yIHRoZSBldGh0b29sIGluZm8sIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHByb2JsZW0gcmlnaHQgdGhlcmUhCgpJdCBhcHBlYXJzIHRoZSBjYWxsIHRvIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCAmYW1wO2tlcm5lbF9pbmZvKWAgY291bGQgYmUgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBga2VybmVsX2luZm9gLgoKSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBga2VybmVsX2luZm9gIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGNvdWxkIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzLCBlc3BlY2lhbGx5IGlmIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBmaWVsZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdW5jdGlvbiBpcyBtZWFudCB0byB3cml0ZSB0byB0aGUgZmllbGRzLCBvciBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIHN0cnVjdHVyZS4gRGVwZW5kaW5nIG9uIGhvdyBgX19ldGh0b29sX2dldF90c19pbmZvYCBoYW5kbGVzIHRoaXMgc3RydWN0LCBpdCYjMzk7cyBwb3NzaWJsZSB0aGlzIGNvZGUgaXMgcmVseWluZyBvbiB0aGUgdW5kZXJseWluZyBtZW1vcnkgdG8gYmUgemVyb2VkIG9yIHNldCBpbiBzb21lIHdheSB0aGF0JiMzOTtzIG5vdCBjbGVhcmx5IGRlZmluZWQgaGVyZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjc6XHRpbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xMDY4Olx0XHRcdFx0ICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbjEwNjk6XHR7XG4xMDcwOlx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbjEwNzE6XHRcdGludCBlcnIgPSAwO1xuMTA3MjpcdFxuMTA3MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA3NDpcdFx0aHdwcm92ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuMTA3NTpcdFx0LyogTm8gcHJvdmlkZXIgc3BlY2lmaWVkLCB1c2UgZGVmYXVsdCBiZWhhdmlvciAqL1xuMTA3NjpcdFx0aWYgKCFod3Byb3YpIHtcbjEwNzc6XHRcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4xMDc4Olx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuMTA3OTpcdFxuMTA4MDpcdFx0XHRldGh0b29sX2luaXRfdHNpbmZvKGluZm8pO1xuMTA4MTpcdFx0XHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAocGh5ZGV2KSBcdTAwMjZcdTAwMjZcbjEwODI6XHRcdFx0ICAgIHBoeV9oYXNfdHNpbmZvKHBoeWRldikpIHtcbjEwODM6XHRcdFx0XHRlcnIgPSBwaHlfdHNfaW5mbyhwaHlkZXYsIGluZm8pO1xuMTA4NDpcdFx0XHRcdC8qIFJlcG9ydCB0aGUgcGhjIHNvdXJjZSBvbmx5IGlmIHdlIGhhdmUgYSByZWFsXG4xMDg1Olx0XHRcdFx0ICogcGhjIHNvdXJjZSB3aXRoIGFuIGluZGV4LlxuMTA4NjpcdFx0XHRcdCAqL1xuMTA4NzpcdFx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXBoY19pbmRleCBcdTAwM2U9IDApIHtcbjEwODg6XHRcdFx0XHRcdGluZm8tXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9QSFlMSUI7XG4xMDg5Olx0XHRcdFx0XHRpbmZvLVx1MDAzZXBoY19waHlpbmRleCA9IHBoeWRldi1cdTAwM2VwaHlpbmRleDtcbjEwOTA6XHRcdFx0XHR9XG4xMDkxOlx0XHRcdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldF90c19pbmZvKSB7XG4xMDkyOlx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZWdldF90c19pbmZvKGRldiwgaW5mbyk7XG4xMDkzOlx0XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzZT0gMClcbjEwOTQ6XHRcdFx0XHRcdGluZm8tXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9ORVRERVY7XG4xMDk1Olx0XHRcdH1cbjEwOTY6XHRcbjEwOTc6XHRcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4xMDk4Olx0XHRcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFO1xuMTA5OTpcdFxuMTEwMDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjExMDE6XHRcdFx0cmV0dXJuIGVycjtcbjExMDI6XHRcdH1cbjExMDM6XHRcbjExMDQ6XHRcdGVyciA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgXHUwMDI2aHdwcm92LVx1MDAzZWRlc2MpO1xuMTEwNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMTA2Olx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFRpbWVzdGFtcCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gSSBzZWUgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgY2FsbGluZyBgZXRodG9vbF9pbml0X3RzaW5mbyhpbmZvKWAuIENsYXNzaWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4mIzM0OyBJJiMzOTttIG5vdCBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHRoZSBjb2RlLCBidXQgdGhlIGZhY3QgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgYmVpbmcga2lja2VkIG9mZiBoZXJlIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgY29tbW9uIGluaXRpYWxpemF0aW9uIHBhdGggb3IgYSBzcGVjaWZpYyBjb2RlIHBhdGg/IElzIHRoaXMgYSBvbmUtdGltZSB0aGluZyBvciBkb2VzIGBldGh0b29sX2luaXRfdHNpbmZvYCBnZXQgY2FsbGVkIHJlcGVhdGVkbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uLCBzbyB3aGF0IHN0YXRlIGFyZSB3ZSBwdXR0aW5nIHRoaXMgdGltZXN0YW1wIGluZm8gb2JqZWN0IGludG8/IEFyZSB3ZSBwcmUtZmlsbGluZyB3aXRoIHNhbmUgZGVmYXVsdHMsIGNoZWNraW5nIHRoZSBoYXJkd2FyZSYjMzk7cyBjYXBhYmlsaXRpZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgYGV0aHRvb2xfaW5pdF90c2luZm9gIHdpbGwgdGVsbCBtZSBleGFjdGx5IGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGF0LiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgaW5mb3JtIGhvdyB0byBkZWJ1ZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWF5IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTk6XHRzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuIDk2MDpcdHtcbiA5NjE6XHRcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiA5NjI6XHRcdGluZm8tXHUwMDNlY21kID0gRVRIVE9PTF9HRVRfVFNfSU5GTztcbiA5NjM6XHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gLTE7XG4gOTY0Olx0fVxuIDk2NTpcdFxuIDk2NjpcdGludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA5Njc6XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxuIDk2ODpcdFx0XHRcdFx0ICAgc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyX2Rlc2MgKmh3cHJvdl9kZXNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBwYXRoIHNlZW1zIHNvbGlkLiBUaGUgYGtlcm5lbF9pbmZvYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgYmVpbmcgcGFzc2VkIGFyb3VuZCwgYW5kIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgY29tZXMgZnJvbSB0aGF0IGluaXRpYWxpemVkIG1lbW9yeS4gTm8gaXNzdWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byBgbnNpbV9nZXRfdHNfaW5mb2AuIEkgaW5pdGlhbGx5IHRob3VnaHQgSSBtaWdodCBmaW5kIGEgcHJvYmxlbSwgYnV0IGl0IGxvb2tzIGxpa2UgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gICppcyogY2FsbGVkLCBidXQgdGhlICBgX19ldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiBlbnN1cmVzIHRoZSBgaW5mb2AgaXMgemVyb2VkLCB3aGljaCBtZWFucyBgbnNpbV9nZXRfdHNfaW5mb2AgZG9lc24mIzM5O3QgbGVhayBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaW5hbGx5LCB3ZSBoYXZlIGBuc2ltX3N0YXJ0X3htaXRgLiBUaGlzIGlzIG1vcmUgY29tcGxleC4gSSYjMzk7bSBzY3J1dGluaXppbmcgdGhlIHBvdGVudGlhbCB1c2Ugb2YgYHJ4X3RzYC4gVGhlIGNvZGUgaGFzIHNldmVyYWwgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIGhhcmR3YXJlIHRpbWVzdGFtcGluZyAoYFNLQlRYX0hXX1RTVEFNUGApLCAgYHR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzOgoKKiAgIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgdGhlbiBgcnhfdHNgIGlzIGFzc2lnbmVkIGEgdmFsdWUgYmVmb3JlIGl0JiMzOTtzIHVzZWQgZWl0aGVyIGluc2lkZSB0aGUgYGlmIChwdHBfaW5mb190eClgIG9yIGluIHRoZSBgZWxzZSBpZiAocHRwX2luZm9fcngpYCBibG9ja3MuIFRoZSB0aW1pbmcgaXMgaW1wb3J0YW50LCBidXQgdGhlcmUgaXMgbm8gb2J2aW91cyByYWNlIGNvbmRpdGlvbiBzaW5jZSB0aGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIGV2YWx1YXRlZCBhdCBydW50aW1lLgoqICAgVGhlIHByb2JsZW1hdGljIHBhdGggSSBzYXcgd2FzIHdoZXJlIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgYnV0IGBsaWtlbHkocHRwX2luZm9fcngpYCBpcyBmYWxzZS4gIEkgaGFkIHRvIGRvdWJsZSBjaGVjaywgYnV0IGluIHRoaXMgY2FzZSwgYHJ4X3RzYCBpc24mIzM5O3QgdXNlZCBhdCBhbGwgaW4gYW55IGNhc2UuCiogICBTaW1pbGFybHkgZm9yIGB0eF90c2AsIGlmIHRoZSBgcHRwX2luZm9fdHhgIGNvbmRpdGlvbiBpcyBtZXQsIHRoZW4gaXQgaXMgYm90aCBpbml0aWFsaXplZCBhbmQgdXNlZCwgb3RoZXJ3aXNlLCBpdCBpcyBub3QgdXNlZC4KCkkgYmVsaWV2ZSBgc2hod3RzdGFtcHNgIGlzIGluaXRpYWxpemVkIHRvIGB7fWAuIEFuZCBhbHRob3VnaCBJIGFtIG5vdCBjZXJ0YWluIGlmIHBhZGRpbmcgaXMgYWRkZWQsIGl0IGlzIGluaXRpYWxpemVkIHdoaWNoIG1lYW5zIGFueSBhY2Nlc3Mgd2lsbCBub3QgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgoKVGh1cywgYG5zaW1fc3RhcnRfeG1pdGAgaXMgYWxzbyBzYWZlLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NDEwPXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZnJhZ19tdXN0X2xvb3Aoc3RydWN0IHBhZ2UgKnApXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjEtICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ2MjpzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjMtXHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHNgOgoKKipEaXZpbmcgaW50byBgc2tiX3NoYXJlZF9od3RzdGFtcHNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyB0aW1lc3RhbXAgc3RydWN0dXJlLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhlIGBza19idWZmYCBpbnRlcm5hbHMsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGhhcmR3YXJlIHRpbWVzdGFtcHMuIFNvLCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgLCBodWg/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBwcm9iYWJseSBob2xkcyBzb21lIGNyaXRpY2FsIGluZm9ybWF0aW9uIGFib3V0IGhhcmR3YXJlLWdlbmVyYXRlZCB0aW1lc3RhbXBzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2tfYnVmZiwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGFuZCB0aGVyZWZvcmUgc2hhcmVkIGFjcm9zcyBjbG9uZWQgc2ticywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgb3B0aW1pemF0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGNvbnRhaW5zIGZpZWxkcyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIHRpbWVzdGFtcHMsIGxpa2UgaW5ncmVzcyBhbmQgZWdyZXNzLCBwZXJoYXBzIGZyb20gdmFyaW91cyBOSUNzIG9yIGhhcmR3YXJlIGJsb2Nrcy4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIHVzZXMgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0aW1lc3RhbXBzIGFyZSBhY3R1YWxseSBwb3B1bGF0ZWQgYW5kIHRoZW4gcmVhZC4gSXMgaXQgYWNjZXNzZWQgYXRvbWljYWxseT8gV2hhdCBsb2NraW5nIGlzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzPyBVbmRlcnN0YW5kaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gaGVyZSBpcyBjcnVjaWFsLiBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJvdmlzaW9ucyB0byBoYW5kbGUgbWlzc2VkIG9yIGNvcnJ1cHRlZCB0aW1lc3RhbXBzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRldmVsb3BlcnMgc3RydWN0dXJlZCB0aGlzIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIHNjYWxhYmlsaXR5LiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIG9yIGRyaXZlci1zcGVjaWZpYyBob29rcz8gVGltZSB0byBnZXQgaW50byBpdCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjI6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xuIDQ2MzpcdFx0dW5pb24ge1xuIDQ2NDpcdFx0XHRrdGltZV90XHRod3RzdGFtcDtcbiA0NjU6XHRcdFx0dm9pZCAqbmV0ZGV2X2RhdGE7XG4gNDY2Olx0XHR9O1xuIDQ2NzpcdH07XG4gNDY4Olx0XG4gNDY5Olx0LyogRGVmaW5pdGlvbnMgZm9yIHR4X2ZsYWdzIGluIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKi9cbiA0NzA6XHRlbnVtIHtcbiA0NzE6XHRcdC8qIGdlbmVyYXRlIGhhcmR3YXJlIHRpbWUgc3RhbXAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgTGVha3MgaW4gUFRQIFRpbWVzdGFtcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIChgc2tiX3NoYXJlZF9od3RzdGFtcHNgKSBpcyBqdXN0IGEgdW5pb24gb2YgYGt0aW1lX3RgIGFuZCBgdm9pZCAqYCwgYW5kIHNpbmNlIGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YCAocHJlc3VtYWJseSB6ZXJvZWQpLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBpbW1lZGlhdGUgbWVtb3J5IGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYG1vY2tfcGhjX2dldHRpbWU2NGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfbW9jay5jYC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBgdGltZWNvdW50ZXJfcmVhZGAgYW5kIHRoZW4gYG5zX3RvX3RpbWVzcGVjNjRgLCB3aGljaCBndWFyYW50ZWVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQ29uc2VxdWVudGx5LCBgdHhfdHNgIGFuZCBgcnhfdHNgIHNob3VsZCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGBtb2NrX3BoY19zZXR0aW1lNjRgIGZ1bmN0aW9uIGFsc28gYXBwZWFycyBzYWZlIGJhc2VkIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBGdXJ0aGVybW9yZSwgdGhlIGFkanVzdG1lbnRzIGZvciBgbW9ja19waGNfYWRqdGltZWAgYW5kIGBtb2NrX3BoY19hZGpmaW5lYCBqdXN0IGZpeCBsb2NraW5nIGZvciBpcnEgc2FmZXR5LCBub3QgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLgoKTXkgYXR0ZW50aW9uIHRoZW4gdHVybnMgdG8gdGhlIGNoYW5nZXMgaW4gYG5zaW1fc3RhcnRfeG1pdGAuIFRoZSBhZGRpdGlvbiBvZiBgcHRwLnB5YCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCBhbmQgYGNvbmZpZ2AgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2AgY291bGQgaW50cm9kdWNlIHNvbWV0aGluZyB1bmV4cGVjdGVkLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMgZmlyc3QuCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIGBuc2ltX3N0YXJ0X3htaXRgIGxpbmUtYnktbGluZS4gVGhlIGNvZGUgYXBwZWFycyB0byBjYXB0dXJlIHRpbWVzdGFtcHMgKGB0eF90c2AsIGByeF90c2ApIHVzaW5nIGBnZXR0aW1lNjRgLiBJdCB0aGVuIGNvbnZlcnRzIGB0eF90c2AgdG8gYSBga3RpbWVfdGAgYW5kIGFzc2lnbnMgaXQgdG8gYHNoaHd0c3RhbXBzLmh3dHN0YW1wYC4gIGBza2JfdHN0YW1wX3R4YCBzZWVtcyB0byBiZSB0aGUgY3VscHJpdC4gSXQgY2xvbmVzIHRoZSBza2IgYW5kIHF1ZXVlcyBpdCB0byB0aGUgc29ja2V0JiMzOTtzIGVycm9yIHF1ZXVlLgoKTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQ6IGBza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7YCBjb3VsZCBiZSBvdmVyd3JpdGluZyBkYXRhLiAgSG93ZXZlciwgdGhpcyBsaW5lIHNldHMgYHNrYl9od3RzdGFtcHMoc2tiKS0mZ3Q7aHd0c3RhbXBgIHdoaWNoIHJlZmVycyB0byBhIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHNgIHdpdGhpbiB0aGUgU0tCJiMzOTtzIHNoYXJlZCBpbmZvLiAgQ3J1Y2lhbGx5LCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgIGlzIGEgdW5pb24gb2YgYSBga3RpbWVfdGAgKHVzZWQgZm9yIGBod3RzdGFtcGApIGFuZCBhIGB2b2lkICpuZXRkZXZfZGF0YWAuIFNpbmNlIGBod3RzdGFtcGAgaXMgYmVpbmcgc2V0LCB0aGUgZW50aXJlIHVuaW9uIGlzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBsZWFrLgoKTm93LCB0aGlzIGNvbmRpdGlvbmFsIGBpZiAoc2tiKWAgYWZ0ZXIgYHNrYl9jb3B5YCwgYW5kIHRoZSBgZWxzZWAgc3RhdGVtZW50IHNldHRpbmcgYHNrYiA9IHNrYl9vcmlnYC4gIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gb2YgYHNrYl90c3RhbXBfdHhgLiBEb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCB0aGUgU0tCJiMzOTtzIHRpbWVzdGFtcGluZyBkYXRhPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNrYl90c3RhbXBfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NTY1MT1zdGF0aWMgYm9vbCBza2JfdHN0YW1wX3R4X3JlcG9ydF9zb190aW1lc3RhbXBpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NjY5LVxubmV0L2NvcmUvc2tidWZmLmM6NTY3MDpzdGF0aWMgdm9pZCBza2JfdHN0YW1wX3R4X3JlcG9ydF9icGZfdGltZXN0YW1waW5nKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy01NjcxLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTc2MT1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl90c3RhbXBfdHgpO1xubmV0L2NvcmUvc2tidWZmLmMtNTc2Mi1cbm5ldC9jb3JlL3NrYnVmZi5jOjU3NjM6dm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjQtXHRcdCAgIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNrYl90c3RhbXBfdHhgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgY29kZSBmb3IgYHNrYl90c3RhbXBfdHhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIGFib3V0IHRpbWVzdGFtcGluZyB0cmFuc21pdHRlZCBTS0JzLiYjMzQ7IEtub3dpbmcgdGhlIGtlcm5lbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW50cmljYWNpZXMuIElzIHRoaXMgaGFyZHdhcmUgdGltZXN0YW1waW5nPyBTb2Z0d2FyZT8gV2hlcmUgZXhhY3RseSBpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGggaXMgdGhpcyB0aW1lc3RhbXBpbmcgaGFwcGVuaW5nPyBJcyBpdCBiZWluZyBkb25lIGluc2lkZSB0aGUgZHJpdmVyLCBpbiB0aGUgbmV0d29yayBzdGFjaywgb3IgcGVyaGFwcyBpbiB0aGUgaGFyZHdhcmUgaXRzZWxmPyBJIG5lZWQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHRpbWVyIHNvdXJjZSB1c2VkIGFuZCB0aGUgcHJlY2lzaW9uIHJlcXVpcmVtZW50cyB0byBnZXQgYSBmZWVsIGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIHdvbmRlciBpZiB0aGlzIGlzIHRpZWQgdG8gc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzIG9yIGlzIGEgbW9yZSBnZW5lcmljIGZhY2lsaXR5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZT8gRG9lcyB0aW1lc3RhbXBpbmcgYWRkIHNpZ25pZmljYW50IG92ZXJoZWFkIHRvIHRyYW5zbWlzc2lvbj8gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgdXNlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRpbWVzdGFtcCByZXRyaWV2YWwuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGluIHBsYWNlLCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVycyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUga2V5IGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHByb3ZpZGluZyBhY2N1cmF0ZSB0cmFuc21pc3Npb24gdGltZSBpbmZvcm1hdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NjM6XHR2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxuNTc2NDpcdFx0XHQgICBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcylcbjU3NjU6XHR7XG41NzY2Olx0XHRyZXR1cm4gX19za2JfdHN0YW1wX3R4KG9yaWdfc2tiLCBOVUxMLCBod3RzdGFtcHMsIG9yaWdfc2tiLVx1MDAzZXNrLFxuNTc2NzpcdFx0XHRcdCAgICAgICBTQ01fVFNUQU1QX1NORCk7XG41NzY4Olx0fVxuNTc2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl90c3RhbXBfdHgpO1xuNTc3MDpcdFxuNTc3MTpcdCNpZmRlZiBDT05GSUdfV0lSRUxFU1NcbjU3NzI6XHR2b2lkIHNrYl9jb21wbGV0ZV93aWZpX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFja2VkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NgoJCQkJCQkJb3V0cHV0OiA0NzIKCQkJCQkJCXRob3VnaHRzOiAzMDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhhcmR3YXJlIFRpbWVzdGFtcGluZyBpbiBgbmV0ZGV2c2ltYDogQSBUaG9yb3VnaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBfX3NrYl90c3RhbXBfdHhgIHNlZW1zIGhhcm1sZXNzLiBJdCBjbG9uZXMgdGhlIFNLQiBhbmQgcXVldWVzIGl0LCBidXQgdGhlIG9yaWdpbmFsIFNLQiByZW1haW5zIHVudG91Y2hlZCwgd2hpY2ggaXMgZmluZS4gVGhlbiwgbW9kaWZ5aW5nIGBza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wYCBpcyBzdHJhaWdodGZvcndhcmQ7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgY29weSBvciB0aGUgb3JpZ2luYWwgU0tCLCBhbmQgdGhlIHRpbWVzdGFtcCBpcyBiZWluZyBzZXQgaW4gYSBjb250cm9sbGVkIG1hbm5lci4gTm8gcHJvYmxlbXMgdGhlcmUuCgpOZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgcmV2aXNpdCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSSByZWNhbGwgdGhlIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgYmVpbmcgemVyb2VkIG9uIGFsbG9jYXRpb24uIE5vdywgYGRldl9nZXRfaHd0c3RhbXBgIGluaXRpYWxpemVzIGEgbG9jYWwgYGtlcm5lbF9jZmdgIHRvIGB7fWAgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIG92ZXJ3cml0ZSBwYXJ0cyBvZiBpdCBsb29rIHNhZmUgYmVjYXVzZSBgbnMtJmd0O3RzdGFtcF9jb25maWdgJiMzOTtzIHJlbGV2YW50IGZpZWxkcyBhcmUgZWl0aGVyIGluaXRpYWxpemVkIG9yIG5vdCB1c2VkLiBJJiMzOTt2ZSB0byBkb3VibGUtY2hlY2sgYGNvcHlfdG9fdXNlcmAuIEl0IGNvcGllcyB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZnJvbSBga2VybmVsX2NmZ2AsIGFuZCB0aGUgZGVzdGluYXRpb24gc3RydWN0LCBgY2ZnYCwgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgc2l6ZSBpcyBvbmx5IDEyIGJ5dGVzIGFuZCBgY29weV90b191c2VyYCBjb3BpZXMgZXhhY3RseSB0aGF0LCBhbmQgdGh1cyBubyBpc3N1ZXMgd2l0aCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4KCk5vdywgaG9sZCBvbi4gV2hhdCBhYm91dCBwYWRkaW5nIHdpdGhpbiBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgPyBUaGlzIHN0cnVjdCBpcyBpbnRlcm5hbCB0byB0aGUga2VybmVsLCBhbmQgZXZlbiBpZiB0aGVyZSAqd2FzKiB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGl0IGlzbiYjMzk7dCBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gT25seSB0aGUgc21hbGxlciwgY2xlYXJseSBkZWZpbmVkIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCBpcyBjb3BpZWQgYW5kIGlzIGZpbmUuIFNvLCBzdGlsbCBnb29kLgoKQWxyaWdodCwgbW92aW5nIG9uIHRvIGBuc2ltX3NldF90c19jb25maWdgLCBpdCB1cGRhdGVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AmIzM5O3MgYHR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYCBpbiBhIGNvbnRyb2xsZWQgd2F5LCBhbmQgc2luY2Ugd2UgdXBkYXRlIGJvdGggc3RydWN0cyBhdG9taWNhbGx5LCBpdCBzZWVtcyBzYWZlLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgcGl0ZmFsbHMuIGBtb2NrX3BoY19hZGpmaW5lYCwgZXRjLiwgaW4gYHB0cF9tb2NrLmNgIG9ubHkgY2hhbmdlIHNwaW5sb2NrcyB0byB0aGVpciBpcnFzYXZlIGNvdW50ZXJwYXJ0cywgc28gdGhlc2UgYXJlIGxvY2tpbmcgY2hhbmdlcyBhbmQgbm90IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGhlcmUuCgpOb3csIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIHNhZmU7IGl0IHNpbXBseSByZXR1cm5zIGEgcG9pbnRlciB0byBgcGhjLSZndDtpbmZvYC4gTm8gbWFnaWMsIG5vIG1lbW9yeSBpc3N1ZXMuCgpIb3cgYWJvdXQgYG5zaW1fc3RhcnRfeG1pdGA/IFRoYXQgc2VlbXMgZmluZTsgaXQgdXNlcyBgcHRwX2luZm9fdHhgIGFmdGVyIGNoZWNraW5nIGBTS0JUWF9IV19UU1RBTVBgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNhZmV0eSBvZiBgc2tiX2NvcHlgIHdoaWNoIGlzIGNydWNpYWwsIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggaXQ6IGlmIHRoZSBjb3B5IHN1Y2NlZWRzLCB0aGUgb3JpZ2luYWwgU0tCIGlzIGNvbnN1bWVkLCBhbmQgdGhlIHRpbWVzdGFtcCBpcyBzZXQgb24gdGhlIG5ldyBjb3B5IHVzaW5nIGBza2JfaHd0c3RhbXBzKClgLiBUaGlzIGxvb2tzIHNhZmUuIFRoZSBuZXcgU0tCIGlzIHRoZW4gZm9yd2FyZGVkLCBhcyBpdCBzaG91bGQgYmUuIE5vIGlzc3VlcyB0aGVyZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkYXRhIHJhY2VzLCBzbyBsZXQmIzM5O3MgY2hlY2sgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gYG5zLSZndDt0c3RhbXBfY29uZmlnYCwgYW5kIHRoZSB1c2Ugb2YgdGhlc2UgaXMgZmluZSBiZWNhdXNlIHRoZXkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVyLgoKSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYHNoaHd0c3RhbXBzYCBhbmQgYHR4X3RzYCwgYHJ4X3RzYCBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9O2AgbGluZSB6ZXJvLWluaXRpYWxpemVzIHRoaXMgc3RydWN0LiBTYWZlLgoKTm93LCBhYm91dCBgdHhfdHNgIGFuZCBgcnhfdHNgIEkgbmVlZCB0byByZXZpZXcgdGhpcy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBgcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NGAgYW5kIGBwdHBfaW5mb19yeC0mZ3Q7Z2V0dGltZTY0YCBmdW5jdGlvbnMuIElmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgdGhlbiBgdHhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgYHB0cF9pbmZvX3J4YCBpcyB0cnVlLCB0aGVuIGByeF90c2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIGFuZCB1c2VkLiBJZiBub3QsIGl0IGlzIHVudXNlZC4KCldhaXQgYSBzZWNvbmQuIFdoYXQgaWYgYHB0cF9pbmZvX3R4LSZndDtnZXR0aW1lNjRgIGZhaWxzPyBJIHJlbWVtYmVyIHRoYXQgdGhlIGBnZXR0aW1lNjRgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBhbmQgdGhlIG1vY2sgaW1wbGVtZW50YXRpb24gaW4gYHB0cF9tb2NrLmNgIGFsd2F5cyByZXR1cm4gMCwgaW5pdGlhbGl6aW5nIHRoZSBgdHNgIHBhcmFtZXRlci4gUGx1cywgYHB0cF9pbmZvX3R4YCBhbHdheXMgY2FsbHMgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFNvIHRoZSB0aW1lc3RhbXBpbmcgYWx3YXlzIGluaXRpYWxpc2VzIHByb3Blcmx5LgoKRmluYWxseSwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYG5zaW1fZ2V0X3RzX2luZm9gIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSW4gYG5zaW1fZ2V0X3RzX2luZm9gLCBgaW5mb2AgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuIFNvIGFsc28gc2FmZS4gQW5kIGluCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXG5cbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYC4gVGhlIGBuZXRkZXZzaW1gIHByaXZhdGUgc3RydWN0dXJlIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBgYWxsb2NfbmV0ZGV2X21xYCwgc28gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cbjMuIEluIGBuc2ltX3N0YXJ0X3htaXRgLCBsb2NhbCB2YXJpYWJsZXMgYHR4X3RzYCBhbmQgYHJ4X3RzYCBhcmUgb25seSB1c2VkIGlmIHRoZWlyIHJlc3BlY3RpdmUgYHB0cF9pbmZvX3R4YCBhbmQgYHB0cF9pbmZvX3J4YCBwb2ludGVycyBhcmUgbm9uLU5VTEwuIFdoZW4gbm9uLU5VTEwsIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGUgYHNoaHd0c3RhbXBzYCBzdHJ1Y3QgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7fWApLlxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXG5cblNpbmNlIGFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxuXG5BbmFseXNpcyBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUga2VybmVsIHRoZW4gY29waWVzIG9ubHkgdGhlIGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgIGZpZWxkcyB0byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCAod2hpY2ggaGFzIG5vIHBhZGRpbmcpIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cbjQuIFRoZSBjaGFuZ2VzIGluIGBwdHBfbW9jay5jYCBhZGRyZXNzIGEgbG9ja2luZyBjb250ZXh0IGlzc3VlIChjaGFuZ2luZyBgc3Bpbl9sb2NrYCB0byBgc3Bpbl9sb2NrX2lycXNhdmVgKSwgd2hpY2ggaXMgYSBjb25jdXJyZW5jeSBidWcgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ2OjQ1LjkxNDM0MTc5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDU4MzMxMTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXFxuXFxuQW5hbHlzaXMgb2YgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cXHUwMDNldHN0YW1wX2NvbmZpZ2AgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGtlcm5lbCB0aGVuIGNvcGllcyBvbmx5IHRoZSBgZmxhZ3NgLCBgdHhfdHlwZWAsIGFuZCBgcnhfZmlsdGVyYCBmaWVsZHMgdG8gYSBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgKHdoaWNoIGhhcyBubyBwYWRkaW5nKSBiZWZvcmUgY29weWluZyB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuXFxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cXG40LiBUaGUgY2hhbmdlcyBpbiBgcHRwX21vY2suY2AgYWRkcmVzcyBhIGxvY2tpbmcgY29udGV4dCBpc3N1ZSAoY2hhbmdpbmcgYHNwaW5fbG9ja2AgdG8gYHNwaW5fbG9ja19pcnFzYXZlYCksIHdoaWNoIGlzIGEgY29uY3VycmVuY3kgYnVnIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDY6NDUuOTE0MzUyNjI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxMTQxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjc2NTJhZTU2MTQ3ZjY2NjM1ZGUxODNmYTllMjE5YjA3ZDMyOGYxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xcbmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmNcXG5AQCAtMjAwLDcgKzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbitcXHRldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7XFxuK1xcbiBcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cXHUwMDNlcGhjKTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXBoY19pbmRleCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxcbitcXHRcXHRcXHRcXHQgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTtcXG4rXFxuK1xcdGluZm8tXFx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pO1xcbitcXHRpbmZvLVxcdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjdhMjY4YTFhNTQ1NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTMwLDYgKzMwLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC91ZHBfdHVubmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYnVzeV9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lY291bnRlci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm5ldGRldnNpbS5oXFxcIlxcbiBcXG5AQCAtMTIyLDEyICsxMjQsMTggQEAgc3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuIFxcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fdHggPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3J4ID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjtcXG4gXFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcl9kZXY7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucztcXG4gXFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcXG4rXFx0aW50IHJ4X2ZpbHRlciwgdHhfdHlwZTtcXG4gXFx0c3RydWN0IG5zaW1fcnEgKnJxO1xcbiBcXHRpbnQgcnhxO1xcbiBcXHRpbnQgZHI7XFxuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2JfbGluZWFyaXplKHNrYik7XFxuIFxcbiBcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuK1xcdHJ4X2ZpbHRlciA9IFJFQURfT05DRShwZWVyX25zLVxcdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XFxuK1xcdHR4X3R5cGUgPSBSRUFEX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XFxuK1xcbitcXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxcbitcXHRcXHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVxcdTAwM2VwaGMpO1xcbitcXG4rXFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pXFxuK1xcdFxcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVxcdTAwM2VwaGMpO1xcbitcXG4rXFx0LyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnRcXG4rXFx0ICogdGhlIFRYIHRpbWVzdGFtcCBiYWNrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHB0cF9pbmZvX3R4KSB7XFxuK1xcdFxcdC8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXJcXG4rXFx0XFx0ICogZm9yIGJldHRlciBhY2N1cmFjeVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cHRwX2luZm9fdHgtXFx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXFx1MDAyNnR4X3RzKTtcXG4rXFx0XFx0aWYgKGxpa2VseShwdHBfaW5mb19yeCkpXFxuK1xcdFxcdFxcdHB0cF9pbmZvX3J4LVxcdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFxcdTAwMjZyeF90cyk7XFxuK1xcdFxcdHNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7XFxuK1xcdFxcdHNrYl90c3RhbXBfdHgoc2tiX29yaWcsIFxcdTAwMjZzaGh3dHN0YW1wcyk7XFxuK1xcbitcXHRcXHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXFxuK1xcdFxcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcXG4rXFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXFxuK1xcdFxcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoc2tiKVxcbitcXHRcXHRcXHRjb25zdW1lX3NrYihza2Jfb3JpZyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2tiID0gc2tiX29yaWc7XFxuK1xcdH0gZWxzZSBpZiAocHRwX2luZm9fcngpIHtcXG4rXFx0XFx0cHRwX2luZm9fcngtXFx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXFx1MDAyNnJ4X3RzKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHB0cF9pbmZvX3J4KVxcbitcXHRcXHRza2JfaHd0c3RhbXBzKHNrYiktXFx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBza2IsIHJxLCBwc3BfZXh0KSA9PSBORVRfUlhfRFJPUCkpXFxuIFxcdFxcdGdvdG8gb3V0X2Ryb3BfY250O1xcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBuc2ltX3NldF90c19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IHJ4X2ZpbHRlcjtcXG4rXFxuK1xcdGlmICghbnMtXFx1MDAzZXBoYylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuK1xcdFxcdFdSSVRFX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT0ZGKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdFxcdFdSSVRFX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT04pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2VyeF9maWx0ZXIpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcXG4rXFx0XFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0V1JJVEVfT05DRShucy1cXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XFxuK1xcdGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0KmNvbmZpZyA9IG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuc2ltX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuQEAgLTY0Nyw2ICs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb192bGFuX3J4X2FkZF92aWRcXHQ9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLFxcbiBcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcXHQ9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCxcXG4gXFx0Lm5ldF9zaGFwZXJfb3BzXFx0XFx0PSBcXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxcbitcXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxcbitcXHQubmRvX2h3dHN0YW1wX3NldFxcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjVjZGQxZTI5NDQ0NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTEwOCw2ICsxMDgsNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcXG4gXFx0c3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQ7XFxuK1xcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xcbiBcXHRzdHJ1Y3QgbnNpbV9ycSAqKnJxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX21vY2suYyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcXG5pbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jXFxuQEAgLTQ5LDE1ICs0OSwxNiBAQCBzdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpXFxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzNjQgYWRqO1xcbiBcXG4gXFx0YWRqID0gKHM2NClzY2FsZWRfcHBtIFxcdTAwM2NcXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XFxuIFxcdGFkaiA9IGRpdl9zNjQoYWRqLCBNT0NLX1BIQ19GQURKX0RFTk9NSU5BVE9SKTtcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR0aW1lY291bnRlcl9yZWFkKFxcdTAwMjZwaGMtXFx1MDAzZXRjKTtcXG4gXFx0cGhjLVxcdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBoYy1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjUsMTAgKzY2LDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4gc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRzcGluX2xvY2soXFx1MDAyNnBoYy1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0dGltZWNvdW50ZXJfYWRqdGltZShcXHUwMDI2cGhjLVxcdTAwM2V0YywgZGVsdGEpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuIFxcdHU2NCBucyA9IHRpbWVzcGVjNjRfdG9fbnModHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdHRpbWVjb3VudGVyX2luaXQoXFx1MDAyNnBoYy1cXHUwMDNldGMsIFxcdTAwMjZwaGMtXFx1MDAzZWNjLCBucyk7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTg5LDExICs5MiwxMiBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHU2NCBucztcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXFx1MDAyNnBoYy1cXHUwMDNldGMpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHQqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTtcXG4gXFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xcbiBcXG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjZwaGMtXFx1MDAzZWluZm87XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmhcXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XFxuIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIHZvaWQgbW9ja19waGNfZGVzdHJveShzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuK3N0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKTtcXG4gXFxuICNlbHNlXFxuIFxcbkBAIC0zMyw2ICszNCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYylcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9QVFBfTU9DS19IXyAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXFxuaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXFxuQEAgLTE5LDYgKzE5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdG5ldHBvbGxfYmFzaWMucHkgXFxcXFxcbiBcXHRwaW5nLnB5IFxcXFxcXG4gXFx0cHNwLnB5IFxcXFxcXG4rXFx0cHRwLnB5IFxcXFxcXG4gXFx0cXVldWVzLnB5IFxcXFxcXG4gXFx0cmluZ19yZWNvbmZpZy5weSBcXFxcXFxuIFxcdHNoYXBlci5weSBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XFxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxcbiBDT05GSUdfUFBQPXlcXG4gQ09ORklHX1BQUE9FPXlcXG4rQ09ORklHX1BUUF8xNTg4X0NMT0NLX01PQ0s9eVxcbiBDT05GSUdfVkxBTl84MDIxUT1tXFxuIENPTkZJR19YRFBfU09DS0VUUz15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcXG5AQCAtMCwwICsxLDgyIEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBCeSBNYWNpZWsgTWFjaG5pa293c2tpIFxcdTAwM2NtYWNpZWtAbWFjaG5pa293c2tpLm5ldFxcdTAwM2UgKGMpIDIwMjYsXFxuK1xcbitcXFwiXFxcIlxcXCJcXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXFxuK1xcbitTdGFydCBhIHB0cDRsIGxlYWRlciBhbmQgZm9sbG93ZXIgYW5kIGNoZWNrIHRoYXQgdGhlIGZvbGxvd2VyIGxvY2tzIG9udG8gdGhlXFxuK2xlYWRlciAoc3RhdGUgczIpXFxuK1xcXCJcXFwiXFxcIlxcbitcXG4raW1wb3J0IHRpbWVcXG4rXFxuK2Zyb20gbGliLnB5IGltcG9ydCAoXFxuKyAgICBOZXREcnZFcEVudixcXG4rICAgIGJrZyxcXG4rICAgIGZkX3JlYWRfdGltZW91dCxcXG4rICAgIGtzZnRfZXhpdCxcXG4rICAgIGtzZnRfcHIsXFxuKyAgICBrc2Z0X3J1bixcXG4rICAgIGtzZnRfdHJ1ZSxcXG4rKVxcbitcXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcXG4rXFxuK1xcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZWFkIHRoZSBmb2xsb3dlciBzdGRvdXQgcGlwZSB1bnRpbCBwdHA0bCByZXBvcnRzIHN5bmMgc3RhdGUgczIuXFxuK1xcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBmZF9maWxlID0gZm9sbG93ZXIucHJvYy5zdGRvdXRcXG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxcbisgICAgYnVmID0gYlxcXCJcXFwiXFxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XFxuKyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIFxcdTAwM2MgZGVhZGxpbmU6XFxuKyAgICAgICAgaWYgYlxcXCIgczIgXFxcIiBpbiBidWY6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKClcXG4rICAgICAgICAgICAgaWYgY2h1bms6XFxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxcbisgICAgICAgICAgICBidWYgKz0gZmRfcmVhZF90aW1lb3V0KGZkLCBtaW4oMSwgcmVtYWluaW5nKSlcXG4rICAgICAgICBleGNlcHQgVGltZW91dEVycm9yOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgcmV0dXJuIGJcXFwiIHMyIFxcXCIgaW4gYnVmLCBidWYuZGVjb2RlKFxcXCJ1dGYtOFxcXCIsIFxcXCJyZXBsYWNlXFxcIilcXG4rXFxuK1xcbitkZWYgcHRwX3N5bmNfdGVzdChjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiVmVyaWZ5IHB0cDRsIGxlYWRlci9mb2xsb3dlciBzeW5jaHJvbml6YXRpb24gcmVhY2hlcyBzdGF0ZSBzMi5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcXFwicHRwNGxcXFwiLCByZW1vdGU9VHJ1ZSlcXG4rXFxuKyAgICBsZWFkZXJfY21kID0gZlxcXCJwdHA0bCAtaSB7Y2ZnLnJlbW90ZV9pZm5hbWV9IC1tIC0yXFxcIlxcbisgICAgZm9sbG93ZXJfY21kID0gZlxcXCJwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTJcXFwiXFxuK1xcbisgICAgd2l0aCBia2cobGVhZGVyX2NtZCwgaG9zdD1jZmcucmVtb3RlKSwgXFxcXFxcbisgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjpcXG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcXG4rXFxuKyAgICBpZiBzeW5jZWQ6XFxuKyAgICAgICAgcmV0dXJuXFxuK1xcbisgICAga3NmdF9wcihmXFxcInB0cDRsIGZvbGxvd2VyIGRpZCBub3QgcmVhY2ggbG9ja2VkIHN0YXRlIChzMikgd2l0aGluIFxcXCJcXG4rICAgICAgICAgICAgZlxcXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcXFwiKVxcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFxcXCJcXFxcblxcXCIpWy0xMDpdXFxuKyAgICBrc2Z0X3ByKFxcXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcXFwiICsgXFxcIiB8IFxcXCIuam9pbih0YWlsKSlcXG4rICAgIGtzZnRfdHJ1ZShGYWxzZSwgXFxcIlBUUCBzeW5jIHRpbWVvdXRcXFwiKVxcbitcXG4rXFxuK2RlZiBtYWluKCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSdW4ga3NmdCB0ZXN0cy5cXFwiXFxcIlxcXCJcXG4rICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcXG4rICAgICAgICBrc2Z0X3J1bihbcHRwX3N5bmNfdGVzdF0sIGFyZ3M9KGNmZywgKSlcXG4rICAgIGtzZnRfZXhpdCgpXFxuK1xcbitcXG4raWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIG1haW4oKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Njo0Ny4zMTY0NzM1MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MjI5MzczMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5pbmRleCAwMjVlYTc5ODc5ZjNhLi42Mjg4NzhhY2QxNThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuQEAgLTIwMCw3ICsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0ZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xuK1xuIFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cdTAwM2VwaGMpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTtcbitcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0zMCw2ICszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIm5ldGRldnNpbS5oXCJcbiBcbkBAIC0xMjIsMTIgKzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldixcbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9vcmlnID0gc2tiO1xuIFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zO1xuIFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcbitcdGludCByeF9maWx0ZXIsIHR4X3R5cGU7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqcnE7XG4gXHRpbnQgcnhxO1xuIFx0aW50IGRyO1xuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4rXHRyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy1cdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XG4rXHR0eF90eXBlID0gUkVBRF9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XG4rXG4rXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuK1x0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG4rXG4rXHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbitcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbitcbitcdC8qIElmIFRYIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBpcyBlbmFibGVkLCBzYW1wbGUgb3VyIFBIQyBhbmQgcmVwb3J0XG4rXHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4rXHQgKi9cbitcdGlmIChwdHBfaW5mb190eCkge1xuK1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4rXHRcdCAqIGZvciBiZXR0ZXIgYWNjdXJhY3lcbitcdFx0ICovXG4rXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuK1x0XHRpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSlcbitcdFx0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbitcdFx0c2tiX3RzdGFtcF90eChza2Jfb3JpZywgXHUwMDI2c2hod3RzdGFtcHMpO1xuK1xuK1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXG4rXHRcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcbitcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4rXHRcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiKVxuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYl9vcmlnKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYiA9IHNrYl9vcmlnO1xuK1x0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuK1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdH1cbitcbitcdGlmIChwdHBfaW5mb19yeClcbitcdFx0c2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XG4rXG4gXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxuIFx0XHRcdFx0ICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKVxuIFx0XHRnb3RvIG91dF9kcm9wX2NudDtcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0aW50IHJ4X2ZpbHRlcjtcbitcbitcdGlmICghbnMtXHUwMDNlcGhjKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09OKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTlRQX0FMTDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XG4rXHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgKzc1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gbnNpbV92bGFuX3J4X2FkZF92aWQsXG4gXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gbnNpbV92bGFuX3J4X2tpbGxfdmlkLFxuIFx0Lm5ldF9zaGFwZXJfb3BzXHRcdD0gXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxuK1x0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuK1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiArMTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcbiBcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuK1x0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xuIFx0c3RydWN0IG5zaW1fcnEgKipycTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuaW5kZXggNGQ2NmI2MTQ3MTIxMC4uN2E0ZTVmMzI3NGE2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbkBAIC00OSwxNSArNDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHM2NCBhZGo7XG4gXG4gXHRhZGogPSAoczY0KXNjYWxlZF9wcG0gXHUwMDNjXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XG4gXHRhZGogPSBkaXZfczY0KGFkaiwgTU9DS19QSENfRkFESl9ERU5PTUlOQVRPUik7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbiBcdHBoYy1cdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NSwxMCArNjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfYWRqdGltZShcdTAwMjZwaGMtXHUwMDNldGMsIGRlbHRhKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2luaXQoXHUwMDI2cGhjLVx1MDAzZXRjLCBcdTAwMjZwaGMtXHUwMDNlY2MsIG5zKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSArOTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTY0IG5zO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdCp0cyA9IG5zX3RvX3RpbWVzcGVjNjQobnMpO1xuIFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcbiBcbitzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbit7XG4rXHRyZXR1cm4gXHUwMDI2cGhjLVx1MDAzZWluZm87XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XG4gc3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIFxuICNlbHNlXG4gXG5AQCAtMzMsNiArMzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5pbmRleCBkNWJmNGNiNjM4YThjLi4xOGJiN2M2OTNiNjlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5AQCAtMTksNiArMTksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRwb2xsX2Jhc2ljLnB5IFxcXG4gXHRwaW5nLnB5IFxcXG4gXHRwc3AucHkgXFxcbitcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXG4gQ09ORklHX1BQUD15XG4gQ09ORklHX1BQUE9FPXlcbitDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DSz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5AQCAtMCwwICsxLDgyIEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgXHUwMDNjbWFjaWVrQG1hY2huaWtvd3NraS5uZXRcdTAwM2UgKGMpIDIwMjYsXG4rXG4rXCJcIlwiXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXG4rXG4rU3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuK2xlYWRlciAoc3RhdGUgczIpXG4rXCJcIlwiXG4rXG4raW1wb3J0IHRpbWVcbitcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxuKyAgICBOZXREcnZFcEVudixcbisgICAgYmtnLFxuKyAgICBmZF9yZWFkX3RpbWVvdXQsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbispXG4rXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcbitcbitcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XG4rICAgIFwiXCJcIlJlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi5cbitcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxuKyAgICBcIlwiXCJcbisgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxuKyAgICBidWYgPSBiXCJcIlxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XG4rICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgXHUwMDNjIGRlYWRsaW5lOlxuKyAgICAgICAgaWYgYlwiIHMyIFwiIGluIGJ1ZjpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgY2h1bmsgPSBmZF9maWxlLnJlYWQoKVxuKyAgICAgICAgICAgIGlmIGNodW5rOlxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxuKyAgICAgICAgICAgIGJ1ZiArPSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuKyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICByZXR1cm4gYlwiIHMyIFwiIGluIGJ1ZiwgYnVmLmRlY29kZShcInV0Zi04XCIsIFwicmVwbGFjZVwiKVxuK1xuK1xuK2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4rICAgIFwiXCJcIlZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcInB0cDRsXCIsIHJlbW90ZT1UcnVlKVxuK1xuKyAgICBsZWFkZXJfY21kID0gZlwicHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMlwiXG4rICAgIGZvbGxvd2VyX2NtZCA9IGZcInB0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMlwiXG4rXG4rICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFxcXG4rICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6XG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbitcbisgICAgaWYgc3luY2VkOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIGtzZnRfcHIoZlwicHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCJcbisgICAgICAgICAgICBmXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcIilcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFwiXFxuXCIpWy0xMDpdXG4rICAgIGtzZnRfcHIoXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcIiArIFwiIHwgXCIuam9pbih0YWlsKSlcbisgICAga3NmdF90cnVlKEZhbHNlLCBcIlBUUCBzeW5jIHRpbWVvdXRcIilcbitcbitcbitkZWYgbWFpbigpOlxuKyAgICBcIlwiXCJSdW4ga3NmdCB0ZXN0cy5cIlwiXCJcbisgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuKyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpXG4rICAgIGtzZnRfZXhpdCgpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBtYWluKClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ2OjQ3LjMxNjQ3NDkxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzA5ODQyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSGFyZHdhcmUgVGltZXN0YW1waW5nIFBhdGNoIGZvciBgbmV0ZGV2c2ltYCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIGFkZGluZyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgdG8gdGhlIGBuZXRkZXZzaW1gIGRyaXZlci4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyB0b3VjaGluZyBhIGZldyBmaWxlczogdGhlIGNvcmUgYG5ldGRldnNpbWAgZmlsZXMgKGBldGh0b29sLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgKSwgYHB0cF9tb2NrLmNgIGFuZCBgcHRwX21vY2suaGAsIGFuZCBpdCBhbHNvIGluY2x1ZGVzIGEgc2VsZnRlc3QuIEJhc2ljYWxseSwgaXQncyB1c2luZyB0aGUgYG1vY2tfcGhjYCDigJMgdGhlIFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrIOKAkyB0byBwcm92aWRlIHRoZXNlIHRpbWVzdGFtcHMgZm9yIHRoZSBzaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuXG5cblRoZSBtYWluIHdvcmsgc2VlbXMgdG8gYmUgaW4gaW1wbGVtZW50aW5nIHRoZSBgbmRvX2h3dHN0YW1wX2dldGAgYW5kIGBuZG9faHd0c3RhbXBfc2V0YCBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYC4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYG5zaW1fc3RhcnRfeG1pdGAgdG8gZ3JhYiBUWCBhbmQgUlggdGltZXN0YW1wcy4gQWgsIGFuZCB0aGV5IGhhZCB0byBtb2RpZnkgdGhlIGBtb2NrX3BoY2AgZnVuY3Rpb25zIHRvIHVzZSBgc3Bpbl9sb2NrX2lycXNhdmVgIGluc3RlYWQgb2YgYHNwaW5fbG9ja2AgYmVjYXVzZSBgbnNpbV9zdGFydF94bWl0YCBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIGl0J3MgYSBjcml0aWNhbCBzZWN0aW9uIGlzc3VlLiBHb29kIGNhdGNoIHRoZXJlLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIGBuZXRkZXZzaW1gIGlzLCBhZnRlciBhbGwsIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gQW5kIHllcywgaXTigJlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gQW55IHRpbWUgd2UgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5IOKAkyBlc3BlY2lhbGx5IHNvbWV0aGluZyBsaWtlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyB0aGF0IHRvdWNoZXMgZGlmZmVyZW50IGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgdGhpbmdzIGxpa2UgYGV0aHRvb2xgIGFuZCBgc2tiYCB0cmFuc21pc3Npb24g4oCTIHRoYXQncyBhIHByaW1lIHRhcmdldC4gRnV6emluZyBjYW4gZXhwb3NlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgYmVoYXZpb3Igb2YgdGhpcyBuZXcgZmVhdHVyZSB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCdzIHZlcmlmeSB0aGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBvYnZpb3VzIG9uZSBpcyBgQ09ORklHX05FVERFVlNJTWAsIGFuZCB0aGVuIGBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgaXMgYWxzbyByZXF1aXJlZCwgYW5kIGFwcGVhcnMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGZ0ZXN0IGNvbmZpZy4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBLY29uZmlnIHNldHVwIGZvciBib3RoIGBORVRERVZTSU1gIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgdG8gZW5zdXJlIHRoZSBwYXRjaCBpcyBidWlsdCBjb3JyZWN0bHkuIE9rYXksIEknbGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDY6NTQuNzQ3NDYyMjg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcyNTcxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Njo1Ni42MzQ3MjQ3NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxMjg0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIExldCdzIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0J3MgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLCBhbmQgd2hhdCBmdW5jdGlvbnMgZG9lcyBpdCBoYXZlIGF0IGl0cyBkaXNwb3NhbD8gU3BlY2lmaWNhbGx5LCBpcyBpdCB1cCBhbmQgcnVubmluZyBhcyBhIGNsb2NrLCBvciBpcyBpdCBiZWhhdmluZyBhcyBpdCBzaG91bGQgYXMgYSBtb2NrLiBXaGF0IGludGVyZmFjZXMgZG9lcyBpdCBleHBvc2UsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQga2luZCBvZiB0ZXN0cyBoYXZlIGJlZW4gcnVuIGFnYWluc3QgdGhpcyBjb21wb25lbnQsIGFuZCBkbyB0aG9zZSByZXN1bHRzIHN1Z2dlc3QgYW55IHBvdGVudGlhbCBwaXRmYWxscyB0aGF0IHdhcnJhbnQgaW1tZWRpYXRlIHNjcnV0aW55PyBEb2VzIHRoZSBtb2NraW5nIGJlaGF2aW9yIGFsaWduIHdpdGggdGhlIGRlZmluZWQgcmVxdWlyZW1lbnRzIGFuZCBleHBlY3RlZCBvdXRjb21lcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzLCBhcyBhIG1vY2sgd2lsbCBhZmZlY3QgZGVwZW5kZW5jaWVzIGFzIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjAwLjEwNjAxMzEwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk2MTg5NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTc1PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTg4LVxcdHRyaXN0YXRlIFxcXCJNb2NrLXVwIFBUUCBjbG9ja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDIuNTAyMjA4MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjU5NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBQVFBfMTU4OF9DTE9DS19NT0NLYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBQVFBfMTU4OF9DTE9DS19NT0NLYCBiZWFzdCBhbmQgZmlndXJlIG91dCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYXJjaGl0ZWN0dXJlIHRvIGVpdGhlciB3b3JrIHdpdGggb3IgcmVwbGFjZSB0aGlzLiBUaGUgXCJtb2NrXCIgcGFydCBpbXBsaWVzIHRoYXQgaXQncyBwcm9iYWJseSBzaW11bGF0aW5nIGEgUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgY2xvY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGEgcmVhbCBQVFAgaW1wbGVtZW50YXRpb24gaXQgaXMgc3RhbmRpbmcgaW4gZm9yLiBUaGlzIG1lYW5zIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcywgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIG1ha2UgZmlsZXMsIHdoYXRldmVyJ3MgcmVsZXZhbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwgZm9yIGNvbXByZWhlbmRpbmcgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCdzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBpdCBmaXRzLCBhbmQgaG93IEkgY2FuIGludGVyYWN0IHdpdGggaXQuIFNvLCBsZXQgbWUgc3RhcnQgcG9raW5nIGFyb3VuZCBhbmQgdW5yYXZlbCB0aGlzIGRlcGVuZGVuY3kgd2ViLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDUuNjY4ODA3NzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB1c2luZyBSZW5lc2FzIEZlbXRvQ2xvY2szIFdpcmVsZXNzXFxuIDE4MTpcXHRcXHQgIGFzIGEgUFRQIGNsb2NrLiBUaGlzIGNsb2NrIGlzIG9ubHkgdXNlZnVsIGlmIHlvdXIgdGltZSBzdGFtcGluZ1xcbiAxODI6XFx0XFx0ICBNQUMgaXMgY29ubmVjdGVkIHRvIHRoZSBSRU5FU0FTIGNoaXAuXFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxODU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfZmMzLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbiAxODg6XFx0XFx0dHJpc3RhdGUgXFxcIk1vY2stdXAgUFRQIGNsb2NrXFxcIlxcbiAxODk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0ICBUaGlzIGRyaXZlciBvZmZlcnMgYSBzZXQgb2YgUFRQIGNsb2NrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zIG92ZXJcXG4gMTkyOlxcdFxcdCAgdGhlIHN5c3RlbSBtb25vdG9uaWMgdGltZS4gSXQgY2FuIGJlIHVzZWQgYnkgdmlydHVhbCBuZXR3b3JrIGRldmljZVxcbiAxOTM6XFx0XFx0ICBkcml2ZXJzIHRvIGVtdWxhdGUgUFRQIGNhcGFiaWxpdGllcy5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE5NjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHB0cF9tb2NrLlxcbiAxOTc6XFx0XFxuIDE5ODpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXFxuIDE5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiVk13YXJlIHZpcnR1YWwgUFRQIGNsb2NrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzowNS42Njg5NTczNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM5ODg1NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGZvciBQVFBfMTU4OF9DTE9DSyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSByZWFsbHkgaGluZ2VzIG9uIHRoYXQgYFBUUF8xNTg4X0NMT0NLYCBzZXR0aW5nLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gYW55IHBhcnRpY3VsYXIgcGF0aCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIHJlbGllcyBvbiB0aGlzLCBzbyBJIGNhbiBwbGFuIGFwcHJvcHJpYXRlbHkuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTkVUREVWU0lNYCBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgc2ltdWxhdG9yIGlzIGltcGFjdGVkLCBvciBpZiBpdCBpbXBhY3RzIGBQVFBfMTU4OF9DTE9DS2AsIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ24gZGVjaXNpb25zLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkb21pbm8gZWZmZWN0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgem9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDkuMDA4ODQ2MDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcbiA2MDE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXFxcIlxcbiA2MDI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0Y29uZmlnIE5FVERFVlNJTVxcbiA2MDU6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gNjA2OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gNjA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA2MDg6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxcbiA2MDk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbiA2MTA6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDYxMTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDYxMjpcXHRcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbiA2MTM6XFx0XFx0aGVscFxcbiA2MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXFxuIDYxNTpcXHRcXHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcXG4gNjE2OlxcdFxcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gNjE5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzowOS4wMDg5Mjg0MjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxOTgxNjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIG5ldGRldnNpbSBhbmQgUFRQIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IHRlc3QgdGhpcyBgTkVUREVWU0lNYCBzdHVmZiwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBQVFBfMTU4OF9DTE9DS2AgY2FwYWJpbGl0aWVzLiAgVGhlIGRlcGVuZGVuY2llcyBhcmUgYSBsaXR0bGUgbGVzcyBjbGVhciB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIGBORVRERVZTSU1gICpjb25kaXRpb25hbGx5KiBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS19NT0NLYCwgb3IgYXQgbGVhc3QgdGhlIGBQVFBfMTU4OF9DTE9DS19NT0NLPW5gIGNhc2UuIFRvIGJlIGNsZWFyLCB0byB0ZXN0IHRoZSBuZXcgZmVhdHVyZSBwcm9wZXJseSwgd2hpY2ggaW5jbHVkZXMgdGltZSBzeW5jaHJvbml6YXRpb24sIEkgKmRvKiBuZWVkIGBQVFBfMTU4OF9DTE9DS19NT0NLYCBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYFBUUF8xNTg4X0NMT0NLYCBpdHNlbGYgaXMgYWxzbyByZXF1aXJlZC4gU28sIHRoZSBjb21wbGV0ZSBzZXQgb2YgZW5hYmxlZCBjb25maWd1cmF0aW9ucyBmb3IgYSByb2J1c3QgdGVzdCBuZWVkcyB0byBiZSBgTkVUREVWU0lNYCwgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGBQVFBfMTU4OF9DTE9DS19NT0NLYC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgdGltZSBzeW5jaHJvbml6YXRpb24gY29kZSBsaXZlcy4gIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGEgZmV3IGxpa2VseSBzdXNwZWN0czpcbiogICBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYCBoYXMgYG5zaW1fc2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19jb25maWdgLCBhbmQgYG5zaW1fc3RhcnRfeG1pdGAuIEhvd2V2ZXIsIEknbSBnb2luZyB0byBmbGFnIGBuc2ltX3N0YXJ0X3htaXRgIGFzIGEgcG90ZW50aWFsIGhvdC1wYXRoOyBsZXQncyBzZWUgaWYgd2UgY2FuIGF2b2lkIHRoYXQgb25lIGZvciBub3cgdG8gYXZvaWQgY29tcGxleGl0eS5cbiogICBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY2AgYWxzbyBjb250YWlucyBgbnNpbV9nZXRfdHNfaW5mb2AuXG5cblNvLCB0aGUgY2xlYXIgcHJpb3JpdGllcyBhcmUgZ29pbmcgdG8gYmUgZnV6emluZyBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEknbGwgc3RhcnQgdGhlcmUgYW5kIGl0ZXJhdGUgYXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MTQuMzI4NzQ4OTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxNjQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fc2V0X3RzX2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTI1PXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzUtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjIzNjpzdGF0aWMgaW50IG5zaW1fc2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzU1LVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSBuc2ltX2dldF90c19jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjc1NjpcXHQubmRvX2h3dHN0YW1wX3NldFxcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NTctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MTYuNzUwNDAwNTU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM0Nzk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBBUEkgQ2hvaWNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkgaW5pdGlhbGx5IHRob3VnaHQsIFwiU3RhdGljPyBIbW0sIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gYXZvaWQgc3RhdGljIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZS5cIiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIGhvbGQgb24gYSBzZWNvbmQhIGBuc2ltX3NldF90c19jb25maWdgIGlzICphY3R1YWxseSogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBgbmRvX2h3dHN0YW1wX3NldGAuIFRoYXQgbWVhbnMgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCwgcmlnaHQ/IFNvLCB0aGUgd2hvbGUgcG9pbnQgb2YgYXZvaWRpbmcgc3RhdGljIGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGFkZHJlc3MgdmlzaWJpbGl0eSBpcyBhbHJlYWR5IGNvdmVyZWQuIFRoZSBwcm9tcHQgYWxzbyBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyxcIiBhbmQgdGhhdCBtZWFucyBpdHMgYW4gZW50cnlwb2ludC4uLml0J3MgZ29vZCFcblxuSSBzdGFydGVkIHRvIHdvbmRlciBpZiB0aGVyZSB3YXMgYW5vdGhlciBub24tc3RhdGljIGVudHJ5IHBvaW50LlxuXG5gbnNpbV9zZXRfdHNfY29uZmlnYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYmAgb3IgYGRldl9zZXRfaHd0c3RhbXBgLCB3aGljaCBhcmUgZ2VuZXJpYywgYnV0IGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQuIFxuXG5TbywgSSB0aGluayBJJ2xsIGdvIHdpdGggYG5zaW1fc2V0X3RzX2NvbmZpZ2AgYW5kIGBuc2ltX2dldF90c19jb25maWdgLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCBkaXJlY3QgZml0IGFuZCBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbldhaXQuLi4gaXMgYG5zaW1fZ2V0X3RzX2luZm9gIHN0YXRpYyB0b28/IEkgbmVlZCB0byBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzoyMi4xMDM4ODMxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjEwOTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2dldF90c19pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MTc2PW5zaW1fZ2V0X2ZlY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9mZWNfc3RhdHMgKmZlY19zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMTk3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MTk4OnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMTk5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MjE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbnNpbV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM1LVxcdC5nZXRfZmVjX3N0YXRzXFx0XFx0XFx0PSBuc2ltX2dldF9mZWNfc3RhdHMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYzoyMzY6XFx0LmdldF90c19pbmZvXFx0XFx0XFx0PSBuc2ltX2dldF90c19pbmZvLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjIzLjkxNTk5OTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTEwMTE2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgQXNzaWdubWVudHMqKlxuXG5SaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5J3JlIGFzc2lnbmVkIHRvIG9wZXJhdGlvbnMgc3RydWN0dXJlcywgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGRlc2lnbiBzdGFuZHBvaW50LCBrZWVwaW5nIHRoZSBzY29wZSBsaW1pdGVkLiBCdXQsIHRoZW4gSSBzYXcgYG1vY2tfcGhjX2dldF9wdHBfaW5mb2AuIFRoaXMgb25lIGlzIG5vbi1zdGF0aWMgYW5kICpleHBvcnRlZCouIFRoYXQncyB0aGUga2V5IGRpZmZlcmVuY2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIHdvbmRlciB3aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoYXQgZGVzaWduIGRlY2lzaW9uIHdhcy4gQ2xlYXJseSB0aGVyZSBpcyBhbiBpbnRlbmRlZCBwdXJwb3NlIHRvIG9wZW4gdGhhdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzoyOC40NjcwMTM3NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzYyOTA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja19waGNfZ2V0X3B0cF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjU9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE3OC1cXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxNzk6XFx0XFx0cHRwX2luZm9fcnggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8ocGVlcl9ucy1cXHUwMDNlcGhjKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTgwLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE4Mi1cXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTgzOlxcdFxcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVxcdTAwM2VwaGMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xODQtXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE3Ny1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE3ODpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4MS19XFxuZHJpdmVycy9wdHAvcHRwX21vY2suYzoxODI6RVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTtcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4My1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaD0xOD1pbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpO1xcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaDoxOTpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oPTMyPXN0YXRpYyBpbmxpbmUgaW50IG1vY2tfcGhjX2luZGV4KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTM2LVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaDozNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaC0zOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjMwLjE0MzMxMDg3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzc4ODQxOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgcHRwX21vY2suY2AgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgd2UncmUgYmVlZmluZyB1cCB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtb2NrX3BoY19hZGpmaW5lYCwgYG1vY2tfcGhjX2FkanRpbWVgLCBgbW9ja19waGNfc2V0dGltZTY0YCwgYW5kIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGVzZSBhcmUgbm93IHVzaW5nIGBzcGluX2xvY2tfaXJxc2F2ZWAgaW5zdGVhZCBvZiBgc3Bpbl9sb2NrYC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIHN0YXRpYyBidXQgYXNzaWduZWQgdG8gYHB0cF9jbG9ja19pbmZvYCBvcHMgaXMgaW1wb3J0YW50IHRvIG5vdGUuIFRoaXMgaW1wbGllcyB0aGV5J3JlIHBhcnQgb2YgdGhlIGNvcmUgbW9jayBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eS5cblxuTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnMgb25lIG1vcmUgdGltZSB0byBiZSBzdXJlOiBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19pbmZvYCwgYW5kIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiBOb3csIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgdGhvc2UgZm91ciBmdW5jdGlvbnMgaW4gbXkgY292ZXJhZ2Ugc3RyYXRlZ3kuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBoZXJlLiBJIGtub3cgYE5FVERFVlNJTWAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBERUJVR19GU2AuIEFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLiBTbywgbXkgZW5hYmxlIGNvbmZpZyBsaXN0IHNob3VsZCBkZWZpbml0ZWx5IGNvbnRhaW4gYE5FVERFVlNJTWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIHRoZSAqb25seSogbmV3IGZ1bmN0aW9uIGludHJvZHVjZWQ/IFllcywgdGhhdCdzIGNvcnJlY3QuIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIGEgbmV3IGFkZGl0aW9uLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gYG5ldGRldnNpbWAsIG91ciBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gVGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIGltcGxlbWVudGVkIGFyZSBgbmRvX2h3dHN0YW1wX2dldGAgYW5kIGBuZG9faHd0c3RhbXBfc2V0YC4gVGhlIHRyYW5zbWl0IHBhdGggKGBuc2ltX3N0YXJ0X3htaXRgKSBpcyBhbHNvIHVwZGF0ZWQgdG8gY2FwdHVyZSBoYXJkd2FyZSB0aW1lc3RhbXBzLiBJdCdzIHVzaW5nIHRoZSBgbW9ja19waGNgIGZvciB0aGlzLCBhbmQgdGhlIHVzZSBvZiBgc3Bpbl9sb2NrX2lycXNhdmVgIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlc2UgdGltZXN0YW1wcyBjYW4gYmUgY2FwdHVyZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBUaGlzIGFsbCBtZWFucyB3ZSBoYXZlIG5ldyBjb250cm9sIGFuZCBkYXRhIHBhdGhzIGluIGBuZXRkZXZzaW1gIGFuZCBgcHRwX21vY2tgIHRoYXQgYXJlIHRyaWdnZXJlZCB2aWEgYGV0aHRvb2xgIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGVzZSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGFkZGVkIGNvbXBsZXhpdHkgYW5kIGludGVycnVwdCBjb250ZXh0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDMsIk91dHB1dFRva2VucyI6MjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjUyMjE1NTY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDQ1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfTU9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fc2V0X3RzX2NvbmZpZ1wiLFxuICAgIFwibnNpbV9nZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19pbmZvXCIsXG4gICAgXCJtb2NrX3BoY19nZXRfcHRwX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLCBhIHNvZnR3YXJlLWVtdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlLiBJdCBpbXBsZW1lbnRzIG5kb19od3RzdGFtcF9nZXQgYW5kIG5kb19od3RzdGFtcF9zZXQgb3BlcmF0aW9ucywgYW5kIG1vZGlmaWVzIHRoZSBUWCBwYXRoIHRvIGNhcHR1cmUgYW5kIHJldHVybiBoYXJkd2FyZSB0aW1lc3RhbXBzIHVzaW5nIHRoZSBtb2NrX3BoYyAoUFRQIEhhcmR3YXJlIENsb2NrIG1vY2spLiBJdCBhbHNvIHVwZGF0ZXMgbW9ja19waGMgdG8gdXNlIElSUS1zYWZlIHNwaW5sb2Nrcy4gVGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHJlYWNoYWJsZSBjb250cm9sIGFuZCBkYXRhIHBhdGhzIGluIG5ldGRldnNpbSBhbmQgcHRwX21vY2sgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBldGh0b29sIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzozOS42MTAyMTE1NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg4NzQzMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjYxMDk0NDQxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTY4ODY2OTUwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5pbmRleCAwMjVlYTc5ODc5ZjNhLi42Mjg4NzhhY2QxNThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuQEAgLTIwMCw3ICsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0ZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xuK1xuIFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cdTAwM2VwaGMpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTtcbitcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0zMCw2ICszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIm5ldGRldnNpbS5oXCJcbiBcbkBAIC0xMjIsMTIgKzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldixcbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9vcmlnID0gc2tiO1xuIFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zO1xuIFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcbitcdGludCByeF9maWx0ZXIsIHR4X3R5cGU7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqcnE7XG4gXHRpbnQgcnhxO1xuIFx0aW50IGRyO1xuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4rXHRyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy1cdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XG4rXHR0eF90eXBlID0gUkVBRF9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XG4rXG4rXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuK1x0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG4rXG4rXHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbitcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbitcbitcdC8qIElmIFRYIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBpcyBlbmFibGVkLCBzYW1wbGUgb3VyIFBIQyBhbmQgcmVwb3J0XG4rXHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4rXHQgKi9cbitcdGlmIChwdHBfaW5mb190eCkge1xuK1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4rXHRcdCAqIGZvciBiZXR0ZXIgYWNjdXJhY3lcbitcdFx0ICovXG4rXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuK1x0XHRpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSlcbitcdFx0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbitcdFx0c2tiX3RzdGFtcF90eChza2Jfb3JpZywgXHUwMDI2c2hod3RzdGFtcHMpO1xuK1xuK1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXG4rXHRcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcbitcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4rXHRcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiKVxuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYl9vcmlnKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYiA9IHNrYl9vcmlnO1xuK1x0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuK1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdH1cbitcbitcdGlmIChwdHBfaW5mb19yeClcbitcdFx0c2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XG4rXG4gXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxuIFx0XHRcdFx0ICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKVxuIFx0XHRnb3RvIG91dF9kcm9wX2NudDtcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0aW50IHJ4X2ZpbHRlcjtcbitcbitcdGlmICghbnMtXHUwMDNlcGhjKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09OKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTlRQX0FMTDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XG4rXHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgKzc1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gbnNpbV92bGFuX3J4X2FkZF92aWQsXG4gXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gbnNpbV92bGFuX3J4X2tpbGxfdmlkLFxuIFx0Lm5ldF9zaGFwZXJfb3BzXHRcdD0gXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxuK1x0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuK1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiArMTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcbiBcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuK1x0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xuIFx0c3RydWN0IG5zaW1fcnEgKipycTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuaW5kZXggNGQ2NmI2MTQ3MTIxMC4uN2E0ZTVmMzI3NGE2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbkBAIC00OSwxNSArNDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHM2NCBhZGo7XG4gXG4gXHRhZGogPSAoczY0KXNjYWxlZF9wcG0gXHUwMDNjXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XG4gXHRhZGogPSBkaXZfczY0KGFkaiwgTU9DS19QSENfRkFESl9ERU5PTUlOQVRPUik7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbiBcdHBoYy1cdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NSwxMCArNjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfYWRqdGltZShcdTAwMjZwaGMtXHUwMDNldGMsIGRlbHRhKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2luaXQoXHUwMDI2cGhjLVx1MDAzZXRjLCBcdTAwMjZwaGMtXHUwMDNlY2MsIG5zKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSArOTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTY0IG5zO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdCp0cyA9IG5zX3RvX3RpbWVzcGVjNjQobnMpO1xuIFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcbiBcbitzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbit7XG4rXHRyZXR1cm4gXHUwMDI2cGhjLVx1MDAzZWluZm87XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XG4gc3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIFxuICNlbHNlXG4gXG5AQCAtMzMsNiArMzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5pbmRleCBkNWJmNGNiNjM4YThjLi4xOGJiN2M2OTNiNjlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5AQCAtMTksNiArMTksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRwb2xsX2Jhc2ljLnB5IFxcXG4gXHRwaW5nLnB5IFxcXG4gXHRwc3AucHkgXFxcbitcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXG4gQ09ORklHX1BQUD15XG4gQ09ORklHX1BQUE9FPXlcbitDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DSz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5AQCAtMCwwICsxLDgyIEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgXHUwMDNjbWFjaWVrQG1hY2huaWtvd3NraS5uZXRcdTAwM2UgKGMpIDIwMjYsXG4rXG4rXCJcIlwiXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXG4rXG4rU3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuK2xlYWRlciAoc3RhdGUgczIpXG4rXCJcIlwiXG4rXG4raW1wb3J0IHRpbWVcbitcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxuKyAgICBOZXREcnZFcEVudixcbisgICAgYmtnLFxuKyAgICBmZF9yZWFkX3RpbWVvdXQsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbispXG4rXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcbitcbitcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XG4rICAgIFwiXCJcIlJlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi5cbitcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxuKyAgICBcIlwiXCJcbisgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxuKyAgICBidWYgPSBiXCJcIlxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XG4rICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgXHUwMDNjIGRlYWRsaW5lOlxuKyAgICAgICAgaWYgYlwiIHMyIFwiIGluIGJ1ZjpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgY2h1bmsgPSBmZF9maWxlLnJlYWQoKVxuKyAgICAgICAgICAgIGlmIGNodW5rOlxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxuKyAgICAgICAgICAgIGJ1ZiArPSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuKyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICByZXR1cm4gYlwiIHMyIFwiIGluIGJ1ZiwgYnVmLmRlY29kZShcInV0Zi04XCIsIFwicmVwbGFjZVwiKVxuK1xuK1xuK2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4rICAgIFwiXCJcIlZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcInB0cDRsXCIsIHJlbW90ZT1UcnVlKVxuK1xuKyAgICBsZWFkZXJfY21kID0gZlwicHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMlwiXG4rICAgIGZvbGxvd2VyX2NtZCA9IGZcInB0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMlwiXG4rXG4rICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFxcXG4rICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6XG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbitcbisgICAgaWYgc3luY2VkOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIGtzZnRfcHIoZlwicHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCJcbisgICAgICAgICAgICBmXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcIilcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFwiXFxuXCIpWy0xMDpdXG4rICAgIGtzZnRfcHIoXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcIiArIFwiIHwgXCIuam9pbih0YWlsKSlcbisgICAga3NmdF90cnVlKEZhbHNlLCBcIlBUUCBzeW5jIHRpbWVvdXRcIilcbitcbitcbitkZWYgbWFpbigpOlxuKyAgICBcIlwiXCJSdW4ga3NmdCB0ZXN0cy5cIlwiXCJcbisgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuKyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpXG4rICAgIGtzZnRfZXhpdCgpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBtYWluKClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjYxMDk0NTUyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDU0MzIzMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIG5ldGRldnNpbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtb2RpZmljYXRpb25zOiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBuc2ltX3N0YXJ0X3htaXRgLCBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGFuZCB0aGUgbmV3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGZ1bmN0aW9uIGluIGBwdHBfbW9jay5jYC4gIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYG5zaW1fc3RhcnRfeG1pdGAgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMgbGlrZWx5IHJlc2lkZXMuXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wc2AgYW5kIGBzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7YC4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIGNhcHR1cmUgdHJhbnNtaXQgYW5kIHBvdGVudGlhbGx5IHJlY2VpdmUgdGltZXN0YW1wcy4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRpZiAocHRwX2luZm9fdHgpIHtcblx0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG5cdFx0ICogZm9yIGJldHRlciBhY2N1cmFjeVxuXHRcdCAqL1xuXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuXHRcdGlmIChsaWtlbHkocHRwX2luZm9fcngpKVxuXHRcdFx0cHRwX2luZm9fcngtXHUwMDNlZ2V0dGltZTY0KHB0cF9pbmZvX3J4LCBcdTAwMjZyeF90cyk7XG5cdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcblx0XHRza2JfdHN0YW1wX3R4KHNrYl9vcmlnLCBcdTAwMjZzaGh3dHN0YW1wcyk7XG4uLi5cblx0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuXHRcdHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXHUwMDI2cnhfdHMpO1xuXHR9XG5cblx0aWYgKHB0cF9pbmZvX3J4KVxuXHRcdHNrYl9od3RzdGFtcHMoc2tiKS1cdTAwM2Vod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpO1xuYGBgXG5cbk9rYXksIHRoZSBjb2RlIGF0dGVtcHRzIHRvIGNhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGlmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgb3RoZXJ3aXNlIGl0IGNhcHR1cmVzIG9ubHkgdGhlIHJlY2VpdmUgdGltZXN0YW1wIHdoZW4gYHB0cF9pbmZvX3J4YCBpcyB0cnVlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IGEgcG90ZW50aWFsIGJ1Zy4gSSBzZWUgdGhhdCBgcnhfdHNgIGlzIGEgbG9jYWwgdmFyaWFibGUuICBJZiBgcHRwX2luZm9fdHhgIGlzIHRydWUsIGJ1dCBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLCB0aGVuIGByeF90c2AgaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoZSBmaXJzdCBibG9jayBjb21wbGV0ZXMsIGJlZm9yZSB0aGUgc2Vjb25kIGJsb2NrIGJlZ2lucy4gSG93ZXZlciwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzIGtpbmQgb2YgYXNzZXNzbWVudC4gVGhlIHN1YnNlcXVlbnQgYGlmIChwdHBfaW5mb19yeClgIGNoZWNrIGF0IHRoZSBlbmQgd2lsbCBwcmV2ZW50IGl0cyB1c2UgaWYgYHB0cF9pbmZvX3J4YCBpcyBmYWxzZS4gU28sIEkgc2VlIGl0J3Mgc2FmZSB0byB1c2UuXG5cbkxldCdzIHRyYWNlIGl0IGNhcmVmdWxseTogaWYgYHB0cF9pbmZvX3R4YCBpcyB0cnVlIGFuZCBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLCBgcnhfdHNgIGlzIG5ldmVyIHVzZWQuIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgYHJ4X3RzYCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUsIGVpdGhlciBpbiB0aGUgZmlyc3QgYGlmYCBvciBpbiB0aGUgYGVsc2UgaWZgLiBUaHVzLCBgcnhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGl0IGlzIHVzZWQuIGB0eF90c2AgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgb25seSB3aGVuIGBwdHBfaW5mb190eGAgaXMgdHJ1ZS4gTG9va3MgZ29vZCBzbyBmYXIsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLiBBbmQsIGltcG9ydGFudGx5LCBJIHNlZSB0aGF0IGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YC5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuc2ltX2dldF90c19jb25maWdgLlxuXG5gYGBjXG5zdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbntcblx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuXG5cdCpjb25maWcgPSBucy1cdTAwM2V0c3RhbXBfY29uZmlnO1xuXHRyZXR1cm4gMDtcbn1cbmBgYFxuXG5UaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgY29waWVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGNvbmZpZ2AgcG9pbnRlci4gQnV0IG5vdyBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hlcmUgaXMgdGhpcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgaW5pdGlhbGl6ZWQ/IFRpbWUgdG8gbG9vayBhdCB0aGUgYG5ldGRldnNpbS5oYCBoZWFkZXIuIEFoLCB0aGVyZSBpdCBpczpcblxuYGBgY1xuXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xuYGBgXG5cbkl0J3MgYSBtZW1iZXIgb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdCBpdHNlbGYsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuIE5vdyBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHN0cnVjdCBgbmV0ZGV2c2ltYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNvbWV3aGVyZS4gQmVjYXVzZSBpZiBpdCdzIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIFR5cGljYWxseSwgYGFsbG9jX25ldGRldmAgd2lsbCB6ZXJvLWluaXRpYWxpemUgcHJpdmF0ZSBkYXRhLiBCdXQgSSBiZXR0ZXIgdmVyaWZ5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYFxuXG4iLCJJbnB1dFRva2VucyI6NzEzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1NC4xNTQxNzkyMTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzYxMjI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzMz1zdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyNDAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEyNDE6XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZigqbnMpLCBcXFwiZXRoJWRcXFwiLCBORVRfTkFNRV9VTktOT1dOLCBuc2ltX3NldHVwLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjQyLVxcdFxcdFxcdCAgICAgIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV9xdWV1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1NC4zMDE4MDQ3NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MDE2MjAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19uZXRkZXZfbXFgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgaXQgdXNlcyBga3phbGxvY2AsIHNvIHRoZSBwcml2YXRlIGRhdGEsIGluY2x1ZGluZyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AsIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgc28gdGhlIHN0cnVjdHVyZSBJJ20gbG9va2luZyBhdCwgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCwgaGFzIGEgYnVuY2ggb2YgZmllbGRzOiBgZmxhZ3NgLCBgdHhfdHlwZWAsIGByeF9maWx0ZXJgLCBgaWZyYCwgYW5kIGBicGZgLCBhbW9uZyBvdGhlcnMuIEdvdCBpdC4gQW5kIGBuc2ltX2dldF90c19jb25maWdgIGlzIGNvcHlpbmcgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIGAqY29uZmlnYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBnZXR0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3B5IGRvZXNuJ3QgZ2V0IG1lc3NlZCB1cCBieSBwYWRkaW5nLiBNeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGUgc3RydWN0dXJlIGl0c2VsZiBoYXMgYW55IHBhZGRpbmcuIEkgbmVlZCB0byBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgIGluIGBpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaGAgcmlnaHQgbm93IHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgY3J1Y2lhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjU4Ljk1MTk3MDc3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjU0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTM3PXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC02MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaDo2MjpzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNjMtXFx0aW50IGZsYWdzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1OS4xMTY2MzE2OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTYxNzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIFRpbWVzdGFtcGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgdGltZXN0YW1waW5nLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaGAuIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDYyLCBhcyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIGtleSB0aW1lc3RhbXBpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlZ2luIHRvIGFwcGVhci4gSSBhbnRpY2lwYXRlIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suIFRoaXMgc2hvdWxkIGNsYXJpZnkgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGFuZCBtYW5hZ2luZyB0aW1lc3RhbXBzIGZvciBuZXR3b3JrIHBhY2tldHMuIFRoaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgZGlmZmVyZW50IGRyaXZlcnMsIHByb3RvY29scywgYW5kIG1lY2hhbmlzbXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgc3ViamVjdCwgc28gdGhhdCBJIG1heSBiZSBhYmxlIHRvIGZ1bGx5IGV4YW1pbmUgdGhlIHRvcGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjAyLjgxMjI1Mjc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAqIGV4cG9zZWQgdG8gdGhlICVTSU9DR0hXVFNUQU1QIGFuZCAlU0lPQ1NIV1RTVEFNUCBpb2N0bCBVQVBJLlxcbiAgNjE6XFx0ICovXFxuICA2MjpcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XFxuICA2MzpcXHRcXHRpbnQgZmxhZ3M7XFxuICA2NDpcXHRcXHRpbnQgdHhfdHlwZTtcXG4gIDY1OlxcdFxcdGludCByeF9maWx0ZXI7XFxuICA2NjpcXHRcXHRzdHJ1Y3QgaWZyZXEgKmlmcjtcXG4gIDY3OlxcdFxcdGJvb2wgY29waWVkX3RvX3VzZXI7XFxuICA2ODpcXHRcXHRlbnVtIGh3dHN0YW1wX3NvdXJjZSBzb3VyY2U7XFxuICA2OTpcXHRcXHRlbnVtIGh3dHN0YW1wX3Byb3ZpZGVyX3F1YWxpZmllciBxdWFsaWZpZXI7XFxuICA3MDpcXHR9O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcXG4gIDczOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnKVxcbiAgNzQ6XFx0e1xcbiAgNzU6XFx0XFx0a2VybmVsX2NmZy1cXHUwMDNlZmxhZ3MgPSBjZmctXFx1MDAzZWZsYWdzO1xcbiAgNzY6XFx0XFx0a2VybmVsX2NmZy1cXHUwMDNldHhfdHlwZSA9IGNmZy1cXHUwMDNldHhfdHlwZTtcXG4gIDc3OlxcdFxcdGtlcm5lbF9jZmctXFx1MDAzZXJ4X2ZpbHRlciA9IGNmZy1cXHUwMDNlcnhfZmlsdGVyO1xcbiAgNzg6XFx0fVxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjAyLjgxMjMyNzQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTIwMzM4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBIYXJkd2FyZSBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEl0J3Mgbm90IHNvbWV0aGluZyB3ZSdyZSBleHBvc2luZyBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJbnRlcmVzdGluZy4uLiB0aGUga2VybmVsJ3MgYG5ldC9jb3JlL2Rldl9pb2N0bC5jYCBjb2RlIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbi4gSXQncyBjb252ZXJ0aW5nIHRoZSBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AgaW50byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCBiZWZvcmUgdGhhdCBkYXRhIGdldHMgcGFzc2VkIHVwLiBSaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGBkZXZfaW9jdGwuY2Ag4oCTIG9yIG1heWJlIGV2ZW4gb3ZlciBpbiBgZXRodG9vbC9jb21tb24uY2Ag4oCTIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyB0aGV5J3JlIHVzaW5nIHRoaXMgaW50ZXJuYWwgc3RydWN0dXJlLiBUaGF0J3Mgd2hlcmUgdGhlIGtleSBsaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb252ZXJzaW9uIHByb2Nlc3MsIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIGNvbnN0cnVjdGVkLiBHb3R0YSBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODowNy4wNjQzNjM4MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTM5ODk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZXJuZWxfaHd0c3RhbXBfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuaD00MDQ9aW50IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2Lmg6NDA1OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxcbm5ldC9jb3JlL2Rldi5oLTQwNi1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvY29yZS9kZXYuaD00MDc9aW50IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2Lmg6NDA4OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5uZXQvY29yZS9kZXYuaDo0MDk6aW50IG5ldF9od3RzdGFtcF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5uZXQvY29yZS9kZXYuaC00MTAtXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0xNDA9c3RhdGljIGludCBkZXZfaWZzaW9jX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMTg4LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjE4OTppbnQgbmV0X2h3dHN0YW1wX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMTkwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI1OD1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzoyNTk6XFx0XFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjYwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI4Mj1zdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODQtXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjg1OlxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtlcm5lbF9jZmcgPSB7fTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODYtXFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0zMjg9aW50IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6MzI5OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTMzMC1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMyLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjMzMzpcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyBvbGRfY2ZnID0ge307XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzM0LVxcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzc2LVxcdGlmIChwaHlfdHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VzZWVfYWxsX2h3dHN0YW1wX3JlcXVlc3RzKVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjM3NzpcXHRcXHRjaGFuZ2VkID0ga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKFxcdTAwMjZvbGRfY2ZnLCBjZmcpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTM3OC1cXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTMtXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzk0OlxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtlcm5lbF9jZmcgPSB7fTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTUtXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ0MT1pbnQgZ2VuZXJpY19od3RzdGFtcF9nZXRfbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NDI6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ0My17XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDYyOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MDcuNTg1NzY4MzMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTk0NTE3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXRyaWV2ZXMgaGFyZHdhcmUgdGltZXN0YW1wIGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L2NvcmUvZGV2X2lvY3RsLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYGRldl9nZXRfaHd0c3RhbXBgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgZm9yIHJldHJpZXZpbmcgdGhvc2UgY3J1Y2lhbCB0aW1lc3RhbXAgdmFsdWVzLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MTAuNDQ1MjIyNzg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODI6XFx0c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiAyODM6XFx0e1xcbiAyODQ6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuIDI4NTpcXHRcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyBrZXJuZWxfY2ZnID0ge307XFxuIDI4NjpcXHRcXHRzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNmZztcXG4gMjg3OlxcdFxcdGludCBlcnI7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdGlmICghb3BzLVxcdTAwM2VuZG9faHd0c3RhbXBfZ2V0KVxcbiAyOTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDI5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0a2VybmVsX2NmZy5pZnIgPSBpZnI7XFxuIDI5NjpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4gMjk3OlxcdFxcdGVyciA9IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcpO1xcbiAyOTg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4gMjk5OlxcdFxcdGlmIChlcnIpXFxuIDMwMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHQvKiBJZiB0aGUgcmVxdWVzdCB3YXMgcmVzb2x2ZWQgdGhyb3VnaCBhbiB1bmNvbnZlcnRlZCBkcml2ZXIsIG9taXRcXG4gMzAzOlxcdFxcdCAqIHRoZSBjb3B5X3RvX3VzZXIoKSwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGhhcyBhbHJlYWR5IGRvbmUgdGhhdFxcbiAzMDQ6XFx0XFx0ICovXFxuIDMwNTpcXHRcXHRpZiAoIWtlcm5lbF9jZmcuY29waWVkX3RvX3VzZXIpIHtcXG4gMzA2OlxcdFxcdFxcdGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChcXHUwMDI2Y2ZnLCBcXHUwMDI2a2VybmVsX2NmZyk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoaWZyLVxcdTAwM2VpZnJfZGF0YSwgXFx1MDAyNmNmZywgc2l6ZW9mKGNmZykpKVxcbiAzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMxMDpcXHRcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHJldHVybiAwO1xcbiAzMTM6XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHQvKipcXG4gMzE2OlxcdCAqIGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKCkgLSBDaGFuZ2UgaGFyZHdhcmUgdGltZXN0YW1waW5nIG9mIE5JQ1xcbiAzMTc6XFx0ICpcXHRvciBvZiBhdHRhY2hlZCBwaHlsaWIgUEhZXFxuIDMxODpcXHQgKiBAZGV2OiBOZXR3b3JrIGRldmljZVxcbiAzMTk6XFx0ICogQGNmZzogVGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXFxuIDMyMDpcXHQgKiBAZXh0YWNrOiBOZXRsaW5rIGV4dGVuZGVkIGFjayBtZXNzYWdlIHN0cnVjdHVyZSwgZm9yIGVycm9yIHJlcG9ydGluZ1xcbiAzMjE6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MTAuNDQ1MzI2NzY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzczNzcyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uIGluIHRoZSBOZXR3b3JrIFNpbXVsYXRvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyB0aW1lc3RhbXBpbmcgbG9naWMuIEkgc2VlIHRoYXQgd2l0aGluIGBkZXZfZ2V0X2h3dHN0YW1wYCwgYGtlcm5lbF9jZmdgIGlzIGluaXRpYWxseSBzZXQgdG8gYW4gZW1wdHkgc3RydWN0LiBUaGVuLCBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgIGdldHMgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGNhbGxzIHRoZSBkcml2ZXItc3BlY2lmaWMgYG9wcy1cdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgXHUwMDI2a2VybmVsX2NmZylgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGJlZ2lucy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBuc2ltX2dldF90c19jb25maWdgIGZ1bmN0aW9uLiBJJ20gbm90aWNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uICpjb21wbGV0ZWx5KiBvdmVyd3JpdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgYCpjb25maWdgIHBvaW50ZXIgd2l0aCBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AuIEhtbSwgYW5kIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCB3YXMgemVyby1pbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdHVyZS4gVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0hXG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIG5vdyB0aGF0IGBkZXZfZ2V0X2h3dHN0YW1wYCAqZG9lcyogc2V0IGBrZXJuZWxfY2ZnLmlmciA9IGlmcjtgICpiZWZvcmUqIGNhbGxpbmcgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYC4gVGhpcyBpcyBrZXkuIEJ1dCwgaWYgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AgdGhlbiBvdmVyd3JpdGVzIGAqY29uZmlnYCB3aXRoIHRoZSB6ZXJvLWluaXRpYWxpemVkIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCwgKnRoYXQqIG1lYW5zIHRoZSBgY29uZmlnLVx1MDAzZWlmcmAgZmllbGQgd2lsbCBhbHNvIGJlIGNsb2JiZXJlZCBhbmQgc2V0IHRvIGBOVUxMYCEgVGhhdCdzIG5vdCByaWdodC4gVGhpcyBjb3VsZCBsZWFkIHRvIHNvbWUgdmVyeSBjb25mdXNpbmcgdGltZXN0YW1waW5nIGJlaGF2aW9yLCBvciB3b3JzZSwgc2VnbWVudGF0aW9uIGZhdWx0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoxNS45MjI3MTE2NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1OCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1ODpcXHRpbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMjU5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdFxcdGh3cHJvdiA9IG5ldGRldl9vcHNfbG9ja19kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdiwgZGV2KTtcXG4gMjY0OlxcdFxcdGlmIChod3Byb3YpIHtcXG4gMjY1OlxcdFxcdFxcdGNmZy1cXHUwMDNlcXVhbGlmaWVyID0gaHdwcm92LVxcdTAwM2VkZXNjLnF1YWxpZmllcjtcXG4gMjY2OlxcdFxcdFxcdGlmIChod3Byb3YtXFx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfUEhZTElCIFxcdTAwMjZcXHUwMDI2XFxuIDI2NzpcXHRcXHRcXHQgICAgaHdwcm92LVxcdTAwM2VwaHlkZXYpXFxuIDI2ODpcXHRcXHRcXHRcXHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChod3Byb3YtXFx1MDAzZXBoeWRldiwgY2ZnKTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0aWYgKGh3cHJvdi1cXHUwMDNlc291cmNlID09IEhXVFNUQU1QX1NPVVJDRV9ORVRERVYpXFxuIDI3MTpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgY2ZnKTtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNzQ6XFx0XFx0fVxcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAoZGV2LVxcdTAwM2VwaHlkZXYpKVxcbiAyNzc6XFx0XFx0XFx0cmV0dXJuIHBoeV9od3RzdGFtcF9nZXQoZGV2LVxcdTAwM2VwaHlkZXYsIGNmZyk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19od3RzdGFtcF9nZXQoZGV2LCBjZmcpO1xcbiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRzdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjE1LjkyMjg0MzM0OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwNTc1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuc2ltX2dldF90c19jb25maWdgIGlzIHNldHRpbmcgYGNvbmZpZy1cdTAwM2VpZnJgIHRvIGBOVUxMYC4gTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgYSByZWQgZmxhZyBiZWNhdXNlIEkga25vdyB0aGF0IGBkZXZfZ2V0X2h3dHN0YW1wYCB1c2VzIHRoYXQgYGlmcmAgc3RydWN0dXJlLiBCdXQgdGhlbiBJIHN0b3BwZWQgbXlzZWxmLiBMb29raW5nIGRlZXBlciBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZGV2X2dldF9od3RzdGFtcGAgZnVuY3Rpb24sIEkgY2FuIHNlZSB0aGF0IHRoZXJlJ3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBJdCBkb2Vzbid0IGFjdHVhbGx5IGRlcmVmZXJlbmNlIGBrZXJuZWxfY2ZnLmlmcmAsIGFzIEkgaW5pdGlhbGx5IGZlYXJlZC4gSW5zdGVhZCwgaXQgdXNlcyBgaWZyLVx1MDAzZWlmcl9kYXRhYCBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dCBgaWZyYCBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgZ29vZCEgU28sIGV2ZW4gdGhvdWdoIGBrZXJuZWxfY2ZnLmlmcmAgaXMgYmVpbmcgc2V0IHRvIGBOVUxMYCwgaXQgKnNob3VsZG4ndCogY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jay5cblxuSG93ZXZlciwgYSBzbWFsbCB2b2ljZSBpbiBteSBoZWFkIGlzIHNheWluZyBcIm5vdCBzbyBmYXN0IVwiLiBgaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsYCBpcyB1c2VkIGJ5IHRoZSBgZGV2X2dldF9od3RzdGFtcGAgZnVuY3Rpb24gdG8gY29weSBmaWVsZHMgZnJvbSBga2VybmVsX2NmZ2AgdG8gYGNmZ2AsIHdoaWNoIGlzIHRoZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgKml0KiBkb2Vzbid0IGhhdmUgYSBwb3RlbnRpYWwgZmxhdy4gSSB0aGluayBJJ2xsIGdvIGNoZWNrIHRoYXQgbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MjAuNjAzNDIzMzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0NTc4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTcyPXN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfdG9fa2VybmVsKHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNzktXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnICpjZmcsXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyMC43NDU4ODgxOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDQ0ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsYCBmdW5jdGlvbiwgYmFzZWQgb24gd2hhdCdzIGltcGxpY2l0bHkgYW5kIGV4cGxpY2l0bHkgZ29pbmcgb24gaGVyZTpcblxuKipNeSBNZW50YWwgV2Fsa3Rocm91Z2ggb2YgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZSwgaXQncyBjbGVhcmx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgdGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24sIGxpa2VseSB3aXRoaW4gYSBrZXJuZWwgY29udGV4dC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgcHVycG9zZT8gV2hhdCBzcGVjaWZpY2FsbHkgaXMgaXQgcmVzcG9uc2libGUgZm9yIHdpdGhpbiB0aGUgbGFyZ2VyIGh3dHN0YW1wIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhYm91dCAqZ2V0dGluZyogY29uZmlndXJhdGlvbiwgKnNldHRpbmcqIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBpbi1iZXR3ZWVuPyBGcm9tIHRoZSBuYW1lIGFsb25lLCBJJ20gbGVhbmluZyB0b3dhcmQgcmV0cmlldmluZyBvciBjb252ZXJ0aW5nIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhyb3VnaCB0aGUgYWN0dWFsIGNvZGUsIG9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycy4gRG9lcyBpdCB0cmFuc2xhdGUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBpbnRvIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUgdW5kZXJzdGFuZHMsIG9yIHZpY2UtdmVyc2E/IElzIGl0IGFib3V0IHN5bmNocm9uaXphdGlvbiBvZiB0aGUgaGFyZHdhcmUgY2xvY2sgd2l0aCB0aGUgc3lzdGVtIGNsb2NrPyBXaGF0IHNwZWNpZmljIHBhcnRzIG9mIHRoZSBoYXJkd2FyZSBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlPyBOSUNzLCBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZXMsIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgY2xvY2tzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBtaWdodCBoYW5kbGUgdGhlbSwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGNsb2NrIGRvbWFpbnMuXG5cbkknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiBvdGhlciBmdW5jdGlvbnMsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIFdoYXQgaXMgdGhlIHR5cGUgb2YgdGhlIHN0cnVjdHVyZSB3ZSBhcmUgcHVsbGluZyBjb25maWd1cmF0aW9uIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyNC41MzYzNDA4NDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0c3RhdGljIGlubGluZSB2b2lkIGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnICpjZmcsXFxuICA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtlcm5lbF9jZmcpXFxuICA4MjpcXHR7XFxuICA4MzpcXHRcXHRjZmctXFx1MDAzZWZsYWdzID0ga2VybmVsX2NmZy1cXHUwMDNlZmxhZ3M7XFxuICA4NDpcXHRcXHRjZmctXFx1MDAzZXR4X3R5cGUgPSBrZXJuZWxfY2ZnLVxcdTAwM2V0eF90eXBlO1xcbiAgODU6XFx0XFx0Y2ZnLVxcdTAwM2VyeF9maWx0ZXIgPSBrZXJuZWxfY2ZnLVxcdTAwM2VyeF9maWx0ZXI7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnX2NoYW5nZWQoY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmEsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyNC41MzY0MjI0NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjYwODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHNwZWNpZmljcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvcGVyYXRpb24gaXMgY29weWluZyBvdmVyIGEgZmV3IGtleSBlbGVtZW50czogYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIEVzc2VudGlhbGx5LCB0aGF0J3Mgd2hhdCdzIGJlaW5nIGV4dHJhY3RlZCBhbmQgYXNzaWduZWQgdG8gYGNmZ2AuIEFoLCByaWdodCwgdGhhdCBgY2ZnYCB2YXJpYWJsZSBpcyBhY3R1YWxseSBvZiB0eXBlIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYC4gSSBrbm93IEkndmUgc2VlbiB0aGF0IGRlZmluZWQgc29tZXdoZXJlIGJlZm9yZS4uLiB5ZXAsIHRoYXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oYC4gT2theSwgYmV0dGVyIGdvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGFuZCBlbnN1cmUgdGhvc2UgZmllbGRzIGFyZSBiZWluZyBoYW5kbGVkIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlndXJhdGlvbi4gR290dGEgc3RheSBvbiB0b3Agb2YgdGhlc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjI4LjE5MzAzMzc2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NDU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGh3dHN0YW1wX2NvbmZpZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmg9NzI9c3RydWN0IHNvX3RpbWVzdGFtcGluZyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oLTg5LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmg6OTA6c3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaC05MS1cXHRpbnQgZmxhZ3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjI4LjI1ODU4NDgxN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk5OTM4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgaHd0c3RhbXBfY29uZmlnYCBzdHJ1Y3QuIEkndmUgc2VlbiB0aGlzIHVzZWQgaW4gYSB2YXJpZXR5IG9mIGNvbnRleHRzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG5ldHdvcmsgdGltZSBzeW5jaHJvbml6YXRpb24gYW5kIGhhcmR3YXJlIHRpbWVzdGFtcGluZyDigJMgYm90aCBjcml0aWNhbCBmb3IgbG93LWxhdGVuY3kgYXBwbGljYXRpb25zIGFuZCBwcmVjaXNlIHRpbWluZyBhbmFseXNpcy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHN0cnVjdCB3aWxsIGhvbGQgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyB0byBjb25maWd1cmUgdGhlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBmdW5jdGlvbmFsaXR5LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgdmFyaW91cyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kIGNvbnRyb2xzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIGluZGljYXRpbmcgUlggYW5kIFRYIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQsIHBlcmhhcHMgc3BlY2lmaWMgbW9kZXMgb2Ygb3BlcmF0aW9uIChlLmcuLCBzb2Z0d2FyZSBmYWxsYmFjayksIGFuZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjbG9jayBzb3VyY2UuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIHRpbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGFsc28gY29udGFpbiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhc3NvY2lhdGVkIGNsb2NrJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYWxpYnJhdGlvbiBpZiBzdXBwb3J0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBzdHJ1Y3QgaXMgdGhlIGtleSB0byBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgY29uZmlndXJhdGlvbiwgc28gbGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoYXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODozMi45NTg1Mjk1MjVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7XFxuICA5MTpcXHRcXHRpbnQgZmxhZ3M7XFxuICA5MjpcXHRcXHRpbnQgdHhfdHlwZTtcXG4gIDkzOlxcdFxcdGludCByeF9maWx0ZXI7XFxuICA5NDpcXHR9O1xcbiAgOTU6XFx0XFxuICA5NjpcXHQvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy1cXHUwMDNlZmxhZ3MgKi9cXG4gIDk3OlxcdGVudW0gaHd0c3RhbXBfZmxhZ3Mge1xcbiAgOTg6XFx0XFx0LypcXG4gIDk5OlxcdFxcdCAqIFdpdGggdGhpcyBmbGFnLCB0aGUgdXNlciBjb3VsZCBnZXQgYm9uZCBhY3RpdmUgaW50ZXJmYWNlJ3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MzIuOTU4NjM4NjY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTg1OTA3MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIV1RTVEFNUCBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgUGFkZGluZyBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGluaXRpYWxpemVzIHRoaXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc25lYWt5IHBhZGRpbmcgaW4gdGhlcmUuXG5cbkl0J3MgZ290IHRocmVlIGBpbnRgIGZpZWxkcywgZWFjaCA0IGJ5dGVzLCBzbyB0aGF0J3MgMTIgYnl0ZXMgdG90YWwuIE9uIGEgNjQtYml0IHN5c3RlbSwgSSBoYXZlIHRvIGNvbnNpZGVyIGFsaWdubWVudC4gSXMgaXQgcGFkZGVkIHRvIDE2IGJ5dGVzPyBUaGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzIDQgYnl0ZXMsIGJlY2F1c2UgYWxsIHRoZSBtZW1iZXJzIGFyZSBgaW50YCwgc28gYHNpemVvZihzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnKWAgc2hvdWxkIGp1c3QgYmUgMTIuIE5vIHBhZGRpbmcgYXQgdGhlIGVuZCB0aGVuLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB3aGVuIGBjb3B5X3RvX3VzZXJgIGhhcHBlbnMsIHdlIGFyZSBjb3B5aW5nIDEyIGJ5dGVzIGFuZCBub3Qgc29tZSB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRodXMsIHdlIGFyZSBub3QgbGVha2luZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGBuc2ltX3NldF90c19jb25maWdgIGZ1bmN0aW9uLiBJIHNlZSBpdCB1cGRhdGVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYC4gQnV0LCB3aGF0IGFib3V0IGBucy1cdTAwM2V0c3RhbXBfY29uZmlnLmZsYWdzYD8gSG1tLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGJlaW5nIHVwZGF0ZWQgYW55d2hlcmUgaGVyZS4gV2hlbiBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBjYWxsZWQsIGl0IGFzc2lnbnMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIGBjb25maWdgLCBidXQgc2luY2UgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHdhcyB6ZXJvLWluaXRpYWxpemVkLCB0aGlzIG1lYW5zIGBmbGFnc2AgaXMganVzdCAwLiBTZWVtcyBmaW5lLCBidXQgaXQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblxuRmluYWxseSwgSSdtIGNoZWNraW5nIGBuc2ltX2dldF90c19pbmZvYC4gSXQgY2FsbHMgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gIHRvIGluaXRpYWxpemUgYGluZm9gLCBidXQgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB3aGF0J3MgYWN0dWFsbHkgaW4gYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjQzLjU0NDU0OTUwOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjg4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRodG9vbF9vcF9nZXRfdHNfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz02OD1FWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X2xpbmspO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNjktXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo3MDppbnQgZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzEtXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTc5LX1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjgwOkVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNfaW5mbyk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy04MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NDMuNjAwNzgyNjY4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTMzMDQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbnNpbV9nZXRfdHNfaW5mb2AgRnVuY3Rpb24gYW5kIFRpbWVzdGFtcGluZyBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gc2lnbmF0dXJlOiBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gLiBUaGF0J3Mgd2hhdCBgbnNpbV9nZXRfdHNfaW5mb2AgaXMgc3VwcG9zZWQgdG8gdXNlLiBCdXQgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBuc2ltX2dldF90c19pbmZvYCBhcHBlYXJzIHRvIGJlIHRha2luZyBhIGBzdHJ1Y3QgZXRodG9vbF90c19pbmZvICppbmZvYCBpbnN0ZWFkPyBUaGF0IHNlZW1zIGxpa2UgYSB0eXBlIG1pc21hdGNoIGFuZCBjb3VsZCBiZSBhIHByb2JsZW0uIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmUgZGlyZWN0bHkgaW4gdGhlIHBhdGNoIGNvZGU6XG5cbmBgYGNcbnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuYGBgXG5cbkFoLCB0aGUgcGF0Y2ggKmRvZXMqIHNob3cgYHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvYC4gT2theSwgc28gd2hhdCdzIGdvaW5nIG9uPyBMZXQncyBsb29rIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGRpZmYgaXRzZWxmOlxuXG5gYGBjXG5AQCAtMjAwLDcgKzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4gXG4rXHRldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7XG5gYGBcblxuUmlnaHQsIHRoZSBjb250ZXh0IGxpbmVzIGRvbid0IGRpcmVjdGx5IHNwZWNpZnkgdGhlIHR5cGUgb2YgYGluZm9gLCBidXQgSSBjYW4gaW5mZXIgaXQncyBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IGBldGh0b29sX29wX2dldF90c19pbmZvYCBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgcGFzc2VkIGJhY2sgdG8gdGhlIHVzZXIuIEknbGwgcmVhZCBpbnRvIGBldGh0b29sX29wX2dldF90c19pbmZvYCBub3cgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSBkYXRhIGZsb3cgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NDkuNDk0MDkwNzg5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdGludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA3MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4gIDcyOlxcdHtcXG4gIDczOlxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XFxuICA3NDpcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcXG4gIDc1OlxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxcbiAgNzY6XFx0XFx0XFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcXG4gIDc3OlxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IC0xO1xcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjQ5LjQ5NDI4OTMzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxOTY2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaW1lc3RhbXBpbmcgSW5mb3JtYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBgaW5mb2Agc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGFsbCBpdCBkb2VzIGRpcmVjdGx5IGlzIHNldCB0aGUgYHNvX3RpbWVzdGFtcGluZ2AgYW5kIGBwaGNfaW5kZXhgIGZpZWxkcy4gQSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgdGhpcyBmdW5jdGlvbiBpbXBsaWNpdGx5IHplcm8gb3V0IHRoZSByZXN0IG9mIHRoZSBgaW5mb2Agc3RydWN0LCBvciBpcyB0aGF0IGxlZnQgdG8gdGhlIGNhbGxlcj8gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUsIGJlY2F1c2UgaWYgdGhlcmUncyBubyBndWFyYW50ZWVkIGluaXRpYWxpemF0aW9uLCB0aGVuIHdlIGNvdWxkIGJlIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciBpbiB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24uIFNpbmNlIGl0J3MgYW4gZXRodG9vbCBvcGVyYXRpb24sIGl0J3MgY2FsbGVkIHNvbWV3aGVyZSBhcyBwYXJ0IG9mIHRoZSBldGh0b29sIGZyYW1ld29yay4gU28sIG15IG5leHQgc3RlcCBpcyB0byBsb2NhdGUgYWxsIGNhbGwgc2l0ZXMgZm9yIGBuc2ltX2dldF90c19pbmZvYCwgd2hpY2ggaXRzZWxmIGlzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5zaW1fZ2V0X3RzX2luZm9gLiBUaGF0IHNob3VsZCBsZWFkIG1lIHRvIHRoZSBwbGFjZSBpbiBgbmV0L2V0aHRvb2wvYCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIEFuZCBpdCBtdXN0IGJlIGluIGVpdGhlciBgdHNpbmZvLmNgIG9yIGBpb2N0bC5jYC5cblxuT25jZSBJJ3ZlIGZvdW5kIHdoZXJlIHRoaXMgaXMgY2FsbGVkLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuIElzIGl0IG9uIHRoZSBzdGFjaz8gSXMgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVkPyBBbmQgY3J1Y2lhbGx5LCBpcyBpdCBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBldGh0b29sX29wX2dldF90c19pbmZvYD8gVGhhdCdzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIGV4aXN0cyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLCBhbmQgSSdsbCBiYXNlIG15IHVuZGVyc3RhbmRpbmcgb2YgYmVoYXZpb3Igb24gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBpbmZvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODo1NC40NDYyNTkwMDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTMwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF90c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uYz05NTk9c3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2NS1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NjY6aW50IGV0aHRvb2xfbmV0X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3Mi1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NzM6XFx0aWYgKCFvcHMtXFx1MDAzZWdldF90c19pbmZvKVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3NC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy05NzgtXFx0aW5mby1cXHUwMDNlcGhjX3F1YWxpZmllciA9IGh3cHJvdl9kZXNjLVxcdTAwM2VxdWFsaWZpZXI7XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTc5OlxcdGVyciA9IG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy05ODAtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTk5MD1zdHJ1Y3QgcGh5X2RldmljZSAqXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTkxOmV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk5Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDM0LVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwMzU6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTAzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQwLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwNDE6XFx0ZXJyID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNDItXFx0aWYgKGVyciA9PSAtRU5PREVWIHx8IGVyciA9PSAtRU9QTk9UU1VQUCkge1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0NC1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDQ1OlxcdFxcdHBoeSA9IGV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhkZXYsIGluZm8sIGh3cHJvdl9kZXNjKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQ2LVxcdFxcdGlmIChJU19FUlIocGh5KSlcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjYtXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA2NzppbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA2OC1cXHRcXHRcXHQgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA5MC1cXHRcXHRcXHR9XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA5MTpcXHRcXHR9IGVsc2UgaWYgKG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8pIHtcXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDkyOlxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDkzLVxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXBoY19pbmRleCBcXHUwMDNlPSAwKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTEwMy1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTA0OlxcdGVyciA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgXFx1MDAyNmh3cHJvdi1cXHUwMDNlZGVzYyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTEwNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTExMzA9aW50IGV0aHRvb2xfZ2V0X3BoY192Y2xvY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqKnZjbG9ja19pbmRleClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzQtXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTEzNTpcXHRpZiAoIV9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZpbmZvKSlcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTM2LVxcdFxcdG51bSA9IHB0cF9nZXRfdmNsb2Nrc19pbmRleChpbmZvLnBoY19pbmRleCwgdmNsb2NrX2luZGV4KTtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTExNDA9RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF9waGNfdmNsb2Nrcyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTE0MS1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTQyOmludCBldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDMte1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDQ6XFx0cmV0dXJuIF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDUtfVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDY6RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQ3LVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9NTc9aW50IGV0aHRvb2xfZ2V0X3J4X3JpbmdfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtNTgtXFxubmV0L2V0aHRvb2wvY29tbW9uLmg6NTk6aW50IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6NjA6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtNjEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTYyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXJfZGVzYyAqaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjYzOmludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZXRodG9vbC9jb21tb24uaC02NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTY2PXN0cnVjdCBwaHlfZGV2aWNlICpcXG5uZXQvZXRodG9vbC9jb21tb24uaDo2NzpldGh0b29sX3BoeV9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZXRodG9vbC9jb21tb24uaC02OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTY4PUVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfbGluayk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy02OS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjcwOmludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy03MS1cXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzktfVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6ODA6RVhQT1JUX1NZTUJPTChldGh0b29sX29wX2dldF90c19pbmZvKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTgxLVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0yNzc5PXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfZHVtcF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDEtXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODQyOnN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODQzLXtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg0Ny1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI4NDg6XFx0ZXJyID0gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgXFx1MDAyNmtlcm5lbF9pbmZvKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDktXFx0aWYgKGVycilcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTIxLVxcdGNhc2UgRVRIVE9PTF9HRVRfVFNfSU5GTzpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1MjI6XFx0XFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzUyMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM9MzU9c3RhdGljIGludCB0c2NvbmZpZ19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtNjgtXFx0XFx0dHNfaW5mby5waGNfaW5kZXggPSAtMTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjY5OlxcdFxcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZ0c19pbmZvKTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTcwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTI2Mz10c2NvbmZpZ19zZXRfaHdwcm92X2Zyb21fZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzMtXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzQ6XFx0cmV0ID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgXFx1MDAyNnRzX2luZm8sIGh3cHJvdl9kZXNjKTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTI3NS1cXHRpZiAoIXJldCkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzgtXFx0fSBlbHNlIHtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjI3OTpcXHRcXHRwaHkgPSBldGh0b29sX3BoeV9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcXHUwMDI2dHNfaW5mbywgaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjgwLVxcdFxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9OTY9c3RhdGljIGludCB0c2luZm9fcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMDktXFx0aWYgKHJlcS1cXHUwMDNlaHdwcm92X2Rlc2MuaW5kZXggIT0gLTEpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYzoxMTA6XFx0XFx0cmV0ID0gZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNldHNfaW5mbyxcXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMTEtXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZyZXEtXFx1MDAzZWh3cHJvdl9kZXNjKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyMi1cXG5uZXQvZXRodG9vbC90c2luZm8uYzoxMjM6XFx0cmV0ID0gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZXRzX2luZm8pO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyNC1cXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jPTM4OD1zdGF0aWMgaW50IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRkZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTM5OC1cXG5uZXQvZXRodG9vbC90c2luZm8uYzozOTk6XFx0aWYgKCFvcHMtXFx1MDAzZWdldF90c19pbmZvKVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQwMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYy00MTQtXFx0XFx0cmVwbHlfZGF0YS1cXHUwMDNldHNfaW5mby5waGNfcXVhbGlmaWVyID0gY3R4LVxcdTAwM2Vwb3NfcGhjcXVhbGlmaWVyO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQxNTpcXHRcXHRyZXQgPSBvcHMtXFx1MDAzZWdldF90c19pbmZvKGRldiwgXFx1MDAyNnJlcGx5X2RhdGEtXFx1MDAzZXRzX2luZm8pO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQxNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NTQuNTAxMTk2NjU4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzMzMjg3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZXRodG9vbF9nZXRfdHNfaW5mb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgZ2V0dGluZyB0aW1lc3RhbXBpbmcgaW5mb3JtYXRpb24gdmlhIGV0aHRvb2wuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGV0aHRvb2xfZ2V0X3RzX2luZm9gIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBleHBsaWNpdCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgYW5kIHByZXNlbnRpbmcgdGhlIHJlbGV2YW50IHRpbWVzdGFtcGluZyBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODo1OC4xNzQ1MjkyNTJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0MjpcXHRzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbjI4NDM6XFx0e1xcbjI4NDQ6XFx0XFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ga2VybmVsX2luZm87XFxuMjg0NTpcXHRcXHRzdHJ1Y3QgZXRodG9vbF90c19pbmZvIGluZm8gPSB7fTtcXG4yODQ2OlxcdFxcdGludCBlcnI7XFxuMjg0NzpcXHRcXG4yODQ4OlxcdFxcdGVyciA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZrZXJuZWxfaW5mbyk7XFxuMjg0OTpcXHRcXHRpZiAoZXJyKVxcbjI4NTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODUxOlxcdFxcbjI4NTI6XFx0XFx0aW5mby5jbWQgPSBrZXJuZWxfaW5mby5jbWQ7XFxuMjg1MzpcXHRcXHRpbmZvLnNvX3RpbWVzdGFtcGluZyA9IGtlcm5lbF9pbmZvLnNvX3RpbWVzdGFtcGluZztcXG4yODU0OlxcdFxcdGluZm8ucGhjX2luZGV4ID0ga2VybmVsX2luZm8ucGhjX2luZGV4O1xcbjI4NTU6XFx0XFx0aW5mby50eF90eXBlcyA9IGtlcm5lbF9pbmZvLnR4X3R5cGVzO1xcbjI4NTY6XFx0XFx0aW5mby5yeF9maWx0ZXJzID0ga2VybmVsX2luZm8ucnhfZmlsdGVycztcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgXFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXFxuMjg1OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjU4LjE3NDcxODc2MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA2MjQ5MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgQnVnKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHNpdHRpbmcgcmlnaHQgd2l0aCB0aGlzIGNvZGUgc25pcHBldC4gSSdtIGxvb2tpbmcgYXQgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0LCB3aGljaCBpcyBhIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mb2AsIGlzbid0IGJlaW5nIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgX19ldGh0b29sX2dldF90c19pbmZvYC4gV2UncmUgZGVjbGFyaW5nIGl0LCBjcmVhdGluZyBhIGxvY2FsIHZhcmlhYmxlIGZvciB0aGUgZXRodG9vbCBpbmZvLCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0gcmlnaHQgdGhlcmUhXG5cbkl0IGFwcGVhcnMgdGhlIGNhbGwgdG8gYF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNmtlcm5lbF9pbmZvKWAgY291bGQgYmUgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBga2VybmVsX2luZm9gLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19ldGh0b29sX2dldF90c19pbmZvYCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSB1c2luZyB0aGUgYGtlcm5lbF9pbmZvYCBzdHJ1Y3R1cmUuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBjb3VsZCBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cywgZXNwZWNpYWxseSBpZiBgX19ldGh0b29sX2dldF90c19pbmZvYCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gd3JpdGUgdG8gdGhlIGZpZWxkcywgb3IgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZSBzdHJ1Y3R1cmUuIERlcGVuZGluZyBvbiBob3cgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgaGFuZGxlcyB0aGlzIHN0cnVjdCwgaXQncyBwb3NzaWJsZSB0aGlzIGNvZGUgaXMgcmVseWluZyBvbiB0aGUgdW5kZXJseWluZyBtZW1vcnkgdG8gYmUgemVyb2VkIG9yIHNldCBpbiBzb21lIHdheSB0aGF0J3Mgbm90IGNsZWFybHkgZGVmaW5lZCBoZXJlLiBMZXQncyBnbyBjaGVjayB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjAzLjE4MDk3MDc4MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NzpcXHRpbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTA2ODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbjEwNjk6XFx0e1xcbjEwNzA6XFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuMTA3MTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDcyOlxcdFxcbjEwNzM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNzQ6XFx0XFx0aHdwcm92ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cXHUwMDNlaHdwcm92KTtcXG4xMDc1OlxcdFxcdC8qIE5vIHByb3ZpZGVyIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQgYmVoYXZpb3IgKi9cXG4xMDc2OlxcdFxcdGlmICghaHdwcm92KSB7XFxuMTA3NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHM7XFxuMTA3ODpcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gZGV2LVxcdTAwM2VwaHlkZXY7XFxuMTA3OTpcXHRcXG4xMDgwOlxcdFxcdFxcdGV0aHRvb2xfaW5pdF90c2luZm8oaW5mbyk7XFxuMTA4MTpcXHRcXHRcXHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAocGh5ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbjEwODI6XFx0XFx0XFx0ICAgIHBoeV9oYXNfdHNpbmZvKHBoeWRldikpIHtcXG4xMDgzOlxcdFxcdFxcdFxcdGVyciA9IHBoeV90c19pbmZvKHBoeWRldiwgaW5mbyk7XFxuMTA4NDpcXHRcXHRcXHRcXHQvKiBSZXBvcnQgdGhlIHBoYyBzb3VyY2Ugb25seSBpZiB3ZSBoYXZlIGEgcmVhbFxcbjEwODU6XFx0XFx0XFx0XFx0ICogcGhjIHNvdXJjZSB3aXRoIGFuIGluZGV4LlxcbjEwODY6XFx0XFx0XFx0XFx0ICovXFxuMTA4NzpcXHRcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwaGNfaW5kZXggXFx1MDAzZT0gMCkge1xcbjEwODg6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9QSFlMSUI7XFxuMTA4OTpcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VwaGNfcGh5aW5kZXggPSBwaHlkZXYtXFx1MDAzZXBoeWluZGV4O1xcbjEwOTA6XFx0XFx0XFx0XFx0fVxcbjEwOTE6XFx0XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldF90c19pbmZvKSB7XFxuMTA5MjpcXHRcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZWdldF90c19pbmZvKGRldiwgaW5mbyk7XFxuMTA5MzpcXHRcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwaGNfaW5kZXggXFx1MDAzZT0gMClcXG4xMDk0OlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXBoY19zb3VyY2UgPSBIV1RTVEFNUF9TT1VSQ0VfTkVUREVWO1xcbjEwOTU6XFx0XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRcXHRpbmZvLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XFxuMTA5ODpcXHRcXHRcXHRcXHRcXHRcXHQgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMDI6XFx0XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRlcnIgPSBldGh0b29sX2dldF90c19pbmZvX2J5X3BoYyhkZXYsIGluZm8sIFxcdTAwMjZod3Byb3YtXFx1MDAzZWRlc2MpO1xcbjExMDU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTEwNjpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTowMy4xODExNzg2NjFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MTEzOTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGV0aHRvb2wgVGltZXN0YW1wIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIGNhbGxpbmcgYGV0aHRvb2xfaW5pdF90c2luZm8oaW5mbylgLiBDbGFzc2ljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cIiBJJ20gbm90IHN1cnByaXNlZCB0byBzZWUgdGhhdCBzZXF1ZW5jZSBvZiBldmVudHMgaW4gdGhlIGNvZGUsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBraWNrZWQgb2ZmIGhlcmUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjb21tb24gaW5pdGlhbGl6YXRpb24gcGF0aCBvciBhIHNwZWNpZmljIGNvZGUgcGF0aD8gSXMgdGhpcyBhIG9uZS10aW1lIHRoaW5nIG9yIGRvZXMgYGV0aHRvb2xfaW5pdF90c2luZm9gIGdldCBjYWxsZWQgcmVwZWF0ZWRseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaW5pdGlhbGl6YXRpb24sIHNvIHdoYXQgc3RhdGUgYXJlIHdlIHB1dHRpbmcgdGhpcyB0aW1lc3RhbXAgaW5mbyBvYmplY3QgaW50bz8gQXJlIHdlIHByZS1maWxsaW5nIHdpdGggc2FuZSBkZWZhdWx0cywgY2hlY2tpbmcgdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBzY2FuIG9mIGBldGh0b29sX2luaXRfdHNpbmZvYCB3aWxsIHRlbGwgbWUgZXhhY3RseSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGF0LiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgaW5mb3JtIGhvdyB0byBkZWJ1ZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWF5IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MDguMjMyMzIyMTJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1OTpcXHRzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbiA5NjA6XFx0e1xcbiA5NjE6XFx0XFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbiA5NjI6XFx0XFx0aW5mby1cXHUwMDNlY21kID0gRVRIVE9PTF9HRVRfVFNfSU5GTztcXG4gOTYzOlxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IC0xO1xcbiA5NjQ6XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRpbnQgZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4gOTY4OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBod3RzdGFtcF9wcm92aWRlcl9kZXNjICpod3Byb3ZfZGVzYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MDguMjMyNDQ4MjhaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2Njc1MTMwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgZXRodG9vbF9nZXRfdHNfaW5mb2AgcGF0aCBzZWVtcyBzb2xpZC4gVGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldGAgYmVmb3JlIGJlaW5nIHBhc3NlZCBhcm91bmQsIGFuZCBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlIGNvbWVzIGZyb20gdGhhdCBpbml0aWFsaXplZCBtZW1vcnkuIE5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIGBuc2ltX2dldF90c19pbmZvYC4gSSBpbml0aWFsbHkgdGhvdWdodCBJIG1pZ2h0IGZpbmQgYSBwcm9ibGVtLCBidXQgaXQgbG9va3MgbGlrZSBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgKmlzKiBjYWxsZWQsIGJ1dCB0aGUgIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIGZ1bmN0aW9uIGVuc3VyZXMgdGhlIGBpbmZvYCBpcyB6ZXJvZWQsIHdoaWNoIG1lYW5zIGBuc2ltX2dldF90c19pbmZvYCBkb2Vzbid0IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGBuc2ltX3N0YXJ0X3htaXRgLiBUaGlzIGlzIG1vcmUgY29tcGxleC4gSSdtIHNjcnV0aW5pemluZyB0aGUgcG90ZW50aWFsIHVzZSBvZiBgcnhfdHNgLiBUaGUgY29kZSBoYXMgc2V2ZXJhbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gaGFyZHdhcmUgdGltZXN0YW1waW5nIChgU0tCVFhfSFdfVFNUQU1QYCksICBgdHhfdHlwZWAgYW5kIGByeF9maWx0ZXJgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXM6XG5cbiogICBJZiBgcHRwX2luZm9fcnhgIGlzIHRydWUsIHRoZW4gYHJ4X3RzYCBpcyBhc3NpZ25lZCBhIHZhbHVlIGJlZm9yZSBpdCdzIHVzZWQgZWl0aGVyIGluc2lkZSB0aGUgYGlmIChwdHBfaW5mb190eClgIG9yIGluIHRoZSBgZWxzZSBpZiAocHRwX2luZm9fcngpYCBibG9ja3MuIFRoZSB0aW1pbmcgaXMgaW1wb3J0YW50LCBidXQgdGhlcmUgaXMgbm8gb2J2aW91cyByYWNlIGNvbmRpdGlvbiBzaW5jZSB0aGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIGV2YWx1YXRlZCBhdCBydW50aW1lLlxuKiAgIFRoZSBwcm9ibGVtYXRpYyBwYXRoIEkgc2F3IHdhcyB3aGVyZSBgcHRwX2luZm9fdHhgIGlzIHRydWUsIGJ1dCBgbGlrZWx5KHB0cF9pbmZvX3J4KWAgaXMgZmFsc2UuICBJIGhhZCB0byBkb3VibGUgY2hlY2ssIGJ1dCBpbiB0aGlzIGNhc2UsIGByeF90c2AgaXNuJ3QgdXNlZCBhdCBhbGwgaW4gYW55IGNhc2UuXG4qICAgU2ltaWxhcmx5IGZvciBgdHhfdHNgLCBpZiB0aGUgYHB0cF9pbmZvX3R4YCBjb25kaXRpb24gaXMgbWV0LCB0aGVuIGl0IGlzIGJvdGggaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIG90aGVyd2lzZSwgaXQgaXMgbm90IHVzZWQuXG5cbkkgYmVsaWV2ZSBgc2hod3RzdGFtcHNgIGlzIGluaXRpYWxpemVkIHRvIGB7fWAuIEFuZCBhbHRob3VnaCBJIGFtIG5vdCBjZXJ0YWluIGlmIHBhZGRpbmcgaXMgYWRkZWQsIGl0IGlzIGluaXRpYWxpemVkIHdoaWNoIG1lYW5zIGFueSBhY2Nlc3Mgd2lsbCBub3QgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuXG5UaHVzLCBgbnNpbV9zdGFydF94bWl0YCBpcyBhbHNvIHNhZmUuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjIzLjg5OTk2NDcyM1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTAxNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQxMD1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdfbXVzdF9sb29wKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjEtICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NjI6c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2My1cXHR1bmlvbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjI0LjA4NzQ5NjA0MVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMzE5MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wc2A6XG5cbioqRGl2aW5nIGludG8gYHNrYl9zaGFyZWRfaHd0c3RhbXBzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyB0aW1lc3RhbXAgc3RydWN0dXJlLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGUgYHNrX2J1ZmZgIGludGVybmFscywgb2YgY291cnNlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aW1lc3RhbXBzLiBTbywgYHNrYl9zaGFyZWRfaHd0c3RhbXBzYCwgaHVoPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcHJvYmFibHkgaG9sZHMgc29tZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCBoYXJkd2FyZS1nZW5lcmF0ZWQgdGltZXN0YW1wcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNrX2J1ZmYsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGFuZCB0aGVyZWZvcmUgc2hhcmVkIGFjcm9zcyBjbG9uZWQgc2ticywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgb3B0aW1pemF0aW9uLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgY29udGFpbnMgZmllbGRzIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgdGltZXN0YW1wcywgbGlrZSBpbmdyZXNzIGFuZCBlZ3Jlc3MsIHBlcmhhcHMgZnJvbSB2YXJpb3VzIE5JQ3Mgb3IgaGFyZHdhcmUgYmxvY2tzLiBOb3csIGxldCdzIHNlZSBob3cgdGhlIGtlcm5lbCB1c2VzIHRoaXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZXN0YW1wcyBhcmUgYWN0dWFsbHkgcG9wdWxhdGVkIGFuZCB0aGVuIHJlYWQuIElzIGl0IGFjY2Vzc2VkIGF0b21pY2FsbHk/IFdoYXQgbG9ja2luZyBpcyBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcz8gVW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uIGhlcmUgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIGtub3cgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJvdmlzaW9ucyB0byBoYW5kbGUgbWlzc2VkIG9yIGNvcnJ1cHRlZCB0aW1lc3RhbXBzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgZGV2ZWxvcGVycyBzdHJ1Y3R1cmVkIHRoaXMgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgc2NhbGFiaWxpdHkuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgb3IgZHJpdmVyLXNwZWNpZmljIGhvb2tzPyBUaW1lIHRvIGdldCBpbnRvIGl0IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MjcuODY4ODE4MTUzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MjpcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xcbiA0NjM6XFx0XFx0dW5pb24ge1xcbiA0NjQ6XFx0XFx0XFx0a3RpbWVfdFxcdGh3dHN0YW1wO1xcbiA0NjU6XFx0XFx0XFx0dm9pZCAqbmV0ZGV2X2RhdGE7XFxuIDQ2NjpcXHRcXHR9O1xcbiA0Njc6XFx0fTtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0LyogRGVmaW5pdGlvbnMgZm9yIHR4X2ZsYWdzIGluIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKi9cXG4gNDcwOlxcdGVudW0ge1xcbiA0NzE6XFx0XFx0LyogZ2VuZXJhdGUgaGFyZHdhcmUgdGltZSBzdGFtcCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OToyNy44NjkwNzg5MDNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0NTgzNjQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyBpbiBQVFAgVGltZXN0YW1waW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIChgc2tiX3NoYXJlZF9od3RzdGFtcHNgKSBpcyBqdXN0IGEgdW5pb24gb2YgYGt0aW1lX3RgIGFuZCBgdm9pZCAqYCwgYW5kIHNpbmNlIGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YCAocHJlc3VtYWJseSB6ZXJvZWQpLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGltbWVkaWF0ZSBtZW1vcnkgbGVha3MgZnJvbSB1bmluaXRpYWxpemVkIGRhdGEuXG5cbk5leHQsIEknbGwgZXhhbWluZSB0aGUgYG1vY2tfcGhjX2dldHRpbWU2NGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfbW9jay5jYC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBgdGltZWNvdW50ZXJfcmVhZGAgYW5kIHRoZW4gYG5zX3RvX3RpbWVzcGVjNjRgLCB3aGljaCBndWFyYW50ZWVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQ29uc2VxdWVudGx5LCBgdHhfdHNgIGFuZCBgcnhfdHNgIHNob3VsZCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGBtb2NrX3BoY19zZXR0aW1lNjRgIGZ1bmN0aW9uIGFsc28gYXBwZWFycyBzYWZlIGJhc2VkIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBGdXJ0aGVybW9yZSwgdGhlIGFkanVzdG1lbnRzIGZvciBgbW9ja19waGNfYWRqdGltZWAgYW5kIGBtb2NrX3BoY19hZGpmaW5lYCBqdXN0IGZpeCBsb2NraW5nIGZvciBpcnEgc2FmZXR5LCBub3QgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5NeSBhdHRlbnRpb24gdGhlbiB0dXJucyB0byB0aGUgY2hhbmdlcyBpbiBgbnNpbV9zdGFydF94bWl0YC4gVGhlIGFkZGl0aW9uIG9mIGBwdHAucHlgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBgTWFrZWZpbGVgIGFuZCBgY29uZmlnYCBmaWxlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYCBjb3VsZCBpbnRyb2R1Y2Ugc29tZXRoaW5nIHVuZXhwZWN0ZWQsIGJ1dCBsZXQncyBmb2N1cyBvbiB0aGUgdGltZXN0YW1waW5nIGxvZ2ljIGZpcnN0LlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgYG5zaW1fc3RhcnRfeG1pdGAgbGluZS1ieS1saW5lLiBUaGUgY29kZSBhcHBlYXJzIHRvIGNhcHR1cmUgdGltZXN0YW1wcyAoYHR4X3RzYCwgYHJ4X3RzYCkgdXNpbmcgYGdldHRpbWU2NGAuIEl0IHRoZW4gY29udmVydHMgYHR4X3RzYCB0byBhIGBrdGltZV90YCBhbmQgYXNzaWducyBpdCB0byBgc2hod3RzdGFtcHMuaHd0c3RhbXBgLiAgYHNrYl90c3RhbXBfdHhgIHNlZW1zIHRvIGJlIHRoZSBjdWxwcml0LiBJdCBjbG9uZXMgdGhlIHNrYiBhbmQgcXVldWVzIGl0IHRvIHRoZSBzb2NrZXQncyBlcnJvciBxdWV1ZS5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQ6IGBza2JfaHd0c3RhbXBzKHNrYiktXHUwMDNlaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHJ4X3RzKTtgIGNvdWxkIGJlIG92ZXJ3cml0aW5nIGRhdGEuICBIb3dldmVyLCB0aGlzIGxpbmUgc2V0cyBgc2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wYCB3aGljaCByZWZlcnMgdG8gYSBgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzYCB3aXRoaW4gdGhlIFNLQidzIHNoYXJlZCBpbmZvLiAgQ3J1Y2lhbGx5LCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgIGlzIGEgdW5pb24gb2YgYSBga3RpbWVfdGAgKHVzZWQgZm9yIGBod3RzdGFtcGApIGFuZCBhIGB2b2lkICpuZXRkZXZfZGF0YWAuIFNpbmNlIGBod3RzdGFtcGAgaXMgYmVpbmcgc2V0LCB0aGUgZW50aXJlIHVuaW9uIGlzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIGxlYWsuXG5cbk5vdywgdGhpcyBjb25kaXRpb25hbCBgaWYgKHNrYilgIGFmdGVyIGBza2JfY29weWAsIGFuZCB0aGUgYGVsc2VgIHN0YXRlbWVudCBzZXR0aW5nIGBza2IgPSBza2Jfb3JpZ2AuICBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG9mIGBza2JfdHN0YW1wX3R4YC4gRG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggdGhlIFNLQidzIHRpbWVzdGFtcGluZyBkYXRhP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0MS4zMjc0NDgyNDhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTYyMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc2tiX3RzdGFtcF90eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTY1MT1zdGF0aWMgYm9vbCBza2JfdHN0YW1wX3R4X3JlcG9ydF9zb190aW1lc3RhbXBpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU2NjktXFxubmV0L2NvcmUvc2tidWZmLmM6NTY3MDpzdGF0aWMgdm9pZCBza2JfdHN0YW1wX3R4X3JlcG9ydF9icGZfdGltZXN0YW1waW5nKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTY3MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTc2MT1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl90c3RhbXBfdHgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjItXFxubmV0L2NvcmUvc2tidWZmLmM6NTc2Mzp2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjQtXFx0XFx0ICAgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjQxLjM3NTAxNjA1OFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE4MDA0MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgc2tiX3RzdGFtcF90eGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgY29kZSBmb3IgYHNrYl90c3RhbXBfdHhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIGFib3V0IHRpbWVzdGFtcGluZyB0cmFuc21pdHRlZCBTS0JzLlwiIEtub3dpbmcgdGhlIGtlcm5lbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW50cmljYWNpZXMuIElzIHRoaXMgaGFyZHdhcmUgdGltZXN0YW1waW5nPyBTb2Z0d2FyZT8gV2hlcmUgZXhhY3RseSBpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGggaXMgdGhpcyB0aW1lc3RhbXBpbmcgaGFwcGVuaW5nPyBJcyBpdCBiZWluZyBkb25lIGluc2lkZSB0aGUgZHJpdmVyLCBpbiB0aGUgbmV0d29yayBzdGFjaywgb3IgcGVyaGFwcyBpbiB0aGUgaGFyZHdhcmUgaXRzZWxmPyBJIG5lZWQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHRpbWVyIHNvdXJjZSB1c2VkIGFuZCB0aGUgcHJlY2lzaW9uIHJlcXVpcmVtZW50cyB0byBnZXQgYSBmZWVsIGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIHdvbmRlciBpZiB0aGlzIGlzIHRpZWQgdG8gc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzIG9yIGlzIGEgbW9yZSBnZW5lcmljIGZhY2lsaXR5IHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlPyBEb2VzIHRpbWVzdGFtcGluZyBhZGQgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdG8gdHJhbnNtaXNzaW9uPyBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGltZXN0YW1wIHJldHJpZXZhbC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBjb25jdXJyZW50IGFjY2Vzc2VzLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGluIHBsYWNlLCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVycyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUga2V5IGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHByb3ZpZGluZyBhY2N1cmF0ZSB0cmFuc21pc3Npb24gdGltZSBpbmZvcm1hdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDYuMjkzMDIyNDk4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzYzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzYzOlxcdHZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsXFxuNTc2NDpcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcylcXG41NzY1OlxcdHtcXG41NzY2OlxcdFxcdHJldHVybiBfX3NrYl90c3RhbXBfdHgob3JpZ19za2IsIE5VTEwsIGh3dHN0YW1wcywgb3JpZ19za2ItXFx1MDAzZXNrLFxcbjU3Njc6XFx0XFx0XFx0XFx0ICAgICAgIFNDTV9UU1RBTVBfU05EKTtcXG41NzY4OlxcdH1cXG41NzY5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl90c3RhbXBfdHgpO1xcbjU3NzA6XFx0XFxuNTc3MTpcXHQjaWZkZWYgQ09ORklHX1dJUkVMRVNTXFxuNTc3MjpcXHR2b2lkIHNrYl9jb21wbGV0ZV93aWZpX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFja2VkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0Ni4yOTMzMzM5MDhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMDQyNzkxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIGBuZXRkZXZzaW1gOiBBIFRob3JvdWdoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBfX3NrYl90c3RhbXBfdHhgIHNlZW1zIGhhcm1sZXNzLiBJdCBjbG9uZXMgdGhlIFNLQiBhbmQgcXVldWVzIGl0LCBidXQgdGhlIG9yaWdpbmFsIFNLQiByZW1haW5zIHVudG91Y2hlZCwgd2hpY2ggaXMgZmluZS4gVGhlbiwgbW9kaWZ5aW5nIGBza2JfaHd0c3RhbXBzKHNrYiktXHUwMDNlaHd0c3RhbXBgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGNvcHkgb3IgdGhlIG9yaWdpbmFsIFNLQiwgYW5kIHRoZSB0aW1lc3RhbXAgaXMgYmVpbmcgc2V0IGluIGEgY29udHJvbGxlZCBtYW5uZXIuIE5vIHByb2JsZW1zIHRoZXJlLlxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHJldmlzaXQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkgcmVjYWxsIHRoZSBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgYmVpbmcgemVyb2VkIG9uIGFsbG9jYXRpb24uIE5vdywgYGRldl9nZXRfaHd0c3RhbXBgIGluaXRpYWxpemVzIGEgbG9jYWwgYGtlcm5lbF9jZmdgIHRvIGB7fWAgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIG92ZXJ3cml0ZSBwYXJ0cyBvZiBpdCBsb29rIHNhZmUgYmVjYXVzZSBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AncyByZWxldmFudCBmaWVsZHMgYXJlIGVpdGhlciBpbml0aWFsaXplZCBvciBub3QgdXNlZC4gSSd2ZSB0byBkb3VibGUtY2hlY2sgYGNvcHlfdG9fdXNlcmAuIEl0IGNvcGllcyB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZnJvbSBga2VybmVsX2NmZ2AsIGFuZCB0aGUgZGVzdGluYXRpb24gc3RydWN0LCBgY2ZnYCwgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgc2l6ZSBpcyBvbmx5IDEyIGJ5dGVzIGFuZCBgY29weV90b191c2VyYCBjb3BpZXMgZXhhY3RseSB0aGF0LCBhbmQgdGh1cyBubyBpc3N1ZXMgd2l0aCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cblxuTm93LCBob2xkIG9uLiBXaGF0IGFib3V0IHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2A/IFRoaXMgc3RydWN0IGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBldmVuIGlmIHRoZXJlICp3YXMqIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgaXQgaXNuJ3QgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIE9ubHkgdGhlIHNtYWxsZXIsIGNsZWFybHkgZGVmaW5lZCBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgaXMgY29waWVkIGFuZCBpcyBmaW5lLiBTbywgc3RpbGwgZ29vZC5cblxuQWxyaWdodCwgbW92aW5nIG9uIHRvIGBuc2ltX3NldF90c19jb25maWdgLCBpdCB1cGRhdGVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCdzIGB0eF90eXBlYCBhbmQgYHJ4X2ZpbHRlcmAgaW4gYSBjb250cm9sbGVkIHdheSwgYW5kIHNpbmNlIHdlIHVwZGF0ZSBib3RoIHN0cnVjdHMgYXRvbWljYWxseSwgaXQgc2VlbXMgc2FmZS5cblxuTGV0J3MgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZm9yIHBvdGVudGlhbCBwaXRmYWxscy4gYG1vY2tfcGhjX2FkamZpbmVgLCBldGMuLCBpbiBgcHRwX21vY2suY2Agb25seSBjaGFuZ2Ugc3BpbmxvY2tzIHRvIHRoZWlyIGlycXNhdmUgY291bnRlcnBhcnRzLCBzbyB0aGVzZSBhcmUgbG9ja2luZyBjaGFuZ2VzIGFuZCBub3QgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gSSdtIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJlLlxuXG5Ob3csIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIHNhZmU7IGl0IHNpbXBseSByZXR1cm5zIGEgcG9pbnRlciB0byBgcGhjLVx1MDAzZWluZm9gLiBObyBtYWdpYywgbm8gbWVtb3J5IGlzc3Vlcy5cblxuSG93IGFib3V0IGBuc2ltX3N0YXJ0X3htaXRgPyBUaGF0IHNlZW1zIGZpbmU7IGl0IHVzZXMgYHB0cF9pbmZvX3R4YCBhZnRlciBjaGVja2luZyBgU0tCVFhfSFdfVFNUQU1QYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNhZmV0eSBvZiBgc2tiX2NvcHlgIHdoaWNoIGlzIGNydWNpYWwsIGxldCdzIHN0ZXAgdGhyb3VnaCBpdDogaWYgdGhlIGNvcHkgc3VjY2VlZHMsIHRoZSBvcmlnaW5hbCBTS0IgaXMgY29uc3VtZWQsIGFuZCB0aGUgdGltZXN0YW1wIGlzIHNldCBvbiB0aGUgbmV3IGNvcHkgdXNpbmcgYHNrYl9od3RzdGFtcHMoKWAuIFRoaXMgbG9va3Mgc2FmZS4gVGhlIG5ldyBTS0IgaXMgdGhlbiBmb3J3YXJkZWQsIGFzIGl0IHNob3VsZCBiZS4gTm8gaXNzdWVzIHRoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgZGF0YSByYWNlcywgc28gbGV0J3MgY2hlY2sgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgLCBhbmQgdGhlIHVzZSBvZiB0aGVzZSBpcyBmaW5lIGJlY2F1c2UgdGhleSBwcm92aWRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXIuXG5cbkkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGBzaGh3dHN0YW1wc2AgYW5kIGB0eF90c2AsIGByeF90c2AgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHMgPSB7fTtgIGxpbmUgemVyby1pbml0aWFsaXplcyB0aGlzIHN0cnVjdC4gU2FmZS5cblxuTm93LCBhYm91dCBgdHhfdHNgIGFuZCBgcnhfdHNgIEkgbmVlZCB0byByZXZpZXcgdGhpcy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBgcHRwX2luZm9fdHgtXHUwMDNlZ2V0dGltZTY0YCBhbmQgYHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NGAgZnVuY3Rpb25zLiBJZiBgcHRwX2luZm9fdHhgIGlzIHRydWUsIHRoZW4gYHR4X3RzYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgdGhlbiBgcnhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBhbmQgdXNlZC4gSWYgbm90LCBpdCBpcyB1bnVzZWQuXG5cbldhaXQgYSBzZWNvbmQuIFdoYXQgaWYgYHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NGAgZmFpbHM/IEkgcmVtZW1iZXIgdGhhdCB0aGUgYGdldHRpbWU2NGAgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kIHRoZSBtb2NrIGltcGxlbWVudGF0aW9uIGluIGBwdHBfbW9jay5jYCBhbHdheXMgcmV0dXJuIDAsIGluaXRpYWxpemluZyB0aGUgYHRzYCBwYXJhbWV0ZXIuIFBsdXMsIGBwdHBfaW5mb190eGAgYWx3YXlzIGNhbGxzIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBTbyB0aGUgdGltZXN0YW1waW5nIGFsd2F5cyBpbml0aWFsaXNlcyBwcm9wZXJseS5cblxuRmluYWxseSwgbGV0J3MgcXVpY2tseSBjaGVjayBgbnNpbV9nZXRfdHNfaW5mb2AgYW5kIGBuc2ltX2dldF90c19jb25maWdgLiBJbiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBpbmZvYCBpcyBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci4gU28gYWxzbyBzYWZlLiBBbmQgaW5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ2LCJPdXRwdXRUb2tlbnMiOjQ3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDoxNi40OTc2MTYxOTVaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 20:01:03 +0000 UTC FinishedAt: 2026-08-12 20:50:17 +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": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PTP_1588_CLOCK", "PTP_1588_CLOCK_MOCK" ], "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": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PTP_1588_CLOCK", "PTP_1588_CLOCK_MOCK" ], "series_id": "c19a13fd-1715-45c6-a4c4-1a5e362b1dfb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_set_ts_config", "nsim_get_ts_config", "nsim_get_ts_info", "mock_phc_get_ptp_info" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DSyYjMzQ7LAogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19NT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9zZXRfdHNfY29uZmlnJiMzNDssCiAgICAmIzM0O25zaW1fZ2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19pbmZvJiMzNDssCiAgICAmIzM0O21vY2tfcGhjX2dldF9wdHBfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxuXG5BbmFseXNpcyBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUga2VybmVsIHRoZW4gY29waWVzIG9ubHkgdGhlIGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgIGZpZWxkcyB0byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCAod2hpY2ggaGFzIG5vIHBhZGRpbmcpIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cbjQuIFRoZSBjaGFuZ2VzIGluIGBwdHBfbW9jay5jYCBhZGRyZXNzIGEgbG9ja2luZyBjb250ZXh0IGlzc3VlIChjaGFuZ2luZyBgc3Bpbl9sb2NrYCB0byBgc3Bpbl9sb2NrX2lycXNhdmVgKSwgd2hpY2ggaXMgYSBjb25jdXJyZW5jeSBidWcgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzY1MmFlNTYxNDdmNjY2MzVkZTE4M2ZhOWUyMTliMDdkMzI4ZjE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDY6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmNcbmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5AQCAtMjAwLDcgJiM0MzsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuJiM0MztcdGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcbiYjNDM7XG4gXHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IG1vY2tfcGhjX2luZGV4KG5zLVx1MDAzZXBoYyk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcbiYjNDM7XHRcdFx0XHQgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1x0aW5mby1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjdhMjY4YTFhNTQ1NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTMwLDYgJiM0MzszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWNvdW50ZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O25ldGRldnNpbS5oXCYjMzQ7XG4gXG5AQCAtMTIyLDEyICYjNDM7MTI0LDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LFxuIFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb190eCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb19yeCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjtcbiBcdHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0ID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpwZWVyX2RldjtcbiBcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucztcbiBcdHN0cnVjdCBuZXRkZXZfY29uZmlnICpjZmc7XG4mIzQzO1x0aW50IHJ4X2ZpbHRlciwgdHhfdHlwZTtcbiBcdHN0cnVjdCBuc2ltX3JxICpycTtcbiBcdGludCByeHE7XG4gXHRpbnQgZHI7XG5AQCAtMTY0LDYgJiM0MzsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4mIzQzO1x0cnhfZmlsdGVyID0gUkVBRF9PTkNFKHBlZXJfbnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIpO1xuJiM0MztcdHR4X3R5cGUgPSBSRUFEX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSlcbiYjNDM7XHRcdHB0cF9pbmZvX3J4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKHBlZXJfbnMtXHUwMDNlcGhjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjYgU0tCVFhfSFdfVFNUQU1QIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0eF90eXBlID09IEhXVFNUQU1QX1RYX09OKVxuJiM0MztcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnRcbiYjNDM7XHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHB0cF9pbmZvX3R4KSB7XG4mIzQzO1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4mIzQzO1x0XHQgKiBmb3IgYmV0dGVyIGFjY3VyYWN5XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuJiM0MztcdFx0aWYgKGxpa2VseShwdHBfaW5mb19yeCkpXG4mIzQzO1x0XHRcdHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXHUwMDI2cnhfdHMpO1xuJiM0MztcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbiYjNDM7XHRcdHNrYl90c3RhbXBfdHgoc2tiX29yaWcsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4mIzM5O3QgYmUgcmV0dXJuZWQgYnkgYSBzaW5nbGUgc2tiLlxuJiM0MztcdFx0ICogQ29weSB0aGUgc2tiIHRvIHJldHVybiBib3RoIHRpbWVzdGFtcHMuIElmIHRoZSBjb3B5IGZhaWxzLFxuJiM0MztcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4mIzQzO1x0XHQgKiBhYm92ZSB3aWxsIGJlIHJldHVybmVkIGFzIGJvdGggVHggYW5kIFJ4IHRpbWVzdGFtcC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHNrYilcbiYjNDM7XHRcdFx0Y29uc3VtZV9za2Ioc2tiX29yaWcpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRza2IgPSBza2Jfb3JpZztcbiYjNDM7XHR9IGVsc2UgaWYgKHB0cF9pbmZvX3J4KSB7XG4mIzQzO1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdHBfaW5mb19yeClcbiYjNDM7XHRcdHNrYl9od3RzdGFtcHMoc2tiKS1cdTAwM2Vod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpO1xuJiM0MztcbiBcdGlmICh1bmxpa2VseShuc2ltX2ZvcndhcmRfc2tiKGRldiwgcGVlcl9kZXYsXG4gXHRcdFx0XHQgICAgICBza2IsIHJxLCBwc3BfZXh0KSA9PSBORVRfUlhfRFJPUCkpXG4gXHRcdGdvdG8gb3V0X2Ryb3BfY250O1xuQEAgLTE4NSw2ICYjNDM7MjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5zaW1fc2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0aW50IHJ4X2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucy1cdTAwM2VwaGMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXR4X3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiYjNDM7XHRcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PRkYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbiYjNDM7XHRcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PTik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUTpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUTpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbiYjNDM7XHRcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcucnhfZmlsdGVyLCByeF9maWx0ZXIpO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgJiM0Mzs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fdmxhbl9yeF9hZGRfdmlkXHQ9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCxcbiBcdC5uZXRfc2hhcGVyX29wc1x0XHQ9IFx1MDAyNm5zaW1fc2hhcGVyX29wcyxcbiYjNDM7XHQubmRvX2h3dHN0YW1wX2dldFx0PSBuc2ltX2dldF90c19jb25maWcsXG4mIzQzO1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiAmIzQzOzEwOCw3IEBAIHN0cnVjdCBuZXRkZXZzaW0ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXY7XG4gXHRzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydDtcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xuIFx0c3RydWN0IG1vY2tfcGhjICpwaGM7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqKnJxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jXG5pbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuQEAgLTQ5LDE1ICYjNDM7NDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzNjQgYWRqO1xuIFxuIFx0YWRqID0gKHM2NClzY2FsZWRfcHBtIFx1MDAzY1x1MDAzYyBNT0NLX1BIQ19GQURKX1NISUZUO1xuIFx0YWRqID0gZGl2X3M2NChhZGosIE1PQ0tfUEhDX0ZBREpfREVOT01JTkFUT1IpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfcmVhZChcdTAwMjZwaGMtXHUwMDNldGMpO1xuIFx0cGhjLVx1MDAzZWNjLm11bHQgPSBNT0NLX1BIQ19DQ19NVUxUICYjNDM7IGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjUsMTAgJiM0Mzs2NiwxMSBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4gc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2FkanRpbWUoXHUwMDI2cGhjLVx1MDAzZXRjLCBkZWx0YSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc4LDEwICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfaW5pdChcdTAwMjZwaGMtXHUwMDNldGMsIFx1MDAyNnBoYy1cdTAwM2VjYywgbnMpO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSAmIzQzOzkyLDEyIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbiBzdGF0aWMgaW50IG1vY2tfcGhjX2dldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgbnM7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHQqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTtcbiBcbkBAIC0xNzEsNSAmIzQzOzE3NSwxMSBAQCB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xuIFxuJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjZwaGMtXHUwMDNlaW5mbztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19nZXRfcHRwX2luZm8pO1xuJiM0MztcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEAgc3RydWN0IG1vY2tfcGhjO1xuIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTtcbiBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4gXG4gI2Vsc2VcbiBcbkBAIC0zMyw2ICYjNDM7MzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX1BUUF9NT0NLX0hfICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxuaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxuQEAgLTE5LDYgJiM0MzsxOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdG5ldHBvbGxfYmFzaWMucHkgXFxcbiBcdHBpbmcucHkgXFxcbiBcdHBzcC5weSBcXFxuJiM0MztcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgJiM0MzsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxuIENPTkZJR19QUFA9eVxuIENPTkZJR19QUFBPRT15XG4mIzQzO0NPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLPXlcbiBDT05GSUdfVkxBTl84MDIxUT1tXG4gQ09ORklHX1hEUF9TT0NLRVRTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MmE5NDNkY2JiMDY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcbkBAIC0wLDAgJiM0MzsxLDgyIEBAXG4mIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBCeSBNYWNpZWsgTWFjaG5pa293c2tpIFx1MDAzY21hY2lla0BtYWNobmlrb3dza2kubmV0XHUwMDNlIChjKSAyMDI2LFxuJiM0MztcbiYjNDM7XCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1Rlc3Qgc3VpdGUgZm9yIFBUUCBzeW5jIHVzaW5nIHB0cDRsLlxuJiM0MztcbiYjNDM7U3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuJiM0MztsZWFkZXIgKHN0YXRlIHMyKVxuJiM0MztcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO2ltcG9ydCB0aW1lXG4mIzQzO1xuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKFxuJiM0MzsgICAgTmV0RHJ2RXBFbnYsXG4mIzQzOyAgICBia2csXG4mIzQzOyAgICBmZF9yZWFkX3RpbWVvdXQsXG4mIzQzOyAgICBrc2Z0X2V4aXQsXG4mIzQzOyAgICBrc2Z0X3ByLFxuJiM0MzsgICAga3NmdF9ydW4sXG4mIzQzOyAgICBrc2Z0X3RydWUsXG4mIzQzOylcbiYjNDM7XG4mIzQzO1BUUDRMX1NZTkNfVElNRU9VVCA9IDQwXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIHRpbWVvdXQpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UmVhZCB0aGUgZm9sbG93ZXIgc3Rkb3V0IHBpcGUgdW50aWwgcHRwNGwgcmVwb3J0cyBzeW5jIHN0YXRlIHMyLlxuJiM0MztcbiYjNDM7ICAgIFJldHVybnMgYSB0dXBsZSAoc3luY2VkLCBvdXRwdXQpIHdoZXJlIG91dHB1dCBpcyB0aGUgdGV4dCByZWFkIHNvIGZhci5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4mIzQzOyAgICBmZCA9IGZkX2ZpbGUuZmlsZW5vKClcbiYjNDM7ICAgIGJ1ZiA9IGJcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSAmIzQzOyB0aW1lb3V0XG4mIzQzOyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIFx1MDAzYyBkZWFkbGluZTpcbiYjNDM7ICAgICAgICBpZiBiXCYjMzQ7IHMyIFwmIzM0OyBpbiBidWY6XG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKClcbiYjNDM7ICAgICAgICAgICAgaWYgY2h1bms6XG4mIzQzOyAgICAgICAgICAgICAgICBidWYgJiM0Mzs9IGNodW5rXG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICByZW1haW5pbmcgPSBkZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKClcbiYjNDM7ICAgICAgICAgICAgYnVmICYjNDM7PSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuJiM0MzsgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXJyb3I6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICByZXR1cm4gYlwmIzM0OyBzMiBcJiMzNDsgaW4gYnVmLCBidWYuZGVjb2RlKFwmIzM0O3V0Zi04XCYjMzQ7LCBcJiMzNDtyZXBsYWNlXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtWZXJpZnkgcHRwNGwgbGVhZGVyL2ZvbGxvd2VyIHN5bmNocm9uaXphdGlvbiByZWFjaGVzIHN0YXRlIHMyLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfY21kKFwmIzM0O3B0cDRsXCYjMzQ7LCByZW1vdGU9VHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICBsZWFkZXJfY21kID0gZlwmIzM0O3B0cDRsIC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW0gLTJcJiMzNDtcbiYjNDM7ICAgIGZvbGxvd2VyX2NtZCA9IGZcJiMzNDtwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTJcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIGJrZyhsZWFkZXJfY21kLCBob3N0PWNmZy5yZW1vdGUpLCBcXFxuJiM0MzsgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjpcbiYjNDM7ICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbiYjNDM7XG4mIzQzOyAgICBpZiBzeW5jZWQ6XG4mIzQzOyAgICAgICAgcmV0dXJuXG4mIzQzO1xuJiM0MzsgICAga3NmdF9wcihmXCYjMzQ7cHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDt7UFRQNExfU1lOQ19USU1FT1VUfXNcJiMzNDspXG4mIzQzOyAgICB0YWlsID0gb3V0cHV0LnN0cmlwKCkuc3BsaXQoXCYjMzQ7XFxuXCYjMzQ7KVstMTA6XVxuJiM0MzsgICAga3NmdF9wcihcJiMzNDtGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcJiMzNDsgJiM0MzsgXCYjMzQ7IHwgXCYjMzQ7LmpvaW4odGFpbCkpXG4mIzQzOyAgICBrc2Z0X3RydWUoRmFsc2UsIFwmIzM0O1BUUCBzeW5jIHRpbWVvdXRcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIG1haW4oKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBrc2Z0IHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuJiM0MzsgICAgICAgIGtzZnRfcnVuKFtwdHBfc3luY190ZXN0XSwgYXJncz0oY2ZnLCApKVxuJiM0MzsgICAga3NmdF9leGl0KClcbiYjNDM7XG4mIzQzO1xuJiM0MztpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjNDM7ICAgIG1haW4oKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfTU9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fc2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfaW5mbyYjMzQ7LAogICAgJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jCmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYwpAQCAtMjAwLDcgJiM0MzsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwogCiYjNDM7CWV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTsKJiM0MzsKIAlpbmZvLSZndDtwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy0mZ3Q7cGhjKTsKJiM0MzsJaWYgKGluZm8tJmd0O3BoY19pbmRleCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfAomIzQzOwkJCQkgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8CiYjNDM7CQkJCSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7dHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTik7CiYjNDM7CWluZm8tJmd0O3J4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHwgQklUKEhXVFNUQU1QX0ZJTFRFUl9BTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKaW5kZXggNGU5ZDdlMTBiNTI3ZS4uN2EyNjhhMWE1NDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwpAQCAtMzAsNiAmIzQzOzMwLDggQEAKICNpbmNsdWRlICZsdDtuZXQvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcF90dW5uZWwuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvYnVzeV9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZWNvdW50ZXIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtuZXRkZXZzaW0uaCYjMzQ7CiAKQEAgLTEyMiwxMiAmIzQzOzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldiwKIAogc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHMgPSB7fTsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb190eCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMOwogCXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29yaWcgPSBza2I7CiAJc3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpwZWVyX2RldjsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IG5ldGRldnNpbSAqcGVlcl9uczsKIAlzdHJ1Y3QgbmV0ZGV2X2NvbmZpZyAqY2ZnOwomIzQzOwlpbnQgcnhfZmlsdGVyLCB0eF90eXBlOwogCXN0cnVjdCBuc2ltX3JxICpycTsKIAlpbnQgcnhxOwogCWludCBkcjsKQEAgLTE2NCw2ICYjNDM7MTcyLDQ2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJc2tiX2xpbmVhcml6ZShza2IpOwogCiAJc2tiX3R4X3RpbWVzdGFtcChza2IpOwomIzQzOwlyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy0mZ3Q7dHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIpOwomIzQzOwl0eF90eXBlID0gUkVBRF9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnR4X3R5cGUpOwomIzQzOwomIzQzOwlpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKQomIzQzOwkJcHRwX2luZm9fcnggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8ocGVlcl9ucy0mZ3Q7cGhjKTsKJiM0MzsKJiM0MzsJaWYgKHNrYl9zaGluZm8oc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsgU0tCVFhfSFdfVFNUQU1QICZhbXA7JmFtcDsKJiM0MzsJICAgIHR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pCiYjNDM7CQlwdHBfaW5mb190eCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhucy0mZ3Q7cGhjKTsKJiM0MzsKJiM0MzsJLyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnQKJiM0MzsJICogdGhlIFRYIHRpbWVzdGFtcCBiYWNrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHB0cF9pbmZvX3R4KSB7CiYjNDM7CQkvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyCiYjNDM7CQkgKiBmb3IgYmV0dGVyIGFjY3VyYWN5CiYjNDM7CQkgKi8KJiM0MzsJCXB0cF9pbmZvX3R4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fdHgsICZhbXA7dHhfdHMpOwomIzQzOwkJaWYgKGxpa2VseShwdHBfaW5mb19yeCkpCiYjNDM7CQkJcHRwX2luZm9fcngtJmd0O2dldHRpbWU2NChwdHBfaW5mb19yeCwgJmFtcDtyeF90cyk7CiYjNDM7CQlzaGh3dHN0YW1wcy5od3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUodHhfdHMpOwomIzQzOwkJc2tiX3RzdGFtcF90eChza2Jfb3JpZywgJmFtcDtzaGh3dHN0YW1wcyk7CiYjNDM7CiYjNDM7CQkvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4mIzM5O3QgYmUgcmV0dXJuZWQgYnkgYSBzaW5nbGUgc2tiLgomIzQzOwkJICogQ29weSB0aGUgc2tiIHRvIHJldHVybiBib3RoIHRpbWVzdGFtcHMuIElmIHRoZSBjb3B5IGZhaWxzLAomIzQzOwkJICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkCiYjNDM7CQkgKiBhYm92ZSB3aWxsIGJlIHJldHVybmVkIGFzIGJvdGggVHggYW5kIFJ4IHRpbWVzdGFtcC4KJiM0MzsJCSAqLwomIzQzOwkJc2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKHNrYikKJiM0MzsJCQljb25zdW1lX3NrYihza2Jfb3JpZyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2tiID0gc2tiX29yaWc7CiYjNDM7CX0gZWxzZSBpZiAocHRwX2luZm9fcngpIHsKJiM0MzsJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwdHBfaW5mb19yeCkKJiM0MzsJCXNrYl9od3RzdGFtcHMoc2tiKS0mZ3Q7aHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHJ4X3RzKTsKJiM0MzsKIAlpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LAogCQkJCSAgICAgIHNrYiwgcnEsIHBzcF9leHQpID09IE5FVF9SWF9EUk9QKSkKIAkJZ290byBvdXRfZHJvcF9jbnQ7CkBAIC0xODUsNiAmIzQzOzIzMyw2MyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWludCByeF9maWx0ZXI7CiYjNDM7CiYjNDM7CWlmICghbnMtJmd0O3BoYykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CiYjNDM7CQlXUklURV9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTjoKJiM0MzsJCVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT04pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7cnhfZmlsdGVyKSB7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKG5zLSZndDt0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlciwgcnhfZmlsdGVyKTsKJiM0MzsJY29uZmlnLSZndDtyeF9maWx0ZXIgPSByeF9maWx0ZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CSpjb25maWcgPSBucy0mZ3Q7dHN0YW1wX2NvbmZpZzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuc2ltX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLAogCQkJICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYykKQEAgLTY0Nyw2ICYjNDM7NzUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7CiAJLm5kb192bGFuX3J4X2FkZF92aWQJPSBuc2ltX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBuc2ltX3ZsYW5fcnhfa2lsbF92aWQsCiAJLm5ldF9zaGFwZXJfb3BzCQk9ICZhbXA7bnNpbV9zaGFwZXJfb3BzLAomIzQzOwkubmRvX2h3dHN0YW1wX2dldAk9IG5zaW1fZ2V0X3RzX2NvbmZpZywKJiM0MzsJLm5kb19od3RzdGFtcF9zZXQJPSBuc2ltX3NldF90c19jb25maWcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fdmZfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAppbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCkBAIC0xMDgsNiAmIzQzOzEwOCw3IEBAIHN0cnVjdCBuZXRkZXZzaW0gewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjsKIAlzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydDsKJiM0MzsJc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZzsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYzsKIAlzdHJ1Y3QgbnNpbV9ycSAqKnJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suYwppbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMKQEAgLTQ5LDE1ICYjNDM7NDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKQogc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJczY0IGFkajsKIAogCWFkaiA9IChzNjQpc2NhbGVkX3BwbSAmbHQ7Jmx0OyBNT0NLX1BIQ19GQURKX1NISUZUOwogCWFkaiA9IGRpdl9zNjQoYWRqLCBNT0NLX1BIQ19GQURKX0RFTk9NSU5BVE9SKTsKIAotCXNwaW5fbG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAJdGltZWNvdW50ZXJfcmVhZCgmYW1wO3BoYy0mZ3Q7dGMpOwogCXBoYy0mZ3Q7Y2MubXVsdCA9IE1PQ0tfUEhDX0NDX01VTFQgJiM0MzsgYWRqOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NSwxMCAmIzQzOzY2LDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9hZGp0aW1lKCZhbXA7cGhjLSZndDt0YywgZGVsdGEpOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03OCwxMCAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwogCXU2NCBucyA9IHRpbWVzcGVjNjRfdG9fbnModHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9pbml0KCZhbXA7cGhjLSZndDt0YywgJmFtcDtwaGMtJmd0O2NjLCBucyk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5LDExICYjNDM7OTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogc3RhdGljIGludCBtb2NrX3BoY19nZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IG1vY2tfcGhjICpwaGMgPSBpbmZvX3RvX3BoYyhpbmZvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgbnM7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCW5zID0gdGltZWNvdW50ZXJfcmVhZCgmYW1wO3BoYy0mZ3Q7dGMpOwotCXNwaW5fdW5sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJKnRzID0gbnNfdG9fdGltZXNwZWM2NChucyk7CiAKQEAgLTE3MSw1ICYjNDM7MTc1LDExIEBAIHZvaWQgbW9ja19waGNfZGVzdHJveShzdHJ1Y3QgbW9ja19waGMgKnBoYykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpOwogCiYjNDM7c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDtwaGMtJmd0O2luZm87CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb2NrLXVwIFBUUCBIYXJkd2FyZSBDbG9jayBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaAppbmRleCA3MmViNDAxMDM0ZDkzLi5lMzMxODhkZWMyYjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7CiBzdHJ1Y3QgbW9ja19waGMgKm1vY2tfcGhjX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTsKIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7CiYjNDM7c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpOwogCiAjZWxzZQogCkBAIC0zMyw2ICYjNDM7MzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpCiAJcmV0dXJuIC0xOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX1BUUF9NT0NLX0hfICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGQ1YmY0Y2I2MzhhOGMuLjE4YmI3YzY5M2I2OWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xOSw2ICYjNDM7MTksNyBAQCBURVNUX1BST0dTIDo9IFwKIAluZXRwb2xsX2Jhc2ljLnB5IFwKIAlwaW5nLnB5IFwKIAlwc3AucHkgXAomIzQzOwlwdHAucHkgXAogCXF1ZXVlcy5weSBcCiAJcmluZ19yZWNvbmZpZy5weSBcCiAJc2hhcGVyLnB5IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi43YmUzMGE3MmUxMTk3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLPXkKIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19YRFBfU09DS0VUUz15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weQpAQCAtMCwwICYjNDM7MSw4MiBAQAomIzQzOyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBCeSBNYWNpZWsgTWFjaG5pa293c2tpICZsdDttYWNpZWtAbWFjaG5pa293c2tpLm5ldCZndDsgKGMpIDIwMjYsCiYjNDM7CiYjNDM7JiMzNDsmIzM0OyYjMzQ7CiYjNDM7VGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuCiYjNDM7CiYjNDM7U3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZQomIzQzO2xlYWRlciAoc3RhdGUgczIpCiYjNDM7JiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7aW1wb3J0IHRpbWUKJiM0MzsKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgKAomIzQzOyAgICBOZXREcnZFcEVudiwKJiM0MzsgICAgYmtnLAomIzQzOyAgICBmZF9yZWFkX3RpbWVvdXQsCiYjNDM7ICAgIGtzZnRfZXhpdCwKJiM0MzsgICAga3NmdF9wciwKJiM0MzsgICAga3NmdF9ydW4sCiYjNDM7ICAgIGtzZnRfdHJ1ZSwKJiM0MzspCiYjNDM7CiYjNDM7UFRQNExfU1lOQ19USU1FT1VUID0gNDAKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi4KJiM0MzsKJiM0MzsgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0CiYjNDM7ICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKQomIzQzOyAgICBidWYgPSBiJiMzNDsmIzM0OwomIzQzOyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgJiM0MzsgdGltZW91dAomIzQzOyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpICZsdDsgZGVhZGxpbmU6CiYjNDM7ICAgICAgICBpZiBiJiMzNDsgczIgJiMzNDsgaW4gYnVmOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICBpZiBmb2xsb3dlci5wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICBjaHVuayA9IGZkX2ZpbGUucmVhZCgpCiYjNDM7ICAgICAgICAgICAgaWYgY2h1bms6CiYjNDM7ICAgICAgICAgICAgICAgIGJ1ZiAmIzQzOz0gY2h1bmsKJiM0MzsgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKQomIzQzOyAgICAgICAgICAgIGJ1ZiAmIzQzOz0gZmRfcmVhZF90aW1lb3V0KGZkLCBtaW4oMSwgcmVtYWluaW5nKSkKJiM0MzsgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXJyb3I6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgcmV0dXJuIGImIzM0OyBzMiAmIzM0OyBpbiBidWYsIGJ1Zi5kZWNvZGUoJiMzNDt1dGYtOCYjMzQ7LCAmIzM0O3JlcGxhY2UmIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgcHRwX3N5bmNfdGVzdChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtWZXJpZnkgcHRwNGwgbGVhZGVyL2ZvbGxvd2VyIHN5bmNocm9uaXphdGlvbiByZWFjaGVzIHN0YXRlIHMyLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoJiMzNDtwdHA0bCYjMzQ7LCByZW1vdGU9VHJ1ZSkKJiM0MzsKJiM0MzsgICAgbGVhZGVyX2NtZCA9IGYmIzM0O3B0cDRsIC1pIHtjZmcucmVtb3RlX2lmbmFtZX0gLW0gLTImIzM0OwomIzQzOyAgICBmb2xsb3dlcl9jbWQgPSBmJiMzNDtwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTImIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIGJrZyhsZWFkZXJfY21kLCBob3N0PWNmZy5yZW1vdGUpLCBcCiYjNDM7ICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6CiYjNDM7ICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVCkKJiM0MzsKJiM0MzsgICAgaWYgc3luY2VkOgomIzQzOyAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgIGtzZnRfcHIoZiYjMzQ7cHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gJiMzNDsKJiM0MzsgICAgICAgICAgICBmJiMzNDt7UFRQNExfU1lOQ19USU1FT1VUfXMmIzM0OykKJiM0MzsgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KCYjMzQ7XG4mIzM0OylbLTEwOl0KJiM0MzsgICAga3NmdF9wcigmIzM0O0ZvbGxvd2VyIGxvZyAobGFzdCAxMCBsaW5lcyk6ICYjMzQ7ICYjNDM7ICYjMzQ7IHwgJiMzNDsuam9pbih0YWlsKSkKJiM0MzsgICAga3NmdF90cnVlKEZhbHNlLCAmIzM0O1BUUCBzeW5jIHRpbWVvdXQmIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgbWFpbigpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4ga3NmdCB0ZXN0cy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOgomIzQzOyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpCiYjNDM7ICAgIGtzZnRfZXhpdCgpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBtYWluKCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIYXJkd2FyZSBUaW1lc3RhbXBpbmcgUGF0Y2ggZm9yIGBuZXRkZXZzaW1gKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkaW5nIGhhcmR3YXJlIHRpbWVzdGFtcGluZyB0byB0aGUgYG5ldGRldnNpbWAgZHJpdmVyLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBhIGZldyBmaWxlczogdGhlIGNvcmUgYG5ldGRldnNpbWAgZmlsZXMgKGBldGh0b29sLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgKSwgYHB0cF9tb2NrLmNgIGFuZCBgcHRwX21vY2suaGAsIGFuZCBpdCBhbHNvIGluY2x1ZGVzIGEgc2VsZnRlc3QuIEJhc2ljYWxseSwgaXQmIzM5O3MgdXNpbmcgdGhlIGBtb2NrX3BoY2Ag4oCTIHRoZSBQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jayDigJMgdG8gcHJvdmlkZSB0aGVzZSB0aW1lc3RhbXBzIGZvciB0aGUgc2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlLgoKVGhlIG1haW4gd29yayBzZWVtcyB0byBiZSBpbiBpbXBsZW1lbnRpbmcgdGhlIGBuZG9faHd0c3RhbXBfZ2V0YCBhbmQgYG5kb19od3RzdGFtcF9zZXRgIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgd2l0aGluIGBuZXRkZXZzaW1gLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYG5zaW1fc3RhcnRfeG1pdGAgdG8gZ3JhYiBUWCBhbmQgUlggdGltZXN0YW1wcy4gQWgsIGFuZCB0aGV5IGhhZCB0byBtb2RpZnkgdGhlIGBtb2NrX3BoY2AgZnVuY3Rpb25zIHRvIHVzZSBgc3Bpbl9sb2NrX2lycXNhdmVgIGluc3RlYWQgb2YgYHNwaW5fbG9ja2AgYmVjYXVzZSBgbnNpbV9zdGFydF94bWl0YCBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgc2VjdGlvbiBpc3N1ZS4gR29vZCBjYXRjaCB0aGVyZS4KCkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYG5ldGRldnNpbWAgaXMsIGFmdGVyIGFsbCwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2Ugc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBBbmQgeWVzLCBpdOKAmXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBBbnkgdGltZSB3ZSBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkg4oCTIGVzcGVjaWFsbHkgc29tZXRoaW5nIGxpa2UgaGFyZHdhcmUgdGltZXN0YW1waW5nIHRoYXQgdG91Y2hlcyBkaWZmZXJlbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSB0aGluZ3MgbGlrZSBgZXRodG9vbGAgYW5kIGBza2JgIHRyYW5zbWlzc2lvbiDigJMgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldC4gRnV6emluZyBjYW4gZXhwb3NlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgYmVoYXZpb3Igb2YgdGhpcyBuZXcgZmVhdHVyZSB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIG9idmlvdXMgb25lIGlzIGBDT05GSUdfTkVUREVWU0lNYCwgYW5kIHRoZW4gYENPTkZJR19QVFBfMTU4OF9DTE9DS19NT0NLYCBpcyBhbHNvIHJlcXVpcmVkLCBhbmQgYXBwZWFycyB0byBiZSBhZGRlZCB0byB0aGUgc2VsZnRlc3QgY29uZmlnLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIEtjb25maWcgc2V0dXAgZm9yIGJvdGggYE5FVERFVlNJTWAgYW5kIGBQVFBfMTU4OF9DTE9DS19NT0NLYCB0byBlbnN1cmUgdGhlIHBhdGNoIGlzIGJ1aWx0IGNvcnJlY3RseS4gT2theSwgSSYjMzk7bGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBzdGF0dXMgb2YgdGhlIG1vZHVsZSwgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgaXQgaGF2ZSBhdCBpdHMgZGlzcG9zYWw/IFNwZWNpZmljYWxseSwgaXMgaXQgdXAgYW5kIHJ1bm5pbmcgYXMgYSBjbG9jaywgb3IgaXMgaXQgYmVoYXZpbmcgYXMgaXQgc2hvdWxkIGFzIGEgbW9jay4gV2hhdCBpbnRlcmZhY2VzIGRvZXMgaXQgZXhwb3NlLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBXaGF0IGtpbmQgb2YgdGVzdHMgaGF2ZSBiZWVuIHJ1biBhZ2FpbnN0IHRoaXMgY29tcG9uZW50LCBhbmQgZG8gdGhvc2UgcmVzdWx0cyBzdWdnZXN0IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgdGhhdCB3YXJyYW50IGltbWVkaWF0ZSBzY3J1dGlueT8gRG9lcyB0aGUgbW9ja2luZyBiZWhhdmlvciBhbGlnbiB3aXRoIHRoZSBkZWZpbmVkIHJlcXVpcmVtZW50cyBhbmQgZXhwZWN0ZWQgb3V0Y29tZXMgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbz8gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgYXMgYSBtb2NrIHdpbGwgYWZmZWN0IGRlcGVuZGVuY2llcyBhcyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9MTc1PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xODYtXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xuZHJpdmVycy9wdHAvS2NvbmZpZy0xODgtXHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYFBUUF8xNTg4X0NMT0NLX01PQ0tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgYmVhc3QgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyZSB0byBlaXRoZXIgd29yayB3aXRoIG9yIHJlcGxhY2UgdGhpcy4gVGhlICYjMzQ7bW9jayYjMzQ7IHBhcnQgaW1wbGllcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHNpbXVsYXRpbmcgYSBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBjbG9jaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgYSByZWFsIFBUUCBpbXBsZW1lbnRhdGlvbiBpdCBpcyBzdGFuZGluZyBpbiBmb3IuIFRoaXMgbWVhbnMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzLCBpbiB0aGUgc291cmNlIGNvZGUgb3IgbWFrZSBmaWxlcywgd2hhdGV2ZXImIzM5O3MgcmVsZXZhbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwgZm9yIGNvbXByZWhlbmRpbmcgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCB0byBkZXRlcm1pbmUgd2hlcmUgaXQgZml0cywgYW5kIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LiBTbywgbGV0IG1lIHN0YXJ0IHBva2luZyBhcm91bmQgYW5kIHVucmF2ZWwgdGhpcyBkZXBlbmRlbmN5IHdlYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHVzaW5nIFJlbmVzYXMgRmVtdG9DbG9jazMgV2lyZWxlc3NcbiAxODE6XHRcdCAgYXMgYSBQVFAgY2xvY2suIFRoaXMgY2xvY2sgaXMgb25seSB1c2VmdWwgaWYgeW91ciB0aW1lIHN0YW1waW5nXG4gMTgyOlx0XHQgIE1BQyBpcyBjb25uZWN0ZWQgdG8gdGhlIFJFTkVTQVMgY2hpcC5cbiAxODM6XHRcbiAxODQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE4NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfZmMzLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLXG4gMTg4Olx0XHR0cmlzdGF0ZSBcJiMzNDtNb2NrLXVwIFBUUCBjbG9ja1wmIzM0O1xuIDE4OTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuIDE5MDpcdFx0aGVscFxuIDE5MTpcdFx0ICBUaGlzIGRyaXZlciBvZmZlcnMgYSBzZXQgb2YgUFRQIGNsb2NrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zIG92ZXJcbiAxOTI6XHRcdCAgdGhlIHN5c3RlbSBtb25vdG9uaWMgdGltZS4gSXQgY2FuIGJlIHVzZWQgYnkgdmlydHVhbCBuZXR3b3JrIGRldmljZVxuIDE5MzpcdFx0ICBkcml2ZXJzIHRvIGVtdWxhdGUgUFRQIGNhcGFiaWxpdGllcy5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE5NjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfbW9jay5cbiAxOTc6XHRcbiAxOTg6XHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXG4gMTk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgdmlydHVhbCBQVFAgY2xvY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgUFRQXzE1ODhfQ0xPQ0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGltcGxlbWVudGF0aW9uIHN0cmF0ZWd5IHJlYWxseSBoaW5nZXMgb24gdGhhdCBgUFRQXzE1ODhfQ0xPQ0tgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gYW55IHBhcnRpY3VsYXIgcGF0aCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIHJlbGllcyBvbiB0aGlzLCBzbyBJIGNhbiBwbGFuIGFwcHJvcHJpYXRlbHkuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTkVUREVWU0lNYCBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgc2ltdWxhdG9yIGlzIGltcGFjdGVkLCBvciBpZiBpdCBpbXBhY3RzIGBQVFBfMTU4OF9DTE9DS2AsIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ24gZGVjaXNpb25zLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkb21pbm8gZWZmZWN0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgem9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcbiA2MDE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1wmIzM0O1xuIDYwMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuIDYwMzpcdFxuIDYwNDpcdGNvbmZpZyBORVRERVZTSU1cbiA2MDU6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuIDYwNjpcdFx0ZGVwZW5kcyBvbiBERUJVR19GU1xuIDYwNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNjA4Olx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG4gNjA5Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG4gNjEwOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiA2MTE6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiA2MTI6XHRcdHNlbGVjdCBORVRfU0hBUEVSXG4gNjEzOlx0XHRoZWxwXG4gNjE0Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCBhbmQgc29mdHdhcmUgbW9kZWwgdGhhdCBjYW5cbiA2MTU6XHRcdCAgYmUgdXNlZCB0byB0ZXN0IHZhcmlvdXMgY29udHJvbCBwYXRoIG5ldHdvcmtpbmcgQVBJcywgZXNwZWNpYWxseVxuIDYxNjpcdFx0ICBIVy1vZmZsb2FkIHJlbGF0ZWQuXG4gNjE3Olx0XG4gNjE4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA2MTk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjA2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgbmV0ZGV2c2ltIGFuZCBQVFAgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0ZXN0IHRoaXMgYE5FVERFVlNJTWAgc3R1ZmYsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgUFRQXzE1ODhfQ0xPQ0tgIGNhcGFiaWxpdGllcy4gIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGEgbGl0dGxlIGxlc3MgY2xlYXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBgTkVUREVWU0lNYCAqY29uZGl0aW9uYWxseSogZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AsIG9yIGF0IGxlYXN0IHRoZSBgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uYCBjYXNlLiBUbyBiZSBjbGVhciwgdG8gdGVzdCB0aGUgbmV3IGZlYXR1cmUgcHJvcGVybHksIHdoaWNoIGluY2x1ZGVzIHRpbWUgc3luY2hyb25pemF0aW9uLCBJICpkbyogbmVlZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBQVFBfMTU4OF9DTE9DS2AgaXRzZWxmIGlzIGFsc28gcmVxdWlyZWQuIFNvLCB0aGUgY29tcGxldGUgc2V0IG9mIGVuYWJsZWQgY29uZmlndXJhdGlvbnMgZm9yIGEgcm9idXN0IHRlc3QgbmVlZHMgdG8gYmUgYE5FVERFVlNJTWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIHRpbWUgc3luY2hyb25pemF0aW9uIGNvZGUgbGl2ZXMuICBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYSBmZXcgbGlrZWx5IHN1c3BlY3RzOgoqICAgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AgaGFzIGBuc2ltX3NldF90c19jb25maWdgLCBgbnNpbV9nZXRfdHNfY29uZmlnYCwgYW5kIGBuc2ltX3N0YXJ0X3htaXRgLiBIb3dldmVyLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgYG5zaW1fc3RhcnRfeG1pdGAgYXMgYSBwb3RlbnRpYWwgaG90LXBhdGg7IGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGF2b2lkIHRoYXQgb25lIGZvciBub3cgdG8gYXZvaWQgY29tcGxleGl0eS4KKiAgIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jYCBhbHNvIGNvbnRhaW5zIGBuc2ltX2dldF90c19pbmZvYC4KClNvLCB0aGUgY2xlYXIgcHJpb3JpdGllcyBhcmUgZ29pbmcgdG8gYmUgZnV6emluZyBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBpdGVyYXRlIGFzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnNpbV9zZXRfdHNfY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjU9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MjM2OnN0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMjM3LVx0XHRcdCAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTczMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzU1LVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjc1NjpcdC5uZG9faHd0c3RhbXBfc2V0XHQ9IG5zaW1fc2V0X3RzX2NvbmZpZyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NTctfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIHRoZSBBUEkgQ2hvaWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSSBpbml0aWFsbHkgdGhvdWdodCwgJiMzNDtTdGF0aWM/IEhtbSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YW50cyBtZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLiYjMzQ7IEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgaG9sZCBvbiBhIHNlY29uZCEgYG5zaW1fc2V0X3RzX2NvbmZpZ2AgaXMgKmFjdHVhbGx5KiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBuZG9faHd0c3RhbXBfc2V0YC4gVGhhdCBtZWFucyBpdHMgYWRkcmVzcyBpcyBiZWluZyB1c2VkLCBhbmQgdGhlIGNvbXBpbGVyICp3b24mIzM5O3QqIGlubGluZSBpdCwgcmlnaHQ/IFNvLCB0aGUgd2hvbGUgcG9pbnQgb2YgYXZvaWRpbmcgc3RhdGljIGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGFkZHJlc3MgdmlzaWJpbGl0eSBpcyBhbHJlYWR5IGNvdmVyZWQuIFRoZSBwcm9tcHQgYWxzbyBzYXlzICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywmIzM0OyBhbmQgdGhhdCBtZWFucyBpdHMgYW4gZW50cnlwb2ludC4uLml0JiMzOTtzIGdvb2QhCgpJIHN0YXJ0ZWQgdG8gd29uZGVyIGlmIHRoZXJlIHdhcyBhbm90aGVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuCgpgbnNpbV9zZXRfdHNfY29uZmlnYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYmAgb3IgYGRldl9zZXRfaHd0c3RhbXBgLCB3aGljaCBhcmUgZ2VuZXJpYywgYnV0IGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQuIAoKU28sIEkgdGhpbmsgSSYjMzk7bGwgZ28gd2l0aCBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIFRoZXkgc2VlbSBsaWtlIHRoZSBtb3N0IGRpcmVjdCBmaXQgYW5kIHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZSBnaXZlbiB0aGUgY29udGV4dC4KCldhaXQuLi4gaXMgYG5zaW1fZ2V0X3RzX2luZm9gIHN0YXRpYyB0b28/IEkgbmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX2dldF90c19pbmZvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MTc2PW5zaW1fZ2V0X2ZlY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9mZWNfc3RhdHMgKmZlY19zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTE5Ny1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MTk4OnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0xOTktXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MjE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbnNpbV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIzNS1cdC5nZXRfZmVjX3N0YXRzXHRcdFx0PSBuc2ltX2dldF9mZWNfc3RhdHMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jOjIzNjpcdC5nZXRfdHNfaW5mb1x0XHRcdD0gbnNpbV9nZXRfdHNfaW5mbyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBBc3NpZ25tZW50cyoqCgpSaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBvcGVyYXRpb25zIHN0cnVjdHVyZXMsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBkZXNpZ24gc3RhbmRwb2ludCwga2VlcGluZyB0aGUgc2NvcGUgbGltaXRlZC4gQnV0LCB0aGVuIEkgc2F3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gLiBUaGlzIG9uZSBpcyBub24tc3RhdGljIGFuZCAqZXhwb3J0ZWQqLiBUaGF0JiMzOTtzIHRoZSBrZXkgZGlmZmVyZW5jZSBJIG5lZWQgdG8gY29uc2lkZXIuIEkgd29uZGVyIHdoYXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhhdCBkZXNpZ24gZGVjaXNpb24gd2FzLiBDbGVhcmx5IHRoZXJlIGlzIGFuIGludGVuZGVkIHB1cnBvc2UgdG8gb3BlbiB0aGF0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEyNT1zdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE3OC1cdGlmIChyeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTc5Olx0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTgwLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xODItXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxODM6XHRcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVx1MDAzZXBoYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTg0LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmM9MTc2PUVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xNzctXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE3ODpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbmRyaXZlcnMvcHRwL3B0cF9tb2NrLmMtMTc5LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4MS19XG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE4MjpFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19nZXRfcHRwX2luZm8pO1xuZHJpdmVycy9wdHAvcHRwX21vY2suYy0xODMtXG4tLVxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oPTE4PWludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmg6MTk6c3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTIwLVxuLS1cbmluY2x1ZGUvbGludXgvcHRwX21vY2suaD0zMj1zdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYylcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgtMzYtXG5pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmg6Mzc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaC0zOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAzCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHB0cF9tb2NrLmNgIENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyB3ZSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtb2NrX3BoY19hZGpmaW5lYCwgYG1vY2tfcGhjX2FkanRpbWVgLCBgbW9ja19waGNfc2V0dGltZTY0YCwgYW5kIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGVzZSBhcmUgbm93IHVzaW5nIGBzcGluX2xvY2tfaXJxc2F2ZWAgaW5zdGVhZCBvZiBgc3Bpbl9sb2NrYC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBzdGF0aWMgYnV0IGFzc2lnbmVkIHRvIGBwdHBfY2xvY2tfaW5mb2Agb3BzIGlzIGltcG9ydGFudCB0byBub3RlLiBUaGlzIGltcGxpZXMgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgY29yZSBtb2NrIFBUUCBjbG9jayBmdW5jdGlvbmFsaXR5LgoKTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8gYmUgc3VyZTogYG5zaW1fc2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19jb25maWdgLCBgbnNpbV9nZXRfdHNfaW5mb2AsIGFuZCBgbW9ja19waGNfZ2V0X3B0cF9pbmZvYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE5vdywgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgdGhvc2UgZm91ciBmdW5jdGlvbnMgaW4gbXkgY292ZXJhZ2Ugc3RyYXRlZ3kuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgaGVyZS4gSSBrbm93IGBORVRERVZTSU1gIGRlcGVuZHMgb24gYElORVRgIGFuZCBgREVCVUdfRlNgLiBBbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgIGRlcGVuZHMgb24gYFBUUF8xNTg4X0NMT0NLYC4gU28sIG15IGVuYWJsZSBjb25maWcgbGlzdCBzaG91bGQgZGVmaW5pdGVseSBjb250YWluIGBORVRERVZTSU1gLCBgUFRQXzE1ODhfQ0xPQ0tgLCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgYG1vY2tfcGhjX2dldF9wdHBfaW5mb2AgdGhlICpvbmx5KiBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZD8gWWVzLCB0aGF0JiMzOTtzIGNvcnJlY3QuIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIGEgbmV3IGFkZGl0aW9uLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIGBuZXRkZXZzaW1gLCBvdXIgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIFRoZSBrZXkgb3BlcmF0aW9ucyBiZWluZyBpbXBsZW1lbnRlZCBhcmUgYG5kb19od3RzdGFtcF9nZXRgIGFuZCBgbmRvX2h3dHN0YW1wX3NldGAuIFRoZSB0cmFuc21pdCBwYXRoIChgbnNpbV9zdGFydF94bWl0YCkgaXMgYWxzbyB1cGRhdGVkIHRvIGNhcHR1cmUgaGFyZHdhcmUgdGltZXN0YW1wcy4gSXQmIzM5O3MgdXNpbmcgdGhlIGBtb2NrX3BoY2AgZm9yIHRoaXMsIGFuZCB0aGUgdXNlIG9mIGBzcGluX2xvY2tfaXJxc2F2ZWAgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGVzZSB0aW1lc3RhbXBzIGNhbiBiZSBjYXB0dXJlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIFRoaXMgYWxsIG1lYW5zIHdlIGhhdmUgbmV3IGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gYG5ldGRldnNpbWAgYW5kIGBwdHBfbW9ja2AgdGhhdCBhcmUgdHJpZ2dlcmVkIHZpYSBgZXRodG9vbGAgYW5kIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZXNlIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgaW50ZXJydXB0IGNvbnRleHQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfTU9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fc2V0X3RzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtuc2ltX2dldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfaW5mbyYjMzQ7LAogICAgJiMzNDttb2NrX3BoY19nZXRfcHRwX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX01PQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX3NldF90c19jb25maWcmIzM0OywKICAgICYjMzQ7bnNpbV9nZXRfdHNfY29uZmlnJiMzNDssCiAgICAmIzM0O25zaW1fZ2V0X3RzX2luZm8mIzM0OywKICAgICYjMzQ7bW9ja19waGNfZ2V0X3B0cF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXG5cbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYC4gVGhlIGBuZXRkZXZzaW1gIHByaXZhdGUgc3RydWN0dXJlIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBgYWxsb2NfbmV0ZGV2X21xYCwgc28gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cbjMuIEluIGBuc2ltX3N0YXJ0X3htaXRgLCBsb2NhbCB2YXJpYWJsZXMgYHR4X3RzYCBhbmQgYHJ4X3RzYCBhcmUgb25seSB1c2VkIGlmIHRoZWlyIHJlc3BlY3RpdmUgYHB0cF9pbmZvX3R4YCBhbmQgYHB0cF9pbmZvX3J4YCBwb2ludGVycyBhcmUgbm9uLU5VTEwuIFdoZW4gbm9uLU5VTEwsIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGUgYHNoaHd0c3RhbXBzYCBzdHJ1Y3QgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7fWApLlxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXG5cblNpbmNlIGFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjc2NTJhZTU2MTQ3ZjY2NjM1ZGUxODNmYTllMjE5YjA3ZDMyOGYxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMKaW5kZXggMDI1ZWE3OTg3OWYzYS4uNjI4ODc4YWNkMTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jCkBAIC0yMDAsNyAmIzQzOzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7CiAKJiM0MzsJZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pOwomIzQzOwogCWluZm8tJmd0O3BoY19pbmRleCA9IG1vY2tfcGhjX2luZGV4KG5zLSZndDtwaGMpOwomIzQzOwlpZiAoaW5mby0mZ3Q7cGhjX2luZGV4ICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpbmZvLSZndDtzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8CiYjNDM7CQkJCSBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHwKJiM0MzsJCQkJIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOwomIzQzOwomIzQzOwlpbmZvLSZndDt0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTsKJiM0MzsJaW5mby0mZ3Q7cnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0zMCw2ICYjNDM7MzAsOCBAQAogI2luY2x1ZGUgJmx0O25ldC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdWRwX3R1bm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9idXN5X3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lY291bnRlci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O25ldGRldnNpbS5oJiMzNDsKIApAQCAtMTIyLDEyICYjNDM7MTI0LDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LAogCiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9OwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDsKJiM0MzsJc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHBfaW5mb19yeCA9IE5VTEw7CiAJc3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjsKIAlzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2OwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItJmd0O2xlbjsKIAlzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zOwogCXN0cnVjdCBuZXRkZXZfY29uZmlnICpjZmc7CiYjNDM7CWludCByeF9maWx0ZXIsIHR4X3R5cGU7CiAJc3RydWN0IG5zaW1fcnEgKnJxOwogCWludCByeHE7CiAJaW50IGRyOwpAQCAtMTY0LDYgJiM0MzsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQlza2JfbGluZWFyaXplKHNrYik7CiAKIAlza2JfdHhfdGltZXN0YW1wKHNrYik7CiYjNDM7CXJ4X2ZpbHRlciA9IFJFQURfT05DRShwZWVyX25zLSZndDt0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7CiYjNDM7CXR4X3R5cGUgPSBSRUFEX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChyeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUpCiYjNDM7CQlwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLSZndDtwaGMpOwomIzQzOwomIzQzOwlpZiAoc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyAmYW1wOyBTS0JUWF9IV19UU1RBTVAgJmFtcDsmYW1wOwomIzQzOwkgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTikKJiM0MzsJCXB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLSZndDtwaGMpOwomIzQzOwomIzQzOwkvKiBJZiBUWCBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgaXMgZW5hYmxlZCwgc2FtcGxlIG91ciBQSEMgYW5kIHJlcG9ydAomIzQzOwkgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAocHRwX2luZm9fdHgpIHsKJiM0MzsJCS8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXIKJiM0MzsJCSAqIGZvciBiZXR0ZXIgYWNjdXJhY3kKJiM0MzsJCSAqLwomIzQzOwkJcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NChwdHBfaW5mb190eCwgJmFtcDt0eF90cyk7CiYjNDM7CQlpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSkKJiM0MzsJCQlwdHBfaW5mb19yeC0mZ3Q7Z2V0dGltZTY0KHB0cF9pbmZvX3J4LCAmYW1wO3J4X3RzKTsKJiM0MzsJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7CiYjNDM7CQlza2JfdHN0YW1wX3R4KHNrYl9vcmlnLCAmYW1wO3NoaHd0c3RhbXBzKTsKJiM0MzsKJiM0MzsJCS8qIFR4IGFuZCBSeCB0aW1lc3RhbXBzIGNhbiYjMzk7dCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuCiYjNDM7CQkgKiBDb3B5IHRoZSBza2IgdG8gcmV0dXJuIGJvdGggdGltZXN0YW1wcy4gSWYgdGhlIGNvcHkgZmFpbHMsCiYjNDM7CQkgKiB0aGUgb3JpZ2luYWwgc2tiIGlzIHVzZWQgYW5kIHRoZSBSeCB0aW1lc3RhbXAgY2FwdHVyZWQKJiM0MzsJCSAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY29weShza2Jfb3JpZywgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoc2tiKQomIzQzOwkJCWNvbnN1bWVfc2tiKHNrYl9vcmlnKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2IgPSBza2Jfb3JpZzsKJiM0MzsJfSBlbHNlIGlmIChwdHBfaW5mb19yeCkgewomIzQzOwkJcHRwX2luZm9fcngtJmd0O2dldHRpbWU2NChwdHBfaW5mb19yeCwgJmFtcDtyeF90cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHB0cF9pbmZvX3J4KQomIzQzOwkJc2tiX2h3dHN0YW1wcyhza2IpLSZndDtod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpOwomIzQzOwogCWlmICh1bmxpa2VseShuc2ltX2ZvcndhcmRfc2tiKGRldiwgcGVlcl9kZXYsCiAJCQkJICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKQogCQlnb3RvIG91dF9kcm9wX2NudDsKQEAgLTE4NSw2ICYjNDM7MjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiYjNDM7c3RhdGljIGludCBuc2ltX3NldF90c19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJaWYgKCFucy0mZ3Q7cGhjKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09GRjoKJiM0MzsJCVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT0ZGKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX1RYX09OOgomIzQzOwkJV1JJVEVfT05DRShucy0mZ3Q7dHN0YW1wX2NvbmZpZy50eF90eXBlLCBIV1RTVEFNUF9UWF9PTik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05UUF9BTEw6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDoKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UobnMtJmd0O3RzdGFtcF9jb25maWcucnhfZmlsdGVyLCByeF9maWx0ZXIpOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJKmNvbmZpZyA9IG5zLSZndDt0c3RhbXBfY29uZmlnOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKQpAQCAtNjQ3LDYgJiM0Mzs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHsKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCwKIAkubmV0X3NoYXBlcl9vcHMJCT0gJmFtcDtuc2ltX3NoYXBlcl9vcHMsCiYjNDM7CS5uZG9faHd0c3RhbXBfZ2V0CT0gbnNpbV9nZXRfdHNfY29uZmlnLAomIzQzOwkubmRvX2h3dHN0YW1wX3NldAk9IG5zaW1fc2V0X3RzX2NvbmZpZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjVjZGQxZTI5NDQ0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTEwOCw2ICYjNDM7MTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2OwogCXN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0OwomIzQzOwlzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnOwogCXN0cnVjdCBtb2NrX3BoYyAqcGhjOwogCXN0cnVjdCBuc2ltX3JxICoqcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jCmluZGV4IDRkNjZiNjE0NzEyMTAuLjdhNGU1ZjMyNzRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX21vY2suYwpAQCAtNDksMTUgJiM0Mzs0OSwxNiBAQCBzdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpCiBzdGF0aWMgaW50IG1vY2tfcGhjX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiB7CiAJc3RydWN0IG1vY2tfcGhjICpwaGMgPSBpbmZvX3RvX3BoYyhpbmZvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzNjQgYWRqOwogCiAJYWRqID0gKHM2NClzY2FsZWRfcHBtICZsdDsmbHQ7IE1PQ0tfUEhDX0ZBREpfU0hJRlQ7CiAJYWRqID0gZGl2X3M2NChhZGosIE1PQ0tfUEhDX0ZBREpfREVOT01JTkFUT1IpOwogCi0Jc3Bpbl9sb2NrKCZhbXA7cGhjLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAl0aW1lY291bnRlcl9yZWFkKCZhbXA7cGhjLSZndDt0Yyk7CiAJcGhjLSZndDtjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCAmIzQzOyBhZGo7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1LDEwICYjNDM7NjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKQogc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKQogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXRpbWVjb3VudGVyX2FkanRpbWUoJmFtcDtwaGMtJmd0O3RjLCBkZWx0YSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc4LDEwICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAogewogCXN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7CiAJdTY0IG5zID0gdGltZXNwZWM2NF90b19ucyh0cyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BoYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXRpbWVjb3VudGVyX2luaXQoJmFtcDtwaGMtJmd0O3RjLCAmYW1wO3BoYy0mZ3Q7Y2MsIG5zKTsKLQlzcGluX3VubG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwaGMtJmd0O2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtODksMTEgJiM0Mzs5MiwxMiBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiBzdGF0aWMgaW50IG1vY2tfcGhjX2dldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKIAlzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBuczsKIAotCXNwaW5fbG9jaygmYW1wO3BoYy0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAJbnMgPSB0aW1lY291bnRlcl9yZWFkKCZhbXA7cGhjLSZndDt0Yyk7Ci0Jc3Bpbl91bmxvY2soJmFtcDtwaGMtJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGhjLSZndDtsb2NrLCBmbGFncyk7CiAKIAkqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTsKIApAQCAtMTcxLDUgJiM0MzsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZGVzdHJveSk7CiAKJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYykKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wO3BoYy0mZ3Q7aW5mbzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vY2stdXAgUFRQIEhhcmR3YXJlIENsb2NrIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oCmluZGV4IDcyZWI0MDEwMzRkOTMuLmUzMzE4OGRlYzJiN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmgKQEAgLTE2LDYgJiM0MzsxNiw3IEBAIHN0cnVjdCBtb2NrX3BoYzsKIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7CiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpOwogaW50IG1vY2tfcGhjX2luZGV4KHN0cnVjdCBtb2NrX3BoYyAqcGhjKTsKJiM0MztzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7CiAKICNlbHNlCiAKQEAgLTMzLDYgJiM0MzszNCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYykKIAlyZXR1cm4gLTE7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE5LDYgJiM0MzsxOSw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCW5ldHBvbGxfYmFzaWMucHkgXAogCXBpbmcucHkgXAogCXBzcC5weSBcCiYjNDM7CXB0cC5weSBcCiAJcXVldWVzLnB5IFwKIAlyaW5nX3JlY29uZmlnLnB5IFwKIAlzaGFwZXIucHkgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKQEAgLTIxLDUgJiM0MzsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eQogQ09ORklHX05FVF9TQ0hfUFJJTz1tCiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBPRT15CiYjNDM7Q09ORklHX1BUUF8xNTg4X0NMT0NLX01PQ0s9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi45MmE5NDNkY2JiMDY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5CkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgJmx0O21hY2lla0BtYWNobmlrb3dza2kubmV0Jmd0OyAoYykgMjAyNiwKJiM0MzsKJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MztUZXN0IHN1aXRlIGZvciBQVFAgc3luYyB1c2luZyBwdHA0bC4KJiM0MzsKJiM0MztTdGFydCBhIHB0cDRsIGxlYWRlciBhbmQgZm9sbG93ZXIgYW5kIGNoZWNrIHRoYXQgdGhlIGZvbGxvd2VyIGxvY2tzIG9udG8gdGhlCiYjNDM7bGVhZGVyIChzdGF0ZSBzMikKJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MztpbXBvcnQgdGltZQomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCAoCiYjNDM7ICAgIE5ldERydkVwRW52LAomIzQzOyAgICBia2csCiYjNDM7ICAgIGZkX3JlYWRfdGltZW91dCwKJiM0MzsgICAga3NmdF9leGl0LAomIzQzOyAgICBrc2Z0X3ByLAomIzQzOyAgICBrc2Z0X3J1biwKJiM0MzsgICAga3NmdF90cnVlLAomIzQzOykKJiM0MzsKJiM0MztQVFA0TF9TWU5DX1RJTUVPVVQgPSA0MAomIzQzOwomIzQzOwomIzQzO2RlZiBfcG9sbF9mb2xsb3dlcl9zeW5jKGZvbGxvd2VyLCB0aW1lb3V0KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UmVhZCB0aGUgZm9sbG93ZXIgc3Rkb3V0IHBpcGUgdW50aWwgcHRwNGwgcmVwb3J0cyBzeW5jIHN0YXRlIHMyLgomIzQzOwomIzQzOyAgICBSZXR1cm5zIGEgdHVwbGUgKHN5bmNlZCwgb3V0cHV0KSB3aGVyZSBvdXRwdXQgaXMgdGhlIHRleHQgcmVhZCBzbyBmYXIuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmZF9maWxlID0gZm9sbG93ZXIucHJvYy5zdGRvdXQKJiM0MzsgICAgZmQgPSBmZF9maWxlLmZpbGVubygpCiYjNDM7ICAgIGJ1ZiA9IGImIzM0OyYjMzQ7CiYjNDM7ICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSAmIzQzOyB0aW1lb3V0CiYjNDM7ICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgJmx0OyBkZWFkbGluZToKJiM0MzsgICAgICAgIGlmIGImIzM0OyBzMiAmIzM0OyBpbiBidWY6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgICAgIGlmIGZvbGxvd2VyLnByb2MucG9sbCgpIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKCkKJiM0MzsgICAgICAgICAgICBpZiBjaHVuazoKJiM0MzsgICAgICAgICAgICAgICAgYnVmICYjNDM7PSBjaHVuawomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgcmVtYWluaW5nID0gZGVhZGxpbmUgLSB0aW1lLm1vbm90b25pYygpCiYjNDM7ICAgICAgICAgICAgYnVmICYjNDM7PSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKQomIzQzOyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICByZXR1cm4gYiYjMzQ7IHMyICYjMzQ7IGluIGJ1ZiwgYnVmLmRlY29kZSgmIzM0O3V0Zi04JiMzNDssICYjMzQ7cmVwbGFjZSYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBwdHBfc3luY190ZXN0KGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1ZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2NtZCgmIzM0O3B0cDRsJiMzNDssIHJlbW90ZT1UcnVlKQomIzQzOwomIzQzOyAgICBsZWFkZXJfY21kID0gZiYjMzQ7cHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMiYjMzQ7CiYjNDM7ICAgIGZvbGxvd2VyX2NtZCA9IGYmIzM0O3B0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMiYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFwKJiM0MzsgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjoKJiM0MzsgICAgICAgIHN5bmNlZCwgb3V0cHV0ID0gX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgUFRQNExfU1lOQ19USU1FT1VUKQomIzQzOwomIzQzOyAgICBpZiBzeW5jZWQ6CiYjNDM7ICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDtwdHA0bCBmb2xsb3dlciBkaWQgbm90IHJlYWNoIGxvY2tlZCBzdGF0ZSAoczIpIHdpdGhpbiAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0O3tQVFA0TF9TWU5DX1RJTUVPVVR9cyYjMzQ7KQomIzQzOyAgICB0YWlsID0gb3V0cHV0LnN0cmlwKCkuc3BsaXQoJiMzNDtcbiYjMzQ7KVstMTA6XQomIzQzOyAgICBrc2Z0X3ByKCYjMzQ7Rm9sbG93ZXIgbG9nIChsYXN0IDEwIGxpbmVzKTogJiMzNDsgJiM0MzsgJiMzNDsgfCAmIzM0Oy5qb2luKHRhaWwpKQomIzQzOyAgICBrc2Z0X3RydWUoRmFsc2UsICYjMzQ7UFRQIHN5bmMgdGltZW91dCYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBtYWluKCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1J1biBrc2Z0IHRlc3RzLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiYjNDM7ICAgICAgICBrc2Z0X3J1bihbcHRwX3N5bmNfdGVzdF0sIGFyZ3M9KGNmZywgKSkKJiM0MzsgICAga3NmdF9leGl0KCkKJiM0MzsKJiM0MzsKJiM0MztpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CiYjNDM7ICAgIG1haW4oKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhhcmR3YXJlIFRpbWVzdGFtcGluZyBpbiBuZXRkZXZzaW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtb2RpZmljYXRpb25zOiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBuc2ltX3N0YXJ0X3htaXRgLCBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGFuZCB0aGUgbmV3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGZ1bmN0aW9uIGluIGBwdHBfbW9jay5jYC4gIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuc2ltX3N0YXJ0X3htaXRgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHRpbWVzdGFtcGluZyBsb2dpYyBsaWtlbHkgcmVzaWRlcy4KClJpZ2h0IGF3YXksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wc2AgYW5kIGBzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7YC4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIGNhcHR1cmUgdHJhbnNtaXQgYW5kIHBvdGVudGlhbGx5IHJlY2VpdmUgdGltZXN0YW1wcy4gTG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKCWlmIChwdHBfaW5mb190eCkgewoJCS8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXIKCQkgKiBmb3IgYmV0dGVyIGFjY3VyYWN5CgkJICovCgkJcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NChwdHBfaW5mb190eCwgJmFtcDt0eF90cyk7CgkJaWYgKGxpa2VseShwdHBfaW5mb19yeCkpCgkJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwoJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7CgkJc2tiX3RzdGFtcF90eChza2Jfb3JpZywgJmFtcDtzaGh3dHN0YW1wcyk7Ci4uLgoJfSBlbHNlIGlmIChwdHBfaW5mb19yeCkgewoJCXB0cF9pbmZvX3J4LSZndDtnZXR0aW1lNjQocHRwX2luZm9fcngsICZhbXA7cnhfdHMpOwoJfQoKCWlmIChwdHBfaW5mb19yeCkKCQlza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7CmBgYAoKT2theSwgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gY2FwdHVyZSBib3RoIHRpbWVzdGFtcHMgaWYgYHB0cF9pbmZvX3R4YCBpcyB0cnVlLCBvdGhlcndpc2UgaXQgY2FwdHVyZXMgb25seSB0aGUgcmVjZWl2ZSB0aW1lc3RhbXAgd2hlbiBgcHRwX2luZm9fcnhgIGlzIHRydWUuIE15IGZpcnN0IHRob3VnaHQgaXMgYWJvdXQgYSBwb3RlbnRpYWwgYnVnLiBJIHNlZSB0aGF0IGByeF90c2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gIElmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgYnV0IGBwdHBfaW5mb19yeGAgaXMgZmFsc2UsIHRoZW4gYHJ4X3RzYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhlIGZpcnN0IGJsb2NrIGNvbXBsZXRlcywgYmVmb3JlIHRoZSBzZWNvbmQgYmxvY2sgYmVnaW5zLiBIb3dldmVyLCBJIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMga2luZCBvZiBhc3Nlc3NtZW50LiBUaGUgc3Vic2VxdWVudCBgaWYgKHB0cF9pbmZvX3J4KWAgY2hlY2sgYXQgdGhlIGVuZCB3aWxsIHByZXZlbnQgaXRzIHVzZSBpZiBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLiBTbywgSSBzZWUgaXQmIzM5O3Mgc2FmZSB0byB1c2UuCgpMZXQmIzM5O3MgdHJhY2UgaXQgY2FyZWZ1bGx5OiBpZiBgcHRwX2luZm9fdHhgIGlzIHRydWUgYW5kIGBwdHBfaW5mb19yeGAgaXMgZmFsc2UsIGByeF90c2AgaXMgbmV2ZXIgdXNlZC4gSWYgYHB0cF9pbmZvX3J4YCBpcyB0cnVlLCBgcnhfdHNgIGdldHMgYXNzaWduZWQgYSB2YWx1ZSwgZWl0aGVyIGluIHRoZSBmaXJzdCBgaWZgIG9yIGluIHRoZSBgZWxzZSBpZmAuIFRodXMsIGByeF90c2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgdXNlZC4gYHR4X3RzYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZCBvbmx5IHdoZW4gYHB0cF9pbmZvX3R4YCBpcyB0cnVlLiBMb29rcyBnb29kIHNvIGZhciwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIEFuZCwgaW1wb3J0YW50bHksIEkgc2VlIHRoYXQgYHNoaHd0c3RhbXBzYCBpcyBpbml0aWFsaXplZCB0byBge31gLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuc2ltX2dldF90c19jb25maWdgLgoKYGBgYwpzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAoJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKQp7CglzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7CgoJKmNvbmZpZyA9IG5zLSZndDt0c3RhbXBfY29uZmlnOwoJcmV0dXJuIDA7Cn0KYGBgCgpUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgY29waWVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBjb25maWdgIHBvaW50ZXIuIEJ1dCBub3cgSSBoYXZlIHRvIGFzayBteXNlbGYsIHdoZXJlIGlzIHRoaXMgYG5zLSZndDt0c3RhbXBfY29uZmlnYCBpbml0aWFsaXplZD8gVGltZSB0byBsb29rIGF0IHRoZSBgbmV0ZGV2c2ltLmhgIGhlYWRlci4gQWgsIHRoZXJlIGl0IGlzOgoKYGBgYwoJc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZzsKYGBgCgpJdCYjMzk7cyBhIG1lbWJlciBvZiB0aGUgYG5ldGRldnNpbWAgc3RydWN0IGl0c2VsZiwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTm93IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgc3RydWN0IGBuZXRkZXZzaW1gIGlzIHplcm8taW5pdGlhbGl6ZWQgc29tZXdoZXJlLiBCZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIFR5cGljYWxseSwgYGFsbG9jX25ldGRldmAgd2lsbCB6ZXJvLWluaXRpYWxpemUgcHJpdmF0ZSBkYXRhLiBCdXQgSSBiZXR0ZXIgdmVyaWZ5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjMzPXN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyNDAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTI0MTpcdGRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2YoKm5zKSwgXCYjMzQ7ZXRoJWRcJiMzNDssIE5FVF9OQU1FX1VOS05PV04sIG5zaW1fc2V0dXAsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTI0Mi1cdFx0XHQgICAgICBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3F1ZXVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGFsbG9jX25ldGRldl9tcWAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCBpdCB1c2VzIGBremFsbG9jYCwgc28gdGhlIHByaXZhdGUgZGF0YSwgaW5jbHVkaW5nIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AsIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgc28gdGhlIHN0cnVjdHVyZSBJJiMzOTttIGxvb2tpbmcgYXQsIGBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AsIGhhcyBhIGJ1bmNoIG9mIGZpZWxkczogYGZsYWdzYCwgYHR4X3R5cGVgLCBgcnhfZmlsdGVyYCwgYGlmcmAsIGFuZCBgYnBmYCwgYW1vbmcgb3RoZXJzLiBHb3QgaXQuIEFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBjb3B5aW5nIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gYCpjb25maWdgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGdldHRpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uCgpCdXQgd2FpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3B5IGRvZXNuJiMzOTt0IGdldCBtZXNzZWQgdXAgYnkgcGFkZGluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBpdHNlbGYgaGFzIGFueSBwYWRkaW5nLiBJIG5lZWQgdG8gZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCBpbiBgaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhgIHJpZ2h0IG5vdyB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTM3PXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNjEtICovXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaDo2MjpzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC02My1cdGludCBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgVGltZXN0YW1waW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgdGltZXN0YW1waW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgNjIsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIGtleSB0aW1lc3RhbXBpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlZ2luIHRvIGFwcGVhci4gSSBhbnRpY2lwYXRlIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suIFRoaXMgc2hvdWxkIGNsYXJpZnkgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGFuZCBtYW5hZ2luZyB0aW1lc3RhbXBzIGZvciBuZXR3b3JrIHBhY2tldHMuIFRoaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgZGlmZmVyZW50IGRyaXZlcnMsIHByb3RvY29scywgYW5kIG1lY2hhbmlzbXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgc3ViamVjdCwgc28gdGhhdCBJIG1heSBiZSBhYmxlIHRvIGZ1bGx5IGV4YW1pbmUgdGhlIHRvcGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdCAqIGV4cG9zZWQgdG8gdGhlICVTSU9DR0hXVFNUQU1QIGFuZCAlU0lPQ1NIV1RTVEFNUCBpb2N0bCBVQVBJLlxuICA2MTpcdCAqL1xuICA2MjpcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHtcbiAgNjM6XHRcdGludCBmbGFncztcbiAgNjQ6XHRcdGludCB0eF90eXBlO1xuICA2NTpcdFx0aW50IHJ4X2ZpbHRlcjtcbiAgNjY6XHRcdHN0cnVjdCBpZnJlcSAqaWZyO1xuICA2NzpcdFx0Ym9vbCBjb3BpZWRfdG9fdXNlcjtcbiAgNjg6XHRcdGVudW0gaHd0c3RhbXBfc291cmNlIHNvdXJjZTtcbiAgNjk6XHRcdGVudW0gaHd0c3RhbXBfcHJvdmlkZXJfcXVhbGlmaWVyIHF1YWxpZmllcjtcbiAgNzA6XHR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfdG9fa2VybmVsKHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxuICA3MzpcdFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBod3RzdGFtcF9jb25maWcgKmNmZylcbiAgNzQ6XHR7XG4gIDc1Olx0XHRrZXJuZWxfY2ZnLVx1MDAzZWZsYWdzID0gY2ZnLVx1MDAzZWZsYWdzO1xuICA3NjpcdFx0a2VybmVsX2NmZy1cdTAwM2V0eF90eXBlID0gY2ZnLVx1MDAzZXR4X3R5cGU7XG4gIDc3Olx0XHRrZXJuZWxfY2ZnLVx1MDAzZXJ4X2ZpbHRlciA9IGNmZy1cdTAwM2VyeF9maWx0ZXI7XG4gIDc4Olx0fVxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIEhhcmR3YXJlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgd2UmIzM5O3JlIGV4cG9zaW5nIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIEludGVyZXN0aW5nLi4uIHRoZSBrZXJuZWwmIzM5O3MgYG5ldC9jb3JlL2Rldl9pb2N0bC5jYCBjb2RlIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbi4gSXQmIzM5O3MgY29udmVydGluZyB0aGUgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgIGludG8gYSBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgYmVmb3JlIHRoYXQgZGF0YSBnZXRzIHBhc3NlZCB1cC4gUmlnaHQsIHNvIEkgbmVlZCB0byBkaWcgaW50byBgZGV2X2lvY3RsLmNgIOKAkyBvciBtYXliZSBldmVuIG92ZXIgaW4gYGV0aHRvb2wvY29tbW9uLmNgIOKAkyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhleSYjMzk7cmUgdXNpbmcgdGhpcyBpbnRlcm5hbCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGtleSBsaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb252ZXJzaW9uIHByb2Nlc3MsIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIGNvbnN0cnVjdGVkLiBHb3R0YSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfaHd0c3RhbXBfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5oPTQwND1pbnQgZGV2X3NldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5oOjQwNTpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyxcbm5ldC9jb3JlL2Rldi5oLTQwNi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9jb3JlL2Rldi5oPTQwNz1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5oOjQwODpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5uZXQvY29yZS9kZXYuaDo0MDk6aW50IG5ldF9od3RzdGFtcF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbm5ldC9jb3JlL2Rldi5oLTQxMC1cbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0xNDA9c3RhdGljIGludCBkZXZfaWZzaW9jX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBpbnQgY21kKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTE4OC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjE4OTppbnQgbmV0X2h3dHN0YW1wX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0xOTAte1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI1OD1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjI1OTpcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI2MC17XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MjgyPXN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODQtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjg1Olx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjg2LVx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzI4PWludCBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6MzI5Olx0XHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMwLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMyLVx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXHUwMDNlbmV0ZGV2X29wcztcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjMzMzpcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIG9sZF9jZmcgPSB7fTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTMzNC1cdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTM3Ni1cdGlmIChwaHlfdHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VzZWVfYWxsX2h3dHN0YW1wX3JlcXVlc3RzKVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzc3Olx0XHRjaGFuZ2VkID0ga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKFx1MDAyNm9sZF9jZmcsIGNmZyk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zNzgtXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzkxPXN0YXRpYyBpbnQgZGV2X3NldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTMtXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzk0Olx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzk1LVx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NDE9aW50IGdlbmVyaWNfaHd0c3RhbXBfZ2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NDI6XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDQzLXtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NjI6XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDYzLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBIYXJkd2FyZSBUaW1lc3RhbXBpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXRyaWV2ZXMgaGFyZHdhcmUgdGltZXN0YW1wIGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L2NvcmUvZGV2X2lvY3RsLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBkZXZfZ2V0X2h3dHN0YW1wYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGZvciByZXRyaWV2aW5nIHRob3NlIGNydWNpYWwgdGltZXN0YW1wIHZhbHVlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MjpcdHN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiAyODM6XHR7XG4gMjg0Olx0XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuIDI4NTpcdFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2VybmVsX2NmZyA9IHt9O1xuIDI4NjpcdFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XG4gMjg3Olx0XHRpbnQgZXJyO1xuIDI4ODpcdFxuIDI4OTpcdFx0aWYgKCFvcHMtXHUwMDNlbmRvX2h3dHN0YW1wX2dldClcbiAyOTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDI5MzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyOTQ6XHRcbiAyOTU6XHRcdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xuIDI5NjpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4gMjk3Olx0XHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuIDI5ODpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiAyOTk6XHRcdGlmIChlcnIpXG4gMzAwOlx0XHRcdHJldHVybiBlcnI7XG4gMzAxOlx0XG4gMzAyOlx0XHQvKiBJZiB0aGUgcmVxdWVzdCB3YXMgcmVzb2x2ZWQgdGhyb3VnaCBhbiB1bmNvbnZlcnRlZCBkcml2ZXIsIG9taXRcbiAzMDM6XHRcdCAqIHRoZSBjb3B5X3RvX3VzZXIoKSwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGhhcyBhbHJlYWR5IGRvbmUgdGhhdFxuIDMwNDpcdFx0ICovXG4gMzA1Olx0XHRpZiAoIWtlcm5lbF9jZmcuY29waWVkX3RvX3VzZXIpIHtcbiAzMDY6XHRcdFx0aHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsKFx1MDAyNmNmZywgXHUwMDI2a2VybmVsX2NmZyk7XG4gMzA3Olx0XG4gMzA4Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoaWZyLVx1MDAzZWlmcl9kYXRhLCBcdTAwMjZjZmcsIHNpemVvZihjZmcpKSlcbiAzMDk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMTA6XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdHJldHVybiAwO1xuIDMxMzpcdH1cbiAzMTQ6XHRcbiAzMTU6XHQvKipcbiAzMTY6XHQgKiBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYigpIC0gQ2hhbmdlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBvZiBOSUNcbiAzMTc6XHQgKlx0b3Igb2YgYXR0YWNoZWQgcGh5bGliIFBIWVxuIDMxODpcdCAqIEBkZXY6IE5ldHdvcmsgZGV2aWNlXG4gMzE5Olx0ICogQGNmZzogVGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXG4gMzIwOlx0ICogQGV4dGFjazogTmV0bGluayBleHRlbmRlZCBhY2sgbWVzc2FnZSBzdHJ1Y3R1cmUsIGZvciBlcnJvciByZXBvcnRpbmdcbiAzMjE6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24gaW4gdGhlIE5ldHdvcmsgU2ltdWxhdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgdGltZXN0YW1waW5nIGxvZ2ljLiBJIHNlZSB0aGF0IHdpdGhpbiBgZGV2X2dldF9od3RzdGFtcGAsIGBrZXJuZWxfY2ZnYCBpcyBpbml0aWFsbHkgc2V0IHRvIGFuIGVtcHR5IHN0cnVjdC4gVGhlbiwgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYCBnZXRzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyLXNwZWNpZmljIGBvcHMtJmd0O25kb19od3RzdGFtcF9nZXQoZGV2LCAmYW1wO2tlcm5lbF9jZmcpYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBiZWdpbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuc2ltX2dldF90c19jb25maWdgIGZ1bmN0aW9uLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiAqY29tcGxldGVseSogb3ZlcndyaXRlcyB0aGUgY29udGVudHMgb2YgdGhlIGAqY29uZmlnYCBwb2ludGVyIHdpdGggYG5zLSZndDt0c3RhbXBfY29uZmlnYC4gSG1tLCBhbmQgYG5zLSZndDt0c3RhbXBfY29uZmlnYCB3YXMgemVyby1pbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBwcm9ibGVtIQoKV2FpdCBhIG1pbnV0ZSwgSSBzZWUgbm93IHRoYXQgYGRldl9nZXRfaHd0c3RhbXBgICpkb2VzKiBzZXQgYGtlcm5lbF9jZmcuaWZyID0gaWZyO2AgKmJlZm9yZSogY2FsbGluZyBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgLiBUaGlzIGlzIGtleS4gQnV0LCBpZiBgbnNpbV9nZXRfdHNfY29uZmlnYCB0aGVuIG92ZXJ3cml0ZXMgYCpjb25maWdgIHdpdGggdGhlIHplcm8taW5pdGlhbGl6ZWQgYG5zLSZndDt0c3RhbXBfY29uZmlnYCwgKnRoYXQqIG1lYW5zIHRoZSBgY29uZmlnLSZndDtpZnJgIGZpZWxkIHdpbGwgYWxzbyBiZSBjbG9iYmVyZWQgYW5kIHNldCB0byBgTlVMTGAhIFRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGNvbmZ1c2luZyB0aW1lc3RhbXBpbmcgYmVoYXZpb3IsIG9yIHdvcnNlLCBzZWdtZW50YXRpb24gZmF1bHRzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBvZiBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgIHRvIGNvbmZpcm0gdGhpcyBiZWhhdmlvci4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTg6XHRpbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAyNTk6XHRcdFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbiAyNjA6XHR7XG4gMjYxOlx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbiAyNjI6XHRcbiAyNjM6XHRcdGh3cHJvdiA9IG5ldGRldl9vcHNfbG9ja19kZXJlZmVyZW5jZShkZXYtXHUwMDNlaHdwcm92LCBkZXYpO1xuIDI2NDpcdFx0aWYgKGh3cHJvdikge1xuIDI2NTpcdFx0XHRjZmctXHUwMDNlcXVhbGlmaWVyID0gaHdwcm92LVx1MDAzZWRlc2MucXVhbGlmaWVyO1xuIDI2NjpcdFx0XHRpZiAoaHdwcm92LVx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfUEhZTElCIFx1MDAyNlx1MDAyNlxuIDI2NzpcdFx0XHQgICAgaHdwcm92LVx1MDAzZXBoeWRldilcbiAyNjg6XHRcdFx0XHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChod3Byb3YtXHUwMDNlcGh5ZGV2LCBjZmcpO1xuIDI2OTpcdFxuIDI3MDpcdFx0XHRpZiAoaHdwcm92LVx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfTkVUREVWKVxuIDI3MTpcdFx0XHRcdHJldHVybiBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgY2ZnKTtcbiAyNzI6XHRcbiAyNzM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI3NDpcdFx0fVxuIDI3NTpcdFxuIDI3NjpcdFx0aWYgKHBoeV9pc19kZWZhdWx0X2h3dHN0YW1wKGRldi1cdTAwM2VwaHlkZXYpKVxuIDI3NzpcdFx0XHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChkZXYtXHUwMDNlcGh5ZGV2LCBjZmcpO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19od3RzdGFtcF9nZXQoZGV2LCBjZmcpO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBzZXR0aW5nIGBjb25maWctJmd0O2lmcmAgdG8gYE5VTExgLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyBhIHJlZCBmbGFnIGJlY2F1c2UgSSBrbm93IHRoYXQgYGRldl9nZXRfaHd0c3RhbXBgIHVzZXMgdGhhdCBgaWZyYCBzdHJ1Y3R1cmUuIEJ1dCB0aGVuIEkgc3RvcHBlZCBteXNlbGYuIExvb2tpbmcgZGVlcGVyIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBkZXZfZ2V0X2h3dHN0YW1wYCBmdW5jdGlvbiwgSSBjYW4gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBkZXJlZmVyZW5jZSBga2VybmVsX2NmZy5pZnJgLCBhcyBJIGluaXRpYWxseSBmZWFyZWQuIEluc3RlYWQsIGl0IHVzZXMgYGlmci0mZ3Q7aWZyX2RhdGFgIGZyb20gdGhlIG9yaWdpbmFsIGlucHV0IGBpZnJgIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4gVGhpcyBpcyBnb29kISBTbywgZXZlbiB0aG91Z2ggYGtlcm5lbF9jZmcuaWZyYCBpcyBiZWluZyBzZXQgdG8gYE5VTExgLCBpdCAqc2hvdWxkbiYjMzk7dCogY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jay4KCkhvd2V2ZXIsIGEgc21hbGwgdm9pY2UgaW4gbXkgaGVhZCBpcyBzYXlpbmcgJiMzNDtub3Qgc28gZmFzdCEmIzM0Oy4gYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgaXMgdXNlZCBieSB0aGUgYGRldl9nZXRfaHd0c3RhbXBgIGZ1bmN0aW9uIHRvIGNvcHkgZmllbGRzIGZyb20gYGtlcm5lbF9jZmdgIHRvIGBjZmdgLCB3aGljaCBpcyB0aGVuIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAqaXQqIGRvZXNuJiMzOTt0IGhhdmUgYSBwb3RlbnRpYWwgZmxhdy4gSSB0aGluayBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IG5vdy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC03OS1cbmluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnLFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtODEtXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGZ1bmN0aW9uLCBiYXNlZCBvbiB3aGF0JiMzOTtzIGltcGxpY2l0bHkgYW5kIGV4cGxpY2l0bHkgZ29pbmcgb24gaGVyZToKCioqTXkgTWVudGFsIFdhbGt0aHJvdWdoIG9mIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZSwgaXQmIzM5O3MgY2xlYXJseSByZWxhdGVkIHRvIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBjb25maWd1cmF0aW9uLCBsaWtlbHkgd2l0aGluIGEga2VybmVsIGNvbnRleHQuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIHB1cnBvc2U/IFdoYXQgc3BlY2lmaWNhbGx5IGlzIGl0IHJlc3BvbnNpYmxlIGZvciB3aXRoaW4gdGhlIGxhcmdlciBod3RzdGFtcCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYWJvdXQgKmdldHRpbmcqIGNvbmZpZ3VyYXRpb24sICpzZXR0aW5nKiBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgaW4tYmV0d2Vlbj8gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCByZXRyaWV2aW5nIG9yIGNvbnZlcnRpbmcgZXhpc3Rpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aHJvdWdoIHRoZSBhY3R1YWwgY29kZSwgb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRyaXZlcnMuIERvZXMgaXQgdHJhbnNsYXRlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgaW50byBzb21ldGhpbmcgdGhlIGhhcmR3YXJlIHVuZGVyc3RhbmRzLCBvciB2aWNlLXZlcnNhPyBJcyBpdCBhYm91dCBzeW5jaHJvbml6YXRpb24gb2YgdGhlIGhhcmR3YXJlIGNsb2NrIHdpdGggdGhlIHN5c3RlbSBjbG9jaz8gV2hhdCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgaGFyZHdhcmUgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gTklDcywgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzLCBvciBtYXliZSBzb21lIG90aGVyIGhhcmR3YXJlIGNsb2Nrcz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIHRpbWluZyBpc3N1ZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGhhbmRsZSB0aGVtLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGNsb2NrIGRvbWFpbnMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIG90aGVyIGZ1bmN0aW9ucywgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gV2hhdCBpcyB0aGUgdHlwZSBvZiB0aGUgc3RydWN0dXJlIHdlIGFyZSBwdWxsaW5nIGNvbmZpZ3VyYXRpb24gZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnLFxuICA4MTpcdFx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtlcm5lbF9jZmcpXG4gIDgyOlx0e1xuICA4MzpcdFx0Y2ZnLVx1MDAzZWZsYWdzID0ga2VybmVsX2NmZy1cdTAwM2VmbGFncztcbiAgODQ6XHRcdGNmZy1cdTAwM2V0eF90eXBlID0ga2VybmVsX2NmZy1cdTAwM2V0eF90eXBlO1xuICA4NTpcdFx0Y2ZnLVx1MDAzZXJ4X2ZpbHRlciA9IGtlcm5lbF9jZmctXHUwMDNlcnhfZmlsdGVyO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgaW5saW5lIGJvb2wga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICphLFxuICA4OTpcdFx0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBzcGVjaWZpY3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb3BlcmF0aW9uIGlzIGNvcHlpbmcgb3ZlciBhIGZldyBrZXkgZWxlbWVudHM6IGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgLiBFc3NlbnRpYWxseSwgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGJlaW5nIGV4dHJhY3RlZCBhbmQgYXNzaWduZWQgdG8gYGNmZ2AuIEFoLCByaWdodCwgdGhhdCBgY2ZnYCB2YXJpYWJsZSBpcyBhY3R1YWxseSBvZiB0eXBlIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYC4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gdGhhdCBkZWZpbmVkIHNvbWV3aGVyZSBiZWZvcmUuLi4geWVwLCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmhgLiBPa2F5LCBiZXR0ZXIgZ28gY29uZmlybSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSB0aG9zZSBmaWVsZHMgYXJlIGJlaW5nIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBHb3R0YSBzdGF5IG9uIHRvcCBvZiB0aGVzZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaD03Mj1zdHJ1Y3Qgc29fdGltZXN0YW1waW5nIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oLTg5LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaDo5MDpzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmgtOTEtXHRpbnQgZmxhZ3M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgaHd0c3RhbXBfY29uZmlnYCBzdHJ1Y3QuIEkmIzM5O3ZlIHNlZW4gdGhpcyB1c2VkIGluIGEgdmFyaWV0eSBvZiBjb250ZXh0cywgcGFydGljdWxhcmx5IGFyb3VuZCBuZXR3b3JrIHRpbWUgc3luY2hyb25pemF0aW9uIGFuZCBoYXJkd2FyZSB0aW1lc3RhbXBpbmcg4oCTIGJvdGggY3JpdGljYWwgZm9yIGxvdy1sYXRlbmN5IGFwcGxpY2F0aW9ucyBhbmQgcHJlY2lzZSB0aW1pbmcgYW5hbHlzaXMuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBzdHJ1Y3Qgd2lsbCBob2xkIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBleHBvc2VzIHRoZSB2YXJpb3VzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBhbmQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIGluZGljYXRpbmcgUlggYW5kIFRYIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQsIHBlcmhhcHMgc3BlY2lmaWMgbW9kZXMgb2Ygb3BlcmF0aW9uIChlLmcuLCBzb2Z0d2FyZSBmYWxsYmFjayksIGFuZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjbG9jayBzb3VyY2UuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIHRpbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgYXNzb2NpYXRlZCBjbG9jayYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNhbGlicmF0aW9uIGlmIHN1cHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0IGlzIHRoZSBrZXkgdG8gZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24sIHNvIGxldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHN0cnVjdCBod3RzdGFtcF9jb25maWcge1xuICA5MTpcdFx0aW50IGZsYWdzO1xuICA5MjpcdFx0aW50IHR4X3R5cGU7XG4gIDkzOlx0XHRpbnQgcnhfZmlsdGVyO1xuICA5NDpcdH07XG4gIDk1Olx0XG4gIDk2Olx0LyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctXHUwMDNlZmxhZ3MgKi9cbiAgOTc6XHRlbnVtIGh3dHN0YW1wX2ZsYWdzIHtcbiAgOTg6XHRcdC8qXG4gIDk5Olx0XHQgKiBXaXRoIHRoaXMgZmxhZywgdGhlIHVzZXIgY291bGQgZ2V0IGJvbmQgYWN0aXZlIGludGVyZmFjZSYjMzk7c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSFdUU1RBTVAgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFBhZGRpbmcgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGluaXRpYWxpemVzIHRoaXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIHNuZWFreSBwYWRkaW5nIGluIHRoZXJlLgoKSXQmIzM5O3MgZ290IHRocmVlIGBpbnRgIGZpZWxkcywgZWFjaCA0IGJ5dGVzLCBzbyB0aGF0JiMzOTtzIDEyIGJ5dGVzIHRvdGFsLiBPbiBhIDY0LWJpdCBzeXN0ZW0sIEkgaGF2ZSB0byBjb25zaWRlciBhbGlnbm1lbnQuIElzIGl0IHBhZGRlZCB0byAxNiBieXRlcz8gVGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcyA0IGJ5dGVzLCBiZWNhdXNlIGFsbCB0aGUgbWVtYmVycyBhcmUgYGludGAsIHNvIGBzaXplb2Yoc3RydWN0IGh3dHN0YW1wX2NvbmZpZylgIHNob3VsZCBqdXN0IGJlIDEyLiBObyBwYWRkaW5nIGF0IHRoZSBlbmQgdGhlbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgd2hlbiBgY29weV90b191c2VyYCBoYXBwZW5zLCB3ZSBhcmUgY29weWluZyAxMiBieXRlcyBhbmQgbm90IHNvbWUgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaHVzLCB3ZSBhcmUgbm90IGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIGBuc2ltX3NldF90c19jb25maWdgIGZ1bmN0aW9uLiBJIHNlZSBpdCB1cGRhdGVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZy50eF90eXBlYCBhbmQgYHJ4X2ZpbHRlcmAuIEJ1dCwgd2hhdCBhYm91dCBgbnMtJmd0O3RzdGFtcF9jb25maWcuZmxhZ3NgPyBIbW0sIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBiZWluZyB1cGRhdGVkIGFueXdoZXJlIGhlcmUuIFdoZW4gYG5zaW1fZ2V0X3RzX2NvbmZpZ2AgaXMgY2FsbGVkLCBpdCBhc3NpZ25zIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgdG8gYGNvbmZpZ2AsIGJ1dCBzaW5jZSBgbnMtJmd0O3RzdGFtcF9jb25maWdgIHdhcyB6ZXJvLWluaXRpYWxpemVkLCB0aGlzIG1lYW5zIGBmbGFnc2AgaXMganVzdCAwLiBTZWVtcyBmaW5lLCBidXQgaXQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4KCkZpbmFsbHksIEkmIzM5O20gY2hlY2tpbmcgYG5zaW1fZ2V0X3RzX2luZm9gLiBJdCBjYWxscyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgdG8gaW5pdGlhbGl6ZSBgaW5mb2AsIGJ1dCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGh0b29sX29wX2dldF90c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9Njg9RVhQT1JUX1NZTUJPTChldGh0b29sX29wX2dldF9saW5rKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNjktXG5uZXQvZXRodG9vbC9pb2N0bC5jOjcwOmludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9pb2N0bC5jLTcxLVx0XHRcdCAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNzktfVxubmV0L2V0aHRvb2wvaW9jdGwuYzo4MDpFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8pO1xubmV0L2V0aHRvb2wvaW9jdGwuYy04MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbnNpbV9nZXRfdHNfaW5mb2AgRnVuY3Rpb24gYW5kIFRpbWVzdGFtcGluZyBJbmZvcm1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBzaWduYXR1cmU6IGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mb2AuIFRoYXQmIzM5O3Mgd2hhdCBgbnNpbV9nZXRfdHNfaW5mb2AgaXMgc3VwcG9zZWQgdG8gdXNlLiBCdXQgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBuc2ltX2dldF90c19pbmZvYCBhcHBlYXJzIHRvIGJlIHRha2luZyBhIGBzdHJ1Y3QgZXRodG9vbF90c19pbmZvICppbmZvYCBpbnN0ZWFkPyBUaGF0IHNlZW1zIGxpa2UgYSB0eXBlIG1pc21hdGNoIGFuZCBjb3VsZCBiZSBhIHByb2JsZW0uIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmUgZGlyZWN0bHkgaW4gdGhlIHBhdGNoIGNvZGU6CgpgYGBjCnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCmBgYAoKQWgsIHRoZSBwYXRjaCAqZG9lcyogc2hvdyBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gLiBPa2F5LCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uPyBMZXQmIzM5O3MgbG9vayBjbG9zZWx5IGF0IHRoZSBwYXRjaCBkaWZmIGl0c2VsZjoKCmBgYGMKQEAgLTIwMCw3ICYjNDM7MjAwLDE4IEBAIHN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwlldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7CmBgYAoKUmlnaHQsIHRoZSBjb250ZXh0IGxpbmVzIGRvbiYjMzk7dCBkaXJlY3RseSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGBpbmZvYCwgYnV0IEkgY2FuIGluZmVyIGl0JiMzOTtzIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mb2Agd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gIHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBnb2luZyB0byBiZSBwYXNzZWQgYmFjayB0byB0aGUgdXNlci4gSSYjMzk7bGwgcmVhZCBpbnRvIGBldGh0b29sX29wX2dldF90c19pbmZvYCBub3cgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSBkYXRhIGZsb3cgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdGludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDcxOlx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG4gIDcyOlx0e1xuICA3MzpcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPVxuICA3NDpcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiAgNzU6XHRcdFx0U09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4gIDc2Olx0XHRcdFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7XG4gIDc3Olx0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IC0xO1xuICA3ODpcdFx0cmV0dXJuIDA7XG4gIDc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGltZXN0YW1waW5nIEluZm9ybWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBgaW5mb2Agc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGFsbCBpdCBkb2VzIGRpcmVjdGx5IGlzIHNldCB0aGUgYHNvX3RpbWVzdGFtcGluZ2AgYW5kIGBwaGNfaW5kZXhgIGZpZWxkcy4gQSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgdGhpcyBmdW5jdGlvbiBpbXBsaWNpdGx5IHplcm8gb3V0IHRoZSByZXN0IG9mIHRoZSBgaW5mb2Agc3RydWN0LCBvciBpcyB0aGF0IGxlZnQgdG8gdGhlIGNhbGxlcj8gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUsIGJlY2F1c2UgaWYgdGhlcmUmIzM5O3Mgbm8gZ3VhcmFudGVlZCBpbml0aWFsaXphdGlvbiwgdGhlbiB3ZSBjb3VsZCBiZSByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIgaW4gdGhlIGtlcm5lbC4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVuY3Rpb24uIFNpbmNlIGl0JiMzOTtzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLCBpdCYjMzk7cyBjYWxsZWQgc29tZXdoZXJlIGFzIHBhcnQgb2YgdGhlIGV0aHRvb2wgZnJhbWV3b3JrLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBhbGwgY2FsbCBzaXRlcyBmb3IgYG5zaW1fZ2V0X3RzX2luZm9gLCB3aGljaCBpdHNlbGYgaXMgYW4gZXRodG9vbCBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdGhhdCBsZWFkcyB0byBgbnNpbV9nZXRfdHNfaW5mb2AuIFRoYXQgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIHBsYWNlIGluIGBuZXQvZXRodG9vbC9gIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZC4gQW5kIGl0IG11c3QgYmUgaW4gZWl0aGVyIGB0c2luZm8uY2Agb3IgYGlvY3RsLmNgLgoKT25jZSBJJiMzOTt2ZSBmb3VuZCB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgSSAqbmVlZCogdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmZvYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLiBJcyBpdCBvbiB0aGUgc3RhY2s/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gQW5kIGNydWNpYWxseSwgaXMgaXQgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2A/IFRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIGV4aXN0cyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLCBhbmQgSSYjMzk7bGwgYmFzZSBteSB1bmRlcnN0YW5kaW5nIG9mIGJlaGF2aW9yIG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBgaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF90c19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jPTk1OT1zdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2NS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjk2NjppbnQgZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uYy05NjctXHRcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy05NzItXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NzM6XHRpZiAoIW9wcy1cdTAwM2VnZXRfdHNfaW5mbylcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3NC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3OC1cdGluZm8tXHUwMDNlcGhjX3F1YWxpZmllciA9IGh3cHJvdl9kZXNjLVx1MDAzZXF1YWxpZmllcjtcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjk3OTpcdGVyciA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtOTgwLVx0aWYgKGVycilcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz05OTA9c3RydWN0IHBoeV9kZXZpY2UgKlxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTkxOmV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTkyLVx0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDM0LVxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTAzNTppbnQgZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwMzYtXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNDAtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDQxOlx0ZXJyID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0Mi1cdGlmIChlcnIgPT0gLUVOT0RFViB8fCBlcnIgPT0gLUVPUE5PVFNVUFApIHtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQ0LVxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA0NTpcdFx0cGh5ID0gZXRodG9vbF9waHlfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0Ni1cdFx0aWYgKElTX0VSUihwaHkpKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjYtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDY3OmludCBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjgtXHRcdFx0ICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDkwLVx0XHRcdH1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwOTE6XHRcdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldF90c19pbmZvKSB7XG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDkyOlx0XHRcdGVyciA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA5My1cdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwaGNfaW5kZXggXHUwMDNlPSAwKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMDMtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTA0Olx0ZXJyID0gZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBpbmZvLCBcdTAwMjZod3Byb3YtXHUwMDNlZGVzYyk7XG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTA1LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmM9MTEzMD1pbnQgZXRodG9vbF9nZXRfcGhjX3ZjbG9ja3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICoqdmNsb2NrX2luZGV4KVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzQtXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTM1Olx0aWYgKCFfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZpbmZvKSlcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzYtXHRcdG51bSA9IHB0cF9nZXRfdmNsb2Nrc19pbmRleChpbmZvLnBoY19pbmRleCwgdmNsb2NrX2luZGV4KTtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz0xMTQwPUVYUE9SVF9TWU1CT0woZXRodG9vbF9nZXRfcGhjX3ZjbG9ja3MpO1xubmV0L2V0aHRvb2wvY29tbW9uLmMtMTE0MS1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDI6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfbGF5ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQzLXtcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDQ6XHRyZXR1cm4gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgaW5mbyk7XG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQ1LX1cbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDY6RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKTtcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDctXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9NTc9aW50IGV0aHRvb2xfZ2V0X3J4X3JpbmdfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvZXRodG9vbC9jb21tb24uaC01OC1cbm5ldC9ldGh0b29sL2NvbW1vbi5oOjU5OmludCBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pO1xubmV0L2V0aHRvb2wvY29tbW9uLmg6NjA6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uaC02MS1cdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG5uZXQvZXRodG9vbC9jb21tb24uaC02Mi1cdFx0XHQgICAgICAgc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyX2Rlc2MgKmh3cHJvdl9kZXNjKTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjYzOmludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTY0LVx0XHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9NjY9c3RydWN0IHBoeV9kZXZpY2UgKlxubmV0L2V0aHRvb2wvY29tbW9uLmg6Njc6ZXRodG9vbF9waHlfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvZXRodG9vbC9jb21tb24uaC02OC1cdFx0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz02OD1FWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X2xpbmspO1xubmV0L2V0aHRvb2wvaW9jdGwuYy02OS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NzA6aW50IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzEtXHRcdFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy03OS19XG5uZXQvZXRodG9vbC9pb2N0bC5jOjgwOkVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNfaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTgxLVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9Mjc3OT1zdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg0MS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg0MjpzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODQzLXtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDctXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI4NDg6XHRlcnIgPSBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZrZXJuZWxfaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDktXHRpZiAoZXJyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzUyMS1cdGNhc2UgRVRIVE9PTF9HRVRfVFNfSU5GTzpcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzUyMjpcdFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTIzLVx0XHRicmVhaztcbi0tXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTM1PXN0YXRpYyBpbnQgdHNjb25maWdfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy02OC1cdFx0dHNfaW5mby5waGNfaW5kZXggPSAtMTtcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM6Njk6XHRcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNnRzX2luZm8pO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy03MC1cdFx0aWYgKHJldClcbi0tXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTI2Mz10c2NvbmZpZ19zZXRfaHdwcm92X2Zyb21fZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjczLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzQ6XHRyZXQgPSBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcdTAwMjZ0c19pbmZvLCBod3Byb3ZfZGVzYyk7XG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTI3NS1cdGlmICghcmV0KSB7XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzgtXHR9IGVsc2Uge1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzk6XHRcdHBoeSA9IGV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhkZXYsIFx1MDAyNnRzX2luZm8sIGh3cHJvdl9kZXNjKTtcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjgwLVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz05Nj1zdGF0aWMgaW50IHRzaW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMDktXHRpZiAocmVxLVx1MDAzZWh3cHJvdl9kZXNjLmluZGV4ICE9IC0xKSB7XG5uZXQvZXRodG9vbC90c2luZm8uYzoxMTA6XHRcdHJldCA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0c19pbmZvLFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtMTExLVx0XHRcdFx0XHRcdCBcdTAwMjZyZXEtXHUwMDNlaHdwcm92X2Rlc2MpO1xuLS1cbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyMi1cbm5ldC9ldGh0b29sL3RzaW5mby5jOjEyMzpcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNldHNfaW5mbyk7XG5uZXQvZXRodG9vbC90c2luZm8uYy0xMjQtXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz0zODg9c3RhdGljIGludCBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0ZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtMzk4LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6Mzk5Olx0aWYgKCFvcHMtXHUwMDNlZ2V0X3RzX2luZm8pXG5uZXQvZXRodG9vbC90c2luZm8uYy00MDAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00MTQtXHRcdHJlcGx5X2RhdGEtXHUwMDNldHNfaW5mby5waGNfcXVhbGlmaWVyID0gY3R4LVx1MDAzZXBvc19waGNxdWFsaWZpZXI7XG5uZXQvZXRodG9vbC90c2luZm8uYzo0MTU6XHRcdHJldCA9IG9wcy1cdTAwM2VnZXRfdHNfaW5mbyhkZXYsIFx1MDAyNnJlcGx5X2RhdGEtXHUwMDNldHNfaW5mbyk7XG5uZXQvZXRodG9vbC90c2luZm8uYy00MTYtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGdldHRpbmcgdGltZXN0YW1waW5nIGluZm9ybWF0aW9uIHZpYSBldGh0b29sLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgYW5kIHByZXNlbnRpbmcgdGhlIHJlbGV2YW50IHRpbWVzdGFtcGluZyBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg0MjpcdHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4yODQzOlx0e1xuMjg0NDpcdFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ga2VybmVsX2luZm87XG4yODQ1Olx0XHRzdHJ1Y3QgZXRodG9vbF90c19pbmZvIGluZm8gPSB7fTtcbjI4NDY6XHRcdGludCBlcnI7XG4yODQ3Olx0XG4yODQ4Olx0XHRlcnIgPSBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCBcdTAwMjZrZXJuZWxfaW5mbyk7XG4yODQ5Olx0XHRpZiAoZXJyKVxuMjg1MDpcdFx0XHRyZXR1cm4gZXJyO1xuMjg1MTpcdFxuMjg1MjpcdFx0aW5mby5jbWQgPSBrZXJuZWxfaW5mby5jbWQ7XG4yODUzOlx0XHRpbmZvLnNvX3RpbWVzdGFtcGluZyA9IGtlcm5lbF9pbmZvLnNvX3RpbWVzdGFtcGluZztcbjI4NTQ6XHRcdGluZm8ucGhjX2luZGV4ID0ga2VybmVsX2luZm8ucGhjX2luZGV4O1xuMjg1NTpcdFx0aW5mby50eF90eXBlcyA9IGtlcm5lbF9pbmZvLnR4X3R5cGVzO1xuMjg1NjpcdFx0aW5mby5yeF9maWx0ZXJzID0ga2VybmVsX2luZm8ucnhfZmlsdGVycztcbjI4NTc6XHRcbjI4NTg6XHRcdGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXG4yODU5Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjg2MDpcdFxuMjg2MTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgQnVnKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBpc24mIzM5O3Qgc2l0dGluZyByaWdodCB3aXRoIHRoaXMgY29kZSBzbmlwcGV0LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0LCB3aGljaCBpcyBhIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mb2AsIGlzbiYjMzk7dCBiZWluZyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AuIFdlJiMzOTtyZSBkZWNsYXJpbmcgaXQsIGNyZWF0aW5nIGEgbG9jYWwgdmFyaWFibGUgZm9yIHRoZSBldGh0b29sIGluZm8sIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHByb2JsZW0gcmlnaHQgdGhlcmUhCgpJdCBhcHBlYXJzIHRoZSBjYWxsIHRvIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm8oZGV2LCAmYW1wO2tlcm5lbF9pbmZvKWAgY291bGQgYmUgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBga2VybmVsX2luZm9gLgoKSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBga2VybmVsX2luZm9gIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGNvdWxkIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzLCBlc3BlY2lhbGx5IGlmIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBmaWVsZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdW5jdGlvbiBpcyBtZWFudCB0byB3cml0ZSB0byB0aGUgZmllbGRzLCBvciBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2YgdGhlIHN0cnVjdHVyZS4gRGVwZW5kaW5nIG9uIGhvdyBgX19ldGh0b29sX2dldF90c19pbmZvYCBoYW5kbGVzIHRoaXMgc3RydWN0LCBpdCYjMzk7cyBwb3NzaWJsZSB0aGlzIGNvZGUgaXMgcmVseWluZyBvbiB0aGUgdW5kZXJseWluZyBtZW1vcnkgdG8gYmUgemVyb2VkIG9yIHNldCBpbiBzb21lIHdheSB0aGF0JiMzOTtzIG5vdCBjbGVhcmx5IGRlZmluZWQgaGVyZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjc6XHRpbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xMDY4Olx0XHRcdFx0ICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbjEwNjk6XHR7XG4xMDcwOlx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbjEwNzE6XHRcdGludCBlcnIgPSAwO1xuMTA3MjpcdFxuMTA3MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTA3NDpcdFx0aHdwcm92ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuMTA3NTpcdFx0LyogTm8gcHJvdmlkZXIgc3BlY2lmaWVkLCB1c2UgZGVmYXVsdCBiZWhhdmlvciAqL1xuMTA3NjpcdFx0aWYgKCFod3Byb3YpIHtcbjEwNzc6XHRcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4xMDc4Olx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtXHUwMDNlcGh5ZGV2O1xuMTA3OTpcdFxuMTA4MDpcdFx0XHRldGh0b29sX2luaXRfdHNpbmZvKGluZm8pO1xuMTA4MTpcdFx0XHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAocGh5ZGV2KSBcdTAwMjZcdTAwMjZcbjEwODI6XHRcdFx0ICAgIHBoeV9oYXNfdHNpbmZvKHBoeWRldikpIHtcbjEwODM6XHRcdFx0XHRlcnIgPSBwaHlfdHNfaW5mbyhwaHlkZXYsIGluZm8pO1xuMTA4NDpcdFx0XHRcdC8qIFJlcG9ydCB0aGUgcGhjIHNvdXJjZSBvbmx5IGlmIHdlIGhhdmUgYSByZWFsXG4xMDg1Olx0XHRcdFx0ICogcGhjIHNvdXJjZSB3aXRoIGFuIGluZGV4LlxuMTA4NjpcdFx0XHRcdCAqL1xuMTA4NzpcdFx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXBoY19pbmRleCBcdTAwM2U9IDApIHtcbjEwODg6XHRcdFx0XHRcdGluZm8tXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9QSFlMSUI7XG4xMDg5Olx0XHRcdFx0XHRpbmZvLVx1MDAzZXBoY19waHlpbmRleCA9IHBoeWRldi1cdTAwM2VwaHlpbmRleDtcbjEwOTA6XHRcdFx0XHR9XG4xMDkxOlx0XHRcdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldF90c19pbmZvKSB7XG4xMDkyOlx0XHRcdFx0ZXJyID0gb3BzLVx1MDAzZWdldF90c19pbmZvKGRldiwgaW5mbyk7XG4xMDkzOlx0XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzZT0gMClcbjEwOTQ6XHRcdFx0XHRcdGluZm8tXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9ORVRERVY7XG4xMDk1Olx0XHRcdH1cbjEwOTY6XHRcbjEwOTc6XHRcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4xMDk4Olx0XHRcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFO1xuMTA5OTpcdFxuMTEwMDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjExMDE6XHRcdFx0cmV0dXJuIGVycjtcbjExMDI6XHRcdH1cbjExMDM6XHRcbjExMDQ6XHRcdGVyciA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgXHUwMDI2aHdwcm92LVx1MDAzZWRlc2MpO1xuMTEwNTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xMTA2Olx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFRpbWVzdGFtcCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gSSBzZWUgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgY2FsbGluZyBgZXRodG9vbF9pbml0X3RzaW5mbyhpbmZvKWAuIENsYXNzaWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4mIzM0OyBJJiMzOTttIG5vdCBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHRoZSBjb2RlLCBidXQgdGhlIGZhY3QgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgYmVpbmcga2lja2VkIG9mZiBoZXJlIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMgaW4gbXkgbWluZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgY29tbW9uIGluaXRpYWxpemF0aW9uIHBhdGggb3IgYSBzcGVjaWZpYyBjb2RlIHBhdGg/IElzIHRoaXMgYSBvbmUtdGltZSB0aGluZyBvciBkb2VzIGBldGh0b29sX2luaXRfdHNpbmZvYCBnZXQgY2FsbGVkIHJlcGVhdGVkbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uLCBzbyB3aGF0IHN0YXRlIGFyZSB3ZSBwdXR0aW5nIHRoaXMgdGltZXN0YW1wIGluZm8gb2JqZWN0IGludG8/IEFyZSB3ZSBwcmUtZmlsbGluZyB3aXRoIHNhbmUgZGVmYXVsdHMsIGNoZWNraW5nIHRoZSBoYXJkd2FyZSYjMzk7cyBjYXBhYmlsaXRpZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgYGV0aHRvb2xfaW5pdF90c2luZm9gIHdpbGwgdGVsbCBtZSBleGFjdGx5IGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGF0LiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgaW5mb3JtIGhvdyB0byBkZWJ1ZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWF5IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTk6XHRzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuIDk2MDpcdHtcbiA5NjE6XHRcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiA5NjI6XHRcdGluZm8tXHUwMDNlY21kID0gRVRIVE9PTF9HRVRfVFNfSU5GTztcbiA5NjM6XHRcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gLTE7XG4gOTY0Olx0fVxuIDk2NTpcdFxuIDk2NjpcdGludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA5Njc6XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxuIDk2ODpcdFx0XHRcdFx0ICAgc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyX2Rlc2MgKmh3cHJvdl9kZXNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBwYXRoIHNlZW1zIHNvbGlkLiBUaGUgYGtlcm5lbF9pbmZvYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgYmVpbmcgcGFzc2VkIGFyb3VuZCwgYW5kIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UgY29tZXMgZnJvbSB0aGF0IGluaXRpYWxpemVkIG1lbW9yeS4gTm8gaXNzdWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byBgbnNpbV9nZXRfdHNfaW5mb2AuIEkgaW5pdGlhbGx5IHRob3VnaHQgSSBtaWdodCBmaW5kIGEgcHJvYmxlbSwgYnV0IGl0IGxvb2tzIGxpa2UgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gICppcyogY2FsbGVkLCBidXQgdGhlICBgX19ldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiBlbnN1cmVzIHRoZSBgaW5mb2AgaXMgemVyb2VkLCB3aGljaCBtZWFucyBgbnNpbV9nZXRfdHNfaW5mb2AgZG9lc24mIzM5O3QgbGVhayBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaW5hbGx5LCB3ZSBoYXZlIGBuc2ltX3N0YXJ0X3htaXRgLiBUaGlzIGlzIG1vcmUgY29tcGxleC4gSSYjMzk7bSBzY3J1dGluaXppbmcgdGhlIHBvdGVudGlhbCB1c2Ugb2YgYHJ4X3RzYC4gVGhlIGNvZGUgaGFzIHNldmVyYWwgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIGhhcmR3YXJlIHRpbWVzdGFtcGluZyAoYFNLQlRYX0hXX1RTVEFNUGApLCAgYHR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzOgoKKiAgIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgdGhlbiBgcnhfdHNgIGlzIGFzc2lnbmVkIGEgdmFsdWUgYmVmb3JlIGl0JiMzOTtzIHVzZWQgZWl0aGVyIGluc2lkZSB0aGUgYGlmIChwdHBfaW5mb190eClgIG9yIGluIHRoZSBgZWxzZSBpZiAocHRwX2luZm9fcngpYCBibG9ja3MuIFRoZSB0aW1pbmcgaXMgaW1wb3J0YW50LCBidXQgdGhlcmUgaXMgbm8gb2J2aW91cyByYWNlIGNvbmRpdGlvbiBzaW5jZSB0aGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIGV2YWx1YXRlZCBhdCBydW50aW1lLgoqICAgVGhlIHByb2JsZW1hdGljIHBhdGggSSBzYXcgd2FzIHdoZXJlIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgYnV0IGBsaWtlbHkocHRwX2luZm9fcngpYCBpcyBmYWxzZS4gIEkgaGFkIHRvIGRvdWJsZSBjaGVjaywgYnV0IGluIHRoaXMgY2FzZSwgYHJ4X3RzYCBpc24mIzM5O3QgdXNlZCBhdCBhbGwgaW4gYW55IGNhc2UuCiogICBTaW1pbGFybHkgZm9yIGB0eF90c2AsIGlmIHRoZSBgcHRwX2luZm9fdHhgIGNvbmRpdGlvbiBpcyBtZXQsIHRoZW4gaXQgaXMgYm90aCBpbml0aWFsaXplZCBhbmQgdXNlZCwgb3RoZXJ3aXNlLCBpdCBpcyBub3QgdXNlZC4KCkkgYmVsaWV2ZSBgc2hod3RzdGFtcHNgIGlzIGluaXRpYWxpemVkIHRvIGB7fWAuIEFuZCBhbHRob3VnaCBJIGFtIG5vdCBjZXJ0YWluIGlmIHBhZGRpbmcgaXMgYWRkZWQsIGl0IGlzIGluaXRpYWxpemVkIHdoaWNoIG1lYW5zIGFueSBhY2Nlc3Mgd2lsbCBub3QgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgoKVGh1cywgYG5zaW1fc3RhcnRfeG1pdGAgaXMgYWxzbyBzYWZlLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NDEwPXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZnJhZ19tdXN0X2xvb3Aoc3RydWN0IHBhZ2UgKnApXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjEtICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQ2MjpzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjMtXHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHNgOgoKKipEaXZpbmcgaW50byBgc2tiX3NoYXJlZF9od3RzdGFtcHNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyB0aW1lc3RhbXAgc3RydWN0dXJlLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhlIGBza19idWZmYCBpbnRlcm5hbHMsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGhhcmR3YXJlIHRpbWVzdGFtcHMuIFNvLCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgLCBodWg/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBwcm9iYWJseSBob2xkcyBzb21lIGNyaXRpY2FsIGluZm9ybWF0aW9uIGFib3V0IGhhcmR3YXJlLWdlbmVyYXRlZCB0aW1lc3RhbXBzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2tfYnVmZiwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGFuZCB0aGVyZWZvcmUgc2hhcmVkIGFjcm9zcyBjbG9uZWQgc2ticywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgb3B0aW1pemF0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGNvbnRhaW5zIGZpZWxkcyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIHRpbWVzdGFtcHMsIGxpa2UgaW5ncmVzcyBhbmQgZWdyZXNzLCBwZXJoYXBzIGZyb20gdmFyaW91cyBOSUNzIG9yIGhhcmR3YXJlIGJsb2Nrcy4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIHVzZXMgdGhpcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0aW1lc3RhbXBzIGFyZSBhY3R1YWxseSBwb3B1bGF0ZWQgYW5kIHRoZW4gcmVhZC4gSXMgaXQgYWNjZXNzZWQgYXRvbWljYWxseT8gV2hhdCBsb2NraW5nIGlzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzPyBVbmRlcnN0YW5kaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gaGVyZSBpcyBjcnVjaWFsLiBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJvdmlzaW9ucyB0byBoYW5kbGUgbWlzc2VkIG9yIGNvcnJ1cHRlZCB0aW1lc3RhbXBzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGRldmVsb3BlcnMgc3RydWN0dXJlZCB0aGlzIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIHNjYWxhYmlsaXR5LiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIG9yIGRyaXZlci1zcGVjaWZpYyBob29rcz8gVGltZSB0byBnZXQgaW50byBpdCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjI6XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xuIDQ2MzpcdFx0dW5pb24ge1xuIDQ2NDpcdFx0XHRrdGltZV90XHRod3RzdGFtcDtcbiA0NjU6XHRcdFx0dm9pZCAqbmV0ZGV2X2RhdGE7XG4gNDY2Olx0XHR9O1xuIDQ2NzpcdH07XG4gNDY4Olx0XG4gNDY5Olx0LyogRGVmaW5pdGlvbnMgZm9yIHR4X2ZsYWdzIGluIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKi9cbiA0NzA6XHRlbnVtIHtcbiA0NzE6XHRcdC8qIGdlbmVyYXRlIGhhcmR3YXJlIHRpbWUgc3RhbXAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgTGVha3MgaW4gUFRQIFRpbWVzdGFtcGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIChgc2tiX3NoYXJlZF9od3RzdGFtcHNgKSBpcyBqdXN0IGEgdW5pb24gb2YgYGt0aW1lX3RgIGFuZCBgdm9pZCAqYCwgYW5kIHNpbmNlIGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YCAocHJlc3VtYWJseSB6ZXJvZWQpLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBpbW1lZGlhdGUgbWVtb3J5IGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYG1vY2tfcGhjX2dldHRpbWU2NGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfbW9jay5jYC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBgdGltZWNvdW50ZXJfcmVhZGAgYW5kIHRoZW4gYG5zX3RvX3RpbWVzcGVjNjRgLCB3aGljaCBndWFyYW50ZWVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQ29uc2VxdWVudGx5LCBgdHhfdHNgIGFuZCBgcnhfdHNgIHNob3VsZCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGBtb2NrX3BoY19zZXR0aW1lNjRgIGZ1bmN0aW9uIGFsc28gYXBwZWFycyBzYWZlIGJhc2VkIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBGdXJ0aGVybW9yZSwgdGhlIGFkanVzdG1lbnRzIGZvciBgbW9ja19waGNfYWRqdGltZWAgYW5kIGBtb2NrX3BoY19hZGpmaW5lYCBqdXN0IGZpeCBsb2NraW5nIGZvciBpcnEgc2FmZXR5LCBub3QgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLgoKTXkgYXR0ZW50aW9uIHRoZW4gdHVybnMgdG8gdGhlIGNoYW5nZXMgaW4gYG5zaW1fc3RhcnRfeG1pdGAuIFRoZSBhZGRpdGlvbiBvZiBgcHRwLnB5YCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCBhbmQgYGNvbmZpZ2AgZmlsZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2AgY291bGQgaW50cm9kdWNlIHNvbWV0aGluZyB1bmV4cGVjdGVkLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMgZmlyc3QuCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIGBuc2ltX3N0YXJ0X3htaXRgIGxpbmUtYnktbGluZS4gVGhlIGNvZGUgYXBwZWFycyB0byBjYXB0dXJlIHRpbWVzdGFtcHMgKGB0eF90c2AsIGByeF90c2ApIHVzaW5nIGBnZXR0aW1lNjRgLiBJdCB0aGVuIGNvbnZlcnRzIGB0eF90c2AgdG8gYSBga3RpbWVfdGAgYW5kIGFzc2lnbnMgaXQgdG8gYHNoaHd0c3RhbXBzLmh3dHN0YW1wYC4gIGBza2JfdHN0YW1wX3R4YCBzZWVtcyB0byBiZSB0aGUgY3VscHJpdC4gSXQgY2xvbmVzIHRoZSBza2IgYW5kIHF1ZXVlcyBpdCB0byB0aGUgc29ja2V0JiMzOTtzIGVycm9yIHF1ZXVlLgoKTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQ6IGBza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7YCBjb3VsZCBiZSBvdmVyd3JpdGluZyBkYXRhLiAgSG93ZXZlciwgdGhpcyBsaW5lIHNldHMgYHNrYl9od3RzdGFtcHMoc2tiKS0mZ3Q7aHd0c3RhbXBgIHdoaWNoIHJlZmVycyB0byBhIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHNgIHdpdGhpbiB0aGUgU0tCJiMzOTtzIHNoYXJlZCBpbmZvLiAgQ3J1Y2lhbGx5LCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgIGlzIGEgdW5pb24gb2YgYSBga3RpbWVfdGAgKHVzZWQgZm9yIGBod3RzdGFtcGApIGFuZCBhIGB2b2lkICpuZXRkZXZfZGF0YWAuIFNpbmNlIGBod3RzdGFtcGAgaXMgYmVpbmcgc2V0LCB0aGUgZW50aXJlIHVuaW9uIGlzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBsZWFrLgoKTm93LCB0aGlzIGNvbmRpdGlvbmFsIGBpZiAoc2tiKWAgYWZ0ZXIgYHNrYl9jb3B5YCwgYW5kIHRoZSBgZWxzZWAgc3RhdGVtZW50IHNldHRpbmcgYHNrYiA9IHNrYl9vcmlnYC4gIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gb2YgYHNrYl90c3RhbXBfdHhgLiBEb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCB0aGUgU0tCJiMzOTtzIHRpbWVzdGFtcGluZyBkYXRhPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNrYl90c3RhbXBfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NTY1MT1zdGF0aWMgYm9vbCBza2JfdHN0YW1wX3R4X3JlcG9ydF9zb190aW1lc3RhbXBpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NjY5LVxubmV0L2NvcmUvc2tidWZmLmM6NTY3MDpzdGF0aWMgdm9pZCBza2JfdHN0YW1wX3R4X3JlcG9ydF9icGZfdGltZXN0YW1waW5nKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy01NjcxLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTc2MT1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl90c3RhbXBfdHgpO1xubmV0L2NvcmUvc2tidWZmLmMtNTc2Mi1cbm5ldC9jb3JlL3NrYnVmZi5jOjU3NjM6dm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjQtXHRcdCAgIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNrYl90c3RhbXBfdHhgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgY29kZSBmb3IgYHNrYl90c3RhbXBfdHhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIGFib3V0IHRpbWVzdGFtcGluZyB0cmFuc21pdHRlZCBTS0JzLiYjMzQ7IEtub3dpbmcgdGhlIGtlcm5lbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW50cmljYWNpZXMuIElzIHRoaXMgaGFyZHdhcmUgdGltZXN0YW1waW5nPyBTb2Z0d2FyZT8gV2hlcmUgZXhhY3RseSBpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGggaXMgdGhpcyB0aW1lc3RhbXBpbmcgaGFwcGVuaW5nPyBJcyBpdCBiZWluZyBkb25lIGluc2lkZSB0aGUgZHJpdmVyLCBpbiB0aGUgbmV0d29yayBzdGFjaywgb3IgcGVyaGFwcyBpbiB0aGUgaGFyZHdhcmUgaXRzZWxmPyBJIG5lZWQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHRpbWVyIHNvdXJjZSB1c2VkIGFuZCB0aGUgcHJlY2lzaW9uIHJlcXVpcmVtZW50cyB0byBnZXQgYSBmZWVsIGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIHdvbmRlciBpZiB0aGlzIGlzIHRpZWQgdG8gc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzIG9yIGlzIGEgbW9yZSBnZW5lcmljIGZhY2lsaXR5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZT8gRG9lcyB0aW1lc3RhbXBpbmcgYWRkIHNpZ25pZmljYW50IG92ZXJoZWFkIHRvIHRyYW5zbWlzc2lvbj8gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgdXNlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRpbWVzdGFtcCByZXRyaWV2YWwuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGluIHBsYWNlLCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVycyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUga2V5IGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHByb3ZpZGluZyBhY2N1cmF0ZSB0cmFuc21pc3Npb24gdGltZSBpbmZvcm1hdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NjM6XHR2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxuNTc2NDpcdFx0XHQgICBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcylcbjU3NjU6XHR7XG41NzY2Olx0XHRyZXR1cm4gX19za2JfdHN0YW1wX3R4KG9yaWdfc2tiLCBOVUxMLCBod3RzdGFtcHMsIG9yaWdfc2tiLVx1MDAzZXNrLFxuNTc2NzpcdFx0XHRcdCAgICAgICBTQ01fVFNUQU1QX1NORCk7XG41NzY4Olx0fVxuNTc2OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl90c3RhbXBfdHgpO1xuNTc3MDpcdFxuNTc3MTpcdCNpZmRlZiBDT05GSUdfV0lSRUxFU1NcbjU3NzI6XHR2b2lkIHNrYl9jb21wbGV0ZV93aWZpX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFja2VkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NgoJCQkJCQkJb3V0cHV0OiA0NzIKCQkJCQkJCXRob3VnaHRzOiAzMDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhhcmR3YXJlIFRpbWVzdGFtcGluZyBpbiBgbmV0ZGV2c2ltYDogQSBUaG9yb3VnaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBfX3NrYl90c3RhbXBfdHhgIHNlZW1zIGhhcm1sZXNzLiBJdCBjbG9uZXMgdGhlIFNLQiBhbmQgcXVldWVzIGl0LCBidXQgdGhlIG9yaWdpbmFsIFNLQiByZW1haW5zIHVudG91Y2hlZCwgd2hpY2ggaXMgZmluZS4gVGhlbiwgbW9kaWZ5aW5nIGBza2JfaHd0c3RhbXBzKHNrYiktJmd0O2h3dHN0YW1wYCBpcyBzdHJhaWdodGZvcndhcmQ7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgY29weSBvciB0aGUgb3JpZ2luYWwgU0tCLCBhbmQgdGhlIHRpbWVzdGFtcCBpcyBiZWluZyBzZXQgaW4gYSBjb250cm9sbGVkIG1hbm5lci4gTm8gcHJvYmxlbXMgdGhlcmUuCgpOZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBsZWFrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgcmV2aXNpdCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSSByZWNhbGwgdGhlIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AgYmVpbmcgemVyb2VkIG9uIGFsbG9jYXRpb24uIE5vdywgYGRldl9nZXRfaHd0c3RhbXBgIGluaXRpYWxpemVzIGEgbG9jYWwgYGtlcm5lbF9jZmdgIHRvIGB7fWAgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIG92ZXJ3cml0ZSBwYXJ0cyBvZiBpdCBsb29rIHNhZmUgYmVjYXVzZSBgbnMtJmd0O3RzdGFtcF9jb25maWdgJiMzOTtzIHJlbGV2YW50IGZpZWxkcyBhcmUgZWl0aGVyIGluaXRpYWxpemVkIG9yIG5vdCB1c2VkLiBJJiMzOTt2ZSB0byBkb3VibGUtY2hlY2sgYGNvcHlfdG9fdXNlcmAuIEl0IGNvcGllcyB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZnJvbSBga2VybmVsX2NmZ2AsIGFuZCB0aGUgZGVzdGluYXRpb24gc3RydWN0LCBgY2ZnYCwgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgc2l6ZSBpcyBvbmx5IDEyIGJ5dGVzIGFuZCBgY29weV90b191c2VyYCBjb3BpZXMgZXhhY3RseSB0aGF0LCBhbmQgdGh1cyBubyBpc3N1ZXMgd2l0aCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4KCk5vdywgaG9sZCBvbi4gV2hhdCBhYm91dCBwYWRkaW5nIHdpdGhpbiBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgPyBUaGlzIHN0cnVjdCBpcyBpbnRlcm5hbCB0byB0aGUga2VybmVsLCBhbmQgZXZlbiBpZiB0aGVyZSAqd2FzKiB1bmluaXRpYWxpemVkIHBhZGRpbmcsIGl0IGlzbiYjMzk7dCBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZS4gT25seSB0aGUgc21hbGxlciwgY2xlYXJseSBkZWZpbmVkIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCBpcyBjb3BpZWQgYW5kIGlzIGZpbmUuIFNvLCBzdGlsbCBnb29kLgoKQWxyaWdodCwgbW92aW5nIG9uIHRvIGBuc2ltX3NldF90c19jb25maWdgLCBpdCB1cGRhdGVzIGBucy0mZ3Q7dHN0YW1wX2NvbmZpZ2AmIzM5O3MgYHR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYCBpbiBhIGNvbnRyb2xsZWQgd2F5LCBhbmQgc2luY2Ugd2UgdXBkYXRlIGJvdGggc3RydWN0cyBhdG9taWNhbGx5LCBpdCBzZWVtcyBzYWZlLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgcGl0ZmFsbHMuIGBtb2NrX3BoY19hZGpmaW5lYCwgZXRjLiwgaW4gYHB0cF9tb2NrLmNgIG9ubHkgY2hhbmdlIHNwaW5sb2NrcyB0byB0aGVpciBpcnFzYXZlIGNvdW50ZXJwYXJ0cywgc28gdGhlc2UgYXJlIGxvY2tpbmcgY2hhbmdlcyBhbmQgbm90IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkmIzM5O20gZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGhlcmUuCgpOb3csIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIHNhZmU7IGl0IHNpbXBseSByZXR1cm5zIGEgcG9pbnRlciB0byBgcGhjLSZndDtpbmZvYC4gTm8gbWFnaWMsIG5vIG1lbW9yeSBpc3N1ZXMuCgpIb3cgYWJvdXQgYG5zaW1fc3RhcnRfeG1pdGA/IFRoYXQgc2VlbXMgZmluZTsgaXQgdXNlcyBgcHRwX2luZm9fdHhgIGFmdGVyIGNoZWNraW5nIGBTS0JUWF9IV19UU1RBTVBgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNhZmV0eSBvZiBgc2tiX2NvcHlgIHdoaWNoIGlzIGNydWNpYWwsIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggaXQ6IGlmIHRoZSBjb3B5IHN1Y2NlZWRzLCB0aGUgb3JpZ2luYWwgU0tCIGlzIGNvbnN1bWVkLCBhbmQgdGhlIHRpbWVzdGFtcCBpcyBzZXQgb24gdGhlIG5ldyBjb3B5IHVzaW5nIGBza2JfaHd0c3RhbXBzKClgLiBUaGlzIGxvb2tzIHNhZmUuIFRoZSBuZXcgU0tCIGlzIHRoZW4gZm9yd2FyZGVkLCBhcyBpdCBzaG91bGQgYmUuIE5vIGlzc3VlcyB0aGVyZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkYXRhIHJhY2VzLCBzbyBsZXQmIzM5O3MgY2hlY2sgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gYG5zLSZndDt0c3RhbXBfY29uZmlnYCwgYW5kIHRoZSB1c2Ugb2YgdGhlc2UgaXMgZmluZSBiZWNhdXNlIHRoZXkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVyLgoKSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYHNoaHd0c3RhbXBzYCBhbmQgYHR4X3RzYCwgYHJ4X3RzYCBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9O2AgbGluZSB6ZXJvLWluaXRpYWxpemVzIHRoaXMgc3RydWN0LiBTYWZlLgoKTm93LCBhYm91dCBgdHhfdHNgIGFuZCBgcnhfdHNgIEkgbmVlZCB0byByZXZpZXcgdGhpcy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBgcHRwX2luZm9fdHgtJmd0O2dldHRpbWU2NGAgYW5kIGBwdHBfaW5mb19yeC0mZ3Q7Z2V0dGltZTY0YCBmdW5jdGlvbnMuIElmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgdGhlbiBgdHhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgYHB0cF9pbmZvX3J4YCBpcyB0cnVlLCB0aGVuIGByeF90c2AgaXMgYWx3YXlzIGluaXRpYWxpemVkIGFuZCB1c2VkLiBJZiBub3QsIGl0IGlzIHVudXNlZC4KCldhaXQgYSBzZWNvbmQuIFdoYXQgaWYgYHB0cF9pbmZvX3R4LSZndDtnZXR0aW1lNjRgIGZhaWxzPyBJIHJlbWVtYmVyIHRoYXQgdGhlIGBnZXR0aW1lNjRgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBhbmQgdGhlIG1vY2sgaW1wbGVtZW50YXRpb24gaW4gYHB0cF9tb2NrLmNgIGFsd2F5cyByZXR1cm4gMCwgaW5pdGlhbGl6aW5nIHRoZSBgdHNgIHBhcmFtZXRlci4gUGx1cywgYHB0cF9pbmZvX3R4YCBhbHdheXMgY2FsbHMgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFNvIHRoZSB0aW1lc3RhbXBpbmcgYWx3YXlzIGluaXRpYWxpc2VzIHByb3Blcmx5LgoKRmluYWxseSwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYG5zaW1fZ2V0X3RzX2luZm9gIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYC4gSW4gYG5zaW1fZ2V0X3RzX2luZm9gLCBgaW5mb2AgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuIFNvIGFsc28gc2FmZS4gQW5kIGluCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXG5cbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgdG8gdGhlIHByb3ZpZGVkIGBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYC4gVGhlIGBuZXRkZXZzaW1gIHByaXZhdGUgc3RydWN0dXJlIGlzIHplcm8tYWxsb2NhdGVkIHZpYSBgYWxsb2NfbmV0ZGV2X21xYCwgc28gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cbjMuIEluIGBuc2ltX3N0YXJ0X3htaXRgLCBsb2NhbCB2YXJpYWJsZXMgYHR4X3RzYCBhbmQgYHJ4X3RzYCBhcmUgb25seSB1c2VkIGlmIHRoZWlyIHJlc3BlY3RpdmUgYHB0cF9pbmZvX3R4YCBhbmQgYHB0cF9pbmZvX3J4YCBwb2ludGVycyBhcmUgbm9uLU5VTEwuIFdoZW4gbm9uLU5VTEwsIHRoZXkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGUgYHNoaHd0c3RhbXBzYCBzdHJ1Y3QgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7fWApLlxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXG5cblNpbmNlIGFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxuXG5BbmFseXNpcyBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUga2VybmVsIHRoZW4gY29waWVzIG9ubHkgdGhlIGBmbGFnc2AsIGB0eF90eXBlYCwgYW5kIGByeF9maWx0ZXJgIGZpZWxkcyB0byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCAod2hpY2ggaGFzIG5vIHBhZGRpbmcpIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cbjQuIFRoZSBjaGFuZ2VzIGluIGBwdHBfbW9jay5jYCBhZGRyZXNzIGEgbG9ja2luZyBjb250ZXh0IGlzc3VlIChjaGFuZ2luZyBgc3Bpbl9sb2NrYCB0byBgc3Bpbl9sb2NrX2lycXNhdmVgKSwgd2hpY2ggaXMgYSBjb25jdXJyZW5jeSBidWcgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ2OjQ1LjkxNDM0MTc5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDU4MzMxMTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciBhbmQgZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIHB0cF9tb2NrLmMgYnkgc3dpdGNoaW5nIHRvIGlycS1zYWZlIHNwaW5sb2Nrcy4gXFxuXFxuQW5hbHlzaXMgb2YgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIGBuc2ltX2dldF90c19jb25maWdgIGNvcGllcyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIHRvIHRoZSBwcm92aWRlZCBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AuIFRoZSBgbmV0ZGV2c2ltYCBwcml2YXRlIHN0cnVjdHVyZSBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGFsbG9jX25ldGRldl9tcWAsIHNvIGBucy1cXHUwMDNldHN0YW1wX2NvbmZpZ2AgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGtlcm5lbCB0aGVuIGNvcGllcyBvbmx5IHRoZSBgZmxhZ3NgLCBgdHhfdHlwZWAsIGFuZCBgcnhfZmlsdGVyYCBmaWVsZHMgdG8gYSBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgKHdoaWNoIGhhcyBubyBwYWRkaW5nKSBiZWZvcmUgY29weWluZyB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuXFxuMi4gYG5zaW1fZ2V0X3RzX2luZm9gIG1vZGlmaWVzIGEgYGtlcm5lbF9ldGh0b29sX3RzX2luZm9gIHN0cnVjdC4gVGhpcyBzdHJ1Y3QgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY2FsbGVyIChgX19ldGh0b29sX2dldF90c19pbmZvYCB2aWEgYGV0aHRvb2xfaW5pdF90c2luZm9gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIFRoZSByZXN1bHRpbmcgYGV0aHRvb2xfdHNfaW5mb2AgY29waWVkIHRvIHVzZXIgc3BhY2UgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC5cXG4zLiBJbiBgbnNpbV9zdGFydF94bWl0YCwgbG9jYWwgdmFyaWFibGVzIGB0eF90c2AgYW5kIGByeF90c2AgYXJlIG9ubHkgdXNlZCBpZiB0aGVpciByZXNwZWN0aXZlIGBwdHBfaW5mb190eGAgYW5kIGBwdHBfaW5mb19yeGAgcG9pbnRlcnMgYXJlIG5vbi1OVUxMLiBXaGVuIG5vbi1OVUxMLCB0aGV5IGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgbW9ja19waGNfZ2V0dGltZTY0YC4gVGhlIGBzaGh3dHN0YW1wc2Agc3RydWN0IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0ge31gKS5cXG40LiBUaGUgY2hhbmdlcyBpbiBgcHRwX21vY2suY2AgYWRkcmVzcyBhIGxvY2tpbmcgY29udGV4dCBpc3N1ZSAoY2hhbmdpbmcgYHNwaW5fbG9ja2AgdG8gYHNwaW5fbG9ja19pcnFzYXZlYCksIHdoaWNoIGlzIGEgY29uY3VycmVuY3kgYnVnIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi5cXG5cXG5TaW5jZSBhbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gSXQgaW1wbGVtZW50cyBuZG9faHd0c3RhbXBfZ2V0IGFuZCBuZG9faHd0c3RhbXBfc2V0IG9wZXJhdGlvbnMsIGFuZCBtb2RpZmllcyB0aGUgVFggcGF0aCB0byBjYXB0dXJlIGFuZCByZXR1cm4gaGFyZHdhcmUgdGltZXN0YW1wcyB1c2luZyB0aGUgbW9ja19waGMgKFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrKS4gSXQgYWxzbyB1cGRhdGVzIG1vY2tfcGhjIHRvIHVzZSBJUlEtc2FmZSBzcGlubG9ja3MuIFRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyByZWFjaGFibGUgY29udHJvbCBhbmQgZGF0YSBwYXRocyBpbiBuZXRkZXZzaW0gYW5kIHB0cF9tb2NrIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgZXRodG9vbCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDY6NDUuOTE0MzUyNjI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxMTQxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjc2NTJhZTU2MTQ3ZjY2NjM1ZGUxODNmYTllMjE5YjA3ZDMyOGYxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xcbmluZGV4IDAyNWVhNzk4NzlmM2EuLjYyODg3OGFjZDE1OGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmNcXG5AQCAtMjAwLDcgKzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbitcXHRldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7XFxuK1xcbiBcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cXHUwMDNlcGhjKTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXBoY19pbmRleCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxcbitcXHRcXHRcXHRcXHQgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTtcXG4rXFxuK1xcdGluZm8tXFx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pO1xcbitcXHRpbmZvLVxcdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbmluZGV4IDRlOWQ3ZTEwYjUyN2UuLjdhMjY4YTFhNTQ1NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXFxuQEAgLTMwLDYgKzMwLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC91ZHBfdHVubmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYnVzeV9wb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lY291bnRlci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm5ldGRldnNpbS5oXFxcIlxcbiBcXG5AQCAtMTIyLDEyICsxMjQsMTggQEAgc3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuIFxcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fdHggPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3J4ID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2Jfb3JpZyA9IHNrYjtcXG4gXFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcl9kZXY7XFxuIFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IG5ldGRldnNpbSAqcGVlcl9ucztcXG4gXFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcXG4rXFx0aW50IHJ4X2ZpbHRlciwgdHhfdHlwZTtcXG4gXFx0c3RydWN0IG5zaW1fcnEgKnJxO1xcbiBcXHRpbnQgcnhxO1xcbiBcXHRpbnQgZHI7XFxuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2JfbGluZWFyaXplKHNrYik7XFxuIFxcbiBcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuK1xcdHJ4X2ZpbHRlciA9IFJFQURfT05DRShwZWVyX25zLVxcdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XFxuK1xcdHR4X3R5cGUgPSBSRUFEX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XFxuK1xcbitcXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxcbitcXHRcXHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVxcdTAwM2VwaGMpO1xcbitcXG4rXFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pXFxuK1xcdFxcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVxcdTAwM2VwaGMpO1xcbitcXG4rXFx0LyogSWYgVFggaGFyZHdhcmUgdGltZXN0YW1waW5nIGlzIGVuYWJsZWQsIHNhbXBsZSBvdXIgUEhDIGFuZCByZXBvcnRcXG4rXFx0ICogdGhlIFRYIHRpbWVzdGFtcCBiYWNrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHB0cF9pbmZvX3R4KSB7XFxuK1xcdFxcdC8qIENhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGFzIGNsb3NlIHRvIGVhY2ggb3RoZXJcXG4rXFx0XFx0ICogZm9yIGJldHRlciBhY2N1cmFjeVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cHRwX2luZm9fdHgtXFx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXFx1MDAyNnR4X3RzKTtcXG4rXFx0XFx0aWYgKGxpa2VseShwdHBfaW5mb19yeCkpXFxuK1xcdFxcdFxcdHB0cF9pbmZvX3J4LVxcdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFxcdTAwMjZyeF90cyk7XFxuK1xcdFxcdHNoaHd0c3RhbXBzLmh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZSh0eF90cyk7XFxuK1xcdFxcdHNrYl90c3RhbXBfdHgoc2tiX29yaWcsIFxcdTAwMjZzaGh3dHN0YW1wcyk7XFxuK1xcbitcXHRcXHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXFxuK1xcdFxcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcXG4rXFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXFxuK1xcdFxcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoc2tiKVxcbitcXHRcXHRcXHRjb25zdW1lX3NrYihza2Jfb3JpZyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2tiID0gc2tiX29yaWc7XFxuK1xcdH0gZWxzZSBpZiAocHRwX2luZm9fcngpIHtcXG4rXFx0XFx0cHRwX2luZm9fcngtXFx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXFx1MDAyNnJ4X3RzKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHB0cF9pbmZvX3J4KVxcbitcXHRcXHRza2JfaHd0c3RhbXBzKHNrYiktXFx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBza2IsIHJxLCBwc3BfZXh0KSA9PSBORVRfUlhfRFJPUCkpXFxuIFxcdFxcdGdvdG8gb3V0X2Ryb3BfY250O1xcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBuc2ltX3NldF90c19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IHJ4X2ZpbHRlcjtcXG4rXFxuK1xcdGlmICghbnMtXFx1MDAzZXBoYylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuK1xcdFxcdFdSSVRFX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT0ZGKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdFxcdFdSSVRFX09OQ0UobnMtXFx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSwgSFdUU1RBTVBfVFhfT04pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2VyeF9maWx0ZXIpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcXG4rXFx0XFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0V1JJVEVfT05DRShucy1cXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XFxuK1xcdGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0KmNvbmZpZyA9IG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuc2ltX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuQEAgLTY0Nyw2ICs3NTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb192bGFuX3J4X2FkZF92aWRcXHQ9IG5zaW1fdmxhbl9yeF9hZGRfdmlkLFxcbiBcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcXHQ9IG5zaW1fdmxhbl9yeF9raWxsX3ZpZCxcXG4gXFx0Lm5ldF9zaGFwZXJfb3BzXFx0XFx0PSBcXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxcbitcXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxcbitcXHQubmRvX2h3dHN0YW1wX3NldFxcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDY0Zjc3ZjkzZDkzN2MuLjVjZGQxZTI5NDQ0NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTEwOCw2ICsxMDgsNyBAQCBzdHJ1Y3QgbmV0ZGV2c2ltIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcXG4gXFx0c3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQ7XFxuK1xcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIHRzdGFtcF9jb25maWc7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xcbiBcXHRzdHJ1Y3QgbnNpbV9ycSAqKnJxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX21vY2suYyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcXG5pbmRleCA0ZDY2YjYxNDcxMjEwLi43YTRlNWYzMjc0YTY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfbW9jay5jXFxuQEAgLTQ5LDE1ICs0OSwxNiBAQCBzdGF0aWMgdTY0IG1vY2tfcGhjX2NjX3JlYWQoc3RydWN0IGN5Y2xlY291bnRlciAqY2MpXFxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzNjQgYWRqO1xcbiBcXG4gXFx0YWRqID0gKHM2NClzY2FsZWRfcHBtIFxcdTAwM2NcXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XFxuIFxcdGFkaiA9IGRpdl9zNjQoYWRqLCBNT0NLX1BIQ19GQURKX0RFTk9NSU5BVE9SKTtcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR0aW1lY291bnRlcl9yZWFkKFxcdTAwMjZwaGMtXFx1MDAzZXRjKTtcXG4gXFx0cGhjLVxcdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBoYy1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjUsMTAgKzY2LDExIEBAIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4gc3RhdGljIGludCBtb2NrX3BoY19hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRzcGluX2xvY2soXFx1MDAyNnBoYy1cXHUwMDNlbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0dGltZWNvdW50ZXJfYWRqdGltZShcXHUwMDI2cGhjLVxcdTAwM2V0YywgZGVsdGEpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuIFxcdHU2NCBucyA9IHRpbWVzcGVjNjRfdG9fbnModHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdHRpbWVjb3VudGVyX2luaXQoXFx1MDAyNnBoYy1cXHUwMDNldGMsIFxcdTAwMjZwaGMtXFx1MDAzZWNjLCBucyk7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwaGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTg5LDExICs5MiwxMiBAQCBzdGF0aWMgaW50IG1vY2tfcGhjX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHU2NCBucztcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBoYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXFx1MDAyNnBoYy1cXHUwMDNldGMpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGhjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHQqdHMgPSBuc190b190aW1lc3BlYzY0KG5zKTtcXG4gXFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2Rlc3Ryb3kpO1xcbiBcXG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjZwaGMtXFx1MDAzZWluZm87XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0cF9tb2NrLmhcXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XFxuIHN0cnVjdCBtb2NrX3BoYyAqbW9ja19waGNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIHZvaWQgbW9ja19waGNfZGVzdHJveShzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuK3N0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKTtcXG4gXFxuICNlbHNlXFxuIFxcbkBAIC0zMyw2ICszNCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYylcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9QVFBfTU9DS19IXyAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXFxuaW5kZXggZDViZjRjYjYzOGE4Yy4uMThiYjdjNjkzYjY5YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXFxuQEAgLTE5LDYgKzE5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdG5ldHBvbGxfYmFzaWMucHkgXFxcXFxcbiBcXHRwaW5nLnB5IFxcXFxcXG4gXFx0cHNwLnB5IFxcXFxcXG4rXFx0cHRwLnB5IFxcXFxcXG4gXFx0cXVldWVzLnB5IFxcXFxcXG4gXFx0cmluZ19yZWNvbmZpZy5weSBcXFxcXFxuIFxcdHNoYXBlci5weSBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XFxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxcbiBDT05GSUdfUFBQPXlcXG4gQ09ORklHX1BQUE9FPXlcXG4rQ09ORklHX1BUUF8xNTg4X0NMT0NLX01PQ0s9eVxcbiBDT05GSUdfVkxBTl84MDIxUT1tXFxuIENPTkZJR19YRFBfU09DS0VUUz15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3B0cC5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wdHAucHlcXG5AQCAtMCwwICsxLDgyIEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBCeSBNYWNpZWsgTWFjaG5pa293c2tpIFxcdTAwM2NtYWNpZWtAbWFjaG5pa293c2tpLm5ldFxcdTAwM2UgKGMpIDIwMjYsXFxuK1xcbitcXFwiXFxcIlxcXCJcXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXFxuK1xcbitTdGFydCBhIHB0cDRsIGxlYWRlciBhbmQgZm9sbG93ZXIgYW5kIGNoZWNrIHRoYXQgdGhlIGZvbGxvd2VyIGxvY2tzIG9udG8gdGhlXFxuK2xlYWRlciAoc3RhdGUgczIpXFxuK1xcXCJcXFwiXFxcIlxcbitcXG4raW1wb3J0IHRpbWVcXG4rXFxuK2Zyb20gbGliLnB5IGltcG9ydCAoXFxuKyAgICBOZXREcnZFcEVudixcXG4rICAgIGJrZyxcXG4rICAgIGZkX3JlYWRfdGltZW91dCxcXG4rICAgIGtzZnRfZXhpdCxcXG4rICAgIGtzZnRfcHIsXFxuKyAgICBrc2Z0X3J1bixcXG4rICAgIGtzZnRfdHJ1ZSxcXG4rKVxcbitcXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcXG4rXFxuK1xcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSZWFkIHRoZSBmb2xsb3dlciBzdGRvdXQgcGlwZSB1bnRpbCBwdHA0bCByZXBvcnRzIHN5bmMgc3RhdGUgczIuXFxuK1xcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBmZF9maWxlID0gZm9sbG93ZXIucHJvYy5zdGRvdXRcXG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxcbisgICAgYnVmID0gYlxcXCJcXFwiXFxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XFxuKyAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIFxcdTAwM2MgZGVhZGxpbmU6XFxuKyAgICAgICAgaWYgYlxcXCIgczIgXFxcIiBpbiBidWY6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIGNodW5rID0gZmRfZmlsZS5yZWFkKClcXG4rICAgICAgICAgICAgaWYgY2h1bms6XFxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxcbisgICAgICAgICAgICBidWYgKz0gZmRfcmVhZF90aW1lb3V0KGZkLCBtaW4oMSwgcmVtYWluaW5nKSlcXG4rICAgICAgICBleGNlcHQgVGltZW91dEVycm9yOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgcmV0dXJuIGJcXFwiIHMyIFxcXCIgaW4gYnVmLCBidWYuZGVjb2RlKFxcXCJ1dGYtOFxcXCIsIFxcXCJyZXBsYWNlXFxcIilcXG4rXFxuK1xcbitkZWYgcHRwX3N5bmNfdGVzdChjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiVmVyaWZ5IHB0cDRsIGxlYWRlci9mb2xsb3dlciBzeW5jaHJvbml6YXRpb24gcmVhY2hlcyBzdGF0ZSBzMi5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcXFwicHRwNGxcXFwiLCByZW1vdGU9VHJ1ZSlcXG4rXFxuKyAgICBsZWFkZXJfY21kID0gZlxcXCJwdHA0bCAtaSB7Y2ZnLnJlbW90ZV9pZm5hbWV9IC1tIC0yXFxcIlxcbisgICAgZm9sbG93ZXJfY21kID0gZlxcXCJwdHA0bCAtaSB7Y2ZnLmlmbmFtZX0gLW0gLXMgLTJcXFwiXFxuK1xcbisgICAgd2l0aCBia2cobGVhZGVyX2NtZCwgaG9zdD1jZmcucmVtb3RlKSwgXFxcXFxcbisgICAgICAgICBia2coZm9sbG93ZXJfY21kKSBhcyBmb2xsb3dlcjpcXG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcXG4rXFxuKyAgICBpZiBzeW5jZWQ6XFxuKyAgICAgICAgcmV0dXJuXFxuK1xcbisgICAga3NmdF9wcihmXFxcInB0cDRsIGZvbGxvd2VyIGRpZCBub3QgcmVhY2ggbG9ja2VkIHN0YXRlIChzMikgd2l0aGluIFxcXCJcXG4rICAgICAgICAgICAgZlxcXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcXFwiKVxcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFxcXCJcXFxcblxcXCIpWy0xMDpdXFxuKyAgICBrc2Z0X3ByKFxcXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcXFwiICsgXFxcIiB8IFxcXCIuam9pbih0YWlsKSlcXG4rICAgIGtzZnRfdHJ1ZShGYWxzZSwgXFxcIlBUUCBzeW5jIHRpbWVvdXRcXFwiKVxcbitcXG4rXFxuK2RlZiBtYWluKCk6XFxuKyAgICBcXFwiXFxcIlxcXCJSdW4ga3NmdCB0ZXN0cy5cXFwiXFxcIlxcXCJcXG4rICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcXG4rICAgICAgICBrc2Z0X3J1bihbcHRwX3N5bmNfdGVzdF0sIGFyZ3M9KGNmZywgKSlcXG4rICAgIGtzZnRfZXhpdCgpXFxuK1xcbitcXG4raWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIG1haW4oKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Njo0Ny4zMTY0NzM1MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MjI5MzczMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5pbmRleCAwMjVlYTc5ODc5ZjNhLi42Mjg4NzhhY2QxNThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuQEAgLTIwMCw3ICsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0ZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xuK1xuIFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cdTAwM2VwaGMpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTtcbitcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0zMCw2ICszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIm5ldGRldnNpbS5oXCJcbiBcbkBAIC0xMjIsMTIgKzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldixcbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9vcmlnID0gc2tiO1xuIFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zO1xuIFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcbitcdGludCByeF9maWx0ZXIsIHR4X3R5cGU7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqcnE7XG4gXHRpbnQgcnhxO1xuIFx0aW50IGRyO1xuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4rXHRyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy1cdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XG4rXHR0eF90eXBlID0gUkVBRF9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XG4rXG4rXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuK1x0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG4rXG4rXHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbitcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbitcbitcdC8qIElmIFRYIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBpcyBlbmFibGVkLCBzYW1wbGUgb3VyIFBIQyBhbmQgcmVwb3J0XG4rXHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4rXHQgKi9cbitcdGlmIChwdHBfaW5mb190eCkge1xuK1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4rXHRcdCAqIGZvciBiZXR0ZXIgYWNjdXJhY3lcbitcdFx0ICovXG4rXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuK1x0XHRpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSlcbitcdFx0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbitcdFx0c2tiX3RzdGFtcF90eChza2Jfb3JpZywgXHUwMDI2c2hod3RzdGFtcHMpO1xuK1xuK1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXG4rXHRcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcbitcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4rXHRcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiKVxuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYl9vcmlnKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYiA9IHNrYl9vcmlnO1xuK1x0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuK1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdH1cbitcbitcdGlmIChwdHBfaW5mb19yeClcbitcdFx0c2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XG4rXG4gXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxuIFx0XHRcdFx0ICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKVxuIFx0XHRnb3RvIG91dF9kcm9wX2NudDtcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0aW50IHJ4X2ZpbHRlcjtcbitcbitcdGlmICghbnMtXHUwMDNlcGhjKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09OKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTlRQX0FMTDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XG4rXHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgKzc1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gbnNpbV92bGFuX3J4X2FkZF92aWQsXG4gXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gbnNpbV92bGFuX3J4X2tpbGxfdmlkLFxuIFx0Lm5ldF9zaGFwZXJfb3BzXHRcdD0gXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxuK1x0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuK1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiArMTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcbiBcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuK1x0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xuIFx0c3RydWN0IG5zaW1fcnEgKipycTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuaW5kZXggNGQ2NmI2MTQ3MTIxMC4uN2E0ZTVmMzI3NGE2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbkBAIC00OSwxNSArNDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHM2NCBhZGo7XG4gXG4gXHRhZGogPSAoczY0KXNjYWxlZF9wcG0gXHUwMDNjXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XG4gXHRhZGogPSBkaXZfczY0KGFkaiwgTU9DS19QSENfRkFESl9ERU5PTUlOQVRPUik7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbiBcdHBoYy1cdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NSwxMCArNjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfYWRqdGltZShcdTAwMjZwaGMtXHUwMDNldGMsIGRlbHRhKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2luaXQoXHUwMDI2cGhjLVx1MDAzZXRjLCBcdTAwMjZwaGMtXHUwMDNlY2MsIG5zKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSArOTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTY0IG5zO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdCp0cyA9IG5zX3RvX3RpbWVzcGVjNjQobnMpO1xuIFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcbiBcbitzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbit7XG4rXHRyZXR1cm4gXHUwMDI2cGhjLVx1MDAzZWluZm87XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XG4gc3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIFxuICNlbHNlXG4gXG5AQCAtMzMsNiArMzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5pbmRleCBkNWJmNGNiNjM4YThjLi4xOGJiN2M2OTNiNjlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5AQCAtMTksNiArMTksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRwb2xsX2Jhc2ljLnB5IFxcXG4gXHRwaW5nLnB5IFxcXG4gXHRwc3AucHkgXFxcbitcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXG4gQ09ORklHX1BQUD15XG4gQ09ORklHX1BQUE9FPXlcbitDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DSz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5AQCAtMCwwICsxLDgyIEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgXHUwMDNjbWFjaWVrQG1hY2huaWtvd3NraS5uZXRcdTAwM2UgKGMpIDIwMjYsXG4rXG4rXCJcIlwiXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXG4rXG4rU3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuK2xlYWRlciAoc3RhdGUgczIpXG4rXCJcIlwiXG4rXG4raW1wb3J0IHRpbWVcbitcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxuKyAgICBOZXREcnZFcEVudixcbisgICAgYmtnLFxuKyAgICBmZF9yZWFkX3RpbWVvdXQsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbispXG4rXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcbitcbitcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XG4rICAgIFwiXCJcIlJlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi5cbitcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxuKyAgICBcIlwiXCJcbisgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxuKyAgICBidWYgPSBiXCJcIlxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XG4rICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgXHUwMDNjIGRlYWRsaW5lOlxuKyAgICAgICAgaWYgYlwiIHMyIFwiIGluIGJ1ZjpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgY2h1bmsgPSBmZF9maWxlLnJlYWQoKVxuKyAgICAgICAgICAgIGlmIGNodW5rOlxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxuKyAgICAgICAgICAgIGJ1ZiArPSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuKyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICByZXR1cm4gYlwiIHMyIFwiIGluIGJ1ZiwgYnVmLmRlY29kZShcInV0Zi04XCIsIFwicmVwbGFjZVwiKVxuK1xuK1xuK2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4rICAgIFwiXCJcIlZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcInB0cDRsXCIsIHJlbW90ZT1UcnVlKVxuK1xuKyAgICBsZWFkZXJfY21kID0gZlwicHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMlwiXG4rICAgIGZvbGxvd2VyX2NtZCA9IGZcInB0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMlwiXG4rXG4rICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFxcXG4rICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6XG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbitcbisgICAgaWYgc3luY2VkOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIGtzZnRfcHIoZlwicHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCJcbisgICAgICAgICAgICBmXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcIilcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFwiXFxuXCIpWy0xMDpdXG4rICAgIGtzZnRfcHIoXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcIiArIFwiIHwgXCIuam9pbih0YWlsKSlcbisgICAga3NmdF90cnVlKEZhbHNlLCBcIlBUUCBzeW5jIHRpbWVvdXRcIilcbitcbitcbitkZWYgbWFpbigpOlxuKyAgICBcIlwiXCJSdW4ga3NmdCB0ZXN0cy5cIlwiXCJcbisgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuKyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpXG4rICAgIGtzZnRfZXhpdCgpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBtYWluKClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ2OjQ3LjMxNjQ3NDkxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzA5ODQyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSGFyZHdhcmUgVGltZXN0YW1waW5nIFBhdGNoIGZvciBgbmV0ZGV2c2ltYCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIGFkZGluZyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgdG8gdGhlIGBuZXRkZXZzaW1gIGRyaXZlci4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQncyB0b3VjaGluZyBhIGZldyBmaWxlczogdGhlIGNvcmUgYG5ldGRldnNpbWAgZmlsZXMgKGBldGh0b29sLmNgLCBgbmV0ZGV2LmNgLCBgbmV0ZGV2c2ltLmhgKSwgYHB0cF9tb2NrLmNgIGFuZCBgcHRwX21vY2suaGAsIGFuZCBpdCBhbHNvIGluY2x1ZGVzIGEgc2VsZnRlc3QuIEJhc2ljYWxseSwgaXQncyB1c2luZyB0aGUgYG1vY2tfcGhjYCDigJMgdGhlIFBUUCBIYXJkd2FyZSBDbG9jayBtb2NrIOKAkyB0byBwcm92aWRlIHRoZXNlIHRpbWVzdGFtcHMgZm9yIHRoZSBzaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuXG5cblRoZSBtYWluIHdvcmsgc2VlbXMgdG8gYmUgaW4gaW1wbGVtZW50aW5nIHRoZSBgbmRvX2h3dHN0YW1wX2dldGAgYW5kIGBuZG9faHd0c3RhbXBfc2V0YCBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYC4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYG5zaW1fc3RhcnRfeG1pdGAgdG8gZ3JhYiBUWCBhbmQgUlggdGltZXN0YW1wcy4gQWgsIGFuZCB0aGV5IGhhZCB0byBtb2RpZnkgdGhlIGBtb2NrX3BoY2AgZnVuY3Rpb25zIHRvIHVzZSBgc3Bpbl9sb2NrX2lycXNhdmVgIGluc3RlYWQgb2YgYHNwaW5fbG9ja2AgYmVjYXVzZSBgbnNpbV9zdGFydF94bWl0YCBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIGl0J3MgYSBjcml0aWNhbCBzZWN0aW9uIGlzc3VlLiBHb29kIGNhdGNoIHRoZXJlLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIGBuZXRkZXZzaW1gIGlzLCBhZnRlciBhbGwsIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gQW5kIHllcywgaXTigJlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gQW55IHRpbWUgd2UgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5IOKAkyBlc3BlY2lhbGx5IHNvbWV0aGluZyBsaWtlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyB0aGF0IHRvdWNoZXMgZGlmZmVyZW50IGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgdGhpbmdzIGxpa2UgYGV0aHRvb2xgIGFuZCBgc2tiYCB0cmFuc21pc3Npb24g4oCTIHRoYXQncyBhIHByaW1lIHRhcmdldC4gRnV6emluZyBjYW4gZXhwb3NlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgYmVoYXZpb3Igb2YgdGhpcyBuZXcgZmVhdHVyZSB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCdzIHZlcmlmeSB0aGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBvYnZpb3VzIG9uZSBpcyBgQ09ORklHX05FVERFVlNJTWAsIGFuZCB0aGVuIGBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgaXMgYWxzbyByZXF1aXJlZCwgYW5kIGFwcGVhcnMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGZ0ZXN0IGNvbmZpZy4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBLY29uZmlnIHNldHVwIGZvciBib3RoIGBORVRERVZTSU1gIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgdG8gZW5zdXJlIHRoZSBwYXRjaCBpcyBidWlsdCBjb3JyZWN0bHkuIE9rYXksIEknbGwgZ28gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDY6NTQuNzQ3NDYyMjg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcyNTcxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVERFVlNJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Njo1Ni42MzQ3MjQ3NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxMjg0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIExldCdzIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0J3MgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLCBhbmQgd2hhdCBmdW5jdGlvbnMgZG9lcyBpdCBoYXZlIGF0IGl0cyBkaXNwb3NhbD8gU3BlY2lmaWNhbGx5LCBpcyBpdCB1cCBhbmQgcnVubmluZyBhcyBhIGNsb2NrLCBvciBpcyBpdCBiZWhhdmluZyBhcyBpdCBzaG91bGQgYXMgYSBtb2NrLiBXaGF0IGludGVyZmFjZXMgZG9lcyBpdCBleHBvc2UsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQga2luZCBvZiB0ZXN0cyBoYXZlIGJlZW4gcnVuIGFnYWluc3QgdGhpcyBjb21wb25lbnQsIGFuZCBkbyB0aG9zZSByZXN1bHRzIHN1Z2dlc3QgYW55IHBvdGVudGlhbCBwaXRmYWxscyB0aGF0IHdhcnJhbnQgaW1tZWRpYXRlIHNjcnV0aW55PyBEb2VzIHRoZSBtb2NraW5nIGJlaGF2aW9yIGFsaWduIHdpdGggdGhlIGRlZmluZWQgcmVxdWlyZW1lbnRzIGFuZCBleHBlY3RlZCBvdXRjb21lcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzLCBhcyBhIG1vY2sgd2lsbCBhZmZlY3QgZGVwZW5kZW5jaWVzIGFzIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjAwLjEwNjAxMzEwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk2MTg5NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVFBfMTU4OF9DTE9DS19NT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTc1PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19GQzNXXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE4Nzpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTg4LVxcdHRyaXN0YXRlIFxcXCJNb2NrLXVwIFBUUCBjbG9ja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDIuNTAyMjA4MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjU5NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBQVFBfMTU4OF9DTE9DS19NT0NLYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBQVFBfMTU4OF9DTE9DS19NT0NLYCBiZWFzdCBhbmQgZmlndXJlIG91dCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYXJjaGl0ZWN0dXJlIHRvIGVpdGhlciB3b3JrIHdpdGggb3IgcmVwbGFjZSB0aGlzLiBUaGUgXCJtb2NrXCIgcGFydCBpbXBsaWVzIHRoYXQgaXQncyBwcm9iYWJseSBzaW11bGF0aW5nIGEgUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgY2xvY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGEgcmVhbCBQVFAgaW1wbGVtZW50YXRpb24gaXQgaXMgc3RhbmRpbmcgaW4gZm9yLiBUaGlzIG1lYW5zIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcywgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIG1ha2UgZmlsZXMsIHdoYXRldmVyJ3MgcmVsZXZhbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwgZm9yIGNvbXByZWhlbmRpbmcgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCdzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBpdCBmaXRzLCBhbmQgaG93IEkgY2FuIGludGVyYWN0IHdpdGggaXQuIFNvLCBsZXQgbWUgc3RhcnQgcG9raW5nIGFyb3VuZCBhbmQgdW5yYXZlbCB0aGlzIGRlcGVuZGVuY3kgd2ViLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDUuNjY4ODA3NzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB1c2luZyBSZW5lc2FzIEZlbXRvQ2xvY2szIFdpcmVsZXNzXFxuIDE4MTpcXHRcXHQgIGFzIGEgUFRQIGNsb2NrLiBUaGlzIGNsb2NrIGlzIG9ubHkgdXNlZnVsIGlmIHlvdXIgdGltZSBzdGFtcGluZ1xcbiAxODI6XFx0XFx0ICBNQUMgaXMgY29ubmVjdGVkIHRvIHRoZSBSRU5FU0FTIGNoaXAuXFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxODU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBwdHBfZmMzLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfTU9DS1xcbiAxODg6XFx0XFx0dHJpc3RhdGUgXFxcIk1vY2stdXAgUFRQIGNsb2NrXFxcIlxcbiAxODk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0ICBUaGlzIGRyaXZlciBvZmZlcnMgYSBzZXQgb2YgUFRQIGNsb2NrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zIG92ZXJcXG4gMTkyOlxcdFxcdCAgdGhlIHN5c3RlbSBtb25vdG9uaWMgdGltZS4gSXQgY2FuIGJlIHVzZWQgYnkgdmlydHVhbCBuZXR3b3JrIGRldmljZVxcbiAxOTM6XFx0XFx0ICBkcml2ZXJzIHRvIGVtdWxhdGUgUFRQIGNhcGFiaWxpdGllcy5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE5NjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHB0cF9tb2NrLlxcbiAxOTc6XFx0XFxuIDE5ODpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXFxuIDE5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiVk13YXJlIHZpcnR1YWwgUFRQIGNsb2NrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzowNS42Njg5NTczNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM5ODg1NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGZvciBQVFBfMTU4OF9DTE9DSyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSByZWFsbHkgaGluZ2VzIG9uIHRoYXQgYFBUUF8xNTg4X0NMT0NLYCBzZXR0aW5nLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gYW55IHBhcnRpY3VsYXIgcGF0aCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIHJlbGllcyBvbiB0aGlzLCBzbyBJIGNhbiBwbGFuIGFwcHJvcHJpYXRlbHkuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTkVUREVWU0lNYCBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgc2ltdWxhdG9yIGlzIGltcGFjdGVkLCBvciBpZiBpdCBpbXBhY3RzIGBQVFBfMTU4OF9DTE9DS2AsIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ24gZGVjaXNpb25zLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkb21pbm8gZWZmZWN0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgem9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MDkuMDA4ODQ2MDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcbiA2MDE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXFxcIlxcbiA2MDI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0Y29uZmlnIE5FVERFVlNJTVxcbiA2MDU6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gNjA2OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gNjA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA2MDg6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxcbiA2MDk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbiA2MTA6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDYxMTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDYxMjpcXHRcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbiA2MTM6XFx0XFx0aGVscFxcbiA2MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXFxuIDYxNTpcXHRcXHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcXG4gNjE2OlxcdFxcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gNjE5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzowOS4wMDg5Mjg0MjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxOTgxNjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIG5ldGRldnNpbSBhbmQgUFRQIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IHRlc3QgdGhpcyBgTkVUREVWU0lNYCBzdHVmZiwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBQVFBfMTU4OF9DTE9DS2AgY2FwYWJpbGl0aWVzLiAgVGhlIGRlcGVuZGVuY2llcyBhcmUgYSBsaXR0bGUgbGVzcyBjbGVhciB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIGBORVRERVZTSU1gICpjb25kaXRpb25hbGx5KiBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS19NT0NLYCwgb3IgYXQgbGVhc3QgdGhlIGBQVFBfMTU4OF9DTE9DS19NT0NLPW5gIGNhc2UuIFRvIGJlIGNsZWFyLCB0byB0ZXN0IHRoZSBuZXcgZmVhdHVyZSBwcm9wZXJseSwgd2hpY2ggaW5jbHVkZXMgdGltZSBzeW5jaHJvbml6YXRpb24sIEkgKmRvKiBuZWVkIGBQVFBfMTU4OF9DTE9DS19NT0NLYCBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYFBUUF8xNTg4X0NMT0NLYCBpdHNlbGYgaXMgYWxzbyByZXF1aXJlZC4gU28sIHRoZSBjb21wbGV0ZSBzZXQgb2YgZW5hYmxlZCBjb25maWd1cmF0aW9ucyBmb3IgYSByb2J1c3QgdGVzdCBuZWVkcyB0byBiZSBgTkVUREVWU0lNYCwgYFBUUF8xNTg4X0NMT0NLYCwgYW5kIGBQVFBfMTU4OF9DTE9DS19NT0NLYC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiBgbmV0ZGV2c2ltYCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgdGltZSBzeW5jaHJvbml6YXRpb24gY29kZSBsaXZlcy4gIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGEgZmV3IGxpa2VseSBzdXNwZWN0czpcbiogICBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYCBoYXMgYG5zaW1fc2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19jb25maWdgLCBhbmQgYG5zaW1fc3RhcnRfeG1pdGAuIEhvd2V2ZXIsIEknbSBnb2luZyB0byBmbGFnIGBuc2ltX3N0YXJ0X3htaXRgIGFzIGEgcG90ZW50aWFsIGhvdC1wYXRoOyBsZXQncyBzZWUgaWYgd2UgY2FuIGF2b2lkIHRoYXQgb25lIGZvciBub3cgdG8gYXZvaWQgY29tcGxleGl0eS5cbiogICBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY2AgYWxzbyBjb250YWlucyBgbnNpbV9nZXRfdHNfaW5mb2AuXG5cblNvLCB0aGUgY2xlYXIgcHJpb3JpdGllcyBhcmUgZ29pbmcgdG8gYmUgZnV6emluZyBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEknbGwgc3RhcnQgdGhlcmUgYW5kIGl0ZXJhdGUgYXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MTQuMzI4NzQ4OTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxNjQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fc2V0X3RzX2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTI1PXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzUtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjIzNjpzdGF0aWMgaW50IG5zaW1fc2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0yMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzU1LVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSBuc2ltX2dldF90c19jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjc1NjpcXHQubmRvX2h3dHN0YW1wX3NldFxcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NTctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDc6MTYuNzUwNDAwNTU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM0Nzk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBBUEkgQ2hvaWNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbnNpbV9zZXRfdHNfY29uZmlnYCBhbmQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkgaW5pdGlhbGx5IHRob3VnaHQsIFwiU3RhdGljPyBIbW0sIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gYXZvaWQgc3RhdGljIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZS5cIiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIGhvbGQgb24gYSBzZWNvbmQhIGBuc2ltX3NldF90c19jb25maWdgIGlzICphY3R1YWxseSogYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBgbmRvX2h3dHN0YW1wX3NldGAuIFRoYXQgbWVhbnMgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCwgcmlnaHQ/IFNvLCB0aGUgd2hvbGUgcG9pbnQgb2YgYXZvaWRpbmcgc3RhdGljIGZ1bmN0aW9ucyBmb3Igc3ltYm9sIGFkZHJlc3MgdmlzaWJpbGl0eSBpcyBhbHJlYWR5IGNvdmVyZWQuIFRoZSBwcm9tcHQgYWxzbyBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyxcIiBhbmQgdGhhdCBtZWFucyBpdHMgYW4gZW50cnlwb2ludC4uLml0J3MgZ29vZCFcblxuSSBzdGFydGVkIHRvIHdvbmRlciBpZiB0aGVyZSB3YXMgYW5vdGhlciBub24tc3RhdGljIGVudHJ5IHBvaW50LlxuXG5gbnNpbV9zZXRfdHNfY29uZmlnYCBnZXRzIGNhbGxlZCB0aHJvdWdoIGBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYmAgb3IgYGRldl9zZXRfaHd0c3RhbXBgLCB3aGljaCBhcmUgZ2VuZXJpYywgYnV0IGBuc2ltX3NldF90c19jb25maWdgIGFuZCBgbnNpbV9nZXRfdHNfY29uZmlnYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYWN0dWFsbHkgYWRkZWQuIFxuXG5TbywgSSB0aGluayBJJ2xsIGdvIHdpdGggYG5zaW1fc2V0X3RzX2NvbmZpZ2AgYW5kIGBuc2ltX2dldF90c19jb25maWdgLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCBkaXJlY3QgZml0IGFuZCBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbldhaXQuLi4gaXMgYG5zaW1fZ2V0X3RzX2luZm9gIHN0YXRpYyB0b28/IEkgbmVlZCB0byBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzoyMi4xMDM4ODMxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjEwOTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2dldF90c19pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MTc2PW5zaW1fZ2V0X2ZlY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9mZWNfc3RhdHMgKmZlY19zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMTk3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MTk4OnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMTk5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM9MjE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbnNpbV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM1LVxcdC5nZXRfZmVjX3N0YXRzXFx0XFx0XFx0PSBuc2ltX2dldF9mZWNfc3RhdHMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYzoyMzY6XFx0LmdldF90c19pbmZvXFx0XFx0XFx0PSBuc2ltX2dldF90c19pbmZvLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjM3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjIzLjkxNTk5OTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTEwMTE2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgQXNzaWdubWVudHMqKlxuXG5SaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5J3JlIGFzc2lnbmVkIHRvIG9wZXJhdGlvbnMgc3RydWN0dXJlcywgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIGRlc2lnbiBzdGFuZHBvaW50LCBrZWVwaW5nIHRoZSBzY29wZSBsaW1pdGVkLiBCdXQsIHRoZW4gSSBzYXcgYG1vY2tfcGhjX2dldF9wdHBfaW5mb2AuIFRoaXMgb25lIGlzIG5vbi1zdGF0aWMgYW5kICpleHBvcnRlZCouIFRoYXQncyB0aGUga2V5IGRpZmZlcmVuY2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBJIHdvbmRlciB3aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoYXQgZGVzaWduIGRlY2lzaW9uIHdhcy4gQ2xlYXJseSB0aGVyZSBpcyBhbiBpbnRlbmRlZCBwdXJwb3NlIHRvIG9wZW4gdGhhdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzoyOC40NjcwMTM3NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzYyOTA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja19waGNfZ2V0X3B0cF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjU9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE3OC1cXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxNzk6XFx0XFx0cHRwX2luZm9fcnggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8ocGVlcl9ucy1cXHUwMDNlcGhjKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTgwLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTE4Mi1cXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTgzOlxcdFxcdHB0cF9pbmZvX3R4ID0gbW9ja19waGNfZ2V0X3B0cF9pbmZvKG5zLVxcdTAwM2VwaGMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xODQtXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jPTE3Nj1FWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE3Ny1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jOjE3ODpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4MS19XFxuZHJpdmVycy9wdHAvcHRwX21vY2suYzoxODI6RVhQT1JUX1NZTUJPTF9HUEwobW9ja19waGNfZ2V0X3B0cF9pbmZvKTtcXG5kcml2ZXJzL3B0cC9wdHBfbW9jay5jLTE4My1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaD0xOD1pbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpO1xcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaDoxOTpzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oPTMyPXN0YXRpYyBpbmxpbmUgaW50IG1vY2tfcGhjX2luZGV4KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHBfbW9jay5oLTM2LVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaDozNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqbW9ja19waGNfZ2V0X3B0cF9pbmZvKHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxcbmluY2x1ZGUvbGludXgvcHRwX21vY2suaC0zOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjMwLjE0MzMxMDg3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzc4ODQxOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgcHRwX21vY2suY2AgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgd2UncmUgYmVlZmluZyB1cCB0aGUgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtb2NrX3BoY19hZGpmaW5lYCwgYG1vY2tfcGhjX2FkanRpbWVgLCBgbW9ja19waGNfc2V0dGltZTY0YCwgYW5kIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBUaGVzZSBhcmUgbm93IHVzaW5nIGBzcGluX2xvY2tfaXJxc2F2ZWAgaW5zdGVhZCBvZiBgc3Bpbl9sb2NrYC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIHN0YXRpYyBidXQgYXNzaWduZWQgdG8gYHB0cF9jbG9ja19pbmZvYCBvcHMgaXMgaW1wb3J0YW50IHRvIG5vdGUuIFRoaXMgaW1wbGllcyB0aGV5J3JlIHBhcnQgb2YgdGhlIGNvcmUgbW9jayBQVFAgY2xvY2sgZnVuY3Rpb25hbGl0eS5cblxuTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnMgb25lIG1vcmUgdGltZSB0byBiZSBzdXJlOiBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGBuc2ltX2dldF90c19pbmZvYCwgYW5kIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiBOb3csIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgdGhvc2UgZm91ciBmdW5jdGlvbnMgaW4gbXkgY292ZXJhZ2Ugc3RyYXRlZ3kuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBoZXJlLiBJIGtub3cgYE5FVERFVlNJTWAgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBERUJVR19GU2AuIEFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AgZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLiBTbywgbXkgZW5hYmxlIGNvbmZpZyBsaXN0IHNob3VsZCBkZWZpbml0ZWx5IGNvbnRhaW4gYE5FVERFVlNJTWAsIGBQVFBfMTU4OF9DTE9DS2AsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfTU9DS2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIHRoZSAqb25seSogbmV3IGZ1bmN0aW9uIGludHJvZHVjZWQ/IFllcywgdGhhdCdzIGNvcnJlY3QuIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIGEgbmV3IGFkZGl0aW9uLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gYG5ldGRldnNpbWAsIG91ciBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZS4gVGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIGltcGxlbWVudGVkIGFyZSBgbmRvX2h3dHN0YW1wX2dldGAgYW5kIGBuZG9faHd0c3RhbXBfc2V0YC4gVGhlIHRyYW5zbWl0IHBhdGggKGBuc2ltX3N0YXJ0X3htaXRgKSBpcyBhbHNvIHVwZGF0ZWQgdG8gY2FwdHVyZSBoYXJkd2FyZSB0aW1lc3RhbXBzLiBJdCdzIHVzaW5nIHRoZSBgbW9ja19waGNgIGZvciB0aGlzLCBhbmQgdGhlIHVzZSBvZiBgc3Bpbl9sb2NrX2lycXNhdmVgIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlc2UgdGltZXN0YW1wcyBjYW4gYmUgY2FwdHVyZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBUaGlzIGFsbCBtZWFucyB3ZSBoYXZlIG5ldyBjb250cm9sIGFuZCBkYXRhIHBhdGhzIGluIGBuZXRkZXZzaW1gIGFuZCBgcHRwX21vY2tgIHRoYXQgYXJlIHRyaWdnZXJlZCB2aWEgYGV0aHRvb2xgIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGVzZSBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGFkZGVkIGNvbXBsZXhpdHkgYW5kIGludGVycnVwdCBjb250ZXh0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDMsIk91dHB1dFRva2VucyI6MjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjUyMjE1NTY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDQ1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS19NT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9zZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19jb25maWdcIixcbiAgICBcIm5zaW1fZ2V0X3RzX2luZm9cIixcbiAgICBcIm1vY2tfcGhjX2dldF9wdHBfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIsIGEgc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2UuIEl0IGltcGxlbWVudHMgbmRvX2h3dHN0YW1wX2dldCBhbmQgbmRvX2h3dHN0YW1wX3NldCBvcGVyYXRpb25zLCBhbmQgbW9kaWZpZXMgdGhlIFRYIHBhdGggdG8gY2FwdHVyZSBhbmQgcmV0dXJuIGhhcmR3YXJlIHRpbWVzdGFtcHMgdXNpbmcgdGhlIG1vY2tfcGhjIChQVFAgSGFyZHdhcmUgQ2xvY2sgbW9jaykuIEl0IGFsc28gdXBkYXRlcyBtb2NrX3BoYyB0byB1c2UgSVJRLXNhZmUgc3BpbmxvY2tzLiBUaGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgcmVhY2hhYmxlIGNvbnRyb2wgYW5kIGRhdGEgcGF0aHMgaW4gbmV0ZGV2c2ltIGFuZCBwdHBfbW9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGV0aHRvb2wgYW5kIHBhY2tldCB0cmFuc21pc3Npb24sIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQVFBfMTU4OF9DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfTU9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fc2V0X3RzX2NvbmZpZ1wiLFxuICAgIFwibnNpbV9nZXRfdHNfY29uZmlnXCIsXG4gICAgXCJuc2ltX2dldF90c19pbmZvXCIsXG4gICAgXCJtb2NrX3BoY19nZXRfcHRwX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBuZXRkZXZzaW0gZHJpdmVyLCBhIHNvZnR3YXJlLWVtdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlLiBJdCBpbXBsZW1lbnRzIG5kb19od3RzdGFtcF9nZXQgYW5kIG5kb19od3RzdGFtcF9zZXQgb3BlcmF0aW9ucywgYW5kIG1vZGlmaWVzIHRoZSBUWCBwYXRoIHRvIGNhcHR1cmUgYW5kIHJldHVybiBoYXJkd2FyZSB0aW1lc3RhbXBzIHVzaW5nIHRoZSBtb2NrX3BoYyAoUFRQIEhhcmR3YXJlIENsb2NrIG1vY2spLiBJdCBhbHNvIHVwZGF0ZXMgbW9ja19waGMgdG8gdXNlIElSUS1zYWZlIHNwaW5sb2Nrcy4gVGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IHJlYWNoYWJsZSBjb250cm9sIGFuZCBkYXRhIHBhdGhzIGluIG5ldGRldnNpbSBhbmQgcHRwX21vY2sgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBldGh0b29sIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0NzozOS42MTAyMTE1NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg4NzQzMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjYxMDk0NDQxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTY4ODY2OTUwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3NjUyYWU1NjE0N2Y2NjYzNWRlMTgzZmE5ZTIxOWIwN2QzMjhmMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMDo0Njo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jXG5pbmRleCAwMjVlYTc5ODc5ZjNhLi42Mjg4NzhhY2QxNThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuY1xuQEAgLTIwMCw3ICsyMDAsMTggQEAgc3RhdGljIGludCBuc2ltX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0ZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xuK1xuIFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBtb2NrX3BoY19pbmRleChucy1cdTAwM2VwaGMpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKTtcbitcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfCBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCA0ZTlkN2UxMGI1MjdlLi43YTI2OGExYTU0NTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0zMCw2ICszMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3VkcF90dW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIm5ldGRldnNpbS5oXCJcbiBcbkBAIC0xMjIsMTIgKzEyNCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2RldixcbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbnNpbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cF9pbmZvX3R4ID0gTlVMTDtcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwX2luZm9fcnggPSBOVUxMO1xuIFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHhfdHMsIHJ4X3RzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYl9vcmlnID0gc2tiO1xuIFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xuIFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zO1xuIFx0c3RydWN0IG5ldGRldl9jb25maWcgKmNmZztcbitcdGludCByeF9maWx0ZXIsIHR4X3R5cGU7XG4gXHRzdHJ1Y3QgbnNpbV9ycSAqcnE7XG4gXHRpbnQgcnhxO1xuIFx0aW50IGRyO1xuQEAgLTE2NCw2ICsxNzIsNDYgQEAgc3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2JfbGluZWFyaXplKHNrYik7XG4gXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4rXHRyeF9maWx0ZXIgPSBSRUFEX09OQ0UocGVlcl9ucy1cdTAwM2V0c3RhbXBfY29uZmlnLnJ4X2ZpbHRlcik7XG4rXHR0eF90eXBlID0gUkVBRF9PTkNFKG5zLVx1MDAzZXRzdGFtcF9jb25maWcudHhfdHlwZSk7XG4rXG4rXHRpZiAocnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuK1x0XHRwdHBfaW5mb19yeCA9IG1vY2tfcGhjX2dldF9wdHBfaW5mbyhwZWVyX25zLVx1MDAzZXBoYyk7XG4rXG4rXHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVAgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbitcdFx0cHRwX2luZm9fdHggPSBtb2NrX3BoY19nZXRfcHRwX2luZm8obnMtXHUwMDNlcGhjKTtcbitcbitcdC8qIElmIFRYIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBpcyBlbmFibGVkLCBzYW1wbGUgb3VyIFBIQyBhbmQgcmVwb3J0XG4rXHQgKiB0aGUgVFggdGltZXN0YW1wIGJhY2suXG4rXHQgKi9cbitcdGlmIChwdHBfaW5mb190eCkge1xuK1x0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG4rXHRcdCAqIGZvciBiZXR0ZXIgYWNjdXJhY3lcbitcdFx0ICovXG4rXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuK1x0XHRpZiAobGlrZWx5KHB0cF9pbmZvX3J4KSlcbitcdFx0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcbitcdFx0c2tiX3RzdGFtcF90eChza2Jfb3JpZywgXHUwMDI2c2hod3RzdGFtcHMpO1xuK1xuK1x0XHQvKiBUeCBhbmQgUnggdGltZXN0YW1wcyBjYW4ndCBiZSByZXR1cm5lZCBieSBhIHNpbmdsZSBza2IuXG4rXHRcdCAqIENvcHkgdGhlIHNrYiB0byByZXR1cm4gYm90aCB0aW1lc3RhbXBzLiBJZiB0aGUgY29weSBmYWlscyxcbitcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiBpcyB1c2VkIGFuZCB0aGUgUnggdGltZXN0YW1wIGNhcHR1cmVkXG4rXHRcdCAqIGFib3ZlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYm90aCBUeCBhbmQgUnggdGltZXN0YW1wLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2NvcHkoc2tiX29yaWcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoc2tiKVxuK1x0XHRcdGNvbnN1bWVfc2tiKHNrYl9vcmlnKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYiA9IHNrYl9vcmlnO1xuK1x0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuK1x0XHRwdHBfaW5mb19yeC1cdTAwM2VnZXR0aW1lNjQocHRwX2luZm9fcngsIFx1MDAyNnJ4X3RzKTtcbitcdH1cbitcbitcdGlmIChwdHBfaW5mb19yeClcbitcdFx0c2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wID0gdGltZXNwZWM2NF90b19rdGltZShyeF90cyk7XG4rXG4gXHRpZiAodW5saWtlbHkobnNpbV9mb3J3YXJkX3NrYihkZXYsIHBlZXJfZGV2LFxuIFx0XHRcdFx0ICAgICAgc2tiLCBycSwgcHNwX2V4dCkgPT0gTkVUX1JYX0RST1ApKVxuIFx0XHRnb3RvIG91dF9kcm9wX2NudDtcbkBAIC0xODUsNiArMjMzLDYzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbnNpbV9zZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0aW50IHJ4X2ZpbHRlcjtcbitcbitcdGlmICghbnMtXHUwMDNlcGhjKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4rXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09GRik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdFx0V1JJVEVfT05DRShucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUsIEhXVFNUQU1QX1RYX09OKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTlRQX0FMTDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0UobnMtXHUwMDNldHN0YW1wX2NvbmZpZy5yeF9maWx0ZXIsIHJ4X2ZpbHRlcik7XG4rXHRjb25maWctXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbnNpbV9nZXRfdHNfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHQqY29uZmlnID0gbnMtXHUwMDNldHN0YW1wX2NvbmZpZztcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5zaW1fc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG5AQCAtNjQ3LDYgKzc1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gbnNpbV92bGFuX3J4X2FkZF92aWQsXG4gXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gbnNpbV92bGFuX3J4X2tpbGxfdmlkLFxuIFx0Lm5ldF9zaGFwZXJfb3BzXHRcdD0gXHUwMDI2bnNpbV9zaGFwZXJfb3BzLFxuK1x0Lm5kb19od3RzdGFtcF9nZXRcdD0gbnNpbV9nZXRfdHNfY29uZmlnLFxuK1x0Lm5kb19od3RzdGFtcF9zZXRcdD0gbnNpbV9zZXRfdHNfY29uZmlnLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX3ZmX25ldGRldl9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA2NGY3N2Y5M2Q5MzdjLi41Y2RkMWUyOTQ0NDZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC0xMDgsNiArMTA4LDcgQEAgc3RydWN0IG5ldGRldnNpbSB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldjtcbiBcdHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0O1xuK1x0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjO1xuIFx0c3RydWN0IG5zaW1fcnEgKipycTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbW9jay5jIGIvZHJpdmVycy9wdHAvcHRwX21vY2suY1xuaW5kZXggNGQ2NmI2MTQ3MTIxMC4uN2E0ZTVmMzI3NGE2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9tb2NrLmNcbkBAIC00OSwxNSArNDksMTYgQEAgc3RhdGljIHU2NCBtb2NrX3BoY19jY19yZWFkKHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHM2NCBhZGo7XG4gXG4gXHRhZGogPSAoczY0KXNjYWxlZF9wcG0gXHUwMDNjXHUwMDNjIE1PQ0tfUEhDX0ZBREpfU0hJRlQ7XG4gXHRhZGogPSBkaXZfczY0KGFkaiwgTU9DS19QSENfRkFESl9ERU5PTUlOQVRPUik7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbiBcdHBoYy1cdTAwM2VjYy5tdWx0ID0gTU9DS19QSENfQ0NfTVVMVCArIGFkajtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02NSwxMCArNjYsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgbG9uZyBzY2FsZWRfcHBtKVxuIHN0YXRpYyBpbnQgbW9ja19waGNfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4gXHRzdHJ1Y3QgbW9ja19waGMgKnBoYyA9IGluZm9fdG9fcGhjKGluZm8pO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZwaGMtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0dGltZWNvdW50ZXJfYWRqdGltZShcdTAwMjZwaGMtXHUwMDNldGMsIGRlbHRhKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03OCwxMCArODAsMTEgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4gXHR1NjQgbnMgPSB0aW1lc3BlYzY0X3RvX25zKHRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2cGhjLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHRpbWVjb3VudGVyX2luaXQoXHUwMDI2cGhjLVx1MDAzZXRjLCBcdTAwMjZwaGMtXHUwMDNlY2MsIG5zKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OSwxMSArOTIsMTIgQEAgc3RhdGljIGludCBtb2NrX3BoY19zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuIHN0YXRpYyBpbnQgbW9ja19waGNfZ2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdHN0cnVjdCBtb2NrX3BoYyAqcGhjID0gaW5mb190b19waGMoaW5mbyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTY0IG5zO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBoYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRucyA9IHRpbWVjb3VudGVyX3JlYWQoXHUwMDI2cGhjLVx1MDAzZXRjKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnBoYy1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGhjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdCp0cyA9IG5zX3RvX3RpbWVzcGVjNjQobnMpO1xuIFxuQEAgLTE3MSw1ICsxNzUsMTEgQEAgdm9pZCBtb2NrX3BoY19kZXN0cm95KHN0cnVjdCBtb2NrX3BoYyAqcGhjKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtb2NrX3BoY19kZXN0cm95KTtcbiBcbitzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKm1vY2tfcGhjX2dldF9wdHBfaW5mbyhzdHJ1Y3QgbW9ja19waGMgKnBoYylcbit7XG4rXHRyZXR1cm4gXHUwMDI2cGhjLVx1MDAzZWluZm87XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1vY2tfcGhjX2dldF9wdHBfaW5mbyk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW9jay11cCBQVFAgSGFyZHdhcmUgQ2xvY2sgZHJpdmVyXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaCBiL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuaW5kZXggNzJlYjQwMTAzNGQ5My4uZTMzMTg4ZGVjMmI3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRwX21vY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHBfbW9jay5oXG5AQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgbW9ja19waGM7XG4gc3RydWN0IG1vY2tfcGhjICptb2NrX3BoY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIG1vY2tfcGhjX2Rlc3Ryb3koc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIGludCBtb2NrX3BoY19pbmRleChzdHJ1Y3QgbW9ja19waGMgKnBoYyk7XG4rc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpO1xuIFxuICNlbHNlXG4gXG5AQCAtMzMsNiArMzQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbW9ja19waGNfaW5kZXgoc3RydWN0IG1vY2tfcGhjICpwaGMpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB0cF9jbG9ja19pbmZvICptb2NrX3BoY19nZXRfcHRwX2luZm8oc3RydWN0IG1vY2tfcGhjICpwaGMpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUFRQX01PQ0tfSF8gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5pbmRleCBkNWJmNGNiNjM4YThjLi4xOGJiN2M2OTNiNjlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L01ha2VmaWxlXG5AQCAtMTksNiArMTksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRwb2xsX2Jhc2ljLnB5IFxcXG4gXHRwaW5nLnB5IFxcXG4gXHRwc3AucHkgXFxcbitcdHB0cC5weSBcXFxuIFx0cXVldWVzLnB5IFxcXG4gXHRyaW5nX3JlY29uZmlnLnB5IFxcXG4gXHRzaGFwZXIucHkgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbmluZGV4IGI2OTg5YzdkM2Q5ZDEuLjdiZTMwYTcyZTExOTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTIxLDUgKzIxLDYgQEAgQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXG4gQ09ORklHX1BQUD15XG4gQ09ORklHX1BQUE9FPXlcbitDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfTU9DSz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTJhOTQzZGNiYjA2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHRwLnB5XG5AQCAtMCwwICsxLDgyIEBAXG4rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIEJ5IE1hY2llayBNYWNobmlrb3dza2kgXHUwMDNjbWFjaWVrQG1hY2huaWtvd3NraS5uZXRcdTAwM2UgKGMpIDIwMjYsXG4rXG4rXCJcIlwiXG4rVGVzdCBzdWl0ZSBmb3IgUFRQIHN5bmMgdXNpbmcgcHRwNGwuXG4rXG4rU3RhcnQgYSBwdHA0bCBsZWFkZXIgYW5kIGZvbGxvd2VyIGFuZCBjaGVjayB0aGF0IHRoZSBmb2xsb3dlciBsb2NrcyBvbnRvIHRoZVxuK2xlYWRlciAoc3RhdGUgczIpXG4rXCJcIlwiXG4rXG4raW1wb3J0IHRpbWVcbitcbitmcm9tIGxpYi5weSBpbXBvcnQgKFxuKyAgICBOZXREcnZFcEVudixcbisgICAgYmtnLFxuKyAgICBmZF9yZWFkX3RpbWVvdXQsXG4rICAgIGtzZnRfZXhpdCxcbisgICAga3NmdF9wcixcbisgICAga3NmdF9ydW4sXG4rICAgIGtzZnRfdHJ1ZSxcbispXG4rXG4rUFRQNExfU1lOQ19USU1FT1VUID0gNDBcbitcbitcbitkZWYgX3BvbGxfZm9sbG93ZXJfc3luYyhmb2xsb3dlciwgdGltZW91dCk6XG4rICAgIFwiXCJcIlJlYWQgdGhlIGZvbGxvd2VyIHN0ZG91dCBwaXBlIHVudGlsIHB0cDRsIHJlcG9ydHMgc3luYyBzdGF0ZSBzMi5cbitcbisgICAgUmV0dXJucyBhIHR1cGxlIChzeW5jZWQsIG91dHB1dCkgd2hlcmUgb3V0cHV0IGlzIHRoZSB0ZXh0IHJlYWQgc28gZmFyLlxuKyAgICBcIlwiXCJcbisgICAgZmRfZmlsZSA9IGZvbGxvd2VyLnByb2Muc3Rkb3V0XG4rICAgIGZkID0gZmRfZmlsZS5maWxlbm8oKVxuKyAgICBidWYgPSBiXCJcIlxuKyAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB0aW1lb3V0XG4rICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgXHUwMDNjIGRlYWRsaW5lOlxuKyAgICAgICAgaWYgYlwiIHMyIFwiIGluIGJ1ZjpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgaWYgZm9sbG93ZXIucHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgY2h1bmsgPSBmZF9maWxlLnJlYWQoKVxuKyAgICAgICAgICAgIGlmIGNodW5rOlxuKyAgICAgICAgICAgICAgICBidWYgKz0gY2h1bmtcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gdGltZS5tb25vdG9uaWMoKVxuKyAgICAgICAgICAgIGJ1ZiArPSBmZF9yZWFkX3RpbWVvdXQoZmQsIG1pbigxLCByZW1haW5pbmcpKVxuKyAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICByZXR1cm4gYlwiIHMyIFwiIGluIGJ1ZiwgYnVmLmRlY29kZShcInV0Zi04XCIsIFwicmVwbGFjZVwiKVxuK1xuK1xuK2RlZiBwdHBfc3luY190ZXN0KGNmZyk6XG4rICAgIFwiXCJcIlZlcmlmeSBwdHA0bCBsZWFkZXIvZm9sbG93ZXIgc3luY2hyb25pemF0aW9uIHJlYWNoZXMgc3RhdGUgczIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcInB0cDRsXCIsIHJlbW90ZT1UcnVlKVxuK1xuKyAgICBsZWFkZXJfY21kID0gZlwicHRwNGwgLWkge2NmZy5yZW1vdGVfaWZuYW1lfSAtbSAtMlwiXG4rICAgIGZvbGxvd2VyX2NtZCA9IGZcInB0cDRsIC1pIHtjZmcuaWZuYW1lfSAtbSAtcyAtMlwiXG4rXG4rICAgIHdpdGggYmtnKGxlYWRlcl9jbWQsIGhvc3Q9Y2ZnLnJlbW90ZSksIFxcXG4rICAgICAgICAgYmtnKGZvbGxvd2VyX2NtZCkgYXMgZm9sbG93ZXI6XG4rICAgICAgICBzeW5jZWQsIG91dHB1dCA9IF9wb2xsX2ZvbGxvd2VyX3N5bmMoZm9sbG93ZXIsIFBUUDRMX1NZTkNfVElNRU9VVClcbitcbisgICAgaWYgc3luY2VkOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIGtzZnRfcHIoZlwicHRwNGwgZm9sbG93ZXIgZGlkIG5vdCByZWFjaCBsb2NrZWQgc3RhdGUgKHMyKSB3aXRoaW4gXCJcbisgICAgICAgICAgICBmXCJ7UFRQNExfU1lOQ19USU1FT1VUfXNcIilcbisgICAgdGFpbCA9IG91dHB1dC5zdHJpcCgpLnNwbGl0KFwiXFxuXCIpWy0xMDpdXG4rICAgIGtzZnRfcHIoXCJGb2xsb3dlciBsb2cgKGxhc3QgMTAgbGluZXMpOiBcIiArIFwiIHwgXCIuam9pbih0YWlsKSlcbisgICAga3NmdF90cnVlKEZhbHNlLCBcIlBUUCBzeW5jIHRpbWVvdXRcIilcbitcbitcbitkZWYgbWFpbigpOlxuKyAgICBcIlwiXCJSdW4ga3NmdCB0ZXN0cy5cIlwiXCJcbisgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuKyAgICAgICAga3NmdF9ydW4oW3B0cF9zeW5jX3Rlc3RdLCBhcmdzPShjZmcsICkpXG4rICAgIGtzZnRfZXhpdCgpXG4rXG4rXG4raWYgX19uYW1lX18gPT0gXCJfX21haW5fX1wiOlxuKyAgICBtYWluKClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjM5LjYxMDk0NTUyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDU0MzIzMDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIG5ldGRldnNpbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBgbmV0ZGV2c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtb2RpZmljYXRpb25zOiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBuc2ltX3N0YXJ0X3htaXRgLCBgbnNpbV9zZXRfdHNfY29uZmlnYCwgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AsIGFuZCB0aGUgbmV3IGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGZ1bmN0aW9uIGluIGBwdHBfbW9jay5jYC4gIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYG5zaW1fc3RhcnRfeG1pdGAgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMgbGlrZWx5IHJlc2lkZXMuXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wc2AgYW5kIGBzdHJ1Y3QgdGltZXNwZWM2NCB0eF90cywgcnhfdHM7YC4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIGNhcHR1cmUgdHJhbnNtaXQgYW5kIHBvdGVudGlhbGx5IHJlY2VpdmUgdGltZXN0YW1wcy4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRpZiAocHRwX2luZm9fdHgpIHtcblx0XHQvKiBDYXB0dXJlIGJvdGggdGltZXN0YW1wcyBhcyBjbG9zZSB0byBlYWNoIG90aGVyXG5cdFx0ICogZm9yIGJldHRlciBhY2N1cmFjeVxuXHRcdCAqL1xuXHRcdHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb190eCwgXHUwMDI2dHhfdHMpO1xuXHRcdGlmIChsaWtlbHkocHRwX2luZm9fcngpKVxuXHRcdFx0cHRwX2luZm9fcngtXHUwMDNlZ2V0dGltZTY0KHB0cF9pbmZvX3J4LCBcdTAwMjZyeF90cyk7XG5cdFx0c2hod3RzdGFtcHMuaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHR4X3RzKTtcblx0XHRza2JfdHN0YW1wX3R4KHNrYl9vcmlnLCBcdTAwMjZzaGh3dHN0YW1wcyk7XG4uLi5cblx0fSBlbHNlIGlmIChwdHBfaW5mb19yeCkge1xuXHRcdHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NChwdHBfaW5mb19yeCwgXHUwMDI2cnhfdHMpO1xuXHR9XG5cblx0aWYgKHB0cF9pbmZvX3J4KVxuXHRcdHNrYl9od3RzdGFtcHMoc2tiKS1cdTAwM2Vod3RzdGFtcCA9IHRpbWVzcGVjNjRfdG9fa3RpbWUocnhfdHMpO1xuYGBgXG5cbk9rYXksIHRoZSBjb2RlIGF0dGVtcHRzIHRvIGNhcHR1cmUgYm90aCB0aW1lc3RhbXBzIGlmIGBwdHBfaW5mb190eGAgaXMgdHJ1ZSwgb3RoZXJ3aXNlIGl0IGNhcHR1cmVzIG9ubHkgdGhlIHJlY2VpdmUgdGltZXN0YW1wIHdoZW4gYHB0cF9pbmZvX3J4YCBpcyB0cnVlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFib3V0IGEgcG90ZW50aWFsIGJ1Zy4gSSBzZWUgdGhhdCBgcnhfdHNgIGlzIGEgbG9jYWwgdmFyaWFibGUuICBJZiBgcHRwX2luZm9fdHhgIGlzIHRydWUsIGJ1dCBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLCB0aGVuIGByeF90c2AgaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoZSBmaXJzdCBibG9jayBjb21wbGV0ZXMsIGJlZm9yZSB0aGUgc2Vjb25kIGJsb2NrIGJlZ2lucy4gSG93ZXZlciwgSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzIGtpbmQgb2YgYXNzZXNzbWVudC4gVGhlIHN1YnNlcXVlbnQgYGlmIChwdHBfaW5mb19yeClgIGNoZWNrIGF0IHRoZSBlbmQgd2lsbCBwcmV2ZW50IGl0cyB1c2UgaWYgYHB0cF9pbmZvX3J4YCBpcyBmYWxzZS4gU28sIEkgc2VlIGl0J3Mgc2FmZSB0byB1c2UuXG5cbkxldCdzIHRyYWNlIGl0IGNhcmVmdWxseTogaWYgYHB0cF9pbmZvX3R4YCBpcyB0cnVlIGFuZCBgcHRwX2luZm9fcnhgIGlzIGZhbHNlLCBgcnhfdHNgIGlzIG5ldmVyIHVzZWQuIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgYHJ4X3RzYCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUsIGVpdGhlciBpbiB0aGUgZmlyc3QgYGlmYCBvciBpbiB0aGUgYGVsc2UgaWZgLiBUaHVzLCBgcnhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGl0IGlzIHVzZWQuIGB0eF90c2AgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgb25seSB3aGVuIGBwdHBfaW5mb190eGAgaXMgdHJ1ZS4gTG9va3MgZ29vZCBzbyBmYXIsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLiBBbmQsIGltcG9ydGFudGx5LCBJIHNlZSB0aGF0IGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YC5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGBuc2ltX2dldF90c19jb25maWdgLlxuXG5gYGBjXG5zdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZylcbntcblx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuXG5cdCpjb25maWcgPSBucy1cdTAwM2V0c3RhbXBfY29uZmlnO1xuXHRyZXR1cm4gMDtcbn1cbmBgYFxuXG5UaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgY29waWVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGNvbmZpZ2AgcG9pbnRlci4gQnV0IG5vdyBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hlcmUgaXMgdGhpcyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgaW5pdGlhbGl6ZWQ/IFRpbWUgdG8gbG9vayBhdCB0aGUgYG5ldGRldnNpbS5oYCBoZWFkZXIuIEFoLCB0aGVyZSBpdCBpczpcblxuYGBgY1xuXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xuYGBgXG5cbkl0J3MgYSBtZW1iZXIgb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdCBpdHNlbGYsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuIE5vdyBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHN0cnVjdCBgbmV0ZGV2c2ltYCBpcyB6ZXJvLWluaXRpYWxpemVkIHNvbWV3aGVyZS4gQmVjYXVzZSBpZiBpdCdzIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIFR5cGljYWxseSwgYGFsbG9jX25ldGRldmAgd2lsbCB6ZXJvLWluaXRpYWxpemUgcHJpdmF0ZSBkYXRhLiBCdXQgSSBiZXR0ZXIgdmVyaWZ5LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYFxuXG4iLCJJbnB1dFRva2VucyI6NzEzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1NC4xNTQxNzkyMTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzYxMjI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzMz1zdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyNDAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEyNDE6XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZigqbnMpLCBcXFwiZXRoJWRcXFwiLCBORVRfTkFNRV9VTktOT1dOLCBuc2ltX3NldHVwLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjQyLVxcdFxcdFxcdCAgICAgIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV9xdWV1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1NC4zMDE4MDQ3NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MDE2MjAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19uZXRkZXZfbXFgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgaXQgdXNlcyBga3phbGxvY2AsIHNvIHRoZSBwcml2YXRlIGRhdGEsIGluY2x1ZGluZyBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AsIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgc28gdGhlIHN0cnVjdHVyZSBJJ20gbG9va2luZyBhdCwgYHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnYCwgaGFzIGEgYnVuY2ggb2YgZmllbGRzOiBgZmxhZ3NgLCBgdHhfdHlwZWAsIGByeF9maWx0ZXJgLCBgaWZyYCwgYW5kIGBicGZgLCBhbW9uZyBvdGhlcnMuIEdvdCBpdC4gQW5kIGBuc2ltX2dldF90c19jb25maWdgIGlzIGNvcHlpbmcgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIGAqY29uZmlnYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBnZXR0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3B5IGRvZXNuJ3QgZ2V0IG1lc3NlZCB1cCBieSBwYWRkaW5nLiBNeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciB0aGUgc3RydWN0dXJlIGl0c2VsZiBoYXMgYW55IHBhZGRpbmcuIEkgbmVlZCB0byBnbyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgIGluIGBpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaGAgcmlnaHQgbm93IHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgY3J1Y2lhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ3OjU4Ljk1MTk3MDc3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjU0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTM3PXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaC02MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaDo2MjpzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNjMtXFx0aW50IGZsYWdzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0Nzo1OS4xMTY2MzE2OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTYxNzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIFRpbWVzdGFtcGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG5ldHdvcmsgdGltZXN0YW1waW5nLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaGAuIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDYyLCBhcyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIGtleSB0aW1lc3RhbXBpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlZ2luIHRvIGFwcGVhci4gSSBhbnRpY2lwYXRlIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suIFRoaXMgc2hvdWxkIGNsYXJpZnkgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGFuZCBtYW5hZ2luZyB0aW1lc3RhbXBzIGZvciBuZXR3b3JrIHBhY2tldHMuIFRoaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgZGlmZmVyZW50IGRyaXZlcnMsIHByb3RvY29scywgYW5kIG1lY2hhbmlzbXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCByZWZyZXNoIG15IGtub3dsZWRnZSBvbiB0aGUgc3ViamVjdCwgc28gdGhhdCBJIG1heSBiZSBhYmxlIHRvIGZ1bGx5IGV4YW1pbmUgdGhlIHRvcGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjAyLjgxMjI1Mjc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAqIGV4cG9zZWQgdG8gdGhlICVTSU9DR0hXVFNUQU1QIGFuZCAlU0lPQ1NIV1RTVEFNUCBpb2N0bCBVQVBJLlxcbiAgNjE6XFx0ICovXFxuICA2MjpcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB7XFxuICA2MzpcXHRcXHRpbnQgZmxhZ3M7XFxuICA2NDpcXHRcXHRpbnQgdHhfdHlwZTtcXG4gIDY1OlxcdFxcdGludCByeF9maWx0ZXI7XFxuICA2NjpcXHRcXHRzdHJ1Y3QgaWZyZXEgKmlmcjtcXG4gIDY3OlxcdFxcdGJvb2wgY29waWVkX3RvX3VzZXI7XFxuICA2ODpcXHRcXHRlbnVtIGh3dHN0YW1wX3NvdXJjZSBzb3VyY2U7XFxuICA2OTpcXHRcXHRlbnVtIGh3dHN0YW1wX3Byb3ZpZGVyX3F1YWxpZmllciBxdWFsaWZpZXI7XFxuICA3MDpcXHR9O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcXG4gIDczOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAqY2ZnKVxcbiAgNzQ6XFx0e1xcbiAgNzU6XFx0XFx0a2VybmVsX2NmZy1cXHUwMDNlZmxhZ3MgPSBjZmctXFx1MDAzZWZsYWdzO1xcbiAgNzY6XFx0XFx0a2VybmVsX2NmZy1cXHUwMDNldHhfdHlwZSA9IGNmZy1cXHUwMDNldHhfdHlwZTtcXG4gIDc3OlxcdFxcdGtlcm5lbF9jZmctXFx1MDAzZXJ4X2ZpbHRlciA9IGNmZy1cXHUwMDNlcnhfZmlsdGVyO1xcbiAgNzg6XFx0fVxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjAyLjgxMjMyNzQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTIwMzM4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBIYXJkd2FyZSBUaW1lc3RhbXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWdgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgYSBrZXJuZWwtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEl0J3Mgbm90IHNvbWV0aGluZyB3ZSdyZSBleHBvc2luZyBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJbnRlcmVzdGluZy4uLiB0aGUga2VybmVsJ3MgYG5ldC9jb3JlL2Rldl9pb2N0bC5jYCBjb2RlIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbi4gSXQncyBjb252ZXJ0aW5nIHRoZSBga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2AgaW50byBhIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCBiZWZvcmUgdGhhdCBkYXRhIGdldHMgcGFzc2VkIHVwLiBSaWdodCwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGBkZXZfaW9jdGwuY2Ag4oCTIG9yIG1heWJlIGV2ZW4gb3ZlciBpbiBgZXRodG9vbC9jb21tb24uY2Ag4oCTIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IGhvdyB0aGV5J3JlIHVzaW5nIHRoaXMgaW50ZXJuYWwgc3RydWN0dXJlLiBUaGF0J3Mgd2hlcmUgdGhlIGtleSBsaWVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb252ZXJzaW9uIHByb2Nlc3MsIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGhvdyB0aGUgdXNlciBzcGFjZSBkYXRhIGlzIGNvbnN0cnVjdGVkLiBHb3R0YSBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODowNy4wNjQzNjM4MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTM5ODk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZXJuZWxfaHd0c3RhbXBfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuaD00MDQ9aW50IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2Lmg6NDA1OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxcbm5ldC9jb3JlL2Rldi5oLTQwNi1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvY29yZS9kZXYuaD00MDc9aW50IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2Lmg6NDA4OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5uZXQvY29yZS9kZXYuaDo0MDk6aW50IG5ldF9od3RzdGFtcF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5uZXQvY29yZS9kZXYuaC00MTAtXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0xNDA9c3RhdGljIGludCBkZXZfaWZzaW9jX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBpbnQgY21kKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMTg4LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjE4OTppbnQgbmV0X2h3dHN0YW1wX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMTkwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI1OD1pbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzoyNTk6XFx0XFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjYwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTI4Mj1zdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODQtXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjg1OlxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtlcm5lbF9jZmcgPSB7fTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yODYtXFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjZmc7XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0zMjg9aW50IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6MzI5OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnLFxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTMzMC1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzMyLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjMzMzpcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyBvbGRfY2ZnID0ge307XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzM0LVxcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMzc2LVxcdGlmIChwaHlfdHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VzZWVfYWxsX2h3dHN0YW1wX3JlcXVlc3RzKVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjM3NzpcXHRcXHRjaGFuZ2VkID0ga2VybmVsX2h3dHN0YW1wX2NvbmZpZ19jaGFuZ2VkKFxcdTAwMjZvbGRfY2ZnLCBjZmcpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTM3OC1cXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTMtXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mzk0OlxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtlcm5lbF9jZmcgPSB7fTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy0zOTUtXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ0MT1pbnQgZ2VuZXJpY19od3RzdGFtcF9nZXRfbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NDI6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ0My17XFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDYyOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa2VybmVsX2NmZyxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MDcuNTg1NzY4MzMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTk0NTE3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXRyaWV2ZXMgaGFyZHdhcmUgdGltZXN0YW1wIGluZm9ybWF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbmV0L2NvcmUvZGV2X2lvY3RsLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYGRldl9nZXRfaHd0c3RhbXBgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgZm9yIHJldHJpZXZpbmcgdGhvc2UgY3J1Y2lhbCB0aW1lc3RhbXAgdmFsdWVzLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MTAuNDQ1MjIyNzg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODI6XFx0c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiAyODM6XFx0e1xcbiAyODQ6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuIDI4NTpcXHRcXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyBrZXJuZWxfY2ZnID0ge307XFxuIDI4NjpcXHRcXHRzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNmZztcXG4gMjg3OlxcdFxcdGludCBlcnI7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdGlmICghb3BzLVxcdTAwM2VuZG9faHd0c3RhbXBfZ2V0KVxcbiAyOTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDI5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0a2VybmVsX2NmZy5pZnIgPSBpZnI7XFxuIDI5NjpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4gMjk3OlxcdFxcdGVyciA9IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcpO1xcbiAyOTg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4gMjk5OlxcdFxcdGlmIChlcnIpXFxuIDMwMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHQvKiBJZiB0aGUgcmVxdWVzdCB3YXMgcmVzb2x2ZWQgdGhyb3VnaCBhbiB1bmNvbnZlcnRlZCBkcml2ZXIsIG9taXRcXG4gMzAzOlxcdFxcdCAqIHRoZSBjb3B5X3RvX3VzZXIoKSwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGhhcyBhbHJlYWR5IGRvbmUgdGhhdFxcbiAzMDQ6XFx0XFx0ICovXFxuIDMwNTpcXHRcXHRpZiAoIWtlcm5lbF9jZmcuY29waWVkX3RvX3VzZXIpIHtcXG4gMzA2OlxcdFxcdFxcdGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChcXHUwMDI2Y2ZnLCBcXHUwMDI2a2VybmVsX2NmZyk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoaWZyLVxcdTAwM2VpZnJfZGF0YSwgXFx1MDAyNmNmZywgc2l6ZW9mKGNmZykpKVxcbiAzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMxMDpcXHRcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHJldHVybiAwO1xcbiAzMTM6XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHQvKipcXG4gMzE2OlxcdCAqIGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKCkgLSBDaGFuZ2UgaGFyZHdhcmUgdGltZXN0YW1waW5nIG9mIE5JQ1xcbiAzMTc6XFx0ICpcXHRvciBvZiBhdHRhY2hlZCBwaHlsaWIgUEhZXFxuIDMxODpcXHQgKiBAZGV2OiBOZXR3b3JrIGRldmljZVxcbiAzMTk6XFx0ICogQGNmZzogVGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXFxuIDMyMDpcXHQgKiBAZXh0YWNrOiBOZXRsaW5rIGV4dGVuZGVkIGFjayBtZXNzYWdlIHN0cnVjdHVyZSwgZm9yIGVycm9yIHJlcG9ydGluZ1xcbiAzMjE6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MTAuNDQ1MzI2NzY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzczNzcyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uIGluIHRoZSBOZXR3b3JrIFNpbXVsYXRvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyB0aW1lc3RhbXBpbmcgbG9naWMuIEkgc2VlIHRoYXQgd2l0aGluIGBkZXZfZ2V0X2h3dHN0YW1wYCwgYGtlcm5lbF9jZmdgIGlzIGluaXRpYWxseSBzZXQgdG8gYW4gZW1wdHkgc3RydWN0LiBUaGVuLCBgZGV2X2dldF9od3RzdGFtcF9waHlsaWJgIGdldHMgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGNhbGxzIHRoZSBkcml2ZXItc3BlY2lmaWMgYG9wcy1cdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgXHUwMDI2a2VybmVsX2NmZylgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGJlZ2lucy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBuc2ltX2dldF90c19jb25maWdgIGZ1bmN0aW9uLiBJJ20gbm90aWNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uICpjb21wbGV0ZWx5KiBvdmVyd3JpdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgYCpjb25maWdgIHBvaW50ZXIgd2l0aCBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AuIEhtbSwgYW5kIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCB3YXMgemVyby1pbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBuZXRkZXZzaW1gIHN0cnVjdHVyZS4gVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0hXG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIG5vdyB0aGF0IGBkZXZfZ2V0X2h3dHN0YW1wYCAqZG9lcyogc2V0IGBrZXJuZWxfY2ZnLmlmciA9IGlmcjtgICpiZWZvcmUqIGNhbGxpbmcgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYC4gVGhpcyBpcyBrZXkuIEJ1dCwgaWYgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AgdGhlbiBvdmVyd3JpdGVzIGAqY29uZmlnYCB3aXRoIHRoZSB6ZXJvLWluaXRpYWxpemVkIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCwgKnRoYXQqIG1lYW5zIHRoZSBgY29uZmlnLVx1MDAzZWlmcmAgZmllbGQgd2lsbCBhbHNvIGJlIGNsb2JiZXJlZCBhbmQgc2V0IHRvIGBOVUxMYCEgVGhhdCdzIG5vdCByaWdodC4gVGhpcyBjb3VsZCBsZWFkIHRvIHNvbWUgdmVyeSBjb25mdXNpbmcgdGltZXN0YW1waW5nIGJlaGF2aW9yLCBvciB3b3JzZSwgc2VnbWVudGF0aW9uIGZhdWx0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYGRldl9nZXRfaHd0c3RhbXBfcGh5bGliYCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoxNS45MjI3MTE2NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1OCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1ODpcXHRpbnQgZGV2X2dldF9od3RzdGFtcF9waHlsaWIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMjU5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdFxcdGh3cHJvdiA9IG5ldGRldl9vcHNfbG9ja19kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdiwgZGV2KTtcXG4gMjY0OlxcdFxcdGlmIChod3Byb3YpIHtcXG4gMjY1OlxcdFxcdFxcdGNmZy1cXHUwMDNlcXVhbGlmaWVyID0gaHdwcm92LVxcdTAwM2VkZXNjLnF1YWxpZmllcjtcXG4gMjY2OlxcdFxcdFxcdGlmIChod3Byb3YtXFx1MDAzZXNvdXJjZSA9PSBIV1RTVEFNUF9TT1VSQ0VfUEhZTElCIFxcdTAwMjZcXHUwMDI2XFxuIDI2NzpcXHRcXHRcXHQgICAgaHdwcm92LVxcdTAwM2VwaHlkZXYpXFxuIDI2ODpcXHRcXHRcXHRcXHRyZXR1cm4gcGh5X2h3dHN0YW1wX2dldChod3Byb3YtXFx1MDAzZXBoeWRldiwgY2ZnKTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0aWYgKGh3cHJvdi1cXHUwMDNlc291cmNlID09IEhXVFNUQU1QX1NPVVJDRV9ORVRERVYpXFxuIDI3MTpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9faHd0c3RhbXBfZ2V0KGRldiwgY2ZnKTtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNzQ6XFx0XFx0fVxcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAoZGV2LVxcdTAwM2VwaHlkZXYpKVxcbiAyNzc6XFx0XFx0XFx0cmV0dXJuIHBoeV9od3RzdGFtcF9nZXQoZGV2LVxcdTAwM2VwaHlkZXYsIGNmZyk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19od3RzdGFtcF9nZXQoZGV2LCBjZmcpO1xcbiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHRzdGF0aWMgaW50IGRldl9nZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjE1LjkyMjg0MzM0OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwNTc1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVGltZXN0YW1wIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuc2ltX2dldF90c19jb25maWdgIGlzIHNldHRpbmcgYGNvbmZpZy1cdTAwM2VpZnJgIHRvIGBOVUxMYC4gTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgYSByZWQgZmxhZyBiZWNhdXNlIEkga25vdyB0aGF0IGBkZXZfZ2V0X2h3dHN0YW1wYCB1c2VzIHRoYXQgYGlmcmAgc3RydWN0dXJlLiBCdXQgdGhlbiBJIHN0b3BwZWQgbXlzZWxmLiBMb29raW5nIGRlZXBlciBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZGV2X2dldF9od3RzdGFtcGAgZnVuY3Rpb24sIEkgY2FuIHNlZSB0aGF0IHRoZXJlJ3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBJdCBkb2Vzbid0IGFjdHVhbGx5IGRlcmVmZXJlbmNlIGBrZXJuZWxfY2ZnLmlmcmAsIGFzIEkgaW5pdGlhbGx5IGZlYXJlZC4gSW5zdGVhZCwgaXQgdXNlcyBgaWZyLVx1MDAzZWlmcl9kYXRhYCBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dCBgaWZyYCBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgZ29vZCEgU28sIGV2ZW4gdGhvdWdoIGBrZXJuZWxfY2ZnLmlmcmAgaXMgYmVpbmcgc2V0IHRvIGBOVUxMYCwgaXQgKnNob3VsZG4ndCogY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jay5cblxuSG93ZXZlciwgYSBzbWFsbCB2b2ljZSBpbiBteSBoZWFkIGlzIHNheWluZyBcIm5vdCBzbyBmYXN0IVwiLiBgaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsYCBpcyB1c2VkIGJ5IHRoZSBgZGV2X2dldF9od3RzdGFtcGAgZnVuY3Rpb24gdG8gY29weSBmaWVsZHMgZnJvbSBga2VybmVsX2NmZ2AgdG8gYGNmZ2AsIHdoaWNoIGlzIHRoZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgKml0KiBkb2Vzbid0IGhhdmUgYSBwb3RlbnRpYWwgZmxhdy4gSSB0aGluayBJJ2xsIGdvIGNoZWNrIHRoYXQgbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MjAuNjAzNDIzMzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0NTc4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oPTcyPXN0YXRpYyBpbmxpbmUgdm9pZCBod3RzdGFtcF9jb25maWdfdG9fa2VybmVsKHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtNzktXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnICpjZmcsXFxuaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICprZXJuZWxfY2ZnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyMC43NDU4ODgxOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDQ0ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgaHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsYCBmdW5jdGlvbiwgYmFzZWQgb24gd2hhdCdzIGltcGxpY2l0bHkgYW5kIGV4cGxpY2l0bHkgZ29pbmcgb24gaGVyZTpcblxuKipNeSBNZW50YWwgV2Fsa3Rocm91Z2ggb2YgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoaXMgbmFtZSwgaXQncyBjbGVhcmx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgdGltZXN0YW1waW5nIGNvbmZpZ3VyYXRpb24sIGxpa2VseSB3aXRoaW4gYSBrZXJuZWwgY29udGV4dC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgcHVycG9zZT8gV2hhdCBzcGVjaWZpY2FsbHkgaXMgaXQgcmVzcG9uc2libGUgZm9yIHdpdGhpbiB0aGUgbGFyZ2VyIGh3dHN0YW1wIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhYm91dCAqZ2V0dGluZyogY29uZmlndXJhdGlvbiwgKnNldHRpbmcqIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBpbi1iZXR3ZWVuPyBGcm9tIHRoZSBuYW1lIGFsb25lLCBJJ20gbGVhbmluZyB0b3dhcmQgcmV0cmlldmluZyBvciBjb252ZXJ0aW5nIGV4aXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhyb3VnaCB0aGUgYWN0dWFsIGNvZGUsIG9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZHJpdmVycy4gRG9lcyBpdCB0cmFuc2xhdGUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBpbnRvIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUgdW5kZXJzdGFuZHMsIG9yIHZpY2UtdmVyc2E/IElzIGl0IGFib3V0IHN5bmNocm9uaXphdGlvbiBvZiB0aGUgaGFyZHdhcmUgY2xvY2sgd2l0aCB0aGUgc3lzdGVtIGNsb2NrPyBXaGF0IHNwZWNpZmljIHBhcnRzIG9mIHRoZSBoYXJkd2FyZSBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlPyBOSUNzLCBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZXMsIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgY2xvY2tzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBvdGVudGlhbCB0aW1pbmcgaXNzdWVzIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBtaWdodCBoYW5kbGUgdGhlbSwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGNsb2NrIGRvbWFpbnMuXG5cbkknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiBvdGhlciBmdW5jdGlvbnMsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIFdoYXQgaXMgdGhlIHR5cGUgb2YgdGhlIHN0cnVjdHVyZSB3ZSBhcmUgcHVsbGluZyBjb25maWd1cmF0aW9uIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyNC41MzYzNDA4NDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0c3RhdGljIGlubGluZSB2b2lkIGh3dHN0YW1wX2NvbmZpZ19mcm9tX2tlcm5lbChzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnICpjZmcsXFxuICA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtlcm5lbF9jZmcpXFxuICA4MjpcXHR7XFxuICA4MzpcXHRcXHRjZmctXFx1MDAzZWZsYWdzID0ga2VybmVsX2NmZy1cXHUwMDNlZmxhZ3M7XFxuICA4NDpcXHRcXHRjZmctXFx1MDAzZXR4X3R5cGUgPSBrZXJuZWxfY2ZnLVxcdTAwM2V0eF90eXBlO1xcbiAgODU6XFx0XFx0Y2ZnLVxcdTAwM2VyeF9maWx0ZXIgPSBrZXJuZWxfY2ZnLVxcdTAwM2VyeF9maWx0ZXI7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnX2NoYW5nZWQoY29uc3Qgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmEsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODoyNC41MzY0MjI0NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjYwODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIFRpbWVzdGFtcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHNwZWNpZmljcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvcGVyYXRpb24gaXMgY29weWluZyBvdmVyIGEgZmV3IGtleSBlbGVtZW50czogYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIEVzc2VudGlhbGx5LCB0aGF0J3Mgd2hhdCdzIGJlaW5nIGV4dHJhY3RlZCBhbmQgYXNzaWduZWQgdG8gYGNmZ2AuIEFoLCByaWdodCwgdGhhdCBgY2ZnYCB2YXJpYWJsZSBpcyBhY3R1YWxseSBvZiB0eXBlIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYC4gSSBrbm93IEkndmUgc2VlbiB0aGF0IGRlZmluZWQgc29tZXdoZXJlIGJlZm9yZS4uLiB5ZXAsIHRoYXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oYC4gT2theSwgYmV0dGVyIGdvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGFuZCBlbnN1cmUgdGhvc2UgZmllbGRzIGFyZSBiZWluZyBoYW5kbGVkIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlndXJhdGlvbi4gR290dGEgc3RheSBvbiB0b3Agb2YgdGhlc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjI4LjE5MzAzMzc2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NDU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGh3dHN0YW1wX2NvbmZpZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmg9NzI9c3RydWN0IHNvX3RpbWVzdGFtcGluZyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oLTg5LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmg6OTA6c3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaC05MS1cXHRpbnQgZmxhZ3M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjI4LjI1ODU4NDgxN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk5OTM4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBgaHd0c3RhbXBfY29uZmlnYCBzdHJ1Y3QuIEkndmUgc2VlbiB0aGlzIHVzZWQgaW4gYSB2YXJpZXR5IG9mIGNvbnRleHRzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG5ldHdvcmsgdGltZSBzeW5jaHJvbml6YXRpb24gYW5kIGhhcmR3YXJlIHRpbWVzdGFtcGluZyDigJMgYm90aCBjcml0aWNhbCBmb3IgbG93LWxhdGVuY3kgYXBwbGljYXRpb25zIGFuZCBwcmVjaXNlIHRpbWluZyBhbmFseXNpcy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHN0cnVjdCB3aWxsIGhvbGQgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyB0byBjb25maWd1cmUgdGhlIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBmdW5jdGlvbmFsaXR5LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgdmFyaW91cyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kIGNvbnRyb2xzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIGluZGljYXRpbmcgUlggYW5kIFRYIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQsIHBlcmhhcHMgc3BlY2lmaWMgbW9kZXMgb2Ygb3BlcmF0aW9uIChlLmcuLCBzb2Z0d2FyZSBmYWxsYmFjayksIGFuZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBjbG9jayBzb3VyY2UuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGFjY3VyYXRlIHRpbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGFsc28gY29udGFpbiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBhc3NvY2lhdGVkIGNsb2NrJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYWxpYnJhdGlvbiBpZiBzdXBwb3J0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZS4gRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBzdHJ1Y3QgaXMgdGhlIGtleSB0byBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgY29uZmlndXJhdGlvbiwgc28gbGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoYXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODozMi45NTg1Mjk1MjVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7XFxuICA5MTpcXHRcXHRpbnQgZmxhZ3M7XFxuICA5MjpcXHRcXHRpbnQgdHhfdHlwZTtcXG4gIDkzOlxcdFxcdGludCByeF9maWx0ZXI7XFxuICA5NDpcXHR9O1xcbiAgOTU6XFx0XFxuICA5NjpcXHQvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy1cXHUwMDNlZmxhZ3MgKi9cXG4gIDk3OlxcdGVudW0gaHd0c3RhbXBfZmxhZ3Mge1xcbiAgOTg6XFx0XFx0LypcXG4gIDk5OlxcdFxcdCAqIFdpdGggdGhpcyBmbGFnLCB0aGUgdXNlciBjb3VsZCBnZXQgYm9uZCBhY3RpdmUgaW50ZXJmYWNlJ3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6MzIuOTU4NjM4NjY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTg1OTA3MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIV1RTVEFNUCBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgUGFkZGluZyBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnYCwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAuIGBod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWxgIGluaXRpYWxpemVzIHRoaXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gc25lYWt5IHBhZGRpbmcgaW4gdGhlcmUuXG5cbkl0J3MgZ290IHRocmVlIGBpbnRgIGZpZWxkcywgZWFjaCA0IGJ5dGVzLCBzbyB0aGF0J3MgMTIgYnl0ZXMgdG90YWwuIE9uIGEgNjQtYml0IHN5c3RlbSwgSSBoYXZlIHRvIGNvbnNpZGVyIGFsaWdubWVudC4gSXMgaXQgcGFkZGVkIHRvIDE2IGJ5dGVzPyBUaGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzIDQgYnl0ZXMsIGJlY2F1c2UgYWxsIHRoZSBtZW1iZXJzIGFyZSBgaW50YCwgc28gYHNpemVvZihzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnKWAgc2hvdWxkIGp1c3QgYmUgMTIuIE5vIHBhZGRpbmcgYXQgdGhlIGVuZCB0aGVuLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB3aGVuIGBjb3B5X3RvX3VzZXJgIGhhcHBlbnMsIHdlIGFyZSBjb3B5aW5nIDEyIGJ5dGVzIGFuZCBub3Qgc29tZSB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRodXMsIHdlIGFyZSBub3QgbGVha2luZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGBuc2ltX3NldF90c19jb25maWdgIGZ1bmN0aW9uLiBJIHNlZSBpdCB1cGRhdGVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGVgIGFuZCBgcnhfZmlsdGVyYC4gQnV0LCB3aGF0IGFib3V0IGBucy1cdTAwM2V0c3RhbXBfY29uZmlnLmZsYWdzYD8gSG1tLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGJlaW5nIHVwZGF0ZWQgYW55d2hlcmUgaGVyZS4gV2hlbiBgbnNpbV9nZXRfdHNfY29uZmlnYCBpcyBjYWxsZWQsIGl0IGFzc2lnbnMgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHRvIGBjb25maWdgLCBidXQgc2luY2UgYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgIHdhcyB6ZXJvLWluaXRpYWxpemVkLCB0aGlzIG1lYW5zIGBmbGFnc2AgaXMganVzdCAwLiBTZWVtcyBmaW5lLCBidXQgaXQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblxuRmluYWxseSwgSSdtIGNoZWNraW5nIGBuc2ltX2dldF90c19pbmZvYC4gSXQgY2FsbHMgYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gIHRvIGluaXRpYWxpemUgYGluZm9gLCBidXQgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB3aGF0J3MgYWN0dWFsbHkgaW4gYGV0aHRvb2xfb3BfZ2V0X3RzX2luZm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjQzLjU0NDU0OTUwOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjg4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRodG9vbF9vcF9nZXRfdHNfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz02OD1FWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X2xpbmspO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNjktXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo3MDppbnQgZXRodG9vbF9vcF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzEtXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTc5LX1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjgwOkVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNfaW5mbyk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy04MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NDMuNjAwNzgyNjY4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTMzMDQxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbnNpbV9nZXRfdHNfaW5mb2AgRnVuY3Rpb24gYW5kIFRpbWVzdGFtcGluZyBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gc2lnbmF0dXJlOiBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gLiBUaGF0J3Mgd2hhdCBgbnNpbV9nZXRfdHNfaW5mb2AgaXMgc3VwcG9zZWQgdG8gdXNlLiBCdXQgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBuc2ltX2dldF90c19pbmZvYCBhcHBlYXJzIHRvIGJlIHRha2luZyBhIGBzdHJ1Y3QgZXRodG9vbF90c19pbmZvICppbmZvYCBpbnN0ZWFkPyBUaGF0IHNlZW1zIGxpa2UgYSB0eXBlIG1pc21hdGNoIGFuZCBjb3VsZCBiZSBhIHByb2JsZW0uIExldCBtZSBjb25maXJtIHRoZSBzaWduYXR1cmUgZGlyZWN0bHkgaW4gdGhlIHBhdGNoIGNvZGU6XG5cbmBgYGNcbnN0YXRpYyBpbnQgbnNpbV9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuYGBgXG5cbkFoLCB0aGUgcGF0Y2ggKmRvZXMqIHNob3cgYHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvYC4gT2theSwgc28gd2hhdCdzIGdvaW5nIG9uPyBMZXQncyBsb29rIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGRpZmYgaXRzZWxmOlxuXG5gYGBjXG5AQCAtMjAwLDcgKzIwMCwxOCBAQCBzdGF0aWMgaW50IG5zaW1fZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XG4gXG4rXHRldGh0b29sX29wX2dldF90c19pbmZvKGRldiwgaW5mbyk7XG5gYGBcblxuUmlnaHQsIHRoZSBjb250ZXh0IGxpbmVzIGRvbid0IGRpcmVjdGx5IHNwZWNpZnkgdGhlIHR5cGUgb2YgYGluZm9gLCBidXQgSSBjYW4gaW5mZXIgaXQncyBgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm9gIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IGBldGh0b29sX29wX2dldF90c19pbmZvYCBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgcGFzc2VkIGJhY2sgdG8gdGhlIHVzZXIuIEknbGwgcmVhZCBpbnRvIGBldGh0b29sX29wX2dldF90c19pbmZvYCBub3cgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSBkYXRhIGZsb3cgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NDkuNDk0MDkwNzg5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdGludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA3MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4gIDcyOlxcdHtcXG4gIDczOlxcdFxcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9XFxuICA3NDpcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcXG4gIDc1OlxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxcbiAgNzY6XFx0XFx0XFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcXG4gIDc3OlxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IC0xO1xcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjQ5LjQ5NDI4OTMzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxOTY2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaW1lc3RhbXBpbmcgSW5mb3JtYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBgaW5mb2Agc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGFsbCBpdCBkb2VzIGRpcmVjdGx5IGlzIHNldCB0aGUgYHNvX3RpbWVzdGFtcGluZ2AgYW5kIGBwaGNfaW5kZXhgIGZpZWxkcy4gQSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGRvZXMgdGhpcyBmdW5jdGlvbiBpbXBsaWNpdGx5IHplcm8gb3V0IHRoZSByZXN0IG9mIHRoZSBgaW5mb2Agc3RydWN0LCBvciBpcyB0aGF0IGxlZnQgdG8gdGhlIGNhbGxlcj8gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUsIGJlY2F1c2UgaWYgdGhlcmUncyBubyBndWFyYW50ZWVkIGluaXRpYWxpemF0aW9uLCB0aGVuIHdlIGNvdWxkIGJlIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciBpbiB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24uIFNpbmNlIGl0J3MgYW4gZXRodG9vbCBvcGVyYXRpb24sIGl0J3MgY2FsbGVkIHNvbWV3aGVyZSBhcyBwYXJ0IG9mIHRoZSBldGh0b29sIGZyYW1ld29yay4gU28sIG15IG5leHQgc3RlcCBpcyB0byBsb2NhdGUgYWxsIGNhbGwgc2l0ZXMgZm9yIGBuc2ltX2dldF90c19pbmZvYCwgd2hpY2ggaXRzZWxmIGlzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5zaW1fZ2V0X3RzX2luZm9gLiBUaGF0IHNob3VsZCBsZWFkIG1lIHRvIHRoZSBwbGFjZSBpbiBgbmV0L2V0aHRvb2wvYCB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIEFuZCBpdCBtdXN0IGJlIGluIGVpdGhlciBgdHNpbmZvLmNgIG9yIGBpb2N0bC5jYC5cblxuT25jZSBJJ3ZlIGZvdW5kIHdoZXJlIHRoaXMgaXMgY2FsbGVkLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuIElzIGl0IG9uIHRoZSBzdGFjaz8gSXMgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVkPyBBbmQgY3J1Y2lhbGx5LCBpcyBpdCBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBldGh0b29sX29wX2dldF90c19pbmZvYD8gVGhhdCdzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIGV4aXN0cyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0dXJlLCBhbmQgSSdsbCBiYXNlIG15IHVuZGVyc3RhbmRpbmcgb2YgYmVoYXZpb3Igb24gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBpbmZvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODo1NC40NDYyNTkwMDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTMwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF90c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uYz05NTk9c3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2NS1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NjY6aW50IGV0aHRvb2xfbmV0X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk2Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3Mi1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NzM6XFx0aWYgKCFvcHMtXFx1MDAzZWdldF90c19pbmZvKVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk3NC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy05NzgtXFx0aW5mby1cXHUwMDNlcGhjX3F1YWxpZmllciA9IGh3cHJvdl9kZXNjLVxcdTAwM2VxdWFsaWZpZXI7XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTc5OlxcdGVyciA9IG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy05ODAtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTk5MD1zdHJ1Y3QgcGh5X2RldmljZSAqXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTkxOmV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk5Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDM0LVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwMzU6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTAzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQwLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjEwNDE6XFx0ZXJyID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNDItXFx0aWYgKGVyciA9PSAtRU5PREVWIHx8IGVyciA9PSAtRU9QTk9UU1VQUCkge1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA0NC1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDQ1OlxcdFxcdHBoeSA9IGV0aHRvb2xfcGh5X2dldF90c19pbmZvX2J5X3BoYyhkZXYsIGluZm8sIGh3cHJvdl9kZXNjKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDQ2LVxcdFxcdGlmIChJU19FUlIocGh5KSlcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTEwNjYtXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA2NzppbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA2OC1cXHRcXHRcXHQgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTA5MC1cXHRcXHRcXHR9XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTA5MTpcXHRcXHR9IGVsc2UgaWYgKG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8pIHtcXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMDkyOlxcdFxcdFxcdGVyciA9IG9wcy1cXHUwMDNlZ2V0X3RzX2luZm8oZGV2LCBpbmZvKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMDkzLVxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXBoY19pbmRleCBcXHUwMDNlPSAwKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTEwMy1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTA0OlxcdGVyciA9IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgaW5mbywgXFx1MDAyNmh3cHJvdi1cXHUwMDNlZGVzYyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTEwNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTExMzA9aW50IGV0aHRvb2xfZ2V0X3BoY192Y2xvY2tzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqKnZjbG9ja19pbmRleClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExMzQtXFxubmV0L2V0aHRvb2wvY29tbW9uLmM6MTEzNTpcXHRpZiAoIV9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZpbmZvKSlcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTM2LVxcdFxcdG51bSA9IHB0cF9nZXRfdmNsb2Nrc19pbmRleChpbmZvLnBoY19pbmRleCwgdmNsb2NrX2luZGV4KTtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTExNDA9RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF9waGNfdmNsb2Nrcyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtMTE0MS1cXG5uZXQvZXRodG9vbC9jb21tb24uYzoxMTQyOmludCBldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDMte1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDQ6XFx0cmV0dXJuIF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIGluZm8pO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTExNDUtfVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjExNDY6RVhQT1JUX1NZTUJPTChldGh0b29sX2dldF90c19pbmZvX2J5X2xheWVyKTtcXG5uZXQvZXRodG9vbC9jb21tb24uYy0xMTQ3LVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9NTc9aW50IGV0aHRvb2xfZ2V0X3J4X3JpbmdfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtNTgtXFxubmV0L2V0aHRvb2wvY29tbW9uLmg6NTk6aW50IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6NjA6aW50IGV0aHRvb2xfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtNjEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvLFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTYyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXJfZGVzYyAqaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjYzOmludCBldGh0b29sX25ldF9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZXRodG9vbC9jb21tb24uaC02NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTY2PXN0cnVjdCBwaHlfZGV2aWNlICpcXG5uZXQvZXRodG9vbC9jb21tb24uaDo2NzpldGh0b29sX3BoeV9nZXRfdHNfaW5mb19ieV9waGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvZXRodG9vbC9jb21tb24uaC02OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTY4PUVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfbGluayk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy02OS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjcwOmludCBldGh0b29sX29wX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy03MS1cXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNzktfVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6ODA6RVhQT1JUX1NZTUJPTChldGh0b29sX29wX2dldF90c19pbmZvKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTgxLVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0yNzc5PXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfZHVtcF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDEtXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODQyOnN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODQzLXtcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg0Ny1cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI4NDg6XFx0ZXJyID0gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgXFx1MDAyNmtlcm5lbF9pbmZvKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NDktXFx0aWYgKGVycilcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTIxLVxcdGNhc2UgRVRIVE9PTF9HRVRfVFNfSU5GTzpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1MjI6XFx0XFx0cmMgPSBldGh0b29sX2dldF90c19pbmZvKGRldiwgdXNlcmFkZHIpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzUyMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM9MzU9c3RhdGljIGludCB0c2NvbmZpZ19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtNjgtXFx0XFx0dHNfaW5mby5waGNfaW5kZXggPSAtMTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjY5OlxcdFxcdHJldCA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZ0c19pbmZvKTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTcwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTI2Mz10c2NvbmZpZ19zZXRfaHdwcm92X2Zyb21fZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzMtXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyNzQ6XFx0cmV0ID0gZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKGRldiwgXFx1MDAyNnRzX2luZm8sIGh3cHJvdl9kZXNjKTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTI3NS1cXHRpZiAoIXJldCkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yNzgtXFx0fSBlbHNlIHtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjI3OTpcXHRcXHRwaHkgPSBldGh0b29sX3BoeV9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcXHUwMDI2dHNfaW5mbywgaHdwcm92X2Rlc2MpO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjgwLVxcdFxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9OTY9c3RhdGljIGludCB0c2luZm9fcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMDktXFx0aWYgKHJlcS1cXHUwMDNlaHdwcm92X2Rlc2MuaW5kZXggIT0gLTEpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYzoxMTA6XFx0XFx0cmV0ID0gZXRodG9vbF9nZXRfdHNfaW5mb19ieV9waGMoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNldHNfaW5mbyxcXG5uZXQvZXRodG9vbC90c2luZm8uYy0xMTEtXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZyZXEtXFx1MDAzZWh3cHJvdl9kZXNjKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyMi1cXG5uZXQvZXRodG9vbC90c2luZm8uYzoxMjM6XFx0cmV0ID0gX19ldGh0b29sX2dldF90c19pbmZvKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZXRzX2luZm8pO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTEyNC1cXHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jPTM4OD1zdGF0aWMgaW50IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRkZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTM5OC1cXG5uZXQvZXRodG9vbC90c2luZm8uYzozOTk6XFx0aWYgKCFvcHMtXFx1MDAzZWdldF90c19pbmZvKVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQwMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYy00MTQtXFx0XFx0cmVwbHlfZGF0YS1cXHUwMDNldHNfaW5mby5waGNfcXVhbGlmaWVyID0gY3R4LVxcdTAwM2Vwb3NfcGhjcXVhbGlmaWVyO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQxNTpcXHRcXHRyZXQgPSBvcHMtXFx1MDAzZWdldF90c19pbmZvKGRldiwgXFx1MDAyNnJlcGx5X2RhdGEtXFx1MDAzZXRzX2luZm8pO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQxNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDg6NTQuNTAxMTk2NjU4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzMzMjg3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZXRodG9vbF9nZXRfdHNfaW5mb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgZ2V0dGluZyB0aW1lc3RhbXBpbmcgaW5mb3JtYXRpb24gdmlhIGV0aHRvb2wuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGV0aHRvb2xfZ2V0X3RzX2luZm9gIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBleHBsaWNpdCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHJldHJpZXZpbmcgYW5kIHByZXNlbnRpbmcgdGhlIHJlbGV2YW50IHRpbWVzdGFtcGluZyBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0ODo1OC4xNzQ1MjkyNTJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg0MjpcXHRzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxcbjI4NDM6XFx0e1xcbjI4NDQ6XFx0XFx0c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ga2VybmVsX2luZm87XFxuMjg0NTpcXHRcXHRzdHJ1Y3QgZXRodG9vbF90c19pbmZvIGluZm8gPSB7fTtcXG4yODQ2OlxcdFxcdGludCBlcnI7XFxuMjg0NzpcXHRcXG4yODQ4OlxcdFxcdGVyciA9IF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFxcdTAwMjZrZXJuZWxfaW5mbyk7XFxuMjg0OTpcXHRcXHRpZiAoZXJyKVxcbjI4NTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODUxOlxcdFxcbjI4NTI6XFx0XFx0aW5mby5jbWQgPSBrZXJuZWxfaW5mby5jbWQ7XFxuMjg1MzpcXHRcXHRpbmZvLnNvX3RpbWVzdGFtcGluZyA9IGtlcm5lbF9pbmZvLnNvX3RpbWVzdGFtcGluZztcXG4yODU0OlxcdFxcdGluZm8ucGhjX2luZGV4ID0ga2VybmVsX2luZm8ucGhjX2luZGV4O1xcbjI4NTU6XFx0XFx0aW5mby50eF90eXBlcyA9IGtlcm5lbF9pbmZvLnR4X3R5cGVzO1xcbjI4NTY6XFx0XFx0aW5mby5yeF9maWx0ZXJzID0ga2VybmVsX2luZm8ucnhfZmlsdGVycztcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgXFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSkpXFxuMjg1OTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ4OjU4LjE3NDcxODc2MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA2MjQ5MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgZXRodG9vbF9nZXRfdHNfaW5mb2AgQnVnKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHNpdHRpbmcgcmlnaHQgd2l0aCB0aGlzIGNvZGUgc25pcHBldC4gSSdtIGxvb2tpbmcgYXQgdGhlIGBldGh0b29sX2dldF90c19pbmZvYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0LCB3aGljaCBpcyBhIGBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mb2AsIGlzbid0IGJlaW5nIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgX19ldGh0b29sX2dldF90c19pbmZvYC4gV2UncmUgZGVjbGFyaW5nIGl0LCBjcmVhdGluZyBhIGxvY2FsIHZhcmlhYmxlIGZvciB0aGUgZXRodG9vbCBpbmZvLCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGEgcG90ZW50aWFsIHByb2JsZW0gcmlnaHQgdGhlcmUhXG5cbkl0IGFwcGVhcnMgdGhlIGNhbGwgdG8gYF9fZXRodG9vbF9nZXRfdHNfaW5mbyhkZXYsIFx1MDAyNmtlcm5lbF9pbmZvKWAgY291bGQgYmUgb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBga2VybmVsX2luZm9gLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19ldGh0b29sX2dldF90c19pbmZvYCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmNgIHRvIHNlZSBob3cgaXQncyBhY3R1YWxseSB1c2luZyB0aGUgYGtlcm5lbF9pbmZvYCBzdHJ1Y3R1cmUuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBjb3VsZCBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cywgZXNwZWNpYWxseSBpZiBgX19ldGh0b29sX2dldF90c19pbmZvYCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gd3JpdGUgdG8gdGhlIGZpZWxkcywgb3IgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlIG9mIHRoZSBzdHJ1Y3R1cmUuIERlcGVuZGluZyBvbiBob3cgYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgaGFuZGxlcyB0aGlzIHN0cnVjdCwgaXQncyBwb3NzaWJsZSB0aGlzIGNvZGUgaXMgcmVseWluZyBvbiB0aGUgdW5kZXJseWluZyBtZW1vcnkgdG8gYmUgemVyb2VkIG9yIHNldCBpbiBzb21lIHdheSB0aGF0J3Mgbm90IGNsZWFybHkgZGVmaW5lZCBoZXJlLiBMZXQncyBnbyBjaGVjayB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjAzLjE4MDk3MDc4MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NzpcXHRpbnQgX19ldGh0b29sX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTA2ODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbjEwNjk6XFx0e1xcbjEwNzA6XFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuMTA3MTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDcyOlxcdFxcbjEwNzM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNzQ6XFx0XFx0aHdwcm92ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cXHUwMDNlaHdwcm92KTtcXG4xMDc1OlxcdFxcdC8qIE5vIHByb3ZpZGVyIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQgYmVoYXZpb3IgKi9cXG4xMDc2OlxcdFxcdGlmICghaHdwcm92KSB7XFxuMTA3NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHM7XFxuMTA3ODpcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gZGV2LVxcdTAwM2VwaHlkZXY7XFxuMTA3OTpcXHRcXG4xMDgwOlxcdFxcdFxcdGV0aHRvb2xfaW5pdF90c2luZm8oaW5mbyk7XFxuMTA4MTpcXHRcXHRcXHRpZiAocGh5X2lzX2RlZmF1bHRfaHd0c3RhbXAocGh5ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbjEwODI6XFx0XFx0XFx0ICAgIHBoeV9oYXNfdHNpbmZvKHBoeWRldikpIHtcXG4xMDgzOlxcdFxcdFxcdFxcdGVyciA9IHBoeV90c19pbmZvKHBoeWRldiwgaW5mbyk7XFxuMTA4NDpcXHRcXHRcXHRcXHQvKiBSZXBvcnQgdGhlIHBoYyBzb3VyY2Ugb25seSBpZiB3ZSBoYXZlIGEgcmVhbFxcbjEwODU6XFx0XFx0XFx0XFx0ICogcGhjIHNvdXJjZSB3aXRoIGFuIGluZGV4LlxcbjEwODY6XFx0XFx0XFx0XFx0ICovXFxuMTA4NzpcXHRcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwaGNfaW5kZXggXFx1MDAzZT0gMCkge1xcbjEwODg6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlcGhjX3NvdXJjZSA9IEhXVFNUQU1QX1NPVVJDRV9QSFlMSUI7XFxuMTA4OTpcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VwaGNfcGh5aW5kZXggPSBwaHlkZXYtXFx1MDAzZXBoeWluZGV4O1xcbjEwOTA6XFx0XFx0XFx0XFx0fVxcbjEwOTE6XFx0XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldF90c19pbmZvKSB7XFxuMTA5MjpcXHRcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZWdldF90c19pbmZvKGRldiwgaW5mbyk7XFxuMTA5MzpcXHRcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwaGNfaW5kZXggXFx1MDAzZT0gMClcXG4xMDk0OlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXBoY19zb3VyY2UgPSBIV1RTVEFNUF9TT1VSQ0VfTkVUREVWO1xcbjEwOTU6XFx0XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRcXHRpbmZvLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XFxuMTA5ODpcXHRcXHRcXHRcXHRcXHRcXHQgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMDI6XFx0XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRlcnIgPSBldGh0b29sX2dldF90c19pbmZvX2J5X3BoYyhkZXYsIGluZm8sIFxcdTAwMjZod3Byb3YtXFx1MDAzZWRlc2MpO1xcbjExMDU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTEwNjpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTowMy4xODExNzg2NjFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MTEzOTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGV0aHRvb2wgVGltZXN0YW1wIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIGNhbGxpbmcgYGV0aHRvb2xfaW5pdF90c2luZm8oaW5mbylgLiBDbGFzc2ljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhhdCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cIiBJJ20gbm90IHN1cnByaXNlZCB0byBzZWUgdGhhdCBzZXF1ZW5jZSBvZiBldmVudHMgaW4gdGhlIGNvZGUsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBpcyBiZWluZyBraWNrZWQgb2ZmIGhlcmUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjb21tb24gaW5pdGlhbGl6YXRpb24gcGF0aCBvciBhIHNwZWNpZmljIGNvZGUgcGF0aD8gSXMgdGhpcyBhIG9uZS10aW1lIHRoaW5nIG9yIGRvZXMgYGV0aHRvb2xfaW5pdF90c2luZm9gIGdldCBjYWxsZWQgcmVwZWF0ZWRseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaW5pdGlhbGl6YXRpb24sIHNvIHdoYXQgc3RhdGUgYXJlIHdlIHB1dHRpbmcgdGhpcyB0aW1lc3RhbXAgaW5mbyBvYmplY3QgaW50bz8gQXJlIHdlIHByZS1maWxsaW5nIHdpdGggc2FuZSBkZWZhdWx0cywgY2hlY2tpbmcgdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBzY2FuIG9mIGBldGh0b29sX2luaXRfdHNpbmZvYCB3aWxsIHRlbGwgbWUgZXhhY3RseSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGF0LiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgaW5mb3JtIGhvdyB0byBkZWJ1ZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWF5IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MDguMjMyMzIyMTJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1OSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1OTpcXHRzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbiA5NjA6XFx0e1xcbiA5NjE6XFx0XFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbiA5NjI6XFx0XFx0aW5mby1cXHUwMDNlY21kID0gRVRIVE9PTF9HRVRfVFNfSU5GTztcXG4gOTYzOlxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IC0xO1xcbiA5NjQ6XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRpbnQgZXRodG9vbF9uZXRfZ2V0X3RzX2luZm9fYnlfcGhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyxcXG4gOTY4OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBod3RzdGFtcF9wcm92aWRlcl9kZXNjICpod3Byb3ZfZGVzYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MDguMjMyNDQ4MjhaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2Njc1MTMwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgZXRodG9vbF9nZXRfdHNfaW5mb2AgcGF0aCBzZWVtcyBzb2xpZC4gVGhlIGBrZXJuZWxfaW5mb2Agc3RydWN0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldGAgYmVmb3JlIGJlaW5nIHBhc3NlZCBhcm91bmQsIGFuZCBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlIGNvbWVzIGZyb20gdGhhdCBpbml0aWFsaXplZCBtZW1vcnkuIE5vIGlzc3VlcyB0aGVyZS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIGBuc2ltX2dldF90c19pbmZvYC4gSSBpbml0aWFsbHkgdGhvdWdodCBJIG1pZ2h0IGZpbmQgYSBwcm9ibGVtLCBidXQgaXQgbG9va3MgbGlrZSBgZXRodG9vbF9vcF9nZXRfdHNfaW5mb2AgKmlzKiBjYWxsZWQsIGJ1dCB0aGUgIGBfX2V0aHRvb2xfZ2V0X3RzX2luZm9gIGZ1bmN0aW9uIGVuc3VyZXMgdGhlIGBpbmZvYCBpcyB6ZXJvZWQsIHdoaWNoIG1lYW5zIGBuc2ltX2dldF90c19pbmZvYCBkb2Vzbid0IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGBuc2ltX3N0YXJ0X3htaXRgLiBUaGlzIGlzIG1vcmUgY29tcGxleC4gSSdtIHNjcnV0aW5pemluZyB0aGUgcG90ZW50aWFsIHVzZSBvZiBgcnhfdHNgLiBUaGUgY29kZSBoYXMgc2V2ZXJhbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gaGFyZHdhcmUgdGltZXN0YW1waW5nIChgU0tCVFhfSFdfVFNUQU1QYCksICBgdHhfdHlwZWAgYW5kIGByeF9maWx0ZXJgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXM6XG5cbiogICBJZiBgcHRwX2luZm9fcnhgIGlzIHRydWUsIHRoZW4gYHJ4X3RzYCBpcyBhc3NpZ25lZCBhIHZhbHVlIGJlZm9yZSBpdCdzIHVzZWQgZWl0aGVyIGluc2lkZSB0aGUgYGlmIChwdHBfaW5mb190eClgIG9yIGluIHRoZSBgZWxzZSBpZiAocHRwX2luZm9fcngpYCBibG9ja3MuIFRoZSB0aW1pbmcgaXMgaW1wb3J0YW50LCBidXQgdGhlcmUgaXMgbm8gb2J2aW91cyByYWNlIGNvbmRpdGlvbiBzaW5jZSB0aGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIGV2YWx1YXRlZCBhdCBydW50aW1lLlxuKiAgIFRoZSBwcm9ibGVtYXRpYyBwYXRoIEkgc2F3IHdhcyB3aGVyZSBgcHRwX2luZm9fdHhgIGlzIHRydWUsIGJ1dCBgbGlrZWx5KHB0cF9pbmZvX3J4KWAgaXMgZmFsc2UuICBJIGhhZCB0byBkb3VibGUgY2hlY2ssIGJ1dCBpbiB0aGlzIGNhc2UsIGByeF90c2AgaXNuJ3QgdXNlZCBhdCBhbGwgaW4gYW55IGNhc2UuXG4qICAgU2ltaWxhcmx5IGZvciBgdHhfdHNgLCBpZiB0aGUgYHB0cF9pbmZvX3R4YCBjb25kaXRpb24gaXMgbWV0LCB0aGVuIGl0IGlzIGJvdGggaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIG90aGVyd2lzZSwgaXQgaXMgbm90IHVzZWQuXG5cbkkgYmVsaWV2ZSBgc2hod3RzdGFtcHNgIGlzIGluaXRpYWxpemVkIHRvIGB7fWAuIEFuZCBhbHRob3VnaCBJIGFtIG5vdCBjZXJ0YWluIGlmIHBhZGRpbmcgaXMgYWRkZWQsIGl0IGlzIGluaXRpYWxpemVkIHdoaWNoIG1lYW5zIGFueSBhY2Nlc3Mgd2lsbCBub3QgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuXG5UaHVzLCBgbnNpbV9zdGFydF94bWl0YCBpcyBhbHNvIHNhZmUuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjIzLjg5OTk2NDcyM1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTAxNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQxMD1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdfbXVzdF9sb29wKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjEtICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NjI6c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2My1cXHR1bmlvbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjI0LjA4NzQ5NjA0MVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMzE5MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wc2A6XG5cbioqRGl2aW5nIGludG8gYHNrYl9zaGFyZWRfaHd0c3RhbXBzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyB0aW1lc3RhbXAgc3RydWN0dXJlLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGUgYHNrX2J1ZmZgIGludGVybmFscywgb2YgY291cnNlLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSB0aW1lc3RhbXBzLiBTbywgYHNrYl9zaGFyZWRfaHd0c3RhbXBzYCwgaHVoPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcHJvYmFibHkgaG9sZHMgc29tZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCBoYXJkd2FyZS1nZW5lcmF0ZWQgdGltZXN0YW1wcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNrX2J1ZmYsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGFuZCB0aGVyZWZvcmUgc2hhcmVkIGFjcm9zcyBjbG9uZWQgc2ticywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgb3B0aW1pemF0aW9uLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgY29udGFpbnMgZmllbGRzIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgdGltZXN0YW1wcywgbGlrZSBpbmdyZXNzIGFuZCBlZ3Jlc3MsIHBlcmhhcHMgZnJvbSB2YXJpb3VzIE5JQ3Mgb3IgaGFyZHdhcmUgYmxvY2tzLiBOb3csIGxldCdzIHNlZSBob3cgdGhlIGtlcm5lbCB1c2VzIHRoaXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZXN0YW1wcyBhcmUgYWN0dWFsbHkgcG9wdWxhdGVkIGFuZCB0aGVuIHJlYWQuIElzIGl0IGFjY2Vzc2VkIGF0b21pY2FsbHk/IFdoYXQgbG9ja2luZyBpcyBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcz8gVW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uIGhlcmUgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIGtub3cgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJvdmlzaW9ucyB0byBoYW5kbGUgbWlzc2VkIG9yIGNvcnJ1cHRlZCB0aW1lc3RhbXBzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByZWxldmFudCBkZWZpbml0aW9ucyBpbiB0aGUgc3RhbmRhcmQgaW5jbHVkZSBmaWxlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgZGV2ZWxvcGVycyBzdHJ1Y3R1cmVkIHRoaXMgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgc2NhbGFiaWxpdHkuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgb3IgZHJpdmVyLXNwZWNpZmljIGhvb2tzPyBUaW1lIHRvIGdldCBpbnRvIGl0IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MjcuODY4ODE4MTUzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MjpcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMge1xcbiA0NjM6XFx0XFx0dW5pb24ge1xcbiA0NjQ6XFx0XFx0XFx0a3RpbWVfdFxcdGh3dHN0YW1wO1xcbiA0NjU6XFx0XFx0XFx0dm9pZCAqbmV0ZGV2X2RhdGE7XFxuIDQ2NjpcXHRcXHR9O1xcbiA0Njc6XFx0fTtcXG4gNDY4OlxcdFxcbiA0Njk6XFx0LyogRGVmaW5pdGlvbnMgZm9yIHR4X2ZsYWdzIGluIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKi9cXG4gNDcwOlxcdGVudW0ge1xcbiA0NzE6XFx0XFx0LyogZ2VuZXJhdGUgaGFyZHdhcmUgdGltZSBzdGFtcCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OToyNy44NjkwNzg5MDNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0NTgzNjQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBMZWFrcyBpbiBQVFAgVGltZXN0YW1waW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIChgc2tiX3NoYXJlZF9od3RzdGFtcHNgKSBpcyBqdXN0IGEgdW5pb24gb2YgYGt0aW1lX3RgIGFuZCBgdm9pZCAqYCwgYW5kIHNpbmNlIGBzaGh3dHN0YW1wc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYHt9YCAocHJlc3VtYWJseSB6ZXJvZWQpLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGltbWVkaWF0ZSBtZW1vcnkgbGVha3MgZnJvbSB1bmluaXRpYWxpemVkIGRhdGEuXG5cbk5leHQsIEknbGwgZXhhbWluZSB0aGUgYG1vY2tfcGhjX2dldHRpbWU2NGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL3B0cC9wdHBfbW9jay5jYC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBgdGltZWNvdW50ZXJfcmVhZGAgYW5kIHRoZW4gYG5zX3RvX3RpbWVzcGVjNjRgLCB3aGljaCBndWFyYW50ZWVzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCB0aW1lc3BlYzY0YC4gQ29uc2VxdWVudGx5LCBgdHhfdHNgIGFuZCBgcnhfdHNgIHNob3VsZCBhbHNvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIGBtb2NrX3BoY19zZXR0aW1lNjRgIGZ1bmN0aW9uIGFsc28gYXBwZWFycyBzYWZlIGJhc2VkIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBGdXJ0aGVybW9yZSwgdGhlIGFkanVzdG1lbnRzIGZvciBgbW9ja19waGNfYWRqdGltZWAgYW5kIGBtb2NrX3BoY19hZGpmaW5lYCBqdXN0IGZpeCBsb2NraW5nIGZvciBpcnEgc2FmZXR5LCBub3QgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5NeSBhdHRlbnRpb24gdGhlbiB0dXJucyB0byB0aGUgY2hhbmdlcyBpbiBgbnNpbV9zdGFydF94bWl0YC4gVGhlIGFkZGl0aW9uIG9mIGBwdHAucHlgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBgTWFrZWZpbGVgIGFuZCBgY29uZmlnYCBmaWxlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYCBjb3VsZCBpbnRyb2R1Y2Ugc29tZXRoaW5nIHVuZXhwZWN0ZWQsIGJ1dCBsZXQncyBmb2N1cyBvbiB0aGUgdGltZXN0YW1waW5nIGxvZ2ljIGZpcnN0LlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgYG5zaW1fc3RhcnRfeG1pdGAgbGluZS1ieS1saW5lLiBUaGUgY29kZSBhcHBlYXJzIHRvIGNhcHR1cmUgdGltZXN0YW1wcyAoYHR4X3RzYCwgYHJ4X3RzYCkgdXNpbmcgYGdldHRpbWU2NGAuIEl0IHRoZW4gY29udmVydHMgYHR4X3RzYCB0byBhIGBrdGltZV90YCBhbmQgYXNzaWducyBpdCB0byBgc2hod3RzdGFtcHMuaHd0c3RhbXBgLiAgYHNrYl90c3RhbXBfdHhgIHNlZW1zIHRvIGJlIHRoZSBjdWxwcml0LiBJdCBjbG9uZXMgdGhlIHNrYiBhbmQgcXVldWVzIGl0IHRvIHRoZSBzb2NrZXQncyBlcnJvciBxdWV1ZS5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQ6IGBza2JfaHd0c3RhbXBzKHNrYiktXHUwMDNlaHd0c3RhbXAgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHJ4X3RzKTtgIGNvdWxkIGJlIG92ZXJ3cml0aW5nIGRhdGEuICBIb3dldmVyLCB0aGlzIGxpbmUgc2V0cyBgc2tiX2h3dHN0YW1wcyhza2IpLVx1MDAzZWh3dHN0YW1wYCB3aGljaCByZWZlcnMgdG8gYSBgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzYCB3aXRoaW4gdGhlIFNLQidzIHNoYXJlZCBpbmZvLiAgQ3J1Y2lhbGx5LCBgc2tiX3NoYXJlZF9od3RzdGFtcHNgIGlzIGEgdW5pb24gb2YgYSBga3RpbWVfdGAgKHVzZWQgZm9yIGBod3RzdGFtcGApIGFuZCBhIGB2b2lkICpuZXRkZXZfZGF0YWAuIFNpbmNlIGBod3RzdGFtcGAgaXMgYmVpbmcgc2V0LCB0aGUgZW50aXJlIHVuaW9uIGlzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemVkLiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIGxlYWsuXG5cbk5vdywgdGhpcyBjb25kaXRpb25hbCBgaWYgKHNrYilgIGFmdGVyIGBza2JfY29weWAsIGFuZCB0aGUgYGVsc2VgIHN0YXRlbWVudCBzZXR0aW5nIGBza2IgPSBza2Jfb3JpZ2AuICBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG9mIGBza2JfdHN0YW1wX3R4YC4gRG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggdGhlIFNLQidzIHRpbWVzdGFtcGluZyBkYXRhP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0MS4zMjc0NDgyNDhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTYyMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc2tiX3RzdGFtcF90eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NTY1MT1zdGF0aWMgYm9vbCBza2JfdHN0YW1wX3R4X3JlcG9ydF9zb190aW1lc3RhbXBpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU2NjktXFxubmV0L2NvcmUvc2tidWZmLmM6NTY3MDpzdGF0aWMgdm9pZCBza2JfdHN0YW1wX3R4X3JlcG9ydF9icGZfdGltZXN0YW1waW5nKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTY3MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTc2MT1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl90c3RhbXBfdHgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjItXFxubmV0L2NvcmUvc2tidWZmLmM6NTc2Mzp2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NjQtXFx0XFx0ICAgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjQxLjM3NTAxNjA1OFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE4MDA0MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgc2tiX3RzdGFtcF90eGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgY29kZSBmb3IgYHNrYl90c3RhbXBfdHhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIGFib3V0IHRpbWVzdGFtcGluZyB0cmFuc21pdHRlZCBTS0JzLlwiIEtub3dpbmcgdGhlIGtlcm5lbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW50cmljYWNpZXMuIElzIHRoaXMgaGFyZHdhcmUgdGltZXN0YW1waW5nPyBTb2Z0d2FyZT8gV2hlcmUgZXhhY3RseSBpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGggaXMgdGhpcyB0aW1lc3RhbXBpbmcgaGFwcGVuaW5nPyBJcyBpdCBiZWluZyBkb25lIGluc2lkZSB0aGUgZHJpdmVyLCBpbiB0aGUgbmV0d29yayBzdGFjaywgb3IgcGVyaGFwcyBpbiB0aGUgaGFyZHdhcmUgaXRzZWxmPyBJIG5lZWQgdG8gbG9vayBmb3IgY2x1ZXMgYWJvdXQgdGhlIHRpbWVyIHNvdXJjZSB1c2VkIGFuZCB0aGUgcHJlY2lzaW9uIHJlcXVpcmVtZW50cyB0byBnZXQgYSBmZWVsIGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIHdvbmRlciBpZiB0aGlzIGlzIHRpZWQgdG8gc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2VzIG9yIGlzIGEgbW9yZSBnZW5lcmljIGZhY2lsaXR5IHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlPyBEb2VzIHRpbWVzdGFtcGluZyBhZGQgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdG8gdHJhbnNtaXNzaW9uPyBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGltZXN0YW1wIHJldHJpZXZhbC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBjb25jdXJyZW50IGFjY2Vzc2VzLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGluIHBsYWNlLCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVycyByZWxhdGVkIHRvIHRoaXMgbWVjaGFuaXNtLiBUaGUga2V5IGhlcmUgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHByb3ZpZGluZyBhY2N1cmF0ZSB0cmFuc21pc3Npb24gdGltZSBpbmZvcm1hdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDYuMjkzMDIyNDk4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzYzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzYzOlxcdHZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsXFxuNTc2NDpcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcylcXG41NzY1OlxcdHtcXG41NzY2OlxcdFxcdHJldHVybiBfX3NrYl90c3RhbXBfdHgob3JpZ19za2IsIE5VTEwsIGh3dHN0YW1wcywgb3JpZ19za2ItXFx1MDAzZXNrLFxcbjU3Njc6XFx0XFx0XFx0XFx0ICAgICAgIFNDTV9UU1RBTVBfU05EKTtcXG41NzY4OlxcdH1cXG41NzY5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl90c3RhbXBfdHgpO1xcbjU3NzA6XFx0XFxuNTc3MTpcXHQjaWZkZWYgQ09ORklHX1dJUkVMRVNTXFxuNTc3MjpcXHR2b2lkIHNrYl9jb21wbGV0ZV93aWZpX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFja2VkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0Ni4yOTMzMzM5MDhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMDQyNzkxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSGFyZHdhcmUgVGltZXN0YW1waW5nIGluIGBuZXRkZXZzaW1gOiBBIFRob3JvdWdoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIGBfX3NrYl90c3RhbXBfdHhgIHNlZW1zIGhhcm1sZXNzLiBJdCBjbG9uZXMgdGhlIFNLQiBhbmQgcXVldWVzIGl0LCBidXQgdGhlIG9yaWdpbmFsIFNLQiByZW1haW5zIHVudG91Y2hlZCwgd2hpY2ggaXMgZmluZS4gVGhlbiwgbW9kaWZ5aW5nIGBza2JfaHd0c3RhbXBzKHNrYiktXHUwMDNlaHd0c3RhbXBgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGNvcHkgb3IgdGhlIG9yaWdpbmFsIFNLQiwgYW5kIHRoZSB0aW1lc3RhbXAgaXMgYmVpbmcgc2V0IGluIGEgY29udHJvbGxlZCBtYW5uZXIuIE5vIHByb2JsZW1zIHRoZXJlLlxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGxlYWtzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHJldmlzaXQgYG5zaW1fZ2V0X3RzX2NvbmZpZ2AuIEkgcmVjYWxsIHRoZSBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AgYmVpbmcgemVyb2VkIG9uIGFsbG9jYXRpb24uIE5vdywgYGRldl9nZXRfaHd0c3RhbXBgIGluaXRpYWxpemVzIGEgbG9jYWwgYGtlcm5lbF9jZmdgIHRvIGB7fWAgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIG92ZXJ3cml0ZSBwYXJ0cyBvZiBpdCBsb29rIHNhZmUgYmVjYXVzZSBgbnMtXHUwMDNldHN0YW1wX2NvbmZpZ2AncyByZWxldmFudCBmaWVsZHMgYXJlIGVpdGhlciBpbml0aWFsaXplZCBvciBub3QgdXNlZC4gSSd2ZSB0byBkb3VibGUtY2hlY2sgYGNvcHlfdG9fdXNlcmAuIEl0IGNvcGllcyB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZnJvbSBga2VybmVsX2NmZ2AsIGFuZCB0aGUgZGVzdGluYXRpb24gc3RydWN0LCBgY2ZnYCwgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgc2l6ZSBpcyBvbmx5IDEyIGJ5dGVzIGFuZCBgY29weV90b191c2VyYCBjb3BpZXMgZXhhY3RseSB0aGF0LCBhbmQgdGh1cyBubyBpc3N1ZXMgd2l0aCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cblxuTm93LCBob2xkIG9uLiBXaGF0IGFib3V0IHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZ2A/IFRoaXMgc3RydWN0IGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBldmVuIGlmIHRoZXJlICp3YXMqIHVuaW5pdGlhbGl6ZWQgcGFkZGluZywgaXQgaXNuJ3QgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIE9ubHkgdGhlIHNtYWxsZXIsIGNsZWFybHkgZGVmaW5lZCBgc3RydWN0IGh3dHN0YW1wX2NvbmZpZ2AgaXMgY29waWVkIGFuZCBpcyBmaW5lLiBTbywgc3RpbGwgZ29vZC5cblxuQWxyaWdodCwgbW92aW5nIG9uIHRvIGBuc2ltX3NldF90c19jb25maWdgLCBpdCB1cGRhdGVzIGBucy1cdTAwM2V0c3RhbXBfY29uZmlnYCdzIGB0eF90eXBlYCBhbmQgYHJ4X2ZpbHRlcmAgaW4gYSBjb250cm9sbGVkIHdheSwgYW5kIHNpbmNlIHdlIHVwZGF0ZSBib3RoIHN0cnVjdHMgYXRvbWljYWxseSwgaXQgc2VlbXMgc2FmZS5cblxuTGV0J3MgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZm9yIHBvdGVudGlhbCBwaXRmYWxscy4gYG1vY2tfcGhjX2FkamZpbmVgLCBldGMuLCBpbiBgcHRwX21vY2suY2Agb25seSBjaGFuZ2Ugc3BpbmxvY2tzIHRvIHRoZWlyIGlycXNhdmUgY291bnRlcnBhcnRzLCBzbyB0aGVzZSBhcmUgbG9ja2luZyBjaGFuZ2VzIGFuZCBub3QgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gSSdtIGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJlLlxuXG5Ob3csIGBtb2NrX3BoY19nZXRfcHRwX2luZm9gIGlzIHNhZmU7IGl0IHNpbXBseSByZXR1cm5zIGEgcG9pbnRlciB0byBgcGhjLVx1MDAzZWluZm9gLiBObyBtYWdpYywgbm8gbWVtb3J5IGlzc3Vlcy5cblxuSG93IGFib3V0IGBuc2ltX3N0YXJ0X3htaXRgPyBUaGF0IHNlZW1zIGZpbmU7IGl0IHVzZXMgYHB0cF9pbmZvX3R4YCBhZnRlciBjaGVja2luZyBgU0tCVFhfSFdfVFNUQU1QYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNhZmV0eSBvZiBgc2tiX2NvcHlgIHdoaWNoIGlzIGNydWNpYWwsIGxldCdzIHN0ZXAgdGhyb3VnaCBpdDogaWYgdGhlIGNvcHkgc3VjY2VlZHMsIHRoZSBvcmlnaW5hbCBTS0IgaXMgY29uc3VtZWQsIGFuZCB0aGUgdGltZXN0YW1wIGlzIHNldCBvbiB0aGUgbmV3IGNvcHkgdXNpbmcgYHNrYl9od3RzdGFtcHMoKWAuIFRoaXMgbG9va3Mgc2FmZS4gVGhlIG5ldyBTS0IgaXMgdGhlbiBmb3J3YXJkZWQsIGFzIGl0IHNob3VsZCBiZS4gTm8gaXNzdWVzIHRoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgZGF0YSByYWNlcywgc28gbGV0J3MgY2hlY2sgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gYG5zLVx1MDAzZXRzdGFtcF9jb25maWdgLCBhbmQgdGhlIHVzZSBvZiB0aGVzZSBpcyBmaW5lIGJlY2F1c2UgdGhleSBwcm92aWRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXIuXG5cbkkgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGBzaGh3dHN0YW1wc2AgYW5kIGB0eF90c2AsIGByeF90c2AgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHMgPSB7fTtgIGxpbmUgemVyby1pbml0aWFsaXplcyB0aGlzIHN0cnVjdC4gU2FmZS5cblxuTm93LCBhYm91dCBgdHhfdHNgIGFuZCBgcnhfdHNgIEkgbmVlZCB0byByZXZpZXcgdGhpcy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBgcHRwX2luZm9fdHgtXHUwMDNlZ2V0dGltZTY0YCBhbmQgYHB0cF9pbmZvX3J4LVx1MDAzZWdldHRpbWU2NGAgZnVuY3Rpb25zLiBJZiBgcHRwX2luZm9fdHhgIGlzIHRydWUsIHRoZW4gYHR4X3RzYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuIElmIGBwdHBfaW5mb19yeGAgaXMgdHJ1ZSwgdGhlbiBgcnhfdHNgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBhbmQgdXNlZC4gSWYgbm90LCBpdCBpcyB1bnVzZWQuXG5cbldhaXQgYSBzZWNvbmQuIFdoYXQgaWYgYHB0cF9pbmZvX3R4LVx1MDAzZWdldHRpbWU2NGAgZmFpbHM/IEkgcmVtZW1iZXIgdGhhdCB0aGUgYGdldHRpbWU2NGAgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kIHRoZSBtb2NrIGltcGxlbWVudGF0aW9uIGluIGBwdHBfbW9jay5jYCBhbHdheXMgcmV0dXJuIDAsIGluaXRpYWxpemluZyB0aGUgYHRzYCBwYXJhbWV0ZXIuIFBsdXMsIGBwdHBfaW5mb190eGAgYWx3YXlzIGNhbGxzIGBtb2NrX3BoY19nZXR0aW1lNjRgLiBTbyB0aGUgdGltZXN0YW1waW5nIGFsd2F5cyBpbml0aWFsaXNlcyBwcm9wZXJseS5cblxuRmluYWxseSwgbGV0J3MgcXVpY2tseSBjaGVjayBgbnNpbV9nZXRfdHNfaW5mb2AgYW5kIGBuc2ltX2dldF90c19jb25maWdgLiBJbiBgbnNpbV9nZXRfdHNfaW5mb2AsIGBpbmZvYCBpcyBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci4gU28gYWxzbyBzYWZlLiBBbmQgaW5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ2LCJPdXRwdXRUb2tlbnMiOjQ3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDoxNi40OTc2MTYxOTVaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIG5ldGRldnNpbSBkcml2ZXIgYW5kIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBwdHBfbW9jay5jIGJ5IHN3aXRjaGluZyB0byBpcnEtc2FmZSBzcGlubG9ja3MuIFxcblxcbkFuYWx5c2lzIG9mIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBgbnNpbV9nZXRfdHNfY29uZmlnYCBjb3BpZXMgYG5zLVxcdTAwM2V0c3RhbXBfY29uZmlnYCB0byB0aGUgcHJvdmlkZWQgYGtlcm5lbF9od3RzdGFtcF9jb25maWdgLiBUaGUgYG5ldGRldnNpbWAgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBhbGxvY19uZXRkZXZfbXFgLCBzbyBgbnMtXFx1MDAzZXRzdGFtcF9jb25maWdgIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBrZXJuZWwgdGhlbiBjb3BpZXMgb25seSB0aGUgYGZsYWdzYCwgYHR4X3R5cGVgLCBhbmQgYHJ4X2ZpbHRlcmAgZmllbGRzIHRvIGEgYHN0cnVjdCBod3RzdGFtcF9jb25maWdgICh3aGljaCBoYXMgbm8gcGFkZGluZykgYmVmb3JlIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkLlxcbjIuIGBuc2ltX2dldF90c19pbmZvYCBtb2RpZmllcyBhIGBrZXJuZWxfZXRodG9vbF90c19pbmZvYCBzdHJ1Y3QuIFRoaXMgc3RydWN0IGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlciAoYF9fZXRodG9vbF9nZXRfdHNfaW5mb2AgdmlhIGBldGh0b29sX2luaXRfdHNpbmZvYCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgZHJpdmVyLiBUaGUgcmVzdWx0aW5nIGBldGh0b29sX3RzX2luZm9gIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGFsc28gZnVsbHkgaW5pdGlhbGl6ZWQuXFxuMy4gSW4gYG5zaW1fc3RhcnRfeG1pdGAsIGxvY2FsIHZhcmlhYmxlcyBgdHhfdHNgIGFuZCBgcnhfdHNgIGFyZSBvbmx5IHVzZWQgaWYgdGhlaXIgcmVzcGVjdGl2ZSBgcHRwX2luZm9fdHhgIGFuZCBgcHRwX2luZm9fcnhgIHBvaW50ZXJzIGFyZSBub24tTlVMTC4gV2hlbiBub24tTlVMTCwgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG1vY2tfcGhjX2dldHRpbWU2NGAuIFRoZSBgc2hod3RzdGFtcHNgIHN0cnVjdCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHt9YCkuXFxuNC4gVGhlIGNoYW5nZXMgaW4gYHB0cF9tb2NrLmNgIGFkZHJlc3MgYSBsb2NraW5nIGNvbnRleHQgaXNzdWUgKGNoYW5naW5nIGBzcGluX2xvY2tgIHRvIGBzcGluX2xvY2tfaXJxc2F2ZWApLCB3aGljaCBpcyBhIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXFxuXFxuU2luY2UgYWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[1] Phase: Succeeded StartedAt: 2026-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-12 20:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-12 20:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2] Phase: Succeeded StartedAt: 2026-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-12 20:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:27 +0000 UTC FinishedAt: 2026-08-12 20:50:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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-workflowkmg4b/series-workflowkmg4b-convert-artifact-881728530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:38 +0000 UTC FinishedAt: 2026-08-12 21:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:38 +0000 UTC FinishedAt: 2026-08-12 21:13:33 +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:*6a60f99f-93ba-4802-abf5-d399aef5d9bf,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-workflowkmg4b/series-workflowkmg4b-convert-artifact-881728530/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": "63a01e72-28fb-4118-9a8c-9de27da40b8c", "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-workflowkmg4b/series-workflowkmg4b-build-action-3299384720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 20:50:38 +0000 UTC FinishedAt: 2026-08-12 21:13:23 +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:*6a60f99f-93ba-4802-abf5-d399aef5d9bf,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-workflowkmg4b/series-workflowkmg4b-convert-artifact-881728530/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": "63a01e72-28fb-4118-9a8c-9de27da40b8c", "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-workflowkmg4b/series-workflowkmg4b-build-action-3299384720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:33 +0000 UTC FinishedAt: 2026-08-12 21:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:33 +0000 UTC FinishedAt: 2026-08-12 21:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:33 +0000 UTC FinishedAt: 2026-08-12 21:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:33 +0000 UTC FinishedAt: 2026-08-12 21:13:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-workflowkmg4b/series-workflowkmg4b-convert-artifact-36577325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:43 +0000 UTC FinishedAt: 2026-08-12 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:13:43 +0000 UTC FinishedAt: 2026-08-12 21:15:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63a01e72-28fb-4118-9a8c-9de27da40b8c,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-workflowkmg4b/series-workflowkmg4b-build-action-3299384720/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-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:15:39 +0000 UTC FinishedAt: 2026-08-12 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:15:39 +0000 UTC FinishedAt: 2026-08-12 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:15:39 +0000 UTC FinishedAt: 2026-08-12 21:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:15:39 +0000 UTC FinishedAt: 2026-08-12 21:37:54 +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:*6a60f99f-93ba-4802-abf5-d399aef5d9bf,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-workflowkmg4b/series-workflowkmg4b-convert-artifact-36577325/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": "524f3350-a523-4265-9373-a93905cc42d4", "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-workflowkmg4b/series-workflowkmg4b-build-action-4084360329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:15:39 +0000 UTC FinishedAt: 2026-08-12 21:37:44 +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:*6a60f99f-93ba-4802-abf5-d399aef5d9bf,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-workflowkmg4b/series-workflowkmg4b-convert-artifact-36577325/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": "524f3350-a523-4265-9373-a93905cc42d4", "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-workflowkmg4b/series-workflowkmg4b-build-action-4084360329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:37:54 +0000 UTC FinishedAt: 2026-08-12 21:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:37:54 +0000 UTC FinishedAt: 2026-08-12 21:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:37:54 +0000 UTC FinishedAt: 2026-08-12 21:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:37:54 +0000 UTC FinishedAt: 2026-08-12 21:40:14 +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:*524f3350-a523-4265-9373-a93905cc42d4,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-workflowkmg4b/series-workflowkmg4b-build-action-4084360329/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-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"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:*63a01e72-28fb-4118-9a8c-9de27da40b8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*524f3350-a523-4265-9373-a93905cc42d4,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-workflowkmg4b/series-workflowkmg4b-build-action-3299384720/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-workflowkmg4b/series-workflowkmg4b-build-action-4084360329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-12 21:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-12 21:40:23 +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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"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-workflowkmg4b/series-workflowkmg4b-convert-artifact-1776857746/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-12 21:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-12 21:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:17 +0000 UTC FinishedAt: 2026-08-12 21:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:27 +0000 UTC FinishedAt: 2026-08-13 00:42:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmg4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"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":["nsim_set_ts_config","nsim_get_ts_config","nsim_get_ts_info","mock_phc_get_ptp_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PTP_1588_CLOCK","PTP_1588_CLOCK_MOCK"],"series_id":"c19a13fd-1715-45c6-a4c4-1a5e362b1dfb","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-08-12 21:40:27 +0000 UTC FinishedAt: 2026-08-13 00:41:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63a01e72-28fb-4118-9a8c-9de27da40b8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*524f3350-a523-4265-9373-a93905cc42d4,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-workflowkmg4b/series-workflowkmg4b-build-action-3299384720/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-workflowkmg4b/series-workflowkmg4b-build-action-4084360329/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-workflowkmg4b/series-workflowkmg4b-convert-artifact-1776857746/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,}