Name: series-workflowlk926 Phase: Succeeded StartedAt: 2026-09-13 12:41:02 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[0] Phase: Succeeded StartedAt: 2026-09-13 12:41:02 +0000 UTC FinishedAt: 2026-09-13 12:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 12:41:02 +0000 UTC FinishedAt: 2026-09-13 12:47:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "INET" ], "series_id": "44b34ca2-42e6-4e95-99f5-d34e386af199" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "peer_remove_after_dead", "wg_peer_remove", "wg_peer_remove_all", "wg_peer_create", "wg_packet_rx_poll", "wg_packet_encrypt_worker", "wg_packet_tx_worker" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "70f3995830d3f1e79faa14eb0605914f778feca9", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXG5cblRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTpcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSlgLlxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB1c2VkIGR1cmluZyBXaXJlR3VhcmQgcGVlciB0ZWFyZG93bi4gSW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZGV2aWNlLXdpZGUgcGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSB3b3JrcXVldWVzIG11bHRpcGxlIHRpbWVzLCBpdCBpbnRyb2R1Y2VzIGEgcGVyLXBlZXIgYXRvbWljIHJlZmNvdW50IChwYWNrZXRfY3J5cHRfcGVuZGluZykgdHJhY2tlZCBhY3Jvc3MgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBhbmQgd2FpdHMgZm9yIGl0IHdpdGggd2FpdF92YXJfZXZlbnQoKSwgZm9sbG93ZWQgYnkgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIGNhbGxzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyIHJlYWRpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIHRocm91Z2ggcnRuZXRsaW5rIGFuZCBnZW5ldGxpbmsgaW50ZXJmYWNlcy4gQ29uY3VycmVuY3kgYW5kIHF1ZXVlaW5nIHJlZmFjdG9yaW5ncyBsaWtlIHRoaXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIHdha2V1cHMsIG9yIGhhbmdzIGR1cmluZyBwZWVyIHJlbW92YWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTI6NDM6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiBcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcbkBAIC00OSw2ICYjNDM7NTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4mIzQzO1x0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9sb2NrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcbkBAIC0xMDUsMjggJiM0MzsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbiYjMzk7dFxuLVx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UmIzM5O3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5XG4tXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXG4tXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cbi1cdCAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy5cbiYjNDM7XHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4mIzQzO1x0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXG4mIzQzO1x0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbiYjNDM7XHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxuIFx0ICovXG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuJiM0MztcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4mIzQzO1x0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4mIzQzO1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4mIzQzO1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbiYjNDM7XHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uNWNlNTc1NjVjOGZmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuJiM0MztcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbmluZGV4IDgyNGJiZWZjZTYxYzcuLmJiMzVlMzIwNTQ5MTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG5AQCAtNDc2LDkgJiM0Mzs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBuZXh0OlxuIFx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XG4tXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4mIzQzO1x0XHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuJiM0MztcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdGlmICgmIzQzOyYjNDM7d29ya19kb25lIFx1MDAzZT0gYnVkZ2V0KVxuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3ZDNiMGYxMjM4N2M0YjdjZDU5MTI2ZTA1NDA2YWMxNjkxYWNlNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMjo0MzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTsKIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7CkBAIC00OSw2ICYjNDM7NTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csCiAJSU5JVF9XT1JLKCZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpOwogCXdnX3ByZXZfcXVldWVfaW5pdCgmYW1wO3BlZXItJmd0O3R4X3F1ZXVlKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDtyeF9xdWV1ZSk7CiYjNDM7CS8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovCiYjNDM7CWF0b21pY19zZXQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7CiAJcndsb2NrX2luaXQoJmFtcDtwZWVyLSZndDtlbmRwb2ludF9sb2NrKTsKIAlrcmVmX2luaXQoJmFtcDtwZWVyLSZndDtyZWZjb3VudCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3BlZXItJmd0O3N0YWdlZF9wYWNrZXRfcXVldWUpOwpAQCAtMTA1LDI4ICYjNDM7MTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCiAJICovCiAJd2dfdGltZXJzX3N0b3AocGVlcik7CiAKLQkvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbiYjMzk7dAotCSAqIGd1YXJkZWQgYnkgaXNfZGVhZCwgYnV0IGVhY2ggcmVmZXJlbmNlJiMzOTtzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieQotCSAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWwKLQkgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm8KLQkgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuCiYjNDM7CS8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGUKJiM0MzsJICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nCiYjNDM7CSAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYCiYjNDM7CSAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuCiAJICovCiYjNDM7CWF0b21pY19kZWMoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsCiYjNDM7CQkgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpOwomIzQzOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmspOwogCi0JLyogYSkgRm9yIGVuY3J5cHQvZGVjcnlwdC4gKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EpOwotCS8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EpOwotCS8qIGIuMi4xKSBGb3IgcmVjZWl2ZSAoYnV0IG5vdCBzZW5kLCBzaW5jZSB0aGF0JiMzOTtzIHdxKS4gKi8KIAluYXBpX2Rpc2FibGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKLQkvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiYjNDM7CS8qIEl0JiMzOTtzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZQogCSAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAJICovCiAJbmV0aWZfbmFwaV9kZWwoJmFtcDtwZWVyLSZndDtuYXBpKTsKIAotCS8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yCi0JICogY2xlYXJfcGVlcl93b3JrKSBubyBsb25nZXIgYXJlIGluIHVzZS4KJiM0MzsJLyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nCiYjNDM7CSAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS4KIAkgKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtoYW5kc2hha2Vfc2VuZF93cSk7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7CiAKIAkvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZldwogCSAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaAppbmRleCA3MThmYjQyYmRhYzdlLi42NDQxMmM2N2Y0MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0cnVjdCBlbmRwb2ludCB7CiBzdHJ1Y3Qgd2dfcGVlciB7CiAJc3RydWN0IHdnX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTsKJiM0MzsJYXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmc7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlOwogCWludCBzZXJpYWxfd29ya19jcHU7CiAJYm9vbCBpc19kZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAppbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXBfdHVubmVscy5oJmd0OwogCiBzdHJ1Y3Qgd2dfZGV2aWNlOwpAQCAtMTYxLDYgJiM0MzsxNjIsNyBAQCBzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoCiAJICovCiAJaWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpCiAJCXJldHVybiAtRU5PU1BDOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7UEFDS0VUX1BFRVIoc2tiKS0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwogCiAJLyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGUKIAkgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uCkBAIC0xODIsNiAmIzQzOzE4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0CiAJYXRvbWljX3NldF9yZWxlYXNlKCZhbXA7UEFDS0VUX0NCKHNrYiktJmd0O3N0YXRlLCBzdGF0ZSk7CiAJcXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoJmFtcDtwZWVyLSZndDtzZXJpYWxfd29ya19jcHUsIHBlZXItJmd0O2ludGVybmFsX2lkKSwKIAkJICAgICAgcGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EsICZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmspOwomIzQzOwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSkKJiM0MzsJCXdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwogCXdnX3BlZXJfcHV0KHBlZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYwppbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKQEAgLTQ3Niw5ICYjNDM7NDc2LDExIEBAIGludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIG5leHQ6CiAJCXdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTsKLQkJd2dfcGVlcl9wdXQocGVlcik7CiAJCWlmICh1bmxpa2VseShmcmVlKSkKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJCXdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwomIzQzOwkJd2dfcGVlcl9wdXQocGVlcik7CiAKIAkJaWYgKCYjNDM7JiM0Mzt3b3JrX2RvbmUgJmd0Oz0gYnVkZ2V0KQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBXaXJlR3VhcmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgV2lyZUd1YXJkIHBhdGNoIHRvIGV2YWx1YXRlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIGBwZWVyLmNgLCBgcGVlci5oYCwgYHF1ZXVlaW5nLmhgLCBhbmQgYHJlY2VpdmUuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50OyBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGFyZWFzIGFmZmVjdGVkLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGxvZ2Agb3IgaWRlYWxseSwgYSB0b29sIGxpa2UgYGdyZXBwZXJgIGlmIGl0JiMzOTtzIGF2YWlsYWJsZSwgdG8gcHVsbCB1cCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBpcyBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgcmV2aWV3LiBJdCBsb29rcyBsaWtlIEkgaGF2ZSBhY2Nlc3MgdG8gY29tbWFuZC1saW5lIHRvb2xzIGxpa2UgYGdyZXBwZXJgLCBgcmVhZC1maWxlYCBhbmQgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgd2hpY2ggaXMgZ3JlYXQsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhpbmdzIHF1aWNrbHkuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkga25vdyBgQ09ORklHX1dJUkVHVUFSRGAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCB0byBjb25maXJtIGFueSBkZXBlbmRlbmNpZXMgb3IgYXNzb2NpYXRlZCBmZWF0dXJlIGZsYWdzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXSVJFR1VBUkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFdpcmVHdWFyZCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFdpcmVHdWFyZCB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgV2lyZUd1YXJkIGlzIGEgbmV0d29yay1yZWxhdGVkIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0sIGNvbnRhaW5pbmcgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIGl0JiMzOTtzIHRoZXJlLCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZmxhZ3MsIGFuZCBhbnkgb3RoZXIga2VybmVsIHNldHRpbmdzIGxpbmtlZCB3aXRoIHRoZSBXaXJlR3VhcmQgZHJpdmVyLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHN0cmluZyAmIzM0O1dJUkVHVUFSRCYjMzQ7IGFjcm9zcyBhbGwgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBhIHNvbGlkLCBpZiBzbGlnaHRseSBicm9hZGVyLCBhcHByb2FjaC4gVGhhdCBzaG91bGQgcXVpY2tseSB0dXJuIHVwIHJlbGV2YW50IGVudHJpZXMsIGV2ZW4gaWYgV2lyZUd1YXJkIGlzbiYjMzk7dCBkaXJlY3RseSB3aXRoaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJdOKAmXMgYSBnb29kIHN0cmF0ZWd5IHRvIHF1aWNrbHkgc2NhbiBhbGwgY29uZmlndXJhdGlvbiBmaWxlcywgZm9yIG1heGltdW0gY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0lSRUdVQVJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz01OT1jb25maWcgRFVNTVlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTczLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NDpjb25maWcgV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctOTEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjkyOmNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFdJUkVHVUFSRFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfRFVNTVkpICYjNDM7PSBkdW1teS5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSAmIzQzOz0gd2lyZWd1YXJkL1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX09WUE4pICYjNDM7PSBvdnBuL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZT0xPWNjZmxhZ3MteSA6PSAtRCYjMzk7cHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10JiMzOTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZToyOmNjZmxhZ3MtJChDT05GSUdfV0lSRUdVQVJEX0RFQlVHKSAmIzQzOz0gLURERUJVR1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlLTMtd2lyZWd1YXJkLXkgOj0gbWFpbi5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlPTE2PXdpcmVndWFyZC15ICYjNDM7PSBuZXRsaW5rLm8gZ2VuZXJhdGVkL25ldGxpbmsub1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XSVJFR1VBUkQpIDo9IHdpcmVndWFyZC5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjg6I2lmbmRlZiBfTElOVVhfV0lSRUdVQVJEX0dFTl9IXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaDo5OiNkZWZpbmUgX0xJTlVYX1dJUkVHVUFSRF9HRU5fSFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmg9Mjg9aW50IHdnX3NldF9kZXZpY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oLTI5LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmg6MzA6I2VuZGlmIC8qIF9MSU5VWF9XSVJFR1VBUkRfR0VOX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jPTIwPXN0YXRpYyBpbnQgX19pbml0IHdnX21vZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy00Ny1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NDg6XHRwcl9pbmZvKFwmIzM0O1dpcmVHdWFyZCBcJiMzNDsgV0lSRUdVQVJEX1ZFUlNJT04gXCYjMzQ7IGxvYWRlZC4gU2VlIHd3dy53aXJlZ3VhcmQuY29tIGZvciBpbmZvcm1hdGlvbi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy00OS1cdHByX2luZm8oXCYjMzQ7Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIFx1MDAzY0phc29uQHp4MmM0LmNvbVx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM9NzU9TU9EVUxFX0FVVEhPUihcJiMzNDtKYXNvbiBBLiBEb25lbmZlbGQgXHUwMDNjSmFzb25AengyYzQuY29tXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NzY6TU9EVUxFX1ZFUlNJT04oV0lSRUdVQVJEX1ZFUlNJT04pO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy03Ny1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKEtCVUlMRF9NT0ROQU1FKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvdmVyc2lvbi5oOjE6I2RlZmluZSBXSVJFR1VBUkRfVkVSU0lPTiBcJiMzNDsxLjAuMFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVHdWFyZCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFdpcmVHdWFyZCBLY29uZmlnLiAqTGV0JiMzOTtzIHNlZSB0aGUgS2NvbmZpZyBmb3IgV0lSRUdVQVJEOiogUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgV2lyZUd1YXJkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGhvdyBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbHMsIHRoZWlyIGRlc2NyaXB0aW9ucywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgV2lyZUd1YXJkIG1vZHVsZSBmaXJzdCwgdGhlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBsaWtlIHBlZXIgaGFuZGxpbmcsIGtleSBtYW5hZ2VtZW50LCByb3V0aW5nLCBhbmQgbWF5YmUgZXZlbiB1c2VyLXNwYWNlIHRvb2xzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS2NvbmZpZyBvcHRpb25zIGludGVyYWN0LCBpZiB0aGVyZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljOyB0aGluZ3MgdGhhdCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJlLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYSBXaXJlR3VhcmQgYnVpbGQgaXMgY29uZmlndXJlZCwgYW5kIGlmIGl0IGlzIHdlbGwtZGVzaWduZWQuIEkmIzM5O2xsIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBXaXJlR3VhcmQgc291cmNlIGNvZGUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IGFueSBhbWJpZ3VpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDczOlx0XG4gIDc0Olx0Y29uZmlnIFdJUkVHVUFSRFxuICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgNzc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICA3ODpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxuICA4MDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxuICA4MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXG4gIDg0Olx0XHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0JiMzOTtzXG4gIDg1Olx0XHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxuICA4NjpcdFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cbiAgODc6XHRcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cbiAgODg6XHRcbiAgODk6XHRcdCAgSXQmIzM5O3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcbiAgOTA6XHRcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgV0lSRUdVQVJEX0RFQlVHXG4gIDkzOlx0XHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXG4gIDk3Olx0XHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2lyZUd1YXJkIFBlZXIgVGVhcmRvd24gU3luY2hyb25pemF0aW9uOiBBIFJlZmFjdG9yaW5nIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IFdpcmVHdWFyZCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBlZXIgcmVtb3ZhbCBhbmQgdGVhcmRvd24gaW4gcmVsYXRpb24gdG8gcGFja2V0cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZmxpZ2h0LiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLCByaWdodD8gSSBjYW4gY3JlYXRlIG9uZSB3aXRoIGBpcCBsaW5rIGFkZGAgYW5kIGNvbmZpZ3VyZSBpdCB3aXRoIGBnZW5ldGxpbmtgLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkIGZ1bmN0aW9ucyBsaWtlIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgIHNvIEkgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGludGVyZmFjZXMuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBmbHVzaF93b3JrcXVldWVgIG9uIHRoZSBgcGFja2V0X2NyeXB0X3dxYCBhbmQgYGhhbmRzaGFrZV9zZW5kX3dxYCB3b3JrcXVldWVzLiBUaGF0IHNlZW1zLi4uYnJ1dGUgZm9yY2UuIEVzc2VudGlhbGx5LCB0aGUgb2xkIHdheSBmbHVzaGVkIHdvcmtxdWV1ZXMgdG8gZW5zdXJlIGFsbCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBwZWVyIGlzIHJlbW92ZWQuIFRoaXMgd291bGQgZW5jb21wYXNzIGJvdGggVFggYW5kIFJYIHBhY2tldHMuIGBuYXBpX2Rpc2FibGVgIGFuZCBgbmV0aWZfbmFwaV9kZWxgIGhhbmRsZWQgdGhlIFJYIHNpZGUgc2VwYXJhdGVseS4gVGhlIFRYIHdhcyBoYW5kbGVkIGJ5IHRoZSB3b3JrcXVldWUuCgpOb3csIHRob3VnaCwgdGhlIGNvbW1pdCBpcyBpbnRyb2R1Y2luZyBhIGZpbmVyLWdyYWluZWQgYXBwcm9hY2ggdXNpbmcgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCB3aXRoaW4gdGhlIGB3Z19wZWVyYCBzdHJ1Y3QuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHBhY2tldHMgaW4gdGhlIGNyeXB0byBwaXBlbGluZS4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gMSBkdXJpbmcgcGVlciBjcmVhdGlvbi4gV2hlbmV2ZXIgYSBwYWNrZXQgaXMgZW5xdWV1ZWQsIGBhdG9taWNfaW5jYCBpcyBjYWxsZWQuIFdoZW4gYSBwYWNrZXQgY29tcGxldGVzIGNyeXB0byBhbmQgZ2V0cyBlbnF1ZXVlZCBmb3Igc2VyaWFsIHdvcmsgKG9yIGluIHRoZSBSWCBwb2xsKSwgYGF0b21pY19kZWNfYW5kX3Rlc3RgIGlzIGNhbGxlZCwgd2FraW5nIHVwIGEgd2FpdCBxdWV1ZSBpZiB0aGUgY291bnRlciBoaXRzIHplcm8uIEZpbmFsbHksIGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24sIGFmdGVyIGRlY3JlbWVudGluZyB0aGUgY291bnRlciwgdGhlIGNvZGUgd2FpdHMgZm9yIHRoZSBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGF0b21pYyB2YXJpYWJsZSB0byByZWFjaCB6ZXJvLiBUaGVuIGEgYGZsdXNoX3dvcmtgIGlzIHBlcmZvcm1lZCBmb3Igc3BlY2lmaWMgd29ya3MuCgpUaGlzIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQhIEluc3RlYWQgb2YgZmx1c2hpbmcgZW50aXJlIHdvcmtxdWV1ZXMsIGl0JiMzOTtzIG5vdyB1c2luZyBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWJpbmVkIHdpdGggYHdhaXRfdmFyX2V2ZW50YCBhbmQgc2VsZWN0aXZlIGBmbHVzaF93b3JrYC4gSXQmIzM5O3MgYSBtdWNoIG1vcmUgdGFyZ2V0ZWQgc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5LiBJdCYjMzk7cyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb24gcGFja2V0IHRlYXJkb3duIGluIHdpcmVndWFyZC4KCk5vdywgbXkgZXhwZXJ0IGJyYWluIGlzIGtpY2tpbmcgaW4uIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmludGVuZGVkIHBhY2tldCBkcm9wcy4gV2hhdCBoYXBwZW5zIGlmIGEgcGFja2V0IGlzIGRyb3BwZWQgc29tZXdoZXJlICpiZWZvcmUqIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCBvciBgd2dfcGFja2V0X3J4X3BvbGxgPyBEb2VzIHRoYXQgZGVjcmVtZW50IHRoZSBjb3VudGVyPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBpcyBjYWxsZWQgZm9yICpib3RoKiBUWCBhbmQgUlggcGF0aHMuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2xsIHZlcmlmeSBieSBpbnNwZWN0aW5nIHRoZSBjb2RlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNDg9c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE1Mi1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE1MzpzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTQtXHRzdHJ1Y3QgY3J5cHRfcXVldWUgKmRldmljZV9xdWV1ZSwgc3RydWN0IHByZXZfcXVldWUgKnBlZXJfcXVldWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI4Olx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUsIHNrYixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI5LVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBxdWV1ZWluZy5oYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBxdWV1ZWluZyBpbXBsZW1lbnRhdGlvbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGBxdWV1ZWluZy5oYCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAxNTMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzLCBjb25kaXRpb24gdmFyaWFibGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucyBpZiBpdCYjMzk7cyBhIG11bHRpLXRocmVhZGVkIGRlc2lnbi4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgcXVldWUmIzM5O3MgaW50ZXJuYWwgc3RhdGUgKGhlYWQsIHRhaWwsIHNpemUpIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHByb3RlY3RlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIHF1aWNrIGZlZWwgZm9yIHRoZSB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUg4oCTIGFyZSB3ZSBhaW1pbmcgZm9yIGhpZ2ggdGhyb3VnaHB1dCwgbG93IGxhdGVuY3ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBMaW5lIDE1MyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0LyogU2luZ2xlIGNvbnN1bWVyICovXG4gMTQ4Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxuIDE0OTpcdHtcbiAxNTA6XHRcdHF1ZXVlLVx1MDAzZXBlZWtlZCA9IE5VTEw7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiAxNTQ6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbiAxNTU6XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSlcbiAxNTY6XHR7XG4gMTU3Olx0XHRpbnQgY3B1O1xuIDE1ODpcdFxuIDE1OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBQQUNLRVRfU1RBVEVfVU5DUllQVEVEKTtcbiAxNjA6XHRcdC8qIFdlIGZpcnN0IHF1ZXVlIHRoaXMgdXAgZm9yIHRoZSBwZWVyIGluZ2VzdGlvbiwgYnV0IHRoZSBjb25zdW1lclxuIDE2MTpcdFx0ICogd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIENSWVBURUQgb3IgREVBRCBiZWZvcmUuXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAxNjU6XHRcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTY2Olx0XG4gMTY3Olx0XHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIDE2ODpcdFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHRjcHUgPSB3Z19jcHVtYXNrX25leHRfb25saW5lKFx1MDAyNmRldmljZV9xdWV1ZS1cdTAwM2VsYXN0X2NwdSk7XG4gMTcxOlx0XHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcdTAwMjZkZXZpY2VfcXVldWUtXHUwMDNlcmluZywgc2tiKSkpXG4gMTcyOlx0XHRcdHJldHVybiAtRVBJUEU7XG4gMTczOlx0XHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFx1MDAyNnBlcl9jcHVfcHRyKGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXIsIGNwdSktXHUwMDNld29yayk7XG4gMTc0Olx0XHRyZXR1cm4gMDtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTc4Olx0e1xuIDE3OTpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTgwOlx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE4MTpcdFx0ICovXG4gMTgyOlx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE4MzpcdFxuIDE4NDpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMTg1Olx0XHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gMTg2Olx0XHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gMTg3Olx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiAxODg6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTg5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMjAwOlx0XHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMjAxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAyMDI6XHR9XG4gMjAzOlx0XG4gMjA0Olx0I2lmZGVmIERFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdpcmVHdWFyZCBQYWNrZXQgUXVldWVpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTGluZXMgMTcwLTE3MyBhcmUgY3J1Y2lhbCBoZXJlLiBJIHNlZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZW5xdWV1ZSBhIHBhY2tldCAoYHNrYmApIGludG8gdGhlIGRldmljZSBxdWV1ZSYjMzk7cyByaW5nIGJ1ZmZlciB1c2luZyBgcHRyX3JpbmdfcHJvZHVjZV9iaGAuICBUaGUgY3J1Y2lhbCBwb2ludCwgb2YgY291cnNlLCBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGlzICpmYWlscyouIElmIGBwdHJfcmluZ19wcm9kdWNlX2JoYCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHplcm8sIGluZGljYXRpbmcgYW4gZXJyb3IgKGxldCYjMzk7cyBzYXkgYC1FTk9NRU1gIG9yIHRoZSByaW5nIGlzIGZ1bGwpLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRVBJUEVgLiAKClRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyB3aGF0JiMzOTtzIGJvdGhlcmluZyBtZSwgYmVmb3JlIHRoYXQgcmV0dXJuLCBgYXRvbWljX2luYygmYW1wO1BBQ0tFVF9QRUVSKHNrYiktJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTtgIHdhcyBhbHJlYWR5IGNhbGxlZCEgVGhhdCBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgaXMgaGFwcGVuaW5nIHdpdGggZW5jcnlwdGlvbiBiZWZvcmUgdGhlIHF1ZXVlIGl0c2VsZiBpcyBjb25maXJtZWQuIFRoYXQmIzM5O3MgYSBiaXQgcmlza3ksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjb3VudGluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uIGJlZm9yZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBwcm9jZXNzZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCwgdGhlIGZ1bmN0aW9uIHRoaXMgc25pcHBldCBpcyBwYXJ0IG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGF0IHRoZSBjYWxsIHNpdGUuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGZvciB0aGUgYC1FUElQRWAgcmV0dXJuLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGJvdGggYHJlY2VpdmUuY2AgYW5kIGBzZW5kLmNgIHdoZXJlIEkmIzM5O20gZXhwZWN0aW5nIGB3Z19wYWNrZXRfY29uc3VtZV9kYXRhYCBhbmQgYHdnX3BhY2tldF9jcmVhdGVfZGF0YWAgdG8gYmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggYW55IHBvdGVudGlhbCBmYWlsdXJlcyBhbmQgZGV0ZXJtaW5lIHdoYXQgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgYW5kIHRoZSBlbmNyeXB0aW9uIGNvdW50ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWlzc2VkIGNvdW50ZXIgdXBkYXRlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFxuIDUxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXG4gNTEyOlx0e1xuIDUxMzpcdFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cdTAwM2VkYXRhKS1cdTAwM2VrZXlfaWR4O1xuIDUxNDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMO1xuIDUxNTpcdFx0aW50IHJldDtcbiA1MTY6XHRcbiA1MTc6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiA1MTg6XHRcdFBBQ0tFVF9DQihza2IpLVx1MDAzZWtleXBhaXIgPVxuIDUxOTpcdFx0XHQoc3RydWN0IG5vaXNlX2tleXBhaXIgKil3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKFxuIDUyMDpcdFx0XHRcdHdnLVx1MDAzZWluZGV4X2hhc2h0YWJsZSwgSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIsIGlkeCxcbiA1MjE6XHRcdFx0XHRcdTAwMjZwZWVyKTtcbiA1MjI6XHRcdGlmICh1bmxpa2VseSghd2dfbm9pc2Vfa2V5cGFpcl9nZXQoUEFDS0VUX0NCKHNrYiktXHUwMDNla2V5cGFpcikpKVxuIDUyMzpcdFx0XHRnb3RvIGVycl9rZXlwYWlyO1xuIDUyNDpcdFxuIDUyNTpcdFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwZWVyLVx1MDAzZWlzX2RlYWQpKSlcbiA1MjY6XHRcdFx0Z290byBlcnI7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXHUwMDI2d2ctXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSwgc2tiLFxuIDUyOTpcdFx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4gNTMwOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXG4gNTMxOlx0XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XG4gNTMyOlx0XHRpZiAobGlrZWx5KCFyZXQgfHwgcmV0ID09IC1FUElQRSkpIHtcbiA1MzM6XHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gNTM0Olx0XHRcdHJldHVybjtcbiA1MzU6XHRcdH1cbiA1MzY6XHRlcnI6XG4gNTM3Olx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VrZXlwYWlyLCBmYWxzZSk7XG4gNTM4Olx0ZXJyX2tleXBhaXI6XG4gNTM5Olx0XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiA1NDA6XHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIDU0MTpcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIDU0MjpcdH1cbiA1NDM6XHRcbiA1NDQ6XHR2b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDU0NTpcdHtcbiA1NDY6XHRcdGlmICh1bmxpa2VseShwcmVwYXJlX3NrYl9oZWFkZXIoc2tiLCB3ZykgXHUwMDNjIDApKVxuIDU0NzpcdFx0XHRnb3RvIGVycjtcbiA1NDg6XHRcdHN3aXRjaCAoU0tCX1RZUEVfTEUzMihza2IpKSB7XG4gNTQ5Olx0XHRjYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0lOSVRJQVRJT04pOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2VuZC5jYCAtIFNwZWNpZmljYWxseSwgYHdnX3BhY2tldF9jcmVhdGVfZGF0YWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHBhY2tldCBjcmVhdGlvbiB3aXRoaW4gdGhlIGBzZW5kLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhhdCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRhdGEgZm9yIHRoZXNlIFdpcmVHdWFyZCBwYWNrZXRzIGlzIGJlaW5nIGFzc2VtYmxlZC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUg4oCTIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQmIzM5O3MgZ29pbmcgaW50byBpdC4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byBpdC4gV2hhdCBraW5kIG9mIGNvbnRleHQgZG9lcyBpdCBuZWVkPyBJcyBpdCB1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLCBvciBhbGxvY2F0aW5nIG9uIHRoZSBmbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgYnVmZmVyIG92ZXJmbG93cyBvciBhbnkgb3RoZXIgc2VjdXJpdHkgY29uY2VybnMgaGVyZT8gQXJlIGFueSBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIHBhcnRpY3VsYXJseSBwcm9uZSB0byBkZW5pYWwgb2Ygc2VydmljZT8mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBzaXplIGNhbGN1bGF0aW9ucywgY29waWVzLCBhbmQgaG93IGRhdGEgZnJvbSBkaWZmZXJlbnQgc291cmNlcyBpcyBiZWluZyBjb25jYXRlbmF0ZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBpbiB0aGUgZmxvdy4KCkJhc2ljYWxseSwgSSB3YW50IHRvIG5haWwgZG93biBob3cgbXVjaCBjb250cm9sIGEgcG90ZW50aWFsIGF0dGFja2VyIG1pZ2h0IGhhdmUgb3ZlciB0aGUgcGFja2V0IGRhdGEgY29uc3RydWN0aW9uLiBBbnkgcG9pbnQgb2YgYXR0YWNrIHdvdWxkIGJlIGludGVyZXN0aW5nIGJ1dCBpbiBwYXJ0aWN1bGFyIGlmIEkgY2FuIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBjYW4gYmUgaW5zZXJ0ZWQgZnJvbSBleHRlcm5hbCBzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMDpcdFxuIDMxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cdTAwM2VkZXZpY2U7XG4gMzE0Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAzMTU6XHRcbiAzMTY6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiAzMTc6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cdTAwM2Vpc19kZWFkKSkpXG4gMzE4Olx0XHRcdGdvdG8gZXJyO1xuIDMxOTpcdFxuIDMyMDpcdFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUsIGZpcnN0LFxuIDMyMTpcdFx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4gMzIyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXG4gMzIzOlx0XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIFBBQ0tFVF9TVEFURV9ERUFEKTtcbiAzMjQ6XHRlcnI6XG4gMzI1Olx0XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiAzMjY6XHRcdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSlcbiAzMjc6XHRcdFx0cmV0dXJuO1xuIDMyODpcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoUEFDS0VUX0NCKGZpcnN0KS1cdTAwM2VrZXlwYWlyLCBmYWxzZSk7XG4gMzI5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAzMzA6XHRcdGtmcmVlX3NrYl9saXN0KGZpcnN0KTtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0dm9pZCB3Z19wYWNrZXRfcHVyZ2Vfc3RhZ2VkX3BhY2tldHMoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTtcbiAzMzY6XHRcdERFVl9TVEFUU19BREQocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2LCB0eF9kcm9wcGVkLFxuIDMzNzpcdFx0XHQgICAgICBwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUucWxlbik7XG4gMzM4Olx0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuIDMzOTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlLmxvY2spO1xuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHR2b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyO1xuIDM0NTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBwYWNrZXRzO1xuIDM0NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qIFN0ZWFsIHRoZSBjdXJyZW50IHF1ZXVlIGludG8gb3VyIGxvY2FsIG9uZS4gKi9cbiAzNDk6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwYWNrZXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBXaXJlR3VhcmQgUGFja2V0IFByb2Nlc3Npbmcgd2l0aCAtRVBJUEUgRXJyb3JzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcmVjdXJyaW5nIHBhdHRlcm4gd2l0aCB0aGlzIGAtRVBJUEVgIGVycm9yLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLiBXaGVuIGByZXRgIGlzIGAtRVBJUEVgLCB0aGUgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kLCBjcnVjaWFsbHksIGl0IGVucXVldWVzIGEgcGFja2V0IHdpdGggdGhlIGBQQUNLRVRfU1RBVEVfREVBRGAgZmxhZy4gSW5zaWRlIHRoaXMgZnVuY3Rpb24sIEkgc2VlIGBhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpO2AgZm9sbG93ZWQgYnkgYHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIHdheSB0byBzaWduYWwgc29tZXRoaW5nLiBOb3csIHdoYXQgYWJvdXQgdGhlIHJlY2VpdmUgc2lkZT8gSXQgc2VlbXMgd2UgaGF2ZSBhIHNpbWlsYXIgcHJvY2VzcyB3aGVuIGByZXQgPT0gLUVQSVBFYDogYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgIGdldHMgY2FsbGVkLCBhZ2FpbiB3aXRoIGBQQUNLRVRfU1RBVEVfREVBRGAsIGFuZCB0aGVuIGBuYXBpX3NjaGVkdWxlKCZhbXA7cGVlci0mZ3Q7bmFwaSlgLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGB3Z19wYWNrZXRfcnhfcG9sbGAuIEFuZCB3aGF0IGhhcHBlbnMgaW5zaWRlIHRoYXQgZnVuY3Rpb24/IFRoYXQmIzM5O3MgcmlnaHQsIGBhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYCBhbmQgYHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYC4gSSYjMzk7bSBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUgaW52b2x2aW5nIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGJ1dCBJIGRvbiYjMzk7dCB5ZXQgdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgcHVycG9zZS4KCkJ1dCB3aGF0IGFib3V0IHRoZSBzdWNjZXNzIGNhc2VzPyBXaGVyZSBpcyB0aGlzIGNvdW50ZXIgZGVjcmVtZW50ZWQgYW5kIHRoZSBhc3NvY2lhdGVkIHdha2UtdXAgY2FsbGVkIHdoZW4gdGhlIGNyeXB0byBhY3R1YWxseSAqc3VjY2VlZHMqPyBPciBob3cgaXQmIzM5O3MgaGFuZGxlZCBieSB0aGUgd29ya2VyIHRocmVhZHM/IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBgcGFja2V0X2NyeXB0X3dxYCB3b3JrZXIgaXMgYWN0dWFsbHkgdXNlZC4gV2hlcmUgaXMgYGRldmljZV9xdWV1ZS0mZ3Q7d29ya2VyYCBkZWZpbmVkLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIGBkZWNyeXB0X3F1ZXVlYCBhbmQgYGVuY3J5cHRfcXVldWVgPyBMZXQmIzM5O3Mgc2VhcmNoIGZvciB0aG9zZSBxdWV1ZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5jcnlwdF9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1OS1cdHdnX3BhY2tldF9xdWV1ZV9mcmVlKFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNjA6XHR3Z19wYWNrZXRfcXVldWVfZnJlZShcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjYxLVx0cmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgYWxsIHRoZSBwZWVycyB0byBiZSBhY3R1YWxseSBmcmVlZC4gKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzEwPXN0YXRpYyBpbnQgd2dfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzUyOlx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXHUwMDI2d2ctXHUwMDNlZW5jcnlwdF9xdWV1ZSwgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1My1cdFx0XHRcdCAgIE1BWF9RVUVVRURfUEFDS0VUUyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1OS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzYwOlx0XHRnb3RvIGVycl9mcmVlX2VuY3J5cHRfcXVldWU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzYxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zOTEtXHR3Z19wYWNrZXRfcXVldWVfZnJlZShcdTAwMjZ3Zy1cdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzkyOmVycl9mcmVlX2VuY3J5cHRfcXVldWU6XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzkzOlx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXHUwMDI2d2ctXHUwMDNlZW5jcnlwdF9xdWV1ZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM5NC1lcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oPTQwPXN0cnVjdCB3Z19kZXZpY2Uge1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQxLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuaDo0MjpcdHN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlLCBoYW5kc2hha2VfcXVldWU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmgtNDMtXHRzdHJ1Y3Qgc29jayBfX3JjdSAqc29jazQsICpzb2NrNjtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTMxMT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGEoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpmaXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6MzIwOlx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUsIGZpcnN0LFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMjEtXHRcdFx0XHRcdFx0ICAgd2ctXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGB3Z19wYWNrZXRgIHdvcmtlciBmdW5jdGlvbnMsIHRoaW5raW5nIGFsb3VkOgoKKipBbmFseXppbmcgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyIGFuZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgZmlyc3QgZ2xhbmNlLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgd29ya2hvcnNlcywgdGhlIG9uZXMgZG9pbmcgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZS4gQXJlIHRoZXkgc2luZ2xlLXRocmVhZGVkLCBvciBkZXNpZ25lZCBmb3IgY29uY3VycmVuY3k/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZywgSSYjMzk7ZCAqaG9wZSogdGhleSBhcmUgZGVzaWduZWQgd2l0aCBjb25jdXJyZW5jeSBpbiBtaW5kLCBidXQgSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgdXNpbmcgYSB0aHJlYWQgcG9vbCwgb3Igc3Bhd25pbmcgbGlnaHR3ZWlnaHQgdGhyZWFkcyAobGlrZSBnb3JvdXRpbmVzIGlmIHdlJiMzOTtyZSBpbiBhIEdvIGNvbnRleHQsIG9yIGtlcm5lbCB0aHJlYWRzLCBvciBwZXJoYXBzIGFyZSB0aGV5IGV2ZW4gdXNpbmcgU0lNRCBpbnN0cnVjdGlvbnMpPwoKSSYjMzk7ZCB3YW50IHRvIGtub3c6CgoqICAgKipDb25jdXJyZW5jeSBNb2RlbDoqKiBIb3cgYXJlIHRoZXkgaGFuZGxpbmcgbXVsdGlwbGUgcGFja2V0cyBzaW11bHRhbmVvdXNseT8gQXJlIHRoZXkgdXNpbmcgYSBxdWV1ZWluZyBzeXN0ZW0gdG8gbWFuYWdlIGluY29taW5nIHdvcms/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCAobXV0ZXhlcywgc2VtYXBob3JlcywgYXRvbWljIG9wZXJhdGlvbnMsIGV0Yy4pPyBBbnkgY29udGVudGlvbiBwb2ludHMsIG9yIGJvdHRsZW5lY2tzLCBjb3VsZCBiZSBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS4KKiAgICoqQ3J5cHRvZ3JhcGhpYyBQcmltaXRpdmVzOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIGFsZ29yaXRobXMgYXJlIGJlaW5nIHVzZWQgKENoYUNoYTIwLCBQb2x5MTMwNSwgZXRjLik/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvciBqdXN0IGxldmVyYWdpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAobGlic29kaXVtLCBPcGVuU1NMLCBldGMuKT8KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGFyZSBwYWNrZXRzIGFuZCBidWZmZXJzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBpbmVmZmljaWVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgb3IgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgbWVtb3J5IHBvb2xzLCBvciBhcmUgd2UgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIGV2ZXJ5IHNpbmdsZSB0aW1lPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGRvIHRoZXNlIHdvcmtlcnMgZGVhbCB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBjcnlwdG9ncmFwaGljIGZhaWx1cmVzLCBvciBvdGhlciBleGNlcHRpb25hbCBjb25kaXRpb25zPyBXaGF0IGxvZ2dpbmcgb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZT8KKiAgICoqQ29udGV4dHVhbCBJbmZvcm1hdGlvbjoqKiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRlbGVzcywgb3IgZG8gdGhleSBtYWludGFpbiBzb21lIGtpbmQgb2YgcGVyLXBlZXIgY29udGV4dD8gSWYgc28sIHdoYXQgaXMgdGhhdCBjb250ZXh0LCBhbmQgaG93IGlzIGl0IG1hbmFnZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSB0aGV5IGFjY2Vzc2luZywgYW5kIHdoYXQgYXJlIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdG8gYXZvaWQgY29udGVudGlvbj8KClVsdGltYXRlbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSB3b3JrZXJzIGRldGVybWluZXMgdGhlIGJhbmR3aWR0aCBsaW1pdGF0aW9ucyBvZiBhIFdpcmVHdWFyZCBjb25uZWN0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGltcGxlbWVudGF0aW9ucyBhcmUgZWZmZWN0aXZlLCBvciBjb3VsZCBiZSBvcHRpbWl6ZWQuIEkgd291bGQgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGVmZmljaWVudCB0aGUgd29ya2VycyBhcmUsIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTMxMD1zdGF0aWMgaW50IHdnX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzUxLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM1MjpcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTMtXHRcdFx0XHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTUxPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTI6dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTUzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjYyPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yODYtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI4Nzp2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB3b3JrZXIgZnVuY3Rpb25zOgoKKipEaWdnaW5nIGludG8gdGhlIFdpcmVHdWFyZCBQYWNrZXQgSGFuZGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgV2lyZUd1YXJkIGFjdHVhbGx5ICp3b3Jrcyog4oCTIHRoZSBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCBhbmQgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRoZXkmIzM5O3JlIHRoZSBoZWFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGNyeXB0b2dyYXBoeSwga2V5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb24sIGFuZCB0aGUgbmVjZXNzYXJ5IGRhdGEgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1vcHRpbWl6ZWQgY29kZSwgbGlrZWx5IGxldmVyYWdpbmcgU0lNRCBpbnN0cnVjdGlvbnMgYW5kIGNhcmVmdWwgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvcHBvcnR1bml0aWVzIGZvciBwYXJhbGxlbGl6YXRpb24gKHRob3VnaCBJIGltYWdpbmUgdGhlc2UgYXJlIGFscmVhZHkgaGlnaGx5IG9wdGltaXplZCksIGFuZCBhbnkgYXJlYXMgd2hlcmUgc3VidGxlIHRpbWluZyBhdHRhY2tzIG1pZ2h0IGJlIHBvc3NpYmxlICh0aG91Z2gsIGlkZWFsbHksIHJvYnVzdCBjb3VudGVybWVhc3VyZXMgd2lsbCBiZSBpbiBwbGFjZSkuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2V5cyBhbmQgbm9uY2VzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgdGhleSBkZWZlbnNpdmUsIG9yIGRvIHRoZXkgYXNzdW1lIGEgbW9yZSAmIzM0O3RydXN0ZWQmIzM0OyBlbnZpcm9ubWVudD8gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHNjcnV0aW5pemluZyB0aGUgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHRoaXMgYWxsIHBsYXlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDI4ODpcdHtcbiAyODk6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXG4gMjkwOlx0XHRcdFx0XHRcdFx0IHdvcmspLVx1MDAzZXB0cjtcbiAyOTE6XHRcdHN0cnVjdCBza19idWZmICpmaXJzdCwgKnNrYiwgKm5leHQ7XG4gMjkyOlx0XG4gMjkzOlx0XHR3aGlsZSAoKGZpcnN0ID0gcHRyX3JpbmdfY29uc3VtZV9iaChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nKSkgIT0gTlVMTCkge1xuIDI5NDpcdFx0XHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IFBBQ0tFVF9TVEFURV9DUllQVEVEO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkge1xuIDI5NzpcdFx0XHRcdGlmIChsaWtlbHkoZW5jcnlwdF9wYWNrZXQoc2tiLFxuIDI5ODpcdFx0XHRcdFx0XHRQQUNLRVRfQ0IoZmlyc3QpLVx1MDAzZWtleXBhaXIpKSkge1xuIDI5OTpcdFx0XHRcdFx0d2dfcmVzZXRfcGFja2V0KHNrYiwgdHJ1ZSk7XG4gMzAwOlx0XHRcdFx0fSBlbHNlIHtcbiAzMDE6XHRcdFx0XHRcdHN0YXRlID0gUEFDS0VUX1NUQVRFX0RFQUQ7XG4gMzAyOlx0XHRcdFx0XHRicmVhaztcbiAzMDM6XHRcdFx0XHR9XG4gMzA0Olx0XHRcdH1cbiAzMDU6XHRcdFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpO1xuIDMwNjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gMzA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMzA4Olx0XHR9XG4gMzA5Olx0fVxuIDMxMDpcdFxuIDMxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cdTAwM2VkZXZpY2U7XG4gMzE0Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAzMTU6XHRcbiAzMTY6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiAzMTc6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cdTAwM2Vpc19kZWFkKSkpXG4gMzE4Olx0XHRcdGdvdG8gZXJyO1xuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV2lyZUd1YXJkIFBhY2tldCBIYW5kbGluZyBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgd2l0aGluIFdpcmVHdWFyZCwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pdCBwYXRoLiBJdCBsb29rcyBsaWtlIHdpdGhpbiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKWAgZ2V0cyBjYWxsZWQuIEFscmlnaHQsIHN0YW5kYXJkIGVucXVldWVpbmcgZnVuY3Rpb24uIERpZ2dpbmcgaW50byB0aGF0LCBpbnNpZGUgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLCB0aGVyZSYjMzk7cyB0aGlzIGludGVyZXN0aW5nIHNlcXVlbmNlOiBgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpIHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpO2AgZm9sbG93ZWQgYnkgcXVldWluZyB3b3JrIHdpdGggYHF1ZXVlX3dvcmtfb24oLi4uLCAmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrKTtgLiBUaGUgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBhdG9taWMgdmFyaWFibGUgaXMgY2xlYXJseSBhY3RpbmcgYXMgYSByZWZlcmVuY2UgY291bnRlciBmb3Igb3V0c3RhbmRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciBhIGdpdmVuIHBlZXIuIFRoZSBgd2FrZV91cF92YXJgIGNhbGwgaGludHMgYXQgc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhpcyB0byB0aGUgcGVlciB0ZWFyZG93biBwYXRoLCBzcGVjaWZpY2FsbHkgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBUaGlzIGZ1bmN0aW9uIGlzIHdhaXRpbmcgZm9yIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdG8gaGl0IHplcm8gKmJlZm9yZSogcmVtb3ZpbmcgdGhlIHBlZXIuIFRoZSBjb2RlIHNob3dzIGFuIGF0b21pYyBkZWNyZW1lbnQgYW5kIGEgd2FpdDogYGF0b21pY19kZWMoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7IHdhaXRfdmFyX2V2ZW50KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsICFhdG9taWNfcmVhZF9hY3F1aXJlKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKTtgLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSAqbXVzdCogd2FpdCBmb3IgYWxsIGVuY3J5cHRpb24vdHJhbnNtaXNzaW9uIG9wZXJhdGlvbnMgdG8gZmluaXNoIGJlZm9yZSBudWtpbmcgdGhlIHBlZXImIzM5O3Mgc3RhdGUuIFRoZXJlJiMzOTtzIGFsc28gYSBgZmx1c2hfd29ya2AgY2FsbCBvbiBgcGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmtgIHdoaWNoIGVuc3VyZXMgYW55IHBlbmRpbmcgd29yayBhc3NvY2lhdGVkIHdpdGggdGhlIHBlZXIgZ2V0cyBjb21wbGV0ZWQgYmVmb3JlIHdlIGNvbnRpbnVlLgoKTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBkZWNyZW1lbnQgYW5kIHdhaXQgYXJlIHN1ZmZpY2llbnQuIFRoZSBvcmRlcmluZyBhbmQgcG90ZW50aWFsIHJhY2VzIHRoYXQgY291bGQgYmUgY3JlYXRlZCBvbiBzaHV0ZG93bi4KCk9rYXksIHNvIHRoZSBUeCBwYXRoIHNlZW1zIHByZXR0eSB3ZWxsLWRlZmluZWQuIEJ1dCB0aGlzIGFsc28gbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSByZWNlaXZlIHBhdGguIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2ltaWxhciBwcmVjYXV0aW9ucyBhcmUgaW4gcGxhY2UgZHVyaW5nIGRlY3J5cHRpb24uIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgYW5kIGludmVzdGlnYXRlIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTMxMD1zdGF0aWMgaW50IHdnX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzU2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM1NzpcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTgtXHRcdFx0XHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTM1PWludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzYtLyogV29ya3F1ZXVlIHdvcmtlcjogKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjM3OnZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTQzOD1pbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDk0LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo0OTU6dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgcmVjZWl2ZS5jYCBhdCBMaW5lIDQ5NSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGhpbnQgdG8gbG9vayBhdCBgcmVjZWl2ZS5jYCBhcm91bmQgbGluZSA0OTUgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBtZW50YWwgY2hlY2tsaXN0LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBuZXR3b3JraW5nIG9yIGNvbW11bmljYXRpb24gcHJvdG9jb2wsIGdpdmVuIHRoZSBjb250ZXh0IG9mICYjMzQ7cmVjZWl2ZSYjMzQ7LiBMaW5lIDQ5NSBzdWdnZXN0cyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIGFuIGluY29taW5nIGNvbm5lY3Rpb24sIG9yIHRoZSBwYXJzaW5nIG9mIGEgZGF0YSBidWZmZXIuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhcm91bmQgdGhhdCBsaW5lPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNvY2tldCBkZXNjcmlwdG9yLCBhIGJ1ZmZlciwgYSBwcm90b2NvbCBjb250cm9sIGJsb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgdGhpcyBsaW5lIHRoZSBzdGFydCBvZiBhIGByZWN2KClgIGNhbGwsIGEgZGF0YSB2YWxpZGF0aW9uIGNoZWNrLCBlcnJvciBoYW5kbGluZywgb3IgdGhlIGRpc3BhdGNoaW5nIGxvZ2ljIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZT8gVGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgaWRlbnRpZnkgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZGF0YSBmbG93OiB3aGF0IGNvbWVzIGluLCB3aGF0IGdldHMgcHJvY2Vzc2VkLCBhbmQgd2hlcmUgZG9lcyB0aGUgaW5mb3JtYXRpb24gZ28gbmV4dC4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBhc3N1bXB0aW9ucyB0aGUgY29kZSBtYWtlcyBhYm91dCB0aGUgaW5jb21pbmcgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCByZXNvdXJjZSBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBoYW5kbGluZyBvZiB3aGF0ZXZlciBpcyBjb21pbmcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDkwOlx0XHRcdG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0cmV0dXJuIHdvcmtfZG9uZTtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDQ5NjpcdHtcbiA0OTc6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXG4gNDk4Olx0XHRcdFx0XHRcdFx0IHdvcmspLVx1MDAzZXB0cjtcbiA0OTk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTAwOlx0XG4gNTAxOlx0XHR3aGlsZSAoKHNrYiA9IHB0cl9yaW5nX2NvbnN1bWVfYmgoXHUwMDI2cXVldWUtXHUwMDNlcmluZykpICE9IE5VTEwpIHtcbiA1MDI6XHRcdFx0ZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUgPVxuIDUwMzpcdFx0XHRcdGxpa2VseShkZWNyeXB0X3BhY2tldChza2IsIFBBQ0tFVF9DQihza2IpLVx1MDAzZWtleXBhaXIpKSA/XG4gNTA0Olx0XHRcdFx0XHRQQUNLRVRfU1RBVEVfQ1JZUFRFRCA6IFBBQ0tFVF9TVEFURV9ERUFEO1xuIDUwNTpcdFx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xuIDUwNjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gNTA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTA4Olx0XHR9XG4gNTA5Olx0fVxuIDUxMDpcdFxuIDUxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXG4gNTEyOlx0e1xuIDUxMzpcdFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cdTAwM2VkYXRhKS1cdTAwM2VrZXlfaWR4O1xuIDUxNDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVlcCBEaXZlIGludG8gV2lyZUd1YXJkJiMzOTtzIFBhY2tldCBIYW5kbGluZyAmYW1wOyBSZW1vdmFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgb24gYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuIEl0IGVucXVldWVzIHBhY2tldHMgZm9yIFJYIGRlY3J5cHRpb24gdXNpbmcgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgLCB3aGljaCBpbiB0dXJuIHNjaGVkdWxlcyBOQVBJLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGB3Z19wYWNrZXRfcnhfcG9sbGAgcnVubmluZyBmb3IgdGhhdCBwZWVyJiMzOTtzIE5BUEkgaW5zdGFuY2UuIEluc2lkZSBgd2dfcGFja2V0X3J4X3BvbGxgLCB0aGUgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBkZWNyZW1lbnRlZC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgcGVlciByZW1vdmFsLiBIZXJlLCBJIHNlZSBhbiBgYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKWAgZm9sbG93ZWQgYnkgYHdhaXRfdmFyX2V2ZW50YC4gVGhpcyB3YWl0IGlzIGV4cGxpY2l0bHkgdGllZCB0byBgcGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmdgIHJlYWNoaW5nIHplcm8uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGhlcmU/IEkgYWxzbyBzZWUgYGZsdXNoX3dvcmtgIGNhbGxlZCwgdGhlbiBgbmFwaV9kaXNhYmxlYCwgYW5kIGZpbmFsbHkgYG5ldGlmX25hcGlfZGVsYC4gVGhlIGNyaXRpY2FsIHNlcXVlbmNlIGhlcmUgYXBwZWFycyB0byBiZSB0aGF0IHRoZSBjb2RlICp3YWl0cyogZm9yIHBlbmRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlICpiZWZvcmUqIGRpc2FibGluZyBOQVBJIGFuZCByZW1vdmluZyB0aGUgTkFQSSBzdHJ1Y3R1cmUuCgpUaGUgY29ubmVjdGlvbiBiZWNvbWVzIGNsZWFyZXIgd2hlbiBJIG5vdGUgdGhhdCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGRlY3JlbWVudGVkIGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgKGZvciBSWCkgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCB3aGljaCBpcyBjYWxsZWQgYnkgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgKGZvciBUWCkuIFNvIHRoZSByZW1vdmFsIGxvZ2ljICpkZXBlbmRzKiBvbiB0aGVzZSB0YXNrcyBjb21wbGV0aW5nLgoKVGhlIHByb2JsZW0gc3RhcnRzIHRvIG1hbmlmZXN0IGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgOiBJZiB0aGUgcXVldWVpbmcgdG8gdGhlIHJpbmcgZmFpbHMsIGFuZCBgcHRyX3JpbmdfcHJvZHVjZV9iaGAgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRVBJUEVgLiBUaGlzIGNhdXNlcyBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAgdG8gcnVuIHdoaWNoIGNhbGxzIGBuYXBpX3NjaGVkdWxlKCZhbXA7cGVlci0mZ3Q7bmFwaSlgLiBUaGlzIHNjZW5hcmlvIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRlYWRsb2NrLgoKTXkgYnJhaW4gaXMgbm93IHNjcmVhbWluZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBOQVBJIGFuZCBwZWVyIHJlbW92YWwuIEhlcmUmIzM5O3MgdGhlIGtleSBxdWVzdGlvbjogV2hhdCBpZiBOQVBJIGlzIGRpc2FibGVkIG9yIG5ldmVyIHJ1bnMsIG9yIGlzIGhlbGQgdXA/IFRoZSBzZXF1ZW5jZSBpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYHdhaXRfdmFyX2V2ZW50YCAqYmVmb3JlKiBgbmFwaV9kaXNhYmxlYC4gVGhpcyByYWlzZXMgc2VyaW91cyBxdWVzdGlvbnMhIFdoYXQgaWYgcGFja2V0cyBhcmUgc3RpbGwgcXVldWVkIGluIGByeF9xdWV1ZWAsIHdhaXRpbmcgZm9yIE5BUEkgdG8gcnVuIGJ1dCBOQVBJIGlzIGRpc2FibGVkIG9yIG5vdCBnaXZlbiBhIENQVT8gSXQgY291bGQgbWVhbiBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIG5ldmVyIHJlYWNoZXMgemVybywgYW5kIHRoZSBwZWVyIHJlbW92YWwgaGFuZ3MuIEV2ZW4gbW9yZSwgaWYgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiBydW5zIGJ1dCBydW5zIG91dCBvZiBidWRnZXQsIG9yIHRoZSBuZXRpZiBpcyBkb3duLCB0aGVuIHRoZSBzYW1lIHNjZW5hcmlvIGNhbiBoYXBwZW4uIE9yLCB3aGF0IGlmIGEgcGVlciBpcyByZW1vdmVkIHdoaWxlIE5BUEkgaXMgZGlzYWJsZWQgb3IgdGhlIG5ldCBkZXZpY2UgaXMgY2xvc2VkPyBUaGF0IGNvdWxkIGxlYWQgdG8gYSBtYXNzaXZlIHByb2JsZW0uIFRoaXMgZmVlbHMgbGlrZSBhIGNsYXNzaWMgcG90ZW50aWFsIGRlYWRsb2NrLiBUaGlzIGNvdWxkIGVhc2lseSBsZWF2ZSBwYWNrZXRzIGluIGEgbGltYm8gc3RhdGUsIGFuZCBwcmV2ZW50IHBlZXJzIGZyb20gYmVpbmcgcmVtb3ZlZC4KCkkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMgb2YgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIG5vdywgYW5kIHVuZGVyc3RhbmQgKndoZW4qIHRoaXMgcmVtb3ZhbCBwcm9jZXNzIGlzIHRyaWdnZXJlZCwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJpc2tzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZXJfcmVtb3ZlX2FmdGVyX2RlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz04Mz1zdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTk2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo5NzpzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0xNTg9dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2NS1cdHN5bmNocm9uaXplX25ldCgpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjY6XHRwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9MTY5PXZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTg0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNmRlYWRfcGVlcnMsIHBlZXJfbGlzdClcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTg1Olx0XHRwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xODYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBlZXIgUmVtb3ZhbCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgcGVlciByZW1vdmFsIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBkZWVtZWQgZGVhZC4gVGhlIGNvZGUmIzM5O3MgY2hhbmdlZCBoZXJlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBmbG93LiBJbml0aWFsbHksIGl0IHNlZW1zIHdlIHdlcmUgdXNpbmcgbXVsdGlwbGUgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMg4oCTIG9uZSBmb3IgYHBhY2tldF9jcnlwdF93cWAsIGFuZCBhbm90aGVyIGZvciBgaGFuZHNoYWtlX3NlbmRfd3FgLiBOb3csIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyBiZWVuIHN0cmVhbWxpbmVkLgoKTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGlzIGNoYW5nZSwgd2h5IHdlJiMzOTtyZSBubyBsb25nZXIgdXNpbmcgdGhlIGBmbHVzaF93b3JrcXVldWVgIGNhbGxzIGluIHRoZSBvbGQgd2F5LCBhbmQgd2hhdCB0aGUgY3VycmVudCBjb2RlIGFjaGlldmVzLiBUaGUgbmV3IGNvZGUgaXMgbm93IHVzaW5nIGB3YWl0X3Zhcl9ldmVudGAsIGBmbHVzaF93b3JrYCB0byBhIGB0cmFuc21pdF9wYWNrZXRfd29ya2AsIE5BUEkgZGlzYWJsaW5nLCBhbmQgYW5vdGhlciBgZmx1c2hfd29ya2AgZm9yIGB0cmFuc21pdF9oYW5kc2hha2Vfd29ya2AuIFdlJiMzOTtyZSBkZWZpbml0ZWx5IHNoaWZ0aW5nIGhvdyB3ZSYjMzk7cmUgZW5zdXJpbmcgYWxsIHBlbmRpbmcgd29yayByZWxhdGVkIHRvIHRoZSBkZWFkIHBlZXIgaXMgY2xlYW5lZCB1cCBhbmQgdGhhdCByZXNvdXJjZXMgYXJlIGZyZWVkIHNhZmVseS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGhlcmUuIExldCBtZSBjaGVjayB0aGUgY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlIGFyb3VuZCBsaW5lIDEzMyBvZiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByYXRpb25hbGUgb3IgY29udGV4dCBmb3IgdGhpcyBhZGp1c3RtZW50LiBUaGlzIG1pZ2h0IGV4cGxhaW4gdGhlIGNoYW5nZSBpbiBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiAxMzI6XHRcbiAxMzM6XHRcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gMTM0Olx0XHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuIDEzNTpcdFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxuIDEzNjpcdFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XG4gMTM3Olx0XHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxuIDEzODpcdFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbiYjMzk7dFxuIDEzOTpcdFx0ICogaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMSkgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSYjMzk7cmUgcmVtb3ZlZCBmcm9tXG4gMTQwOlx0XHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxuIDE0MTpcdFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxuIDE0MjpcdFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXdcbiAxNDM6XHRcdCAqIHJlZmVyZW5jZXMgaW4gKDMpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XG4gMTQ0Olx0XHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxuIDE0NTpcdFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXG4gMTQ2Olx0XHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXG4gMTQ3Olx0XHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cbiAxNDg6XHRcdCAqL1xuIDE0OTpcdFxuIDE1MDpcdFx0LS1wZWVyLVx1MDAzZWRldmljZS1cdTAwM2VudW1fcGVlcnM7XG4gMTUxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0LyogV2UgaGF2ZSBhIHNlcGFyYXRlIFwmIzM0O3JlbW92ZVwmIzM0OyBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxuIDE1NTpcdCAqIGEgcGVlciBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIHdpbGwgZXZlbnR1YWxseSBjb21lIHRvIGFuIGVuZCBhbmQgbm90IHBhc3NcbiAxNTY6XHQgKiB0aGVpciByZWZlcmVuY2Ugb250byBhbm90aGVyIGNvbnRleHQuXG4gMTU3Olx0ICovXG4gMTU4Olx0dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAxNTk6XHR7XG4gMTYwOlx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuIDE2MTpcdFx0XHRyZXR1cm47XG4gMTYyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gMTYzOlx0XG4gMTY0Olx0XHRwZWVyX21ha2VfZGVhZChwZWVyKTtcbiAxNjU6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE2NjpcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXaXJlR3VhcmQgQ29uY3VycmVuY3kgTG9naWMgQW5hbHlzaXMgZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkaXZpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgV2lyZUd1YXJkJiMzOTtzIHN5bmNocm9uaXphdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcGVlciByZW1vdmFsIGFuZCBwYWNrZXQgcXVldWVpbmcuIE15IGZpcnN0IHRob3VnaHQgaXM6IGNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGggb3VyIGZ1enppbmcgc2V0dXA/IEx1Y2tpbHksIFdpcmVHdWFyZCBpcyBhIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggKGBkcml2ZXJzL25ldC93aXJlZ3VhcmRgKSwgc28gdGhhdCYjMzk7cyBhIHllcy4gSXQmIzM5O3MgZnVsbHkgZW11bGF0ZWQgYW5kIHJ1bnMgaW4gUUVNVS9HQ0Ugd2l0aG91dCBhbnkgcGh5c2ljYWwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBhbmQgc3l6a2FsbGVyIHJlZ3VsYXJseSBmdXp6ZXMgaXQgdGhyb3VnaCBuZXRsaW5rLCB1c2luZyBgR0VOTF9BRE1JTl9QRVJNYCBvciB1c2VyIG5hbWVzcGFjZXMgd2l0aCBgQ0FQX05FVF9BRE1JTmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIFdpcmVHdWFyZCwgd2l0aCBjYWxscyB0byBgc3l6X3dpcmVndWFyZF9zZXRfZGV2aWNlYCwgcnRuZXRsaW5rIGNhbGxzIGxpa2UgYFJUTV9ORVdMSU5LYCB3aXRoIGBraW5kID0gJiMzNDt3aXJlZ3VhcmQmIzM0O2Agc28gd2UgYXJlIGdvbGRlbi4KCk5vdywgYXBwbHlpbmcgdGhlIGVzdGFibGlzaGVkIHRyaWFnZSBwaGlsb3NvcGh5OiBJcyBpdCByZWFjaGFibGU/IFllcy4gQW5kIHRoaXMgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2U7IHRoZSBwYXRjaCBpcyBzd2l0Y2hpbmcgZnJvbSB3b3JrcXVldWUgZmx1c2hpbmcgdG8gYXRvbWljIHJlZmNvdW50aW5nIChgcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCAvIGB3YWtlX3VwX3ZhcmAuIFRoaXMgaXMgYSBjbGVhciBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZSwgc28gbm8gJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcmIzM0OyBoYW5kLXdhdmluZyB3aWxsIGRvLiBHaXZlbiB0aGVzZSBjcml0ZXJpYSBhbmQgdGhhdCBXaXJlR3VhcmQgaXMgYSByZWFjaGFibGUgZHJpdmVyIHZpYSBuZXRsaW5rLCB0aGUgZnV6emluZyBwb3RlbnRpYWwgaXMgZGVmaW5pdGl2ZWx5IGhpZ2ggKGBXb3J0aEZ1enppbmcgPSB0cnVlYCkuCgpOZXh0IHVwOiBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlIHRoZSBpbXBhY3RlZCBjb2RlOgoKRnJvbSB0aGUgZGlmZiwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHRvdWNoZWQgb3IgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZToKCjEuICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2A6CiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYAogICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCAoQ2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgKQoyLiAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYDoKICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCAoc3RhdGljIGlubGluZTsgY2FsbGVkIGZyb20gYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCkKICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgKHN0YXRpYyBpbmxpbmU7IGNhbGxlZCBmcm9tIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCkKMy4gIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYDoKICAgICogICBgd2dfcGFja2V0X3J4X3BvbGxgIChNb2RpZmllZCBkaXJlY3RseSB3aXRoIHRoZSBgYXRvbWljX2RlY19hbmRfdGVzdGAgYW5kIGB3YWtlX3VwX3ZhcmApCiAgICAqICAgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgCgpUaGUgcXVlc3Rpb24gaXMsIGlzIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBzdGF0aWM/IEl0IGxvb2tzIGxpa2UgaXQgaXMgKGBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKWApIGFuZCBpdCBpcyBub3QgaW5saW5lZC4gSXQgaXMgY2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBzbyBub3cgSSBoYXZlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKU28sIGxldCYjMzk7cyBjb21waWxlIGFsbCB0aGlzIGluZm9ybWF0aW9uOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczoKCiogICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2A6CiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYAogICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYAogICAgKiAgIGB3Z19wZWVyX3JlbW92ZWAKICAgICogICBgd2dfcGVlcl9yZW1vdmVfYWxsYAoqICAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNgOgogICAgKiAgIGB3Z19wYWNrZXRfcnhfcG9sbGAKICAgICogICBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAKKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jYDoKICAgICogICBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYAogICAgKiAgIGB3Z19wYWNrZXRfdHhfd29ya2VyYAogICAgKiAgIGB3Z19wYWNrZXRfY3JlYXRlX2RhdGFgCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggc3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgYXJlIGFjdHVhbCBzeW1ib2xzIGluIHZtbGludXggb3Igd2lyZWd1YXJkIG1vZHVsZSB0byBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBBZnRlciBjaGVja2luZyB0aGUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIHZpc2liaWxpdHksIHRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjM5MjpcdFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkzLVx0XHRpZiAoSVNfRVJSKHBlZXIpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MjI6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD0zNz1zdHJ1Y3Qgd2dfcGVlciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6NzA6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGB3Z19wZWVyX3JlbW92ZWAgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIHBlZXIgcmVtb3ZhbCBmdW5jdGlvbnMuIGB3Z19wZWVyX3JlbW92ZWAgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSwgdGhlIG9uZSB0aGF0JiMzOTtzIGRlc2lnbmVkIHRvIHJlbW92ZSBhIHNwZWNpZmljIHBlZXIgZnJvbSBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMg4oCTIGRlYWxsb2NhdGluZyBtZW1vcnksIHVwZGF0aW5nIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIGVuc3VyaW5nIHRoZSBpbnRlcmZhY2Ugc3RhdGUgaXMgY29uc2lzdGVudCBhZnRlciB0aGUgcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4gUmFjZSBjb25kaXRpb25zIHdpdGggaW5ib3VuZCBhbmQgb3V0Ym91bmQgcGFja2V0cyBjb3VsZCBiZSBicnV0YWwuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSByZW1vdmluZyBhIHBlZXIgdGhhdCYjMzk7cyBjdXJyZW50bHkgYWN0aXZlLiBEb2VzIGl0IGdyYWNlZnVsbHkgdGVhciBkb3duIHRoZSBjb25uZWN0aW9uPyBEb2VzIGl0IGRyb3AgcGFja2V0cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBwZWVyIGltbWVkaWF0ZWx5PyBBbmQgd2hhdCBhYm91dCBjcnlwdG9ncmFwaGljIGNvbnNpZGVyYXRpb25zPyBEb2VzIGl0IGludmFsaWRhdGUgYW55IGtleXMgb3Igc3RhdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBlZXI/Cgpgd2dfcGVlcl9yZW1vdmVfYWxsYCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIGxpa2UgdGhlIG51Y2xlYXIgb3B0aW9uLiBJdCYjMzk7cyB0aGUgJiMzNDtudWtlIHRoZSB3aG9sZSBwZWVyIGxpc3QmIzM0OyBmdW5jdGlvbi4gVGhpcyBwcm9iYWJseSBnZXRzIGNhbGxlZCBpbiBhIHNjZW5hcmlvIHdoZXJlIHRoZSBlbnRpcmUgaW50ZXJmYWNlIGlzIGJlaW5nIHRvcm4gZG93biwgb3Igd2hlbiB5b3UgbmVlZCBhIGNsZWFuIHNsYXRlLiBJJiMzOTttIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBlaXRoZXIgY2FsbHMgYHdnX3BlZXJfcmVtb3ZlYCByZXBlYXRlZGx5IGZvciBlYWNoIHBlZXIsIG9yIGl0IG9wdGltaXplcyB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBidWxrIHJlbW92YWwuIFRoZSBsYXR0ZXIgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBwZWVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyB0aGUgaXRlcmF0aW9uL3JlbW92YWwgcHJvY2Vzcy4gRG9lcyBpdCByZXR1cm4gZXJyb3JzLCBvciBkb2VzIGl0IHRyeSB0byBrZWVwIGNodWdnaW5nIGFsb25nPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgdG8gcHJldmVudCBkb3VibGUtZnJlZXMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgcGVlcnMuIE92ZXJhbGwsIHRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBlYXNpbHkgYmVjb21lIGEgcG9pbnQgb2YgZmFpbHVyZSwgb3IgYSBzb3VyY2Ugb2Ygc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1My1cdC8qIFRoZSBmaW5hbCByZWZlcmVuY2VzIGFyZSBjbGVhcmVkIGluIHRoZSBiZWxvdyBjYWxscyB0byBkZXN0cm95X3dvcmtxdWV1ZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNTQ6XHR3Z19wZWVyX3JlbW92ZV9hbGwod2cpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1NS1cdGRlc3Ryb3lfd29ya3F1ZXVlKHdnLVx1MDAzZWhhbmRzaGFrZV9yZWNlaXZlX3dxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDQtXHRpZiAoZmxhZ3MgXHUwMDI2IFdHUEVFUl9GX1JFTU9WRV9NRSkge1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo0MDU6XHRcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDYtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9NDczPWludCB3Z19zZXRfZGV2aWNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxNy1cdGlmIChmbGFncyBcdTAwMjYgV0dERVZJQ0VfRl9SRVBMQUNFX1BFRVJTKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1MTg6XHRcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUzOS1cdFx0XHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1NDA6XHRcdFx0XHR3Z19wZWVyX3JlbW92ZShwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTQxLVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTk3PXN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTctICovXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE1ODp2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTY4LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjk6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE3MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD04MD12b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODE6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjgyOnZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXaXJlR3VhcmQgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBzdG9jayBvZiB0aGVzZSBXaXJlR3VhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYW5kIGB3Z19wZWVyX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHBlZXIuY2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBpbmRpY2F0aW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGF0IHNwZWNpZmljIGZpbGUsIGxpa2VseSBwYXJ0IG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgQVBJLiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYWxzbyBpbiBgcGVlci5jYCwgc28gaXQgcHJvYmFibHkgcmVsYXRlcyB0byB0aGUgc2FtZSBwZWVyIGxpZmVjeWNsZSBwcm9jZXNzZXMuCgpNb3Zpbmcgb24sIEkgZmluZCB0aGF0IGB3Z19wYWNrZXRfcnhfcG9sbGAgaXMgbm9uLXN0YXRpYyBpbiBgcmVjZWl2ZS5jYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiByZWNlaXZpbmcgcGFja2V0cyBhbmQgaXMgYWNjZXNzaWJsZSBtb3JlIGJyb2FkbHkgdGhhbiBqdXN0IHdpdGhpbiBgcmVjZWl2ZS5jYC4gU2ltaWxhcmx5LCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCAoaW4gYHNlbmQuY2ApLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCAoaW4gYHJlY2VpdmUuY2ApLCBhbmQgYHdnX3BhY2tldF90eF93b3JrZXJgIChhbHNvIGluIGBzZW5kLmNgKSBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCBmb3Igd29ya2VyIHRocmVhZHMgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgdHJhbnNtaXNzaW9uIGFzcGVjdHMuCgpIbW0sIEkgc2hvdWxkIGNoZWNrIG9uIHRoZSBwYWNrZXQgY29uc3VtcHRpb24gYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucywganVzdCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4gU28sIGxldCBtZSBzZWUuLi4gQWgsIGB3Z19wYWNrZXRfY29uc3VtZV9kYXRhYCAqaXMqIHN0YXRpYyB3aXRoaW4gYHJlY2VpdmUuY2AuIEl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLiBJbnRlcmVzdGluZ2x5IHRob3VnaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB3Z19wYWNrZXRfcmVjZWl2ZWAsIHdoaWNoIGlzIG5vbi1zdGF0aWMhIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgZGF0YS1oYW5kbGluZyBib3VuZGFyeSB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgZ2l2ZW4gdGhlIGltcG9ydGFuY2Ugb2YgdGhvc2UgZnVuY3Rpb25zIEkgc2hvdWxkIGFsc28gY2hlY2sgYHdnX3BhY2tldF9yZWNlaXZlYCBhbmQgYHdnX3htaXRgIGp1c3QgdG8gbWFrZSBzdXJlIEkgYW0gc29saWQgaW4gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcGFja2V0X3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9Mjk9d2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKHdvcmtfZnVuY190IGZ1bmN0aW9uLCB2b2lkICpwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMxLS8qIHJlY2VpdmUuYyBBUElzOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MzI6dm9pZCB3Z19wYWNrZXRfcmVjZWl2ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zMy12b2lkIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUxMT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQzLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1NDQ6dm9pZCB3Z19wYWNrZXRfcmVjZWl2ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQ1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM9MzE1PXN0YXRpYyBpbnQgd2dfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNC1cdHNrYl9tYXJrX25vdF9vbl9saXN0KHNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM6MzI1Olx0d2dfcGFja2V0X3JlY2VpdmUod2csIHNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzI2LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTcxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVHJhbnNtaXNzaW9uIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIG92ZXJhbGwgdHJhbnNtaXNzaW9uIHByb2Nlc3MsIGFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRpZmZlcmVudCBhc3BlY3RzLiBTcGVjaWZpY2FsbHksIHdoYXQgYWJvdXQgdGhhdCBgdHJhbnNtaXRgIG9yIGB4bWl0YCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHdnX3htaXRgIHRvIGdldCBhIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB0cmFuc21pc3Npb24gaXMgaGFuZGxlZCBhdCB0aGF0IGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTExNT1zdGF0aWMgaW50IHdnX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMTM2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjEzNzpzdGF0aWMgbmV0ZGV2X3R4X3Qgd2dfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTIzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTIzOC1cdC5uZG9fc3RvcFx0XHQ9IHdnX3N0b3AsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MjM5Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gd2dfeG1pdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NzAKCQkJCQkJCW91dHB1dDogMjQwCgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlR3VhcmQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkgc2VlOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFsbCBjbGVhcmx5IHJlbGF0ZSB0byBXaXJlR3VhcmQgcGVlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBkZXNjcmlwdGlvbi4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHM/IEkgbmVlZCB0byBlbnN1cmUgbXkgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuIExldCBtZSBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOiBgV0lSRUdVQVJEYCBpcyB0aGUgY29yZSBjb25maWcsIGFuZCBpdCByZWxpZXMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYWxvbmcgd2l0aCBzb21lIGNyeXB0b2dyYXBoeSBvcHRpb25zLiBPa2F5LCBzbyBgV0lSRUdVQVJEYCwgYE5FVGAsIGFuZCBgSU5FVGAgYXJlIHRoZSBpbXBvcnRhbnQgb25lcy4gU2luY2UgYFdJUkVHVUFSRGAgaXMgdGhlIHByaW1hcnkgZm9jdXMsIEkmIzM5O2xsIGluY2x1ZGUgaXQgYW5kIHRoZSBpbXBsaWVkIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgdHJlZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gZW5zdXJlIEkmIzM5O20gYWRoZXJpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBjb21wbGV0ZWx5LiBNeSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4gV2h5PyBCZWNhdXNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGl0c2VsZiAoYGRyaXZlcnMvbmV0L3dpcmVndWFyZGApLiBUaGlzIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzIOKAkyBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbiByZXBsYWNlcyB3b3JrcXVldWUgZmx1c2hpbmcgd2l0aCBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBldmVudCBzaWduYWxpbmcsIGRpcmVjdGx5IGltcGFjdGluZyBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWVpbmcuCgpNeSBGb2N1c1N5bWJvbHMsIGFzIG91dGxpbmVkIGluIHRoZSBwcm9tcHQsIGFyZSBleGFjdGx5IHRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGVhcmxpZXI6IGB3Z19wZWVyX2NyZWF0ZWAsIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfcnhfcG9sbGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYW5kIGB3Z19wYWNrZXRfdHhfd29ya2VyYC4gVGhlc2UgYXJlIG5vdCB1YmlxdWl0b3VzOyB0aGV5IGFyZSBhbGwgV2lyZUd1YXJkLXNwZWNpZmljLgoKRmluYWxseSwgdGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHNpbXBseSBgV0lSRUdVQVJEYCBhbmQgYElORVRgLiBUaGlzIGlzIGFsbCBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBkaXJlY3QuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIHN1Ym1pdCBteSBmaW5kaW5ncyBhbmQgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0lSRUdVQVJEJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZWVyX3JlbW92ZV9hZnRlcl9kZWFkJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfcnhfcG9sbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3R4X3dvcmtlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdXNlZCBkdXJpbmcgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24uIEluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGRldmljZS13aWRlIHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3Egd29ya3F1ZXVlcyBtdWx0aXBsZSB0aW1lcywgaXQgaW50cm9kdWNlcyBhIHBlci1wZWVyIGF0b21pYyByZWZjb3VudCAocGFja2V0X2NyeXB0X3BlbmRpbmcpIHRyYWNrZWQgYWNyb3NzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgYW5kIHdhaXRzIGZvciBpdCB3aXRoIHdhaXRfdmFyX2V2ZW50KCksIGZvbGxvd2VkIGJ5IHRhcmdldGVkIGZsdXNoX3dvcmsoKSBjYWxscy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciByZWFkaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyB0aHJvdWdoIHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rIGludGVyZmFjZXMuIENvbmN1cnJlbmN5IGFuZCBxdWV1ZWluZyByZWZhY3RvcmluZ3MgbGlrZSB0aGlzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciBoYW5ncyBkdXJpbmcgcGVlciByZW1vdmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTdkM2IwZjEyMzg3YzRiN2NkNTkxMjZlMDU0MDZhYzE2OTFhY2U0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2xvY2tkZXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlOwogc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTsKQEAgLTQ5LDYgJiM0Mzs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywKIAlJTklUX1dPUksoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7dHhfcXVldWUpOwogCXdnX3ByZXZfcXVldWVfaW5pdCgmYW1wO3BlZXItJmd0O3J4X3F1ZXVlKTsKJiM0MzsJLyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi8KJiM0MzsJYXRvbWljX3NldCgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTsKIAlyd2xvY2tfaW5pdCgmYW1wO3BlZXItJmd0O2VuZHBvaW50X2xvY2spOwogCWtyZWZfaW5pdCgmYW1wO3BlZXItJmd0O3JlZmNvdW50KTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7cGVlci0mZ3Q7c3RhZ2VkX3BhY2tldF9xdWV1ZSk7CkBAIC0xMDUsMjggJiM0MzsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKIAkgKi8KIAl3Z190aW1lcnNfc3RvcChwZWVyKTsKIAotCS8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJiMzOTt0Ci0JICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UmIzM5O3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5Ci0JICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbAotCSAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBubwotCSAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy4KJiM0MzsJLyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZQomIzQzOwkgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmcKJiM0MzsJICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFgKJiM0MzsJICogcGFja2V0cyB0byBzY2hlZHVsZSB0aGVpciBzZXJpYWwgd29yayBhbmQgUlggcGFja2V0cyB0byBsZWF2ZSByeF9xdWV1ZS4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLjVjZTU3NTY1YzhmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCmluZGV4IDgyNGJiZWZjZTYxYzcuLmJiMzVlMzIwNTQ5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYwpAQCAtNDc2LDkgJiM0Mzs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIAogbmV4dDoKIAkJd2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpOwotCQl3Z19wZWVyX3B1dChwZWVyKTsKIAkJaWYgKHVubGlrZWx5KGZyZWUpKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiYjNDM7CQl3Z19wZWVyX3B1dChwZWVyKTsKIAogCQlpZiAoJiM0MzsmIzQzO3dvcmtfZG9uZSAmZ3Q7PSBidWRnZXQpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgV2lyZUd1YXJkIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBhbmQgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AsIGBwZWVyLmhgLCBgcXVldWVpbmcuaGAsIGFuZCBgcmVjZWl2ZS5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgdG91Y2hlcyBjb3JlIFdpcmVHdWFyZCBmdW5jdGlvbmFsaXR5LgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgZmx1c2hfd29ya3F1ZXVlYCBvbiBzaGFyZWQgd29ya3F1ZXVlcyAoYHBhY2tldF9jcnlwdF93cWAsIGBoYW5kc2hha2Vfc2VuZF93cWApIHRvIGVuc3VyZSBubyByZWZlcmVuY2VzIHJlbWFpbmVkIGFmdGVyIGEgcGVlciB3YXMgcmVtb3ZlZC4gVGhpcyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZHVlIHRvIGxhdGVuY3kgb3Igc3RhcnZhdGlvbiwgZXNwZWNpYWxseSB3aXRoIG1hbnkgcGVlcnMgb3IgaW50ZXJmYWNlcy4gTWF5YmUgaXQgd2FzIGFuIGludGVudGlvbmFsIGRlc2lnbiBjaG9pY2UgdG8gYXZvaWQgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBmaWVsZCBpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgKGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGApLiBJdCBpcyBkZWNyZW1lbnRlZCB3aGVuIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBvciB3aGVuIHRoZSBwZWVyIGlzIHJlbW92ZWQgKGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgYW5kIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCkuIFRoZSBgd2FpdF92YXJfZXZlbnRgIGluIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBpcyBub3cgYmFzZWQgb24gdGhpcyBhdG9taWMgY291bnRlci4gSW5zdGVhZCBvZiBzaW1wbHkgZmx1c2hpbmcgdGhlIHdvcmtxdWV1ZXMsIHRoZSBjb2RlIG5vdyB3YWl0cyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byByZWFjaCB6ZXJvLiBUaGlzIHNlZW1zIGxpa2UgYW4gYXR0ZW1wdCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB3b3JrcXVldWUgZmx1c2hlcyBieSB3YWl0aW5nIG9ubHkgb24gd2hhdCYjMzk7cyBhY3RpdmUuCgpUaGlzIHNvdW5kcyBsaWtlIGEgd2VsbC1pbnRlbnRpb25lZCBvcHRpbWl6YXRpb24sIGJ1dCBpdCYjMzk7cyBhIGJpdCBjb21wbGV4LiBUaGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHRoZSB3YWl0IGNvbmRpdGlvbiBpbnRyb2R1Y2UgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCBtZW1vcnkgcmVsZWFzZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwZWVyIHJlbW92YWwuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBjb25jZXJuaW5nIGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIGFuZCB0aGVzZSBjaGFuZ2VzIHRvdWNoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcy4KClRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGFyb3VuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gQSBxdWljayBncmVwcGVyIHNlYXJjaCBvciByZWFkaW5nIHRob3NlIGZpbGVzIG1pZ2h0IHJldmVhbCBtb3JlIGRldGFpbHMgYW5kIGhlbHAgbWUgZXZhbHVhdGUgdGhpcyBjb2RlJiMzOTtzIG51YW5jZXMuCgoqKk15IGluc3RpbmN0IGlzIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZXJlJiMzOTtzIGEgcmVhc29uYWJsZSByaXNrIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgYSBmb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBiZSBhYmxlIHRvIGNhdGNoIGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIHJlZmFjdG9yaW5nIGNoYW5nZXMuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X2NyeXB0X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01My1cdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjU0Olx0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNTUtXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExNS1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTY6XHRhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTc6XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTg6XHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTM3PXN0cnVjdCB3Z19wZWVyIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTM5LVx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo0MDpcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC00MS1cdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNTM9c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE2NC1cdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNjU6XHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTY2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE3Nz1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODYtXHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxODc6XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE4ODpcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODktXHR3Z19wZWVyX3B1dChwZWVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTQzOD1pbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDgwLVx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgxOlx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgyOlx0XHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00ODMtXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgd2dfcGVlcmAgQWxsb2NhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBgd2dfcGVlcmAgc3RydWN0dXJlIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpdHMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGxpZmVjeWNsZSB3aXRoaW4gV2lyZUd1YXJkLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBzbyB0aGlzIHNob3VsZCBiZSBhIHF1aWNrIGRlZXAgZGl2ZS4KCk15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgZnVuZGFtZW50YWwgZnVuY3Rpb25hbGl0eSBpcyBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHJlbGF0ZWQgdG8gcGVlciBtYW5hZ2VtZW50LCBhbmQgdGh1cywgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGV2ZW50dWFsIGRlc3RydWN0aW9uIG9mIHRoZXNlIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG4gIDIxOlx0XG4gIDIyOlx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuICAyMzpcdFx0XHRcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcbiAgMjQ6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXG4gIDI1Olx0e1xuICAyNjpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXI7XG4gIDI3Olx0XHRpbnQgcmV0ID0gLUVOT01FTTtcbiAgMjg6XHRcbiAgMjk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2ctXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcbiAgMzA6XHRcbiAgMzE6XHRcdGlmICh3Zy1cdTAwM2VudW1fcGVlcnMgXHUwMDNlPSBNQVhfUEVFUlNfUEVSX0RFVklDRSlcbiAgMzI6XHRcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiAgMzM6XHRcbiAgMzQ6XHRcdHBlZXIgPSBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKTtcbiAgMzU6XHRcdGlmICh1bmxpa2VseSghcGVlcikpXG4gIDM2Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDM3Olx0XHRpZiAodW5saWtlbHkoZHN0X2NhY2hlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpKVxuICAzODpcdFx0XHRnb3RvIGVycjtcbiAgMzk6XHRcbiAgNDA6XHRcdHBlZXItXHUwMDNlZGV2aWNlID0gd2c7XG4gIDQxOlx0XHR3Z19ub2lzZV9oYW5kc2hha2VfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWhhbmRzaGFrZSwgXHUwMDI2d2ctXHUwMDNlc3RhdGljX2lkZW50aXR5LFxuICA0MjpcdFx0XHRcdFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XG4gIDQzOlx0XHRwZWVyLVx1MDAzZWludGVybmFsX2lkID0gYXRvbWljNjRfaW5jX3JldHVybihcdTAwMjZwZWVyX2NvdW50ZXIpO1xuICA0NDpcdFx0cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XG4gIDQ1Olx0XHR3Z19jb29raWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWxhdGVzdF9jb29raWUpO1xuICA0NjpcdFx0d2dfdGltZXJzX2luaXQocGVlcik7XG4gIDQ3Olx0XHR3Z19jb29raWVfY2hlY2tlcl9wcmVjb21wdXRlX3BlZXJfa2V5cyhwZWVyKTtcbiAgNDg6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XG4gIDQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XG4gIDUwOlx0XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gIDUxOlx0XHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gIDUyOlx0XHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4gIDUzOlx0XHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuICA1NDpcdFx0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiAgNTU6XHRcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gIDU2Olx0XHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gIDU3Olx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG4gIDU4Olx0XHR3Z19ub2lzZV9yZXNldF9sYXN0X3NlbnRfaGFuZHNoYWtlKFx1MDAyNnBlZXItXHUwMDNlbGFzdF9zZW50X2hhbmRzaGFrZSk7XG4gIDU5Olx0XHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcdTAwMjZwZWVyLVx1MDAzZW5hcGkuc3RhdGUpO1xuICA2MDpcdFx0bmV0aWZfbmFwaV9hZGQod2ctXHUwMDNlZGV2LCBcdTAwMjZwZWVyLVx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcbiAgNjE6XHRcdG5hcGlfZW5hYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gIDYyOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0LCBcdTAwMjZ3Zy1cdTAwM2VwZWVyX2xpc3QpO1xuICA2MzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVlci1cdTAwM2VhbGxvd2VkaXBzX2xpc3QpO1xuICA2NDpcdFx0d2dfcHVia2V5X2hhc2h0YWJsZV9hZGQod2ctXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xuICA2NTpcdFx0JiM0MzsmIzQzO3dnLVx1MDAzZW51bV9wZWVycztcbiAgNjY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBQZWVyICVsbHUgY3JlYXRlZFxcblwmIzM0Oywgd2ctXHUwMDNlZGV2LVx1MDAzZW5hbWUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpO1xuICA2NzpcdFx0cmV0dXJuIHBlZXI7XG4gIDY4Olx0XG4gIDY5Olx0ZXJyOlxuICA3MDpcdFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xuICA3MTpcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0X21heWJlX3plcm8oc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gIDc1Olx0e1xuICA3NjpcdFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXG4gIDc3Olx0XHRcdFx0IFwmIzM0O1Rha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcJiMzNDspO1xuICA3ODpcdFx0aWYgKHVubGlrZWx5KCFwZWVyIHx8ICFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KSkpXG4gIDc5Olx0XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFBlZXIgSW5pdGlhbGl6YXRpb24gYW5kIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHBlZXIgbWFuYWdlbWVudCBjb2RlLiBGaXJzdCB0aGluZywgSSYjMzk7bSBub3RpbmcgdGhlIGV4cGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIG5ldyBgcGVlcmAgc3RydWN0dXJlIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBleHBlY3RlZCwgYXMgd2UmIzM5O3JlIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuIEdvb2QuIFdlJiMzOTtyZSB6ZXJvaW5nIHRoZSBjYWNoZSwgd2hpY2ggaXMgYSBzb2xpZCBpbml0aWFsIHNhZmV0eSBtZWFzdXJlLCB3aGljaCBnaXZlcyB1cyBhbiBlYXN5IHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcsIGFuZCBpdCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGEgbmV3IGZpZWxkIGBwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdXNpbmcgYGF0b21pY19zZXRgIHRvIDEsIEkgc2VlLiBBbHdheXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG5ldyBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCBhbnkgcmVhZC1iZWZvcmUtd3JpdGUgb3IgcmFjZSBjb25kaXRpb25zIGxhdGVyLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSBvdXIgY2xlYW51cCBwcm9jZXNzIGlzIHNhbmUsIEkmIzM5O20gbW92aW5nIG9uIHRvIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBoYW5kbGVzIHRoZSBsaWZlY3ljbGUgYW5kIGRlYWxsb2NhdGlvbiBvZiBhIGRlYWQgcGVlci4gV2UgYWx3YXlzIGhhdmUgdG8gY2hlY2sgdGhlIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XG4gIDkxOlx0XHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGFsbG93IGp1bXBpbmcgY29udGV4dHMgYWZ0ZXIuICovXG4gIDkyOlx0XHRXUklURV9PTkNFKHBlZXItXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XG4gIDkzOlx0XG4gIDk0Olx0XHQvKiBUaGUgY2FsbGVyIG11c3Qgbm93IHN5bmNocm9uaXplX25ldCgpIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LiAqL1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA5ODpcdHtcbiAgOTk6XHRcdFdBUk5fT04oIXBlZXItXHUwMDNlaXNfZGVhZCk7XG4gMTAwOlx0XG4gMTAxOlx0XHQvKiBObyBtb3JlIGtleXBhaXJzIGNhbiBiZSBjcmVhdGVkIGZvciB0aGlzIHBlZXIsIHNpbmNlIGlzX2RlYWQgcHJvdGVjdHNcbiAxMDI6XHRcdCAqIGFkZF9uZXdfa2V5cGFpciwgc28gd2UgY2FuIG5vdyBkZXN0cm95IGV4aXN0aW5nIG9uZXMuXG4gMTAzOlx0XHQgKi9cbiAxMDQ6XHRcdHdnX25vaXNlX2tleXBhaXJzX2NsZWFyKFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMpO1xuIDEwNTpcdFxuIDEwNjpcdFx0LyogRGVzdHJveSBhbGwgb25nb2luZyB0aW1lcnMgdGhhdCB3ZXJlIGluLWZsaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gMTA3Olx0XHQgKiB0aGlzIGZ1bmN0aW9uLlxuIDEwODpcdFx0ICovXG4gMTA5Olx0XHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiAxMTA6XHRcbiAxMTE6XHRcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbiAxMTI6XHRcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xuIDExMzpcdFx0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbiAxMTQ6XHRcdCAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuXG4gMTE1Olx0XHQgKi9cbiAxMTY6XHRcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTE3Olx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuIDExODpcdFx0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuIDExOTpcdFxuIDEyMDpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiAxMjE6XHRcbiAxMjI6XHRcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIDEyMzpcdFx0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gMTI0Olx0XHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIDEyNTpcdFx0ICovXG4gMTI2Olx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIDEyNzpcdFxuIDEyODpcdFx0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4gMTI5Olx0XHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gMTMwOlx0XHQgKi9cbiAxMzE6XHRcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gMTMyOlx0XG4gMTMzOlx0XHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIDEzNDpcdFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbiAxMzU6XHRcdCAqIHJldHVybmluZywgMikgZnJvbSB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWRcbiAxMzY6XHRcdCAqIGFuZCByZXR1cm5pbmcsIDMpIGZyb20gd2dfcmVjZWl2ZV9oYW5kc2hha2VfcGFja2V0KCkgYWZ0ZXIgYSBwb2ludFxuIDEzNzpcdFx0ICogd2hlcmUgaXQgaGFzIHByb2Nlc3NlZCBhbiBpbmNvbWluZyBoYW5kc2hha2UgcGFja2V0LCBidXQgd2hlcmVcbiAxMzg6XHRcdCAqIGFsbCBjYWxscyB0byBwYXNzIGl0IG9mZiB0byB0aW1lcnMgZmFpbHMgYmVjYXVzZSBvZiBpc19kZWFkLiBXZSB3b24mIzM5O3RcbiAxMzk6XHRcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbVxuIDE0MDpcdFx0ICogYWxsb3dlZGlwczsgd2Ugd29uJiMzOTt0IGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDIpIGV2ZW50dWFsbHksIGJlY2F1c2VcbiAxNDE6XHRcdCAqIHdnX2luZGV4X2hhc2h0YWJsZV9sb29rdXAgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwsIHNpbmNlIHdlIHJlbW92ZWRcbiAxNDI6XHRcdCAqIGFsbCBleGlzdGluZyBrZXlwYWlycyBhbmQgbm8gbW9yZSBjYW4gYmUgY3JlYXRlZDsgd2Ugd29uJiMzOTt0IGhhdmUgbmV3XG4gMTQzOlx0XHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJiMzOTtyZSByZW1vdmVkIGZyb20gdGhlIHB1YmtleVxuIDE0NDpcdFx0ICogaGFzaCB0YWJsZSwgd2hpY2ggYWxsb3dzIGZvciBhIG1heGltdW0gb2Ygb25lIGhhbmRzaGFrZSByZXNwb25zZSxcbiAxNDU6XHRcdCAqIHZpYSB0aGUgc3RpbGwtdW5jbGVhcmVkIGluZGV4IGhhc2h0YWJsZSBlbnRyeSwgYnV0IG5vdCBtb3JlIHRoYW4gb25lLFxuIDE0NjpcdFx0ICogYW5kIGluIHdnX2Nvb2tpZV9tZXNzYWdlX2NvbnN1bWUsIHRoZSBsb29rdXAgZXZlbnR1YWxseSBnZXRzIGEgcGVlclxuIDE0NzpcdFx0ICogd2l0aCBhIHJlZmNvdW50IG9mIHplcm8sIHNvIG5vIG5ldyByZWZlcmVuY2UgaXMgdGFrZW4uXG4gMTQ4Olx0XHQgKi9cbiAxNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBRdWV1ZWluZyBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyB3aXRoIHRoZSBxdWV1ZWluZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHF1ZXVlaW5nLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIHByb2JhYmx5IGFyb3VuZCBsaW5lIDE1MCB0byAyMDAuIFRoaXMgaXMgdHlwaWNhbGx5IHdoZXJlIHlvdSYjMzk7ZCBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgY3JpdGljYWwgcGF0aCBvcGVyYXRpb25zIOKAkyB0aGUgZW5xdWV1ZS9kZXF1ZXVlIG1ldGhvZHMsIGludGVybmFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBvciBtYXliZSBldmVuIHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBxdWV1ZSYjMzk7cyBzdGF0ZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdHF1ZXVlLVx1MDAzZXBlZWtlZCA9IE5VTEw7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiAxNTQ6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbiAxNTU6XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSlcbiAxNTY6XHR7XG4gMTU3Olx0XHRpbnQgY3B1O1xuIDE1ODpcdFxuIDE1OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBQQUNLRVRfU1RBVEVfVU5DUllQVEVEKTtcbiAxNjA6XHRcdC8qIFdlIGZpcnN0IHF1ZXVlIHRoaXMgdXAgZm9yIHRoZSBwZWVyIGluZ2VzdGlvbiwgYnV0IHRoZSBjb25zdW1lclxuIDE2MTpcdFx0ICogd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIENSWVBURUQgb3IgREVBRCBiZWZvcmUuXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAxNjU6XHRcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTY2Olx0XG4gMTY3Olx0XHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIDE2ODpcdFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHRjcHUgPSB3Z19jcHVtYXNrX25leHRfb25saW5lKFx1MDAyNmRldmljZV9xdWV1ZS1cdTAwM2VsYXN0X2NwdSk7XG4gMTcxOlx0XHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcdTAwMjZkZXZpY2VfcXVldWUtXHUwMDNlcmluZywgc2tiKSkpXG4gMTcyOlx0XHRcdHJldHVybiAtRVBJUEU7XG4gMTczOlx0XHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFx1MDAyNnBlcl9jcHVfcHRyKGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXIsIGNwdSktXHUwMDNld29yayk7XG4gMTc0Olx0XHRyZXR1cm4gMDtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTc4Olx0e1xuIDE3OTpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTgwOlx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE4MTpcdFx0ICovXG4gMTgyOlx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE4MzpcdFxuIDE4NDpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMTg1Olx0XHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gMTg2Olx0XHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gMTg3Olx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiAxODg6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTg5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBXaXJlR3VhcmQgUlggcGF0aCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gcmVjZWl2ZWQgcGVyLXBlZXIuIFdlJiMzOTt2ZSBnb3QgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgIHRvIGNvbnNpZGVyLiBOb3csIHdoYXQgZG9lcyB0aGF0IGZ1bmN0aW9uICpkbyo/IEFuZCB3aGF0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgd2l0aGluIHRoZSBwcm9jZXNzaW5nIGZsb3c/IFdoZXJlIGRvZXMgdGhlIHBhY2tldCBnbz8gV2hhdCBoYXBwZW5zIHRvIHRoZSBkYXRhPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uPyBJIG5lZWQgdG8gdHJhY2sgdGhlIHBhY2tldCBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgYW5kIGlkZW50aWZ5IGFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGhhdCB0aGUgUlgmIzM5O2QgcGFja2V0IHVuZGVyZ29lcy4gVGhpbmtpbmcgYWJvdXQgcXVldWVpbmcgc3RyYXRlZ2llcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGlzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMjAwOlx0XHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMjAxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAyMDI6XHR9XG4gMjAzOlx0XG4gMjA0Olx0I2lmZGVmIERFQlVHXG4gMjA1Olx0Ym9vbCB3Z19wYWNrZXRfY291bnRlcl9zZWxmdGVzdCh2b2lkKTtcbiAyMDY6XHQjZW5kaWZcbiAyMDc6XHRcbiAyMDg6XHQjZW5kaWYgLyogX1dHX1FVRVVFSU5HX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gV2lyZUd1YXJkIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgV2lyZUd1YXJkIHBhY2tldCByZWNlcHRpb24gY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxvd2VzdCBsZXZlbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHdnX3BhY2tldF9yeF9wb2xsYCBpbiBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIHBvbGxpbmcgbWVjaGFuaXNtIGZvciByZWNlaXZpbmcgcGFja2V0cywgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBiZWdpbi4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIGhvdyB0aGUgZGF0YSBmbG93cyBpbiBhbmQgaXMgcHJvY2Vzc2VkIGF0IHRoZSBrZXJuZWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0XHRcdGlmICh1bmxpa2VseSghY291bnRlcl92YWxpZGF0ZShcdTAwMjZrZXlwYWlyLVx1MDAzZXJlY2VpdmluZ19jb3VudGVyLFxuIDQ2MjpcdFx0XHRcdFx0XHQgICAgICAgUEFDS0VUX0NCKHNrYiktXHUwMDNlbm9uY2UpKSkge1xuIDQ2MzpcdFx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IFBhY2tldCBoYXMgaW52YWxpZCBub25jZSAlbGx1IChtYXggJWxsdSlcXG5cJiMzNDssXG4gNDY0Olx0XHRcdFx0XHRcdCAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbiA0NjU6XHRcdFx0XHRcdFx0ICAgIFBBQ0tFVF9DQihza2IpLVx1MDAzZW5vbmNlLFxuIDQ2NjpcdFx0XHRcdFx0XHQgICAgUkVBRF9PTkNFKGtleXBhaXItXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIuY291bnRlcikpO1xuIDQ2NzpcdFx0XHRcdGdvdG8gbmV4dDtcbiA0Njg6XHRcdFx0fVxuIDQ2OTpcdFxuIDQ3MDpcdFx0XHRpZiAodW5saWtlbHkod2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKFx1MDAyNmVuZHBvaW50LCBza2IpKSlcbiA0NzE6XHRcdFx0XHRnb3RvIG5leHQ7XG4gNDcyOlx0XG4gNDczOlx0XHRcdHdnX3Jlc2V0X3BhY2tldChza2IsIGZhbHNlKTtcbiA0NzQ6XHRcdFx0d2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKHBlZXIsIHNrYiwgXHUwMDI2ZW5kcG9pbnQpO1xuIDQ3NTpcdFx0XHRmcmVlID0gZmFsc2U7XG4gNDc2Olx0XG4gNDc3Olx0bmV4dDpcbiA0Nzg6XHRcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpO1xuIDQ3OTpcdFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gNDgwOlx0XHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIDQ4MTpcdFx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiA0ODI6XHRcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiA0ODM6XHRcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gNDg0Olx0XG4gNDg1Olx0XHRcdGlmICgmIzQzOyYjNDM7d29ya19kb25lIFx1MDAzZT0gYnVkZ2V0KVxuIDQ4NjpcdFx0XHRcdGJyZWFrO1xuIDQ4NzpcdFx0fVxuIDQ4ODpcdFxuIDQ4OTpcdFx0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0KVxuIDQ5MDpcdFx0XHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcbiA0OTE6XHRcbiA0OTI6XHRcdHJldHVybiB3b3JrX2RvbmU7XG4gNDkzOlx0fVxuIDQ5NDpcdFxuIDQ5NTpcdHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiA0OTY6XHR7XG4gNDk3Olx0XHRzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aWNvcmVfd29ya2VyLFxuIDQ5ODpcdFx0XHRcdFx0XHRcdCB3b3JrKS1cdTAwM2VwdHI7XG4gNDk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk3OAoJCQkJCQkJb3V0cHV0OiAzMTMKCQkJCQkJCXRob3VnaHRzOiAxMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIFN5bmNocm9uaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCAqbmVlZHMqIEtNU0FOLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIHJld29ya2luZyB0aGUgcGVlciB0ZWFyZG93biBhbmQgcXVldWVpbmcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlKClgIGNhbGxzIHdpdGggYSBwZXItcGVlciBhdG9taWMgY291bnRlciAoYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudCgpYCwgZm9sbG93ZWQgYnkgZm9jdXNlZCBgZmx1c2hfd29yaygpYCBjYWxscy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBEb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBMZXQmIzM5O3MgYW5hbHl6ZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBuZXcgYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBDcml0aWNhbGx5LCBgd2dfcGVlcl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCAqYW5kKiBgYXRvbWljX3NldCgpYC4gVGhhdCYjMzk7cyBnb29kLiBJdCBpbmRpY2F0ZXMgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgY2hhbmNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZvciB0aGF0IHZhcmlhYmxlLiBJdCBkb2VzICpub3QqIGludHJvZHVjZSBjaGFuZ2VzIHRoYXQgdG91Y2ggYW55IHVzZXItc3BhY2UtZmFjaW5nIHN0cnVjdHVyZXMgKG5ldGxpbmssIGlvY3RsLCBldGMuKSwgb3IgbW9kaWZpZXMgcGFja2V0IGJ1ZmZlciBkYXRhIGxlbmd0aCwgYm91bmRzIGNoZWNrcyBvciBvZmZzZXRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0YWNrIGJ1ZmZlcnMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0ICphcmVuJiMzOTt0KiBpbml0aWFsaXplZCwgYW5kIEkgY2FyZWZ1bGx5IHJldmlldyB0aGUgbGlzdGVkIHJ1bGVzIGFuZCBleGFtcGxlcy4KClRoZSBwcmltYXJ5IHJpc2tzIGhlcmUgc2VlbSB0byBiZSBjb25jdXJyZW5jeSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgcmVtb3ZhbCwgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiBhIHBhY2tldCBpcyBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHBlZXImIzM5O3MgYmVlbiBmcmVlZCAoS0FTQU4gd2lsbCBuYWlsIHRob3NlKSwgb3IgZGVhZGxvY2tzIGlmIHRoZSBjb3VudGVyIG5ldmVyIHJlYWNoZXMgemVybyAodGhlIGh1bmcgdGFzayBkZXRlY3RvciBvciBsb2NrZGVwIHdpbGwgZ3JhYiB0aGF0KS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm9uZSBvZiB0aGVzZSByZWxhdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoZSBrZXkgZGlzdGluY3Rpb24gYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gaXMgdGhhdCBLQVNBTiBhbHJlYWR5IGNhdGNoZXMgYSB3aG9sZSBob3N0IG9mIGJ1Z3MsIGFuZCBJIHNob3VsZCBvbmx5IGJlIGNvbnNpZGVyaW5nIEtNU0FOIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiAqdW5pbml0aWFsaXplZCogcmVhZHMgb3IgbGVha3MsIGFzIHRoZSBydWxlcyBtYWtlIGNsZWFyLiBTaW5jZSBhbGwgYWRkZWQgc3RydWN0dXJlcy9maWVsZHMgYXJlIHplcm9lZCBvciBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UsIEtNU0FOIGlzIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gVGhlcmVmb3JlLCBLQVNBTiBwbHVzIGxvY2tkZXAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQuCgpTbywgdGhlIGNvbmNsdXNpb24gaXM6CgotICAgYE5lZWRzS01TQU5gOiBgZmFsc2VgCi0gICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBieSByZXBsYWNpbmcgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzIHdpdGggYW4gYXRvbWljIHJlZmNvdW50IChgcGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50KClgIHBhaXJlZCB3aXRoIGBmbHVzaF93b3JrKClgIG9uIHBlZXItb3duZWQgd29ya3MuIFRoZSBvbmx5IG5ldyBmaWVsZCwgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpbiBgc3RydWN0IHdnX3BlZXJgLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGBhdG9taWNfc2V0KClgLiBObyBidWZmZXJzLCBwYWNrZXQgcGF5bG9hZHMsIG9yIHVzZXItZmFjaW5nIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGUgdG8gY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbjsgYW55IGJ1Z3Mgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUvbGlmZXRpbWUgaXNzdWVzIChkZXRlY3RlZCBieSBLQVNBTi9yZWZjb3VudCBkZWJ1Z2dpbmcpIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIChkZXRlY3RlZCBieSBsb2NrZGVwL2h1bmcgdGFzayB0aW1lb3V0KS4gS01TQU4gcHJvdmlkZXMgbm8gYWRkaXRpb25hbCBjb3ZlcmFnZSBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOC4zNTI5MjIxMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI0OTMyNjA4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZFwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGVlcl9jcmVhdGVcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXJlR3VhcmQgcGVlciB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbG9naWMuIEluc3RlYWQgb2YgY2FsbGluZyBmbHVzaF93b3JrcXVldWUoKSBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2hhcmVkIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgKHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3EpLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgb24gc3RydWN0IHdnX3BlZXIgYW5kIHdhaXRzIG9uIGl0IHZpYSB3YWl0X3Zhcl9ldmVudCgpIGJlZm9yZSBwZXJmb3JtaW5nIHRhcmdldGVkIGZsdXNoX3dvcmsoKSBvbiBwZWVyLW93bmVkIHdvcmsgc3RydWN0dXJlcy5cXG5cXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XFxuMS4gVGhlIG5ldyBzdHJ1Y3QgbWVtYmVyIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgY29udGFpbmVkIHdpdGhpbiBgc3RydWN0IHdnX3BlZXJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGB3Z19wZWVyX2NyZWF0ZSgpYCwgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgYXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChuZXRsaW5rLCBzb2NrZXQsIGlvY3RsLCBldGMuKSBpcyBhZGRlZCBvciBtb2RpZmllZC5cXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgc3luY2hyb25pemF0aW9uL2xpZmV0aW1lIGlzc3VlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgaWYgcGVlciB0ZWFyZG93biBmaW5pc2hlcyBwcmVtYXR1cmVseSwgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgaWYgdGhlIHdhaXRfdmFyX2V2ZW50IGNvbmRpdGlvbiBpcyBuZXZlciBzYXRpc2ZpZWQpLiBTdWNoIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIFJFRkNPVU5ULCBhbmQgTE9DS0RFUC9odW5nIHRhc2sgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdXNlZCBkdXJpbmcgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24uIEluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGRldmljZS13aWRlIHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3Egd29ya3F1ZXVlcyBtdWx0aXBsZSB0aW1lcywgaXQgaW50cm9kdWNlcyBhIHBlci1wZWVyIGF0b21pYyByZWZjb3VudCAocGFja2V0X2NyeXB0X3BlbmRpbmcpIHRyYWNrZWQgYWNyb3NzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgYW5kIHdhaXRzIGZvciBpdCB3aXRoIHdhaXRfdmFyX2V2ZW50KCksIGZvbGxvd2VkIGJ5IHRhcmdldGVkIGZsdXNoX3dvcmsoKSBjYWxscy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciByZWFkaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyB0aHJvdWdoIHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rIGludGVyZmFjZXMuIENvbmN1cnJlbmN5IGFuZCBxdWV1ZWluZyByZWZhY3RvcmluZ3MgbGlrZSB0aGlzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciBoYW5ncyBkdXJpbmcgcGVlciByZW1vdmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOC4zNTI5Mjg0MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMyNzI4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2NrZGVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcXG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcXG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xcbiBcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlKTtcXG4gXFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuK1xcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcXG4gXFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XFxuQEAgLTEwNSwyOCArMTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuIFxcdCAqL1xcbiBcXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcXG4gXFxuLVxcdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJ3RcXG4tXFx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UncyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcXG4tXFx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxcbi1cXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cXG4tXFx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxcbitcXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXFxuK1xcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xcbitcXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBUWFxcbitcXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxcbiBcXHQgKi9cXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuK1xcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4rXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gXFxuLVxcdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXFxuLVxcdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuLVxcdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xcbi1cXHRmbHVzaF93b3JrcXVldWUocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi1cXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4tXFx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuK1xcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdCAqL1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIFxcbi1cXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxcbi1cXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxcbitcXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcXG4rXFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiBcXHQgKi9cXG4tXFx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIFxcbiBcXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xcbiBcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xcbiBzdHJ1Y3Qgd2dfcGVlciB7XFxuIFxcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xcbitcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xcbiBcXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xcbiBcXHRib29sIGlzX2RlYWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZQQUNLRVRfUEVFUihza2IpLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIFxcbiBcXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxcbiBcXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXFxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIFxcdFxcdCAgICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiBcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcXG5pbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXFxuQEAgLTQ3Niw5ICs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4gXFxuIG5leHQ6XFxuIFxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTtcXG4tXFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShmcmVlKSlcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gXFxuIFxcdFxcdGlmICgrK3dvcmtfZG9uZSBcXHUwMDNlPSBidWRnZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOS42ODY5MDI2NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk4NTI5OTQzNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTI6NDM6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiBcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcbkBAIC00OSw2ICs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiBcdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJ4X3F1ZXVlKTtcbitcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXG4rXHRhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9sb2NrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcbkBAIC0xMDUsMjggKzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIFx0ICovXG4gXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiBcbi1cdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJ3Rcbi1cdCAqIGd1YXJkZWQgYnkgaXNfZGVhZCwgYnV0IGVhY2ggcmVmZXJlbmNlJ3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5XG4tXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXG4tXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cbi1cdCAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy5cbitcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbitcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xuK1x0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbitcdCAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuXG4gXHQgKi9cbitcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuK1x0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuK1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLVx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4rXHQvKiBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuIFx0ICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiBcdCAqL1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbiBcbi1cdC8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yXG4tXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxuK1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4rXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gXHQgKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VoYW5kc2hha2Vfc2VuZF93cSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmspO1xuIFxuIFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcbiBcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbitcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xuIFx0aW50IHNlcmlhbF93b3JrX2NwdTtcbiBcdGJvb2wgaXNfZGVhZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSlcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFxuIFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcbiBcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cbkBAIC0xODIsNiArMTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuK1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFx0d2dfcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG5pbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuQEAgLTQ3Niw5ICs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBuZXh0OlxuIFx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XG4tXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbitcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdGlmICgrK3dvcmtfZG9uZSBcdTAwM2U9IGJ1ZGdldClcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjM5LjY4NjkwNDI3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNjkwMzY0MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZUd1YXJkIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBXaXJlR3VhcmQgcGF0Y2ggdG8gZXZhbHVhdGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggYHBlZXIuY2AsIGBwZWVyLmhgLCBgcXVldWVpbmcuaGAsIGFuZCBgcmVjZWl2ZS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludDsgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHRoZSBhcmVhcyBhZmZlY3RlZC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgcmVhY2ggZm9yIGBnaXQgbG9nYCBvciBpZGVhbGx5LCBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgaWYgaXQncyBhdmFpbGFibGUsIHRvIHB1bGwgdXAgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wcmVoZW5zaXZlIHJldmlldy4gSXQgbG9va3MgbGlrZSBJIGhhdmUgYWNjZXNzIHRvIGNvbW1hbmQtbGluZSB0b29scyBsaWtlIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAgYW5kIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIHdoaWNoIGlzIGdyZWF0LCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoaW5ncyBxdWlja2x5LlxuXG5XaGlsZSBJJ20gYXQgaXQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIGtub3cgYENPTkZJR19XSVJFR1VBUkRgIGlzIHRoZSBiaWcgb25lLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCB0byBjb25maXJtIGFueSBkZXBlbmRlbmNpZXMgb3IgYXNzb2NpYXRlZCBmZWF0dXJlIGZsYWdzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUxLjM3NzI3MTE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk4MjU3MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdJUkVHVUFSRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUxLjQyMzI2MTM2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzOTE1MDY2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgV2lyZUd1YXJkIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBXaXJlR3VhcmQgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgV2lyZUd1YXJkIGlzIGEgbmV0d29yay1yZWxhdGVkIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgY29udGFpbmluZyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgaXQncyB0aGVyZSwgdGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZmxhZ3MsIGFuZCBhbnkgb3RoZXIga2VybmVsIHNldHRpbmdzIGxpbmtlZCB3aXRoIHRoZSBXaXJlR3VhcmQgZHJpdmVyLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHN0cmluZyBcIldJUkVHVUFSRFwiIGFjcm9zcyBhbGwgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBhIHNvbGlkLCBpZiBzbGlnaHRseSBicm9hZGVyLCBhcHByb2FjaC4gVGhhdCBzaG91bGQgcXVpY2tseSB0dXJuIHVwIHJlbGV2YW50IGVudHJpZXMsIGV2ZW4gaWYgV2lyZUd1YXJkIGlzbid0IGRpcmVjdGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEl04oCZcyBhIGdvb2Qgc3RyYXRlZ3kgdG8gcXVpY2tseSBzY2FuIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzLCBmb3IgbWF4aW11bSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUzLjgxNDc3MDQ1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMyMTk5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0lSRUdVQVJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTk9Y29uZmlnIERVTU1ZXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTczLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NzQ6Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6OTI6Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfRFVNTVkpICs9IGR1bW15Lm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSArPSB3aXJlZ3VhcmQvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX09WUE4pICs9IG92cG4vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGU9MT1jY2ZsYWdzLXkgOj0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXQnXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlOjI6Y2NmbGFncy0kKENPTkZJR19XSVJFR1VBUkRfREVCVUcpICs9IC1EREVCVUdcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUtMy13aXJlZ3VhcmQteSA6PSBtYWluLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZT0xNj13aXJlZ3VhcmQteSArPSBuZXRsaW5rLm8gZ2VuZXJhdGVkL25ldGxpbmsub1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtNy1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaDo4OiNpZm5kZWYgX0xJTlVYX1dJUkVHVUFSRF9HRU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjk6I2RlZmluZSBfTElOVVhfV0lSRUdVQVJEX0dFTl9IXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaD0yOD1pbnQgd2dfc2V0X2RldmljZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjMwOiNlbmRpZiAvKiBfTElOVVhfV0lSRUdVQVJEX0dFTl9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jPTIwPXN0YXRpYyBpbnQgX19pbml0IHdnX21vZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTQ3LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NDg6XFx0cHJfaW5mbyhcXFwiV2lyZUd1YXJkIFxcXCIgV0lSRUdVQVJEX1ZFUlNJT04gXFxcIiBsb2FkZWQuIFNlZSB3d3cud2lyZWd1YXJkLmNvbSBmb3IgaW5mb3JtYXRpb24uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTQ5LVxcdHByX2luZm8oXFxcIkNvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCBcXHUwMDNjSmFzb25AengyYzQuY29tXFx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYz03NT1NT0RVTEVfQVVUSE9SKFxcXCJKYXNvbiBBLiBEb25lbmZlbGQgXFx1MDAzY0phc29uQHp4MmM0LmNvbVxcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jOjc2Ok1PRFVMRV9WRVJTSU9OKFdJUkVHVUFSRF9WRVJTSU9OKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTc3LU1PRFVMRV9BTElBU19SVE5MX0xJTksoS0JVSUxEX01PRE5BTUUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3ZlcnNpb24uaDoxOiNkZWZpbmUgV0lSRUdVQVJEX1ZFUlNJT04gXFxcIjEuMC4wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0Mzo1My45NDc5OTczODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNDA3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFdpcmVHdWFyZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgV2lyZUd1YXJkIEtjb25maWcuICpMZXQncyBzZWUgdGhlIEtjb25maWcgZm9yIFdJUkVHVUFSRDoqIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIFdpcmVHdWFyZCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbHMsIHRoZWlyIGRlc2NyaXB0aW9ucywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgV2lyZUd1YXJkIG1vZHVsZSBmaXJzdCwgdGhlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBsaWtlIHBlZXIgaGFuZGxpbmcsIGtleSBtYW5hZ2VtZW50LCByb3V0aW5nLCBhbmQgbWF5YmUgZXZlbiB1c2VyLXNwYWNlIHRvb2xzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS2NvbmZpZyBvcHRpb25zIGludGVyYWN0LCBpZiB0aGVyZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gSSdtIGFsc28gbG9va2luZyBmb3IgY29uZGl0aW9uYWwgbG9naWM7IHRoaW5ncyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBzZXR0aW5ncyBvciBhcmNoaXRlY3R1cmUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBhIFdpcmVHdWFyZCBidWlsZCBpcyBjb25maWd1cmVkLCBhbmQgaWYgaXQgaXMgd2VsbC1kZXNpZ25lZC4gSSdsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgV2lyZUd1YXJkIHNvdXJjZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSBhbnkgYW1iaWd1aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0Mzo1Ni4yMTA0MDY2MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDczOlxcdFxcbiAgNzQ6XFx0Y29uZmlnIFdJUkVHVUFSRFxcbiAgNzU6XFx0XFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuICA3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDc4OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDc5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0NVUlZFMjU1MTlcXG4gIDgwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0NIQUNIQTIwUE9MWTEzMDVcXG4gIDgxOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIFdpcmVHdWFyZCBpcyBhIHNlY3VyZSwgZmFzdCwgYW5kIGVhc3kgdG8gdXNlIHJlcGxhY2VtZW50IGZvciBJUFNlY1xcbiAgODQ6XFx0XFx0ICB0aGF0IHVzZXMgbW9kZXJuIGNyeXB0b2dyYXBoeSBhbmQgY2xldmVyIG5ldHdvcmtpbmcgdHJpY2tzLiBJdCdzXFxuICA4NTpcXHRcXHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxcbiAgODY6XFx0XFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cXG4gIDg3OlxcdFxcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBJdCdzIHNhZmUgdG8gc2F5IFkgb3IgTSBoZXJlLCBhcyB0aGUgZHJpdmVyIGlzIHZlcnkgbGlnaHR3ZWlnaHQgYW5kXFxuICA5MDpcXHRcXHQgIGlzIG9ubHkgaW4gdXNlIHdoZW4gYW4gYWRtaW5pc3RyYXRvciBjaG9vc2VzIHRvIGFkZCBhbiBpbnRlcmZhY2UuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkRlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIFdJUkVHVUFSRFxcbiAgOTU6XFx0XFx0aGVscFxcbiAgOTY6XFx0XFx0ICBUaGlzIHdpbGwgd3JpdGUgbG9nIG1lc3NhZ2VzIGZvciBoYW5kc2hha2UgYW5kIG90aGVyIGV2ZW50c1xcbiAgOTc6XFx0XFx0ICB0aGF0IG9jY3VyIGZvciBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEl0IHdpbGwgYWxzbyBwZXJmb3JtIHNvbWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDM6NTYuMjEwNDkxOTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjIwNjc5MTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgUGVlciBUZWFyZG93biBTeW5jaHJvbml6YXRpb246IEEgUmVmYWN0b3JpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBwZWVyIHJlbW92YWwgYW5kIHRlYXJkb3duIGluIHJlbGF0aW9uIHRvIHBhY2tldHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZsaWdodC4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgcmlnaHQ/IEkgY2FuIGNyZWF0ZSBvbmUgd2l0aCBgaXAgbGluayBhZGRgIGFuZCBjb25maWd1cmUgaXQgd2l0aCBgZ2VuZXRsaW5rYC4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkIGZ1bmN0aW9ucyBsaWtlIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgIHNvIEkgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGludGVyZmFjZXMuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYGZsdXNoX3dvcmtxdWV1ZWAgb24gdGhlIGBwYWNrZXRfY3J5cHRfd3FgIGFuZCBgaGFuZHNoYWtlX3NlbmRfd3FgIHdvcmtxdWV1ZXMuIFRoYXQgc2VlbXMuLi5icnV0ZSBmb3JjZS4gRXNzZW50aWFsbHksIHRoZSBvbGQgd2F5IGZsdXNoZWQgd29ya3F1ZXVlcyB0byBlbnN1cmUgYWxsIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIHBlZXIgaXMgcmVtb3ZlZC4gVGhpcyB3b3VsZCBlbmNvbXBhc3MgYm90aCBUWCBhbmQgUlggcGFja2V0cy4gYG5hcGlfZGlzYWJsZWAgYW5kIGBuZXRpZl9uYXBpX2RlbGAgaGFuZGxlZCB0aGUgUlggc2lkZSBzZXBhcmF0ZWx5LiBUaGUgVFggd2FzIGhhbmRsZWQgYnkgdGhlIHdvcmtxdWV1ZS5cblxuTm93LCB0aG91Z2gsIHRoZSBjb21taXQgaXMgaW50cm9kdWNpbmcgYSBmaW5lci1ncmFpbmVkIGFwcHJvYWNoIHVzaW5nIGBhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgd2dfcGVlcmAgc3RydWN0LiBJdCdzIGVzc2VudGlhbGx5IGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHBhY2tldHMgaW4gdGhlIGNyeXB0byBwaXBlbGluZS4gSXQncyBpbml0aWFsaXplZCB0byAxIGR1cmluZyBwZWVyIGNyZWF0aW9uLiBXaGVuZXZlciBhIHBhY2tldCBpcyBlbnF1ZXVlZCwgYGF0b21pY19pbmNgIGlzIGNhbGxlZC4gV2hlbiBhIHBhY2tldCBjb21wbGV0ZXMgY3J5cHRvIGFuZCBnZXRzIGVucXVldWVkIGZvciBzZXJpYWwgd29yayAob3IgaW4gdGhlIFJYIHBvbGwpLCBgYXRvbWljX2RlY19hbmRfdGVzdGAgaXMgY2FsbGVkLCB3YWtpbmcgdXAgYSB3YWl0IHF1ZXVlIGlmIHRoZSBjb3VudGVyIGhpdHMgemVyby4gRmluYWxseSwgaW4gdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbiwgYWZ0ZXIgZGVjcmVtZW50aW5nIHRoZSBjb3VudGVyLCB0aGUgY29kZSB3YWl0cyBmb3IgdGhlIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgYXRvbWljIHZhcmlhYmxlIHRvIHJlYWNoIHplcm8uIFRoZW4gYSBgZmx1c2hfd29ya2AgaXMgcGVyZm9ybWVkIGZvciBzcGVjaWZpYyB3b3Jrcy5cblxuVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0ISBJbnN0ZWFkIG9mIGZsdXNoaW5nIGVudGlyZSB3b3JrcXVldWVzLCBpdCdzIG5vdyB1c2luZyBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWJpbmVkIHdpdGggYHdhaXRfdmFyX2V2ZW50YCBhbmQgc2VsZWN0aXZlIGBmbHVzaF93b3JrYC4gSXQncyBhIG11Y2ggbW9yZSB0YXJnZXRlZCBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kuIEl0J3Mgc3VwcG9zZWQgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9uIHBhY2tldCB0ZWFyZG93biBpbiB3aXJlZ3VhcmQuXG5cbk5vdywgbXkgZXhwZXJ0IGJyYWluIGlzIGtpY2tpbmcgaW4uIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmludGVuZGVkIHBhY2tldCBkcm9wcy4gV2hhdCBoYXBwZW5zIGlmIGEgcGFja2V0IGlzIGRyb3BwZWQgc29tZXdoZXJlICpiZWZvcmUqIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCBvciBgd2dfcGFja2V0X3J4X3BvbGxgPyBEb2VzIHRoYXQgZGVjcmVtZW50IHRoZSBjb3VudGVyPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBpcyBjYWxsZWQgZm9yICpib3RoKiBUWCBhbmQgUlggcGF0aHMuIFRoaXMgaXMgc29tZXRoaW5nIEknbGwgdmVyaWZ5IGJ5IGluc3BlY3RpbmcgdGhlIGNvZGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgYm90aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjAyLjQxNzI4NDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcxNjY5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTItXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTUzOnN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTQtXFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI4OlxcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXHUwMDI2d2ctXFx1MDAzZWRlY3J5cHRfcXVldWUsIFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSwgc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowMi40NjIwMDk2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2ODcyOTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcXVldWVpbmcuaGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHF1ZXVlaW5nIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gYHF1ZXVlaW5nLmhgLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgMTUzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGNvbmRpdGlvbiB2YXJpYWJsZXMsIG9yIGF0b21pYyBvcGVyYXRpb25zIGlmIGl0J3MgYSBtdWx0aS10aHJlYWRlZCBkZXNpZ24uIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgcXVldWUncyBpbnRlcm5hbCBzdGF0ZSAoaGVhZCwgdGFpbCwgc2l6ZSkgaXMgYmVpbmcgbWFuYWdlZCBhbmQgcHJvdGVjdGVkLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBxdWljayBmZWVsIGZvciB0aGUgdHJhZGUtb2ZmcyB0aGUgZGV2ZWxvcGVycyBtYWRlIOKAkyBhcmUgd2UgYWltaW5nIGZvciBoaWdoIHRocm91Z2hwdXQsIGxvdyBsYXRlbmN5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gTGluZSAxNTMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowNS42MzA3NDEwMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0LyogU2luZ2xlIGNvbnN1bWVyICovXFxuIDE0ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXFxuIDE0OTpcXHR7XFxuIDE1MDpcXHRcXHRxdWV1ZS1cXHUwMDNlcGVla2VkID0gTlVMTDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiAxNTQ6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbiAxNTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0aW50IGNwdTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0YXRvbWljX3NldF9yZWxlYXNlKFxcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNlc3RhdGUsIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpO1xcbiAxNjA6XFx0XFx0LyogV2UgZmlyc3QgcXVldWUgdGhpcyB1cCBmb3IgdGhlIHBlZXIgaW5nZXN0aW9uLCBidXQgdGhlIGNvbnN1bWVyXFxuIDE2MTpcXHRcXHQgKiB3aWxsIHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8gQ1JZUFRFRCBvciBERUFEIGJlZm9yZS5cXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIDE2NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gMTY1OlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcXG4gMTY4OlxcdFxcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0Y3B1ID0gd2dfY3B1bWFza19uZXh0X29ubGluZShcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VsYXN0X2NwdSk7XFxuIDE3MTpcXHRcXHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VyaW5nLCBza2IpKSlcXG4gMTcyOlxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuIDE3MzpcXHRcXHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFxcdTAwMjZwZXJfY3B1X3B0cihkZXZpY2VfcXVldWUtXFx1MDAzZXdvcmtlciwgY3B1KS1cXHUwMDNld29yayk7XFxuIDE3NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTc1OlxcdH1cXG4gMTc2OlxcdFxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHQvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGVcXG4gMTgwOlxcdFxcdCAqIHBlZXIgY2FuIGJlIGZyZWVkIGZyb20gYmVsb3cgdXMuXFxuIDE4MTpcXHRcXHQgKi9cXG4gMTgyOlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2UEFDS0VUX0NCKHNrYiktXFx1MDAzZXN0YXRlLCBzdGF0ZSk7XFxuIDE4NTpcXHRcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIDE4NjpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTg3OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuIDE4ODpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiAxODk6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiAyMDA6XFx0XFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDIwMTpcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gMjAyOlxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0I2lmZGVmIERFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjA1LjYzMDgxMDUyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTY2NjU2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlR3VhcmQgUGFja2V0IFF1ZXVlaW5nIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzLiBMaW5lcyAxNzAtMTczIGFyZSBjcnVjaWFsIGhlcmUuIEkgc2VlIHRoZSBjb2RlIGlzIHRyeWluZyB0byBlbnF1ZXVlIGEgcGFja2V0IChgc2tiYCkgaW50byB0aGUgZGV2aWNlIHF1ZXVlJ3MgcmluZyBidWZmZXIgdXNpbmcgYHB0cl9yaW5nX3Byb2R1Y2VfYmhgLiAgVGhlIGNydWNpYWwgcG9pbnQsIG9mIGNvdXJzZSwgaXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhpcyAqZmFpbHMqLiBJZiBgcHRyX3JpbmdfcHJvZHVjZV9iaGAgcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiB6ZXJvLCBpbmRpY2F0aW5nIGFuIGVycm9yIChsZXQncyBzYXkgYC1FTk9NRU1gIG9yIHRoZSByaW5nIGlzIGZ1bGwpLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRVBJUEVgLiBcblxuVGhlIHByb2JsZW0gaXMsIGFuZCB0aGlzIGlzIHdoYXQncyBib3RoZXJpbmcgbWUsIGJlZm9yZSB0aGF0IHJldHVybiwgYGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7YCB3YXMgYWxyZWFkeSBjYWxsZWQhIFRoYXQgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIGlzIGhhcHBlbmluZyB3aXRoIGVuY3J5cHRpb24gYmVmb3JlIHRoZSBxdWV1ZSBpdHNlbGYgaXMgY29uZmlybWVkLiBUaGF0J3MgYSBiaXQgcmlza3ksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjb3VudGluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uIGJlZm9yZSB0aGV5J3JlIGFjdHVhbGx5IHByb2Nlc3NlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIHRoZSBmdW5jdGlvbiB0aGlzIHNuaXBwZXQgaXMgcGFydCBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBhdCB0aGUgY2FsbCBzaXRlLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBmb3IgdGhlIGAtRVBJUEVgIHJldHVybi4gSSdsbCBuZWVkIHRvIGNoZWNrIGJvdGggYHJlY2VpdmUuY2AgYW5kIGBzZW5kLmNgIHdoZXJlIEknbSBleHBlY3RpbmcgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCB0byBiZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBhbnkgcG90ZW50aWFsIGZhaWx1cmVzIGFuZCBkZXRlcm1pbmUgd2hhdCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyBhbmQgdGhlIGVuY3J5cHRpb24gY291bnRlci4gSSdtIGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBjb3VudGVyIHVwZGF0ZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk4MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjA5LjU5NzQ2ODgzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFxuIDUxMTpcXHRzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1MTI6XFx0e1xcbiA1MTM6XFx0XFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWtleV9pZHg7XFxuIDUxNDpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IE5VTEw7XFxuIDUxNTpcXHRcXHRpbnQgcmV0O1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIDUxODpcXHRcXHRQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNla2V5cGFpciA9XFxuIDUxOTpcXHRcXHRcXHQoc3RydWN0IG5vaXNlX2tleXBhaXIgKil3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKFxcbiA1MjA6XFx0XFx0XFx0XFx0d2ctXFx1MDAzZWluZGV4X2hhc2h0YWJsZSwgSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIsIGlkeCxcXG4gNTIxOlxcdFxcdFxcdFxcdFxcdTAwMjZwZWVyKTtcXG4gNTIyOlxcdFxcdGlmICh1bmxpa2VseSghd2dfbm9pc2Vfa2V5cGFpcl9nZXQoUEFDS0VUX0NCKHNrYiktXFx1MDAzZWtleXBhaXIpKSlcXG4gNTIzOlxcdFxcdFxcdGdvdG8gZXJyX2tleXBhaXI7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCkpKVxcbiA1MjY6XFx0XFx0XFx0Z290byBlcnI7XFxuIDUyNzpcXHRcXG4gNTI4OlxcdFxcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXHUwMDI2d2ctXFx1MDAzZWRlY3J5cHRfcXVldWUsIFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSwgc2tiLFxcbiA1Mjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuIDUzMDpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuIDUzMTpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgUEFDS0VUX1NUQVRFX0RFQUQpO1xcbiA1MzI6XFx0XFx0aWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRVBJUEUpKSB7XFxuIDUzMzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gNTM0OlxcdFxcdFxcdHJldHVybjtcXG4gNTM1OlxcdFxcdH1cXG4gNTM2OlxcdGVycjpcXG4gNTM3OlxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KFBBQ0tFVF9DQihza2IpLVxcdTAwM2VrZXlwYWlyLCBmYWxzZSk7XFxuIDUzODpcXHRlcnJfa2V5cGFpcjpcXG4gNTM5OlxcdFxcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiA1NDA6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDU0MTpcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIDU0MjpcXHR9XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdHZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDU0NTpcXHR7XFxuIDU0NjpcXHRcXHRpZiAodW5saWtlbHkocHJlcGFyZV9za2JfaGVhZGVyKHNrYiwgd2cpIFxcdTAwM2MgMCkpXFxuIDU0NzpcXHRcXHRcXHRnb3RvIGVycjtcXG4gNTQ4OlxcdFxcdHN3aXRjaCAoU0tCX1RZUEVfTEUzMihza2IpKSB7XFxuIDU0OTpcXHRcXHRjYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0lOSVRJQVRJT04pOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowOS41OTc1ODAxNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwNzc3OTkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZW5kLmNgIC0gU3BlY2lmaWNhbGx5LCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGZvY3VzaW5nIG9uIHBhY2tldCBjcmVhdGlvbiB3aXRoaW4gdGhlIGBzZW5kLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhhdCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRhdGEgZm9yIHRoZXNlIFdpcmVHdWFyZCBwYWNrZXRzIGlzIGJlaW5nIGFzc2VtYmxlZC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUg4oCTIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQncyBnb2luZyBpbnRvIGl0LlxuXG5JJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc2VlIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0LiBXaGF0IGtpbmQgb2YgY29udGV4dCBkb2VzIGl0IG5lZWQ/IElzIGl0IHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIsIG9yIGFsbG9jYXRpbmcgb24gdGhlIGZseT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLCBidWZmZXIgb3ZlcmZsb3dzIG9yIGFueSBvdGhlciBzZWN1cml0eSBjb25jZXJucyBoZXJlPyBBcmUgYW55IHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24gcGFydGljdWxhcmx5IHByb25lIHRvIGRlbmlhbCBvZiBzZXJ2aWNlP1wiIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2l6ZSBjYWxjdWxhdGlvbnMsIGNvcGllcywgYW5kIGhvdyBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgaXMgYmVpbmcgY29uY2F0ZW5hdGVkLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gdGhlIGZsb3cuXG5cbkJhc2ljYWxseSwgSSB3YW50IHRvIG5haWwgZG93biBob3cgbXVjaCBjb250cm9sIGEgcG90ZW50aWFsIGF0dGFja2VyIG1pZ2h0IGhhdmUgb3ZlciB0aGUgcGFja2V0IGRhdGEgY29uc3RydWN0aW9uLiBBbnkgcG9pbnQgb2YgYXR0YWNrIHdvdWxkIGJlIGludGVyZXN0aW5nIGJ1dCBpbiBwYXJ0aWN1bGFyIGlmIEkgY2FuIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBjYW4gYmUgaW5zZXJ0ZWQgZnJvbSBleHRlcm5hbCBzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MTMuMzA1MzYyMTU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdFxcbiAzMTE6XFx0c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuIDMxMjpcXHR7XFxuIDMxMzpcXHRcXHRzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IHBlZXItXFx1MDAzZWRldmljZTtcXG4gMzE0OlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIDMxNzpcXHRcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBlZXItXFx1MDAzZWlzX2RlYWQpKSlcXG4gMzE4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuIDMyMjpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuIDMyMzpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KGZpcnN0LCBQQUNLRVRfU1RBVEVfREVBRCk7XFxuIDMyNDpcXHRlcnI6XFxuIDMyNTpcXHRcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gMzI2OlxcdFxcdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSlcXG4gMzI3OlxcdFxcdFxcdHJldHVybjtcXG4gMzI4OlxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KFBBQ0tFVF9DQihmaXJzdCktXFx1MDAzZWtleXBhaXIsIGZhbHNlKTtcXG4gMzI5OlxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbiAzMzA6XFx0XFx0a2ZyZWVfc2tiX2xpc3QoZmlyc3QpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHR2b2lkIHdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTtcXG4gMzM2OlxcdFxcdERFVl9TVEFUU19BREQocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VkZXYsIHR4X2Ryb3BwZWQsXFxuIDMzNzpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlLnFsZW4pO1xcbiAzMzg6XFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xcbiAzMzk6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUubG9jayk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHZvaWQgd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuIDM0MzpcXHR7XFxuIDM0NDpcXHRcXHRzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcjtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgcGFja2V0cztcXG4gMzQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFN0ZWFsIHRoZSBjdXJyZW50IHF1ZXVlIGludG8gb3VyIGxvY2FsIG9uZS4gKi9cXG4gMzQ5OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cGFja2V0cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjEzLjMwNTQ0ODU1OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NTg0MDAwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byB0aGUgV2lyZUd1YXJkIFBhY2tldCBQcm9jZXNzaW5nIHdpdGggLUVQSVBFIEVycm9ycyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSByZWN1cnJpbmcgcGF0dGVybiB3aXRoIHRoaXMgYC1FUElQRWAgZXJyb3IsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuIFdoZW4gYHJldGAgaXMgYC1FUElQRWAsIHRoZSBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgaXQgZW5xdWV1ZXMgYSBwYWNrZXQgd2l0aCB0aGUgYFBBQ0tFVF9TVEFURV9ERUFEYCBmbGFnLiBJbnNpZGUgdGhpcyBmdW5jdGlvbiwgSSBzZWUgYGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7YCBmb2xsb3dlZCBieSBgd2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZylgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIGEgd2F5IHRvIHNpZ25hbCBzb21ldGhpbmcuIE5vdywgd2hhdCBhYm91dCB0aGUgcmVjZWl2ZSBzaWRlPyBJdCBzZWVtcyB3ZSBoYXZlIGEgc2ltaWxhciBwcm9jZXNzIHdoZW4gYHJldCA9PSAtRVBJUEVgOiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAgZ2V0cyBjYWxsZWQsIGFnYWluIHdpdGggYFBBQ0tFVF9TVEFURV9ERUFEYCwgYW5kIHRoZW4gYG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKWAuIFRoaXMgdGhlbiB0cmlnZ2VycyB0aGUgYHdnX3BhY2tldF9yeF9wb2xsYC4gQW5kIHdoYXQgaGFwcGVucyBpbnNpZGUgdGhhdCBmdW5jdGlvbj8gVGhhdCdzIHJpZ2h0LCBgYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKWAgYW5kIGB3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKWAuIEknbSBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUgaW52b2x2aW5nIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGJ1dCBJIGRvbid0IHlldCB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBwdXJwb3NlLlxuXG5CdXQgd2hhdCBhYm91dCB0aGUgc3VjY2VzcyBjYXNlcz8gV2hlcmUgaXMgdGhpcyBjb3VudGVyIGRlY3JlbWVudGVkIGFuZCB0aGUgYXNzb2NpYXRlZCB3YWtlLXVwIGNhbGxlZCB3aGVuIHRoZSBjcnlwdG8gYWN0dWFsbHkgKnN1Y2NlZWRzKj8gT3IgaG93IGl0J3MgaGFuZGxlZCBieSB0aGUgd29ya2VyIHRocmVhZHM/IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBgcGFja2V0X2NyeXB0X3dxYCB3b3JrZXIgaXMgYWN0dWFsbHkgdXNlZC4gV2hlcmUgaXMgYGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXJgIGRlZmluZWQsIGFuZCBob3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYGRlY3J5cHRfcXVldWVgIGFuZCBgZW5jcnlwdF9xdWV1ZWA/IExldCdzIHNlYXJjaCBmb3IgdGhvc2UgcXVldWVzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyMC44ODk0NTIzODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTMxNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuY3J5cHRfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNTktXFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjI2MDpcXHR3Z19wYWNrZXRfcXVldWVfZnJlZShcXHUwMDI2d2ctXFx1MDAzZWVuY3J5cHRfcXVldWUsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjYxLVxcdHJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGFsbCB0aGUgcGVlcnMgdG8gYmUgYWN0dWFsbHkgZnJlZWQuICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzEwPXN0YXRpYyBpbnQgd2dfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzUyOlxcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFxcdTAwMjZ3Zy1cXHUwMDNlZW5jcnlwdF9xdWV1ZSwgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTMtXFx0XFx0XFx0XFx0ICAgTUFYX1FVRVVFRF9QQUNLRVRTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM2MDpcXHRcXHRnb3RvIGVycl9mcmVlX2VuY3J5cHRfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM2MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zOTEtXFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM5MjplcnJfZnJlZV9lbmNyeXB0X3F1ZXVlOlxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozOTM6XFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM5NC1lcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ6XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmg9NDA9c3RydWN0IHdnX2RldmljZSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQxLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oOjQyOlxcdHN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlLCBoYW5kc2hha2VfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQzLVxcdHN0cnVjdCBzb2NrIF9fcmN1ICpzb2NrNCwgKnNvY2s2O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyMC45NDAzOTUyMThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzMTQ4ODE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYHdnX3BhY2tldGAgd29ya2VyIGZ1bmN0aW9ucywgdGhpbmtpbmcgYWxvdWQ6XG5cbioqQW5hbHl6aW5nIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlciBhbmQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgYW5kIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhdCBmaXJzdCBnbGFuY2UuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSB3b3JraG9yc2VzLCB0aGUgb25lcyBkb2luZyB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gd2l0aGluIHRoZSBXaXJlR3VhcmQgaW1wbGVtZW50YXRpb24uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBhcmNoaXRlY3R1cmUuIEFyZSB0aGV5IHNpbmdsZS10aHJlYWRlZCwgb3IgZGVzaWduZWQgZm9yIGNvbmN1cnJlbmN5PyBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcsIEknZCAqaG9wZSogdGhleSBhcmUgZGVzaWduZWQgd2l0aCBjb25jdXJyZW5jeSBpbiBtaW5kLCBidXQgSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgdXNpbmcgYSB0aHJlYWQgcG9vbCwgb3Igc3Bhd25pbmcgbGlnaHR3ZWlnaHQgdGhyZWFkcyAobGlrZSBnb3JvdXRpbmVzIGlmIHdlJ3JlIGluIGEgR28gY29udGV4dCwgb3Iga2VybmVsIHRocmVhZHMsIG9yIHBlcmhhcHMgYXJlIHRoZXkgZXZlbiB1c2luZyBTSU1EIGluc3RydWN0aW9ucyk/XG5cbkknZCB3YW50IHRvIGtub3c6XG5cbiogICAqKkNvbmN1cnJlbmN5IE1vZGVsOioqIEhvdyBhcmUgdGhleSBoYW5kbGluZyBtdWx0aXBsZSBwYWNrZXRzIHNpbXVsdGFuZW91c2x5PyBBcmUgdGhleSB1c2luZyBhIHF1ZXVlaW5nIHN5c3RlbSB0byBtYW5hZ2UgaW5jb21pbmcgd29yaz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkIChtdXRleGVzLCBzZW1hcGhvcmVzLCBhdG9taWMgb3BlcmF0aW9ucywgZXRjLik/IEFueSBjb250ZW50aW9uIHBvaW50cywgb3IgYm90dGxlbmVja3MsIGNvdWxkIGJlIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlLlxuKiAgICoqQ3J5cHRvZ3JhcGhpYyBQcmltaXRpdmVzOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIGFsZ29yaXRobXMgYXJlIGJlaW5nIHVzZWQgKENoYUNoYTIwLCBQb2x5MTMwNSwgZXRjLik/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvciBqdXN0IGxldmVyYWdpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAobGlic29kaXVtLCBPcGVuU1NMLCBldGMuKT9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEhvdyBhcmUgcGFja2V0cyBhbmQgYnVmZmVycyBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaW5lZmZpY2llbmNpZXMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIG9yIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzPyBBcmUgdGhlcmUgYW55IG1lbW9yeSBwb29scywgb3IgYXJlIHdlIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBldmVyeSBzaW5nbGUgdGltZT9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBIb3cgZG8gdGhlc2Ugd29ya2VycyBkZWFsIHdpdGggbWFsZm9ybWVkIHBhY2tldHMsIGNyeXB0b2dyYXBoaWMgZmFpbHVyZXMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IFdoYXQgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlP1xuKiAgICoqQ29udGV4dHVhbCBJbmZvcm1hdGlvbjoqKiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRlbGVzcywgb3IgZG8gdGhleSBtYWludGFpbiBzb21lIGtpbmQgb2YgcGVyLXBlZXIgY29udGV4dD8gSWYgc28sIHdoYXQgaXMgdGhhdCBjb250ZXh0LCBhbmQgaG93IGlzIGl0IG1hbmFnZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSB0aGV5IGFjY2Vzc2luZywgYW5kIHdoYXQgYXJlIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdG8gYXZvaWQgY29udGVudGlvbj9cblxuVWx0aW1hdGVseSwgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHdvcmtlcnMgZGV0ZXJtaW5lcyB0aGUgYmFuZHdpZHRoIGxpbWl0YXRpb25zIG9mIGEgV2lyZUd1YXJkIGNvbm5lY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBlZmZlY3RpdmUsIG9yIGNvdWxkIGJlIG9wdGltaXplZC4gSSB3b3VsZCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgZWZmaWNpZW50IHRoZSB3b3JrZXJzIGFyZSwgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MjQuNTcxODg2Nzg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0MzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0zMTA9c3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzUxLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNTI6XFx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1My1cXHRcXHRcXHRcXHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9NTE9dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTI6dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjYyPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI4Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI4Nzp2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyNC42MTc4MzQwMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjAzNDU1Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB3b3JrZXIgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgV2lyZUd1YXJkIFBhY2tldCBIYW5kbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgV2lyZUd1YXJkIGFjdHVhbGx5ICp3b3Jrcyog4oCTIHRoZSBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCBhbmQgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRoZXkncmUgdGhlIGhlYXJ0IG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZSwgc28gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3J5cHRvZ3JhcGh5LCBrZXkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbiwgYW5kIHRoZSBuZWNlc3NhcnkgZGF0YSBtYW5pcHVsYXRpb24uIEknbSBob3BpbmcgdG8gc2VlIHdlbGwtb3B0aW1pemVkIGNvZGUsIGxpa2VseSBsZXZlcmFnaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zIGFuZCBjYXJlZnVsIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvcHBvcnR1bml0aWVzIGZvciBwYXJhbGxlbGl6YXRpb24gKHRob3VnaCBJIGltYWdpbmUgdGhlc2UgYXJlIGFscmVhZHkgaGlnaGx5IG9wdGltaXplZCksIGFuZCBhbnkgYXJlYXMgd2hlcmUgc3VidGxlIHRpbWluZyBhdHRhY2tzIG1pZ2h0IGJlIHBvc3NpYmxlICh0aG91Z2gsIGlkZWFsbHksIHJvYnVzdCBjb3VudGVybWVhc3VyZXMgd2lsbCBiZSBpbiBwbGFjZSkuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2V5cyBhbmQgbm9uY2VzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZC4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGFyZSB0aGV5IGRlZmVuc2l2ZSwgb3IgZG8gdGhleSBhc3N1bWUgYSBtb3JlIFwidHJ1c3RlZFwiIGVudmlyb25tZW50PyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBzY3J1dGluaXppbmcgdGhlIG1lbW9yeSBzYWZldHkgYXNwZWN0cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHRoaXMgYWxsIHBsYXlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyNi44MjEyOTIyMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHR2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aWNvcmVfd29ya2VyLFxcbiAyOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHdvcmspLVxcdTAwM2VwdHI7XFxuIDI5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2IsICpuZXh0O1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHR3aGlsZSAoKGZpcnN0ID0gcHRyX3JpbmdfY29uc3VtZV9iaChcXHUwMDI2cXVldWUtXFx1MDAzZXJpbmcpKSAhPSBOVUxMKSB7XFxuIDI5NDpcXHRcXHRcXHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IFBBQ0tFVF9TVEFURV9DUllQVEVEO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShlbmNyeXB0X3BhY2tldChza2IsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRcXHRQQUNLRVRfQ0IoZmlyc3QpLVxcdTAwM2VrZXlwYWlyKSkpIHtcXG4gMjk5OlxcdFxcdFxcdFxcdFxcdHdnX3Jlc2V0X3BhY2tldChza2IsIHRydWUpO1xcbiAzMDA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdHN0YXRlID0gUEFDS0VUX1NUQVRFX0RFQUQ7XFxuIDMwMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzAzOlxcdFxcdFxcdFxcdH1cXG4gMzA0OlxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcdFxcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKTtcXG4gMzA2OlxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4gMzA3OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAzMDg6XFx0XFx0fVxcbiAzMDk6XFx0fVxcbiAzMTA6XFx0XFxuIDMxMTpcXHRzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGEoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpmaXJzdClcXG4gMzEyOlxcdHtcXG4gMzEzOlxcdFxcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cXHUwMDNlZGV2aWNlO1xcbiAzMTQ6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4gMzE3OlxcdFxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCkpKVxcbiAzMTg6XFx0XFx0XFx0Z290byBlcnI7XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MjYuODIxMzkyMzI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwOTMxNTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdpcmVHdWFyZCBQYWNrZXQgSGFuZGxpbmcgYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyB3aXRoaW4gV2lyZUd1YXJkLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWl0IHBhdGguIEl0IGxvb2tzIGxpa2Ugd2l0aGluIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpYCBnZXRzIGNhbGxlZC4gQWxyaWdodCwgc3RhbmRhcmQgZW5xdWV1ZWluZyBmdW5jdGlvbi4gRGlnZ2luZyBpbnRvIHRoYXQsIGluc2lkZSBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAsIHRoZXJlJ3MgdGhpcyBpbnRlcmVzdGluZyBzZXF1ZW5jZTogYGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKSB3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtgIGZvbGxvd2VkIGJ5IHF1ZXVpbmcgd29yayB3aXRoIGBxdWV1ZV93b3JrX29uKC4uLiwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7YC4gVGhlIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgYXRvbWljIHZhcmlhYmxlIGlzIGNsZWFybHkgYWN0aW5nIGFzIGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIG91dHN0YW5kaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgYSBnaXZlbiBwZWVyLiBUaGUgYHdha2VfdXBfdmFyYCBjYWxsIGhpbnRzIGF0IHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24uXG5cbk5vdywgbGV0J3MgY29ubmVjdCB0aGlzIHRvIHRoZSBwZWVyIHRlYXJkb3duIHBhdGgsIHNwZWNpZmljYWxseSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIFRoaXMgZnVuY3Rpb24gaXMgd2FpdGluZyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byBoaXQgemVybyAqYmVmb3JlKiByZW1vdmluZyB0aGUgcGVlci4gVGhlIGNvZGUgc2hvd3MgYW4gYXRvbWljIGRlY3JlbWVudCBhbmQgYSB3YWl0OiBgYXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTsgd2FpdF92YXJfZXZlbnQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO2AuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlICptdXN0KiB3YWl0IGZvciBhbGwgZW5jcnlwdGlvbi90cmFuc21pc3Npb24gb3BlcmF0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG51a2luZyB0aGUgcGVlcidzIHN0YXRlLiBUaGVyZSdzIGFsc28gYSBgZmx1c2hfd29ya2AgY2FsbCBvbiBgcGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29ya2Agd2hpY2ggZW5zdXJlcyBhbnkgcGVuZGluZyB3b3JrIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVlciBnZXRzIGNvbXBsZXRlZCBiZWZvcmUgd2UgY29udGludWUuXG5cbk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgZGVjcmVtZW50IGFuZCB3YWl0IGFyZSBzdWZmaWNpZW50LiBUaGUgb3JkZXJpbmcgYW5kIHBvdGVudGlhbCByYWNlcyB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgb24gc2h1dGRvd24uXG5cbk9rYXksIHNvIHRoZSBUeCBwYXRoIHNlZW1zIHByZXR0eSB3ZWxsLWRlZmluZWQuIEJ1dCB0aGlzIGFsc28gbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSByZWNlaXZlIHBhdGguIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2ltaWxhciBwcmVjYXV0aW9ucyBhcmUgaW4gcGxhY2UgZHVyaW5nIGRlY3J5cHRpb24uIExldCdzIHNoaWZ0IG91ciBmb2N1cyBhbmQgaW52ZXN0aWdhdGUgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MzAuOTE0NTUwNTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDExNjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0zMTA9c3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzU2LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNTc6XFx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1OC1cXHRcXHRcXHRcXHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9MzU9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzYtLyogV29ya3F1ZXVlIHdvcmtlcjogKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDozNzp2b2lkIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00Mzg9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDk0LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDk1OnZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQ5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjMwLjk2NDY3MzM3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5NzQ5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHJlY2VpdmUuY2AgYXQgTGluZSA0OTUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGhpbnQgdG8gbG9vayBhdCBgcmVjZWl2ZS5jYCBhcm91bmQgbGluZSA0OTUgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBtZW50YWwgY2hlY2tsaXN0LiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIGEgbmV0d29ya2luZyBvciBjb21tdW5pY2F0aW9uIHByb3RvY29sLCBnaXZlbiB0aGUgY29udGV4dCBvZiBcInJlY2VpdmVcIi4gTGluZSA0OTUgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHBhY2tldCBwcm9jZXNzaW5nLCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBhbiBpbmNvbWluZyBjb25uZWN0aW9uLCBvciB0aGUgcGFyc2luZyBvZiBhIGRhdGEgYnVmZmVyLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhcm91bmQgdGhhdCBsaW5lPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNvY2tldCBkZXNjcmlwdG9yLCBhIGJ1ZmZlciwgYSBwcm90b2NvbCBjb250cm9sIGJsb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgdGhpcyBsaW5lIHRoZSBzdGFydCBvZiBhIGByZWN2KClgIGNhbGwsIGEgZGF0YSB2YWxpZGF0aW9uIGNoZWNrLCBlcnJvciBoYW5kbGluZywgb3IgdGhlIGRpc3BhdGNoaW5nIGxvZ2ljIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZT8gVGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBkYXRhIGZsb3c6IHdoYXQgY29tZXMgaW4sIHdoYXQgZ2V0cyBwcm9jZXNzZWQsIGFuZCB3aGVyZSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBnbyBuZXh0LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IG1hcCB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSBpbmNvbWluZyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHJlc291cmNlIGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIGhhbmRsaW5nIG9mIHdoYXRldmVyIGlzIGNvbWluZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDozMy45MzQ0MjcxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0XFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdHJldHVybiB3b3JrX2RvbmU7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNDk2OlxcdHtcXG4gNDk3OlxcdFxcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXFxuIDQ5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgd29yayktXFx1MDAzZXB0cjtcXG4gNDk5OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdHdoaWxlICgoc2tiID0gcHRyX3JpbmdfY29uc3VtZV9iaChcXHUwMDI2cXVldWUtXFx1MDAzZXJpbmcpKSAhPSBOVUxMKSB7XFxuIDUwMjpcXHRcXHRcXHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9XFxuIDUwMzpcXHRcXHRcXHRcXHRsaWtlbHkoZGVjcnlwdF9wYWNrZXQoc2tiLCBQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNla2V5cGFpcikpID9cXG4gNTA0OlxcdFxcdFxcdFxcdFxcdFBBQ0tFVF9TVEFURV9DUllQVEVEIDogUEFDS0VUX1NUQVRFX0RFQUQ7XFxuIDUwNTpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xcbiA1MDY6XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKVxcbiA1MDc6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDUwODpcXHRcXHR9XFxuIDUwOTpcXHR9XFxuIDUxMDpcXHRcXG4gNTExOlxcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDUxMjpcXHR7XFxuIDUxMzpcXHRcXHRfX2xlMzIgaWR4ID0gKChzdHJ1Y3QgbWVzc2FnZV9kYXRhICopc2tiLVxcdTAwM2VkYXRhKS1cXHUwMDNla2V5X2lkeDtcXG4gNTE0OlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MzMuOTM0NTQ3OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTg4OTY0NTQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBXaXJlR3VhcmQncyBQYWNrZXQgSGFuZGxpbmcgXHUwMDI2IFJlbW92YWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgb24gYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuIEl0IGVucXVldWVzIHBhY2tldHMgZm9yIFJYIGRlY3J5cHRpb24gdXNpbmcgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgLCB3aGljaCBpbiB0dXJuIHNjaGVkdWxlcyBOQVBJLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGB3Z19wYWNrZXRfcnhfcG9sbGAgcnVubmluZyBmb3IgdGhhdCBwZWVyJ3MgTkFQSSBpbnN0YW5jZS4gSW5zaWRlIGB3Z19wYWNrZXRfcnhfcG9sbGAsIHRoZSBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFuZCBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgZGVjcmVtZW50ZWQuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZm9jdXMgdG8gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBoYW5kbGluZyBwZWVyIHJlbW92YWwuIEhlcmUsIEkgc2VlIGFuIGBhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpYCBmb2xsb3dlZCBieSBgd2FpdF92YXJfZXZlbnRgLiBUaGlzIHdhaXQgaXMgZXhwbGljaXRseSB0aWVkIHRvIGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCByZWFjaGluZyB6ZXJvLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBoZXJlPyBJIGFsc28gc2VlIGBmbHVzaF93b3JrYCBjYWxsZWQsIHRoZW4gYG5hcGlfZGlzYWJsZWAsIGFuZCBmaW5hbGx5IGBuZXRpZl9uYXBpX2RlbGAuIFRoZSBjcml0aWNhbCBzZXF1ZW5jZSBoZXJlIGFwcGVhcnMgdG8gYmUgdGhhdCB0aGUgY29kZSAqd2FpdHMqIGZvciBwZW5kaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyB0byBjb21wbGV0ZSAqYmVmb3JlKiBkaXNhYmxpbmcgTkFQSSBhbmQgcmVtb3ZpbmcgdGhlIE5BUEkgc3RydWN0dXJlLlxuXG5UaGUgY29ubmVjdGlvbiBiZWNvbWVzIGNsZWFyZXIgd2hlbiBJIG5vdGUgdGhhdCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGRlY3JlbWVudGVkIGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgKGZvciBSWCkgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCB3aGljaCBpcyBjYWxsZWQgYnkgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgKGZvciBUWCkuIFNvIHRoZSByZW1vdmFsIGxvZ2ljICpkZXBlbmRzKiBvbiB0aGVzZSB0YXNrcyBjb21wbGV0aW5nLlxuXG5UaGUgcHJvYmxlbSBzdGFydHMgdG8gbWFuaWZlc3QgaW4gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmA6IElmIHRoZSBxdWV1ZWluZyB0byB0aGUgcmluZyBmYWlscywgYW5kIGBwdHJfcmluZ19wcm9kdWNlX2JoYCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FUElQRWAuIFRoaXMgY2F1c2VzIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCB0byBydW4gd2hpY2ggY2FsbHMgYG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKWAuIFRoaXMgc2NlbmFyaW8gc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2suXG5cbk15IGJyYWluIGlzIG5vdyBzY3JlYW1pbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTkFQSSBhbmQgcGVlciByZW1vdmFsLiBIZXJlJ3MgdGhlIGtleSBxdWVzdGlvbjogV2hhdCBpZiBOQVBJIGlzIGRpc2FibGVkIG9yIG5ldmVyIHJ1bnMsIG9yIGlzIGhlbGQgdXA/IFRoZSBzZXF1ZW5jZSBpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYHdhaXRfdmFyX2V2ZW50YCAqYmVmb3JlKiBgbmFwaV9kaXNhYmxlYC4gVGhpcyByYWlzZXMgc2VyaW91cyBxdWVzdGlvbnMhIFdoYXQgaWYgcGFja2V0cyBhcmUgc3RpbGwgcXVldWVkIGluIGByeF9xdWV1ZWAsIHdhaXRpbmcgZm9yIE5BUEkgdG8gcnVuIGJ1dCBOQVBJIGlzIGRpc2FibGVkIG9yIG5vdCBnaXZlbiBhIENQVT8gSXQgY291bGQgbWVhbiBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIG5ldmVyIHJlYWNoZXMgemVybywgYW5kIHRoZSBwZWVyIHJlbW92YWwgaGFuZ3MuIEV2ZW4gbW9yZSwgaWYgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiBydW5zIGJ1dCBydW5zIG91dCBvZiBidWRnZXQsIG9yIHRoZSBuZXRpZiBpcyBkb3duLCB0aGVuIHRoZSBzYW1lIHNjZW5hcmlvIGNhbiBoYXBwZW4uIE9yLCB3aGF0IGlmIGEgcGVlciBpcyByZW1vdmVkIHdoaWxlIE5BUEkgaXMgZGlzYWJsZWQgb3IgdGhlIG5ldCBkZXZpY2UgaXMgY2xvc2VkPyBUaGF0IGNvdWxkIGxlYWQgdG8gYSBtYXNzaXZlIHByb2JsZW0uIFRoaXMgZmVlbHMgbGlrZSBhIGNsYXNzaWMgcG90ZW50aWFsIGRlYWRsb2NrLiBUaGlzIGNvdWxkIGVhc2lseSBsZWF2ZSBwYWNrZXRzIGluIGEgbGltYm8gc3RhdGUsIGFuZCBwcmV2ZW50IHBlZXJzIGZyb20gYmVpbmcgcmVtb3ZlZC5cblxuSSBuZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcyBvZiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgbm93LCBhbmQgdW5kZXJzdGFuZCAqd2hlbiogdGhpcyByZW1vdmFsIHByb2Nlc3MgaXMgdHJpZ2dlcmVkLCB0byBmdWxseSBncmFzcCB0aGUgcmlza3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6NDMuODI0MTk3ODU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVyX3JlbW92ZV9hZnRlcl9kZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTgzPXN0YXRpYyB2b2lkIHBlZXJfbWFrZV9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjk3OnN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTE1OD12b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjUtXFx0c3luY2hyb25pemVfbmV0KCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjY6XFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTE2OT12b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTg0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCBcXHUwMDI2ZGVhZF9wZWVycywgcGVlcl9saXN0KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTg1OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xODYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDo0My44Njk2OTc0NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI4NzkzNDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBlZXIgUmVtb3ZhbCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgd2UncmUgaGFuZGxpbmcgcGVlciByZW1vdmFsIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBkZWVtZWQgZGVhZC4gVGhlIGNvZGUncyBjaGFuZ2VkIGhlcmUsIHNwZWNpZmljYWxseSBpbiB0aGUgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGZsb3cuIEluaXRpYWxseSwgaXQgc2VlbXMgd2Ugd2VyZSB1c2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlYCBjYWxscyDigJMgb25lIGZvciBgcGFja2V0X2NyeXB0X3dxYCwgYW5kIGFub3RoZXIgZm9yIGBoYW5kc2hha2Vfc2VuZF93cWAuIE5vdywgaXQgbG9va3MgbGlrZSB0aGF0J3MgYmVlbiBzdHJlYW1saW5lZC5cblxuTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGlzIGNoYW5nZSwgd2h5IHdlJ3JlIG5vIGxvbmdlciB1c2luZyB0aGUgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgaW4gdGhlIG9sZCB3YXksIGFuZCB3aGF0IHRoZSBjdXJyZW50IGNvZGUgYWNoaWV2ZXMuIFRoZSBuZXcgY29kZSBpcyBub3cgdXNpbmcgYHdhaXRfdmFyX2V2ZW50YCwgYGZsdXNoX3dvcmtgIHRvIGEgYHRyYW5zbWl0X3BhY2tldF93b3JrYCwgTkFQSSBkaXNhYmxpbmcsIGFuZCBhbm90aGVyIGBmbHVzaF93b3JrYCBmb3IgYHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrYC4gV2UncmUgZGVmaW5pdGVseSBzaGlmdGluZyBob3cgd2UncmUgZW5zdXJpbmcgYWxsIHBlbmRpbmcgd29yayByZWxhdGVkIHRvIHRoZSBkZWFkIHBlZXIgaXMgY2xlYW5lZCB1cCBhbmQgdGhhdCByZXNvdXJjZXMgYXJlIGZyZWVkIHNhZmVseS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMgaGVyZS4gTGV0IG1lIGNoZWNrIHRoZSBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUgYXJvdW5kIGxpbmUgMTMzIG9mIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmF0aW9uYWxlIG9yIGNvbnRleHQgZm9yIHRoaXMgYWRqdXN0bWVudC4gVGhpcyBtaWdodCBleHBsYWluIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjQ4LjE1NzYzNDY5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcXG4gMTM0OlxcdFxcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXFxuIDEzNTpcXHRcXHQgKiByZXR1cm5pbmcsIDIpIGZyb20gd2dfcGFja2V0X2NvbnN1bWVfZGF0YSgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkXFxuIDEzNjpcXHRcXHQgKiBhbmQgcmV0dXJuaW5nLCAzKSBmcm9tIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldCgpIGFmdGVyIGEgcG9pbnRcXG4gMTM3OlxcdFxcdCAqIHdoZXJlIGl0IGhhcyBwcm9jZXNzZWQgYW4gaW5jb21pbmcgaGFuZHNoYWtlIHBhY2tldCwgYnV0IHdoZXJlXFxuIDEzODpcXHRcXHQgKiBhbGwgY2FsbHMgdG8gcGFzcyBpdCBvZmYgdG8gdGltZXJzIGZhaWxzIGJlY2F1c2Ugb2YgaXNfZGVhZC4gV2Ugd29uJ3RcXG4gMTM5OlxcdFxcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tXFxuIDE0MDpcXHRcXHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24ndCBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgyKSBldmVudHVhbGx5LCBiZWNhdXNlXFxuIDE0MTpcXHRcXHQgKiB3Z19pbmRleF9oYXNodGFibGVfbG9va3VwIHdpbGwgYWx3YXlzIHJldHVybiBOVUxMLCBzaW5jZSB3ZSByZW1vdmVkXFxuIDE0MjpcXHRcXHQgKiBhbGwgZXhpc3Rpbmcga2V5cGFpcnMgYW5kIG5vIG1vcmUgY2FuIGJlIGNyZWF0ZWQ7IHdlIHdvbid0IGhhdmUgbmV3XFxuIDE0MzpcXHRcXHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XFxuIDE0NDpcXHRcXHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxcbiAxNDU6XFx0XFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXFxuIDE0NjpcXHRcXHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXFxuIDE0NzpcXHRcXHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cXG4gMTQ4OlxcdFxcdCAqL1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQtLXBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlbnVtX3BlZXJzO1xcbiAxNTE6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE1MjpcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBcXFwicmVtb3ZlXFxcIiBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxcbiAxNTU6XFx0ICogYSBwZWVyIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYW4gZW5kIGFuZCBub3QgcGFzc1xcbiAxNTY6XFx0ICogdGhlaXIgcmVmZXJlbmNlIG9udG8gYW5vdGhlciBjb250ZXh0LlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybjtcXG4gMTYyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cGVlcl9tYWtlX2RlYWQocGVlcik7XFxuIDE2NTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTY2OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDo0OC4xNTc3MjgyOTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQzNzkzNTM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2lyZUd1YXJkIENvbmN1cnJlbmN5IExvZ2ljIEFuYWx5c2lzIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyByaWdodCBpbnRvIHRoZSBoZWFydCBvZiBXaXJlR3VhcmQncyBzeW5jaHJvbml6YXRpb24sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHBlZXIgcmVtb3ZhbCBhbmQgcGFja2V0IHF1ZXVlaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSB3aXRoIG91ciBmdXp6aW5nIHNldHVwPyBMdWNraWx5LCBXaXJlR3VhcmQgaXMgYSBzdGFuZGFyZCB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIGluIExpbnV4IChgZHJpdmVycy9uZXQvd2lyZWd1YXJkYCksIHNvIHRoYXQncyBhIHllcy4gSXQncyBmdWxseSBlbXVsYXRlZCBhbmQgcnVucyBpbiBRRU1VL0dDRSB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIGFuZCBzeXprYWxsZXIgcmVndWxhcmx5IGZ1enplcyBpdCB0aHJvdWdoIG5ldGxpbmssIHVzaW5nIGBHRU5MX0FETUlOX1BFUk1gIG9yIHVzZXIgbmFtZXNwYWNlcyB3aXRoIGBDQVBfTkVUX0FETUlOYC4gU3l6a2FsbGVyIGFscmVhZHkgaGFzIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkLCB3aXRoIGNhbGxzIHRvIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgLCBydG5ldGxpbmsgY2FsbHMgbGlrZSBgUlRNX05FV0xJTktgIHdpdGggYGtpbmQgPSBcIndpcmVndWFyZFwiYCBzbyB3ZSBhcmUgZ29sZGVuLlxuXG5Ob3csIGFwcGx5aW5nIHRoZSBlc3RhYmxpc2hlZCB0cmlhZ2UgcGhpbG9zb3BoeTogSXMgaXQgcmVhY2hhYmxlPyBZZXMuIEFuZCB0aGlzIGlzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyB0aGUgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gd29ya3F1ZXVlIGZsdXNoaW5nIHRvIGF0b21pYyByZWZjb3VudGluZyAoYHBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgLyBgd2FrZV91cF92YXJgLiBUaGlzIGlzIGEgY2xlYXIgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UsIHNvIG5vIFwiZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nXCIgaGFuZC13YXZpbmcgd2lsbCBkby4gR2l2ZW4gdGhlc2UgY3JpdGVyaWEgYW5kIHRoYXQgV2lyZUd1YXJkIGlzIGEgcmVhY2hhYmxlIGRyaXZlciB2aWEgbmV0bGluaywgdGhlIGZ1enppbmcgcG90ZW50aWFsIGlzIGRlZmluaXRpdmVseSBoaWdoIChgV29ydGhGdXp6aW5nID0gdHJ1ZWApLlxuXG5OZXh0IHVwOiBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBzZWUgdGhlIGltcGFjdGVkIGNvZGU6XG5cbkZyb20gdGhlIGRpZmYsIGhlcmUncyB3aGF0J3MgdG91Y2hlZCBvciBkaXJlY3RseSBjYWxsaW5nIHRoZSBtb2RpZmllZCBjb2RlOlxuXG4xLiAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgOlxuICAgICogICBgd2dfcGVlcl9jcmVhdGVgXG4gICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCAoQ2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgKVxuMi4gIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaGA6XG4gICAgKiAgIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIChzdGF0aWMgaW5saW5lOyBjYWxsZWQgZnJvbSBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAgYW5kIGB3Z19wYWNrZXRfY3JlYXRlX2RhdGFgKVxuICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgKHN0YXRpYyBpbmxpbmU7IGNhbGxlZCBmcm9tIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYClcbjMuICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY2A6XG4gICAgKiAgIGB3Z19wYWNrZXRfcnhfcG9sbGAgKE1vZGlmaWVkIGRpcmVjdGx5IHdpdGggdGhlIGBhdG9taWNfZGVjX2FuZF90ZXN0YCBhbmQgYHdha2VfdXBfdmFyYClcbiAgICAqICAgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIHN0YXRpYz8gSXQgbG9va3MgbGlrZSBpdCBpcyAoYHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpYCkgYW5kIGl0IGlzIG5vdCBpbmxpbmVkLiBJdCBpcyBjYWxsZWQgYnkgYHdnX3BlZXJfcmVtb3ZlYCBhbmQgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIHNvIG5vdyBJIGhhdmUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cblNvLCBsZXQncyBjb21waWxlIGFsbCB0aGlzIGluZm9ybWF0aW9uOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczpcblxuKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYDpcbiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYFxuICAgICogICBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGBcbiAgICAqICAgYHdnX3BlZXJfcmVtb3ZlYFxuICAgICogICBgd2dfcGVlcl9yZW1vdmVfYWxsYFxuKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYDpcbiAgICAqICAgYHdnX3BhY2tldF9yeF9wb2xsYFxuICAgICogICBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWBcbiogICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuY2A6XG4gICAgKiAgIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgXG4gICAgKiAgIGB3Z19wYWNrZXRfdHhfd29ya2VyYFxuICAgICogICBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYFxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBzeW1ib2xzIGFyZSBub24tc3RhdGljIGFuZCBhcmUgYWN0dWFsIHN5bWJvbHMgaW4gdm1saW51eCBvciB3aXJlZ3VhcmQgbW9kdWxlIHRvIG1ha2Ugc3VyZSB0aGVzZSBzeW1ib2xzIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIEFmdGVyIGNoZWNraW5nIHRoZSBkZWZpbml0aW9ucyBhbmQgdGhlaXIgdmlzaWJpbGl0eSwgdGhlc2UgYXJlIHRoZSB0YXJnZXRzIEknbGwgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDIuNTM3MDg0MDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4NzQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz0zNDA9c3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzozOTI6XFx0XFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTM5My1cXHRcXHRpZiAoSVNfRVJSKHBlZXIpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTIwPXN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjIyOnN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTIzLVxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg9Mzc9c3RydWN0IHdnX3BlZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjcwOnN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTcxLVxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDIuNTg2MDc5NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5OTMyODE5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgd2dfcGVlcl9yZW1vdmVgIGFuZCBgd2dfcGVlcl9yZW1vdmVfYWxsYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBwZWVyIHJlbW92YWwgZnVuY3Rpb25zLiBgd2dfcGVlcl9yZW1vdmVgIGlzIHByb2JhYmx5IHRoZSB3b3JraG9yc2UsIHRoZSBvbmUgdGhhdCdzIGRlc2lnbmVkIHRvIHJlbW92ZSBhIHNwZWNpZmljIHBlZXIgZnJvbSBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEknbSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyDigJMgZGVhbGxvY2F0aW5nIG1lbW9yeSwgdXBkYXRpbmcgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZW5zdXJpbmcgdGhlIGludGVyZmFjZSBzdGF0ZSBpcyBjb25zaXN0ZW50IGFmdGVyIHRoZSByZW1vdmFsLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIGxvY2tpbmcsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIFJhY2UgY29uZGl0aW9ucyB3aXRoIGluYm91bmQgYW5kIG91dGJvdW5kIHBhY2tldHMgY291bGQgYmUgYnJ1dGFsLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSByZW1vdmluZyBhIHBlZXIgdGhhdCdzIGN1cnJlbnRseSBhY3RpdmUuIERvZXMgaXQgZ3JhY2VmdWxseSB0ZWFyIGRvd24gdGhlIGNvbm5lY3Rpb24/IERvZXMgaXQgZHJvcCBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBlZXIgaW1tZWRpYXRlbHk/IEFuZCB3aGF0IGFib3V0IGNyeXB0b2dyYXBoaWMgY29uc2lkZXJhdGlvbnM/IERvZXMgaXQgaW52YWxpZGF0ZSBhbnkga2V5cyBvciBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcGVlcj9cblxuYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIG9uIHRoZSBvdGhlciBoYW5kLCBzZWVtcyBsaWtlIHRoZSBudWNsZWFyIG9wdGlvbi4gSXQncyB0aGUgXCJudWtlIHRoZSB3aG9sZSBwZWVyIGxpc3RcIiBmdW5jdGlvbi4gVGhpcyBwcm9iYWJseSBnZXRzIGNhbGxlZCBpbiBhIHNjZW5hcmlvIHdoZXJlIHRoZSBlbnRpcmUgaW50ZXJmYWNlIGlzIGJlaW5nIHRvcm4gZG93biwgb3Igd2hlbiB5b3UgbmVlZCBhIGNsZWFuIHNsYXRlLiBJJ20gYmV0dGluZyB0aGlzIGZ1bmN0aW9uIGVpdGhlciBjYWxscyBgd2dfcGVlcl9yZW1vdmVgIHJlcGVhdGVkbHkgZm9yIGVhY2ggcGVlciwgb3IgaXQgb3B0aW1pemVzIHRoZSBjbGVhbnVwIHByb2Nlc3MgZm9yIGJ1bGsgcmVtb3ZhbC4gVGhlIGxhdHRlciB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHBlZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgdGhlIGl0ZXJhdGlvbi9yZW1vdmFsIHByb2Nlc3MuIERvZXMgaXQgcmV0dXJuIGVycm9ycywgb3IgZG9lcyBpdCB0cnkgdG8ga2VlcCBjaHVnZ2luZyBhbG9uZz8gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIHRvIHByZXZlbnQgZG91YmxlLWZyZWVzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIHBlZXJzLiBPdmVyYWxsLCB0aGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgY291bGQgZWFzaWx5IGJlY29tZSBhIHBvaW50IG9mIGZhaWx1cmUsIG9yIGEgc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTowNS41NzkzNjMzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTQ5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGVlcl9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNTMtXFx0LyogVGhlIGZpbmFsIHJlZmVyZW5jZXMgYXJlIGNsZWFyZWQgaW4gdGhlIGJlbG93IGNhbGxzIHRvIGRlc3Ryb3lfd29ya3F1ZXVlLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNTQ6XFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjU1LVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdnLVxcdTAwM2VoYW5kc2hha2VfcmVjZWl2ZV93cSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXR1BFRVJfRl9SRU1PVkVfTUUpIHtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjQwNTpcXHRcXHR3Z19wZWVyX3JlbW92ZShwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9NDczPWludCB3Z19zZXRfZGV2aWNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE3LVxcdGlmIChmbGFncyBcXHUwMDI2IFdHREVWSUNFX0ZfUkVQTEFDRV9QRUVSUylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjUxODpcXHRcXHR3Z19wZWVyX3JlbW92ZV9hbGwod2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01MzktXFx0XFx0XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1NDA6XFx0XFx0XFx0XFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01NDEtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz05Nz1zdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTctICovXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNTg6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2OC1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE2OTp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE3MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTgwPXZvaWQgd2dfcGVlcl9wdXQoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODE6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo4Mjp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC04My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDUuNjI1ODY0NzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MzA4MTI3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdpcmVHdWFyZCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgbGV0J3MgdGFrZSBzdG9jayBvZiB0aGVzZSBXaXJlR3VhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYW5kIGB3Z19wZWVyX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHBlZXIuY2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQsIGluZGljYXRpbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhhdCBzcGVjaWZpYyBmaWxlLCBsaWtlbHkgcGFydCBvZiB0aGUgcGVlciBtYW5hZ2VtZW50IEFQSS4gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIGlzIGFsc28gaW4gYHBlZXIuY2AsIHNvIGl0IHByb2JhYmx5IHJlbGF0ZXMgdG8gdGhlIHNhbWUgcGVlciBsaWZlY3ljbGUgcHJvY2Vzc2VzLlxuXG5Nb3Zpbmcgb24sIEkgZmluZCB0aGF0IGB3Z19wYWNrZXRfcnhfcG9sbGAgaXMgbm9uLXN0YXRpYyBpbiBgcmVjZWl2ZS5jYC4gVGhhdCBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHJlY2VpdmluZyBwYWNrZXRzIGFuZCBpcyBhY2Nlc3NpYmxlIG1vcmUgYnJvYWRseSB0aGFuIGp1c3Qgd2l0aGluIGByZWNlaXZlLmNgLiBTaW1pbGFybHksIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIChpbiBgc2VuZC5jYCksIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgIChpbiBgcmVjZWl2ZS5jYCksIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAgKGFsc28gaW4gYHNlbmQuY2ApIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0IGZvciB3b3JrZXIgdGhyZWFkcyBoYW5kbGluZyB0aGUgY3JpdGljYWwgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCB0cmFuc21pc3Npb24gYXNwZWN0cy5cblxuSG1tLCBJIHNob3VsZCBjaGVjayBvbiB0aGUgcGFja2V0IGNvbnN1bXB0aW9uIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMsIGp1c3QgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUuIFNvLCBsZXQgbWUgc2VlLi4uIEFoLCBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAgKmlzKiBzdGF0aWMgd2l0aGluIGByZWNlaXZlLmNgLiBJdCdzIGFuIGludGVybmFsIGZ1bmN0aW9uLiBJbnRlcmVzdGluZ2x5IHRob3VnaCwgaXQncyBjYWxsZWQgYnkgYHdnX3BhY2tldF9yZWNlaXZlYCwgd2hpY2ggaXMgbm9uLXN0YXRpYyEgVGhhdCBpbXBsaWVzIHNvbWUga2luZCBvZiBkYXRhLWhhbmRsaW5nIGJvdW5kYXJ5IHRoZXJlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIHRob3NlIGZ1bmN0aW9ucyBJIHNob3VsZCBhbHNvIGNoZWNrIGB3Z19wYWNrZXRfcmVjZWl2ZWAgYW5kIGB3Z194bWl0YCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGFtIHNvbGlkIGluIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjExLjI1NjY3OTUxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGFja2V0X3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTI5PXdnX3BhY2tldF9wZXJjcHVfbXVsdGljb3JlX3dvcmtlcl9hbGxvYyh3b3JrX2Z1bmNfdCBmdW5jdGlvbiwgdm9pZCAqcHRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMxLS8qIHJlY2VpdmUuYyBBUElzOiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjMyOnZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMzLXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9yZWNlaXZlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTQ0OnZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jPTMxNT1zdGF0aWMgaW50IHdnX3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNC1cXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYzozMjU6XFx0d2dfcGFja2V0X3JlY2VpdmUod2csIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNi1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTEuMzAyNTc0MzQ1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Nzk1ODQ3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFRyYW5zbWlzc2lvbiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgb3ZlcmFsbCB0cmFuc21pc3Npb24gcHJvY2VzcywgYW5kIEknbSBzdGFydGluZyB0byB0aGluayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgYXNwZWN0cy4gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoYXQgYHRyYW5zbWl0YCBvciBgeG1pdGAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHdnX3htaXRgIHRvIGdldCBhIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB0cmFuc21pc3Npb24gaXMgaGFuZGxlZCBhdCB0aGF0IGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTMuMTgyMTYyNTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcyMDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MTE1PXN0YXRpYyBpbnQgd2dfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzNi1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MTM3OnN0YXRpYyBuZXRkZXZfdHhfdCB3Z194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yMzgtXFx0Lm5kb19zdG9wXFx0XFx0PSB3Z19zdG9wLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyMzk6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB3Z194bWl0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNDAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTMuMjI4ODg5NDM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDU1NTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdpcmVHdWFyZCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkgc2VlOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFsbCBjbGVhcmx5IHJlbGF0ZSB0byBXaXJlR3VhcmQgcGVlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBkZXNjcmlwdGlvbi5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cz8gSSBuZWVkIHRvIGVuc3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50IGhhcyB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gQWgsIGhlcmUgaXQgaXM6IGBXSVJFR1VBUkRgIGlzIHRoZSBjb3JlIGNvbmZpZywgYW5kIGl0IHJlbGllcyBvbiBgTkVUYCBhbmQgYElORVRgLCBhbG9uZyB3aXRoIHNvbWUgY3J5cHRvZ3JhcGh5IG9wdGlvbnMuIE9rYXksIHNvIGBXSVJFR1VBUkRgLCBgTkVUYCwgYW5kIGBJTkVUYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBTaW5jZSBgV0lSRUdVQVJEYCBpcyB0aGUgcHJpbWFyeSBmb2N1cywgSSdsbCBpbmNsdWRlIGl0IGFuZCB0aGUgaW1wbGllZCBkZXBlbmRlbmNpZXMuIEl0J3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgdHJlZS5cblxuTGV0J3MgZG8gYSBxdWljayBtZW50YWwgcmV2aWV3IHRvIGVuc3VyZSBJJ20gYWRoZXJpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBjb21wbGV0ZWx5LiBNeSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4gV2h5PyBCZWNhdXNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGl0c2VsZiAoYGRyaXZlcnMvbmV0L3dpcmVndWFyZGApLiBUaGlzIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzIOKAkyBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRoZSBwYXRjaCdzIGNvcmUgbW9kaWZpY2F0aW9uIHJlcGxhY2VzIHdvcmtxdWV1ZSBmbHVzaGluZyB3aXRoIGF0b21pYyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGV2ZW50IHNpZ25hbGluZywgZGlyZWN0bHkgaW1wYWN0aW5nIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZWluZy5cblxuTXkgRm9jdXNTeW1ib2xzLCBhcyBvdXRsaW5lZCBpbiB0aGUgcHJvbXB0LCBhcmUgZXhhY3RseSB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBlYXJsaWVyOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFyZSBub3QgdWJpcXVpdG91czsgdGhleSBhcmUgYWxsIFdpcmVHdWFyZC1zcGVjaWZpYy5cblxuRmluYWxseSwgdGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHNpbXBseSBgV0lSRUdVQVJEYCBhbmQgYElORVRgLiBUaGlzIGlzIGFsbCBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBkaXJlY3QuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IG15IGZpbmRpbmdzIGFuZCBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU3MCwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTguMTM0NDQ4MzAzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXSVJFR1VBUkRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZWVyX3JlbW92ZV9hZnRlcl9kZWFkXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVfYWxsXCIsXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGFja2V0X3J4X3BvbGxcIixcbiAgICBcIndnX3BhY2tldF9lbmNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3R4X3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB1c2VkIGR1cmluZyBXaXJlR3VhcmQgcGVlciB0ZWFyZG93bi4gSW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZGV2aWNlLXdpZGUgcGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSB3b3JrcXVldWVzIG11bHRpcGxlIHRpbWVzLCBpdCBpbnRyb2R1Y2VzIGEgcGVyLXBlZXIgYXRvbWljIHJlZmNvdW50IChwYWNrZXRfY3J5cHRfcGVuZGluZykgdHJhY2tlZCBhY3Jvc3MgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBhbmQgd2FpdHMgZm9yIGl0IHdpdGggd2FpdF92YXJfZXZlbnQoKSwgZm9sbG93ZWQgYnkgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIGNhbGxzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyIHJlYWRpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIHRocm91Z2ggcnRuZXRsaW5rIGFuZCBnZW5ldGxpbmsgaW50ZXJmYWNlcy4gQ29uY3VycmVuY3kgYW5kIHF1ZXVlaW5nIHJlZmFjdG9yaW5ncyBsaWtlIHRoaXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIHdha2V1cHMsIG9yIGhhbmdzIGR1cmluZyBwZWVyIHJlbW92YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjE4LjIxNjg1MDM5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNjI5MzIzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTguMjE3NDE0NzU5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEyNjI4NzU0OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXFxuXFxuVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOlxcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKWAuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXFxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTdkM2IwZjEyMzg3YzRiN2NkNTkxMjZlMDU0MDZhYzE2OTFhY2U0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xuIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4rXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuK1x0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gXHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbid0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxuLVx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxuLVx0ICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vXG4tXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXG4rXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4rXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbitcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYXG4rXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxuIFx0ICovXG4rXHRhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuK1x0d2FpdF92YXJfZXZlbnQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyxcbitcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbitcbitcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gXG4tXHQvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjEpIEZvciBzZW5kIChidXQgbm90IHJlY2VpdmUsIHNpbmNlIHRoYXQncyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQncyB3cSkuICovXG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbi1cdC8qIGIuMi4xKSBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuK1x0LyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbiBcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4gXHQgKi9cbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gXG4tXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxuLVx0ICogY2xlYXJfcGVlcl93b3JrKSBubyBsb25nZXIgYXJlIGluIHVzZS5cbitcdC8qIGNsZWFyX3BlZXJfd29yayB3YXMgZmx1c2hlZCBieSB3Z190aW1lcnNfc3RvcCgpLiBFbnN1cmUgdGhlIHJlbWFpbmluZ1xuK1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiBcbiBcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5pbmRleCA3MThmYjQyYmRhYzdlLi42NDQxMmM2N2Y0MTMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuQEAgLTM3LDYgKzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHtcbiBzdHJ1Y3Qgd2dfcGVlciB7XG4gXHRzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7XG4gXHRzdHJ1Y3QgcHJldl9xdWV1ZSB0eF9xdWV1ZSwgcnhfcXVldWU7XG4rXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uNWNlNTc1NjVjOGZmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxuIFxuIHN0cnVjdCB3Z19kZXZpY2U7XG5AQCAtMTYxLDYgKzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0YXRvbWljX2luYyhcdTAwMjZQQUNLRVRfUEVFUihza2IpLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcbiBcdC8qIFRoZW4gd2UgcXVldWUgaXQgdXAgaW4gdGhlIGRldmljZSBxdWV1ZSwgd2hpY2ggY29uc3VtZXMgdGhlXG4gXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXG5AQCAtMTgyLDYgKzE4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XG4gXHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2UEFDS0VUX0NCKHNrYiktXHUwMDNlc3RhdGUsIHN0YXRlKTtcbiBcdHF1ZXVlX3dvcmtfb24od2dfY3B1bWFza19jaG9vc2Vfb25saW5lKFx1MDAyNnBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVx1MDAzZWludGVybmFsX2lkKSxcbiBcdFx0ICAgICAgcGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuK1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuaW5kZXggODI0YmJlZmNlNjFjNy4uYmIzNWUzMjA1NDkxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbkBAIC00NzYsOSArNDc2LDExIEBAIGludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gbmV4dDpcbiBcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpO1xuLVx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiBcdFx0aWYgKHVubGlrZWx5KGZyZWUpKVxuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFxuIFx0XHRpZiAoKyt3b3JrX2RvbmUgXHUwMDNlPSBidWRnZXQpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToxOC4yMTc0MTYyNDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM5NTYyNDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBXaXJlR3VhcmQgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBhbmQgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eS5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYHBlZXIuaGAsIGBxdWV1ZWluZy5oYCwgYW5kIGByZWNlaXZlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyB0b3VjaGVzIGNvcmUgV2lyZUd1YXJkIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYGZsdXNoX3dvcmtxdWV1ZWAgb24gc2hhcmVkIHdvcmtxdWV1ZXMgKGBwYWNrZXRfY3J5cHRfd3FgLCBgaGFuZHNoYWtlX3NlbmRfd3FgKSB0byBlbnN1cmUgbm8gcmVmZXJlbmNlcyByZW1haW5lZCBhZnRlciBhIHBlZXIgd2FzIHJlbW92ZWQuIFRoaXMgbWlnaHQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1ZSB0byBsYXRlbmN5IG9yIHN0YXJ2YXRpb24sIGVzcGVjaWFsbHkgd2l0aCBtYW55IHBlZXJzIG9yIGludGVyZmFjZXMuIE1heWJlIGl0IHdhcyBhbiBpbnRlbnRpb25hbCBkZXNpZ24gY2hvaWNlIHRvIGF2b2lkIGdsb2JhbCB3b3JrcXVldWUgZmx1c2hlcy5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBmaWVsZCBpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgKGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGApLiBJdCBpcyBkZWNyZW1lbnRlZCB3aGVuIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBvciB3aGVuIHRoZSBwZWVyIGlzIHJlbW92ZWQgKGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgYW5kIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCkuIFRoZSBgd2FpdF92YXJfZXZlbnRgIGluIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBpcyBub3cgYmFzZWQgb24gdGhpcyBhdG9taWMgY291bnRlci4gSW5zdGVhZCBvZiBzaW1wbHkgZmx1c2hpbmcgdGhlIHdvcmtxdWV1ZXMsIHRoZSBjb2RlIG5vdyB3YWl0cyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byByZWFjaCB6ZXJvLiBUaGlzIHNlZW1zIGxpa2UgYW4gYXR0ZW1wdCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB3b3JrcXVldWUgZmx1c2hlcyBieSB3YWl0aW5nIG9ubHkgb24gd2hhdCdzIGFjdGl2ZS5cblxuVGhpcyBzb3VuZHMgbGlrZSBhIHdlbGwtaW50ZW50aW9uZWQgb3B0aW1pemF0aW9uLCBidXQgaXQncyBhIGJpdCBjb21wbGV4LiBUaGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHRoZSB3YWl0IGNvbmRpdGlvbiBpbnRyb2R1Y2UgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCBtZW1vcnkgcmVsZWFzZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwZWVyIHJlbW92YWwuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBjb25jZXJuaW5nIGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIGFuZCB0aGVzZSBjaGFuZ2VzIHRvdWNoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcy5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBBIHF1aWNrIGdyZXBwZXIgc2VhcmNoIG9yIHJlYWRpbmcgdGhvc2UgZmlsZXMgbWlnaHQgcmV2ZWFsIG1vcmUgZGV0YWlscyBhbmQgaGVscCBtZSBldmFsdWF0ZSB0aGlzIGNvZGUncyBudWFuY2VzLlxuXG4qKk15IGluc3RpbmN0IGlzIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZXJlJ3MgYSByZWFzb25hYmxlIHJpc2sgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGFuZCBhIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbiB3aWxsIGJlIGFibGUgdG8gY2F0Y2ggYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgdGhlc2UgcmVmYWN0b3JpbmcgY2hhbmdlcy4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MjMuNjEzMDQzNjU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfY3J5cHRfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUzLVxcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo1NDpcXHRhdG9taWNfc2V0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01NS1cXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTk3PXN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExNS1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjExNjpcXHRhdG9taWNfZGVjKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTc6XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTE4OlxcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg9Mzc9c3RydWN0IHdnX3BlZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC0zOS1cXHRzdHJ1Y3QgcHJldl9xdWV1ZSB0eF9xdWV1ZSwgcnhfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo0MDpcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTQxLVxcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE1Mz1zdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNjQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTY1OlxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNjYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNzc9c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODYtXFx0XFx0ICAgICAgcGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTg3OlxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTg4OlxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTg5LVxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00Mzg9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDgwLVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjQ4MTpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgyOlxcdFxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00ODMtXFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjIzLjY1OTY0ODc4OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg1MzY2Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgd2dfcGVlcmAgQWxsb2NhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGB3Z19wZWVyYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGl0cyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbGlmZWN5Y2xlIHdpdGhpbiBXaXJlR3VhcmQuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgZGVlcCBkaXZlLlxuXG5NeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgaXMgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHBlZXIgbWFuYWdlbWVudCwgYW5kIHRodXMsIGhvbGQgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIGFuZCBldmVudHVhbCBkZXN0cnVjdGlvbiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjI3LjU0NTAxODExOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4gIDIzOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG4gIDI0OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSlcXG4gIDI1OlxcdHtcXG4gIDI2OlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xcbiAgMjc6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNndnLVxcdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRpZiAod2ctXFx1MDAzZW51bV9wZWVycyBcXHUwMDNlPSBNQVhfUEVFUlNfUEVSX0RFVklDRSlcXG4gIDMyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdHBlZXIgPSBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4gIDM1OlxcdFxcdGlmICh1bmxpa2VseSghcGVlcikpXFxuICAzNjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzc6XFx0XFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VlbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpKVxcbiAgMzg6XFx0XFx0XFx0Z290byBlcnI7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHBlZXItXFx1MDAzZWRldmljZSA9IHdnO1xcbiAgNDE6XFx0XFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWhhbmRzaGFrZSwgXFx1MDAyNndnLVxcdTAwM2VzdGF0aWNfaWRlbnRpdHksXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5LCBwZWVyKTtcXG4gIDQzOlxcdFxcdHBlZXItXFx1MDAzZWludGVybmFsX2lkID0gYXRvbWljNjRfaW5jX3JldHVybihcXHUwMDI2cGVlcl9jb3VudGVyKTtcXG4gIDQ0OlxcdFxcdHBlZXItXFx1MDAzZXNlcmlhbF93b3JrX2NwdSA9IG5yX2NwdW1hc2tfYml0cztcXG4gIDQ1OlxcdFxcdHdnX2Nvb2tpZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VsYXRlc3RfY29va2llKTtcXG4gIDQ2OlxcdFxcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xcbiAgNDc6XFx0XFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XFxuICA0ODpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XFxuICA0OTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrLCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKTtcXG4gIDUwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xcbiAgNTE6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2V0eF9xdWV1ZSk7XFxuICA1MjpcXHRcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gIDUzOlxcdFxcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuICA1NDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XFxuICA1NTpcXHRcXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuICA1NjpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gIDU3OlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xcbiAgNTg6XFx0XFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcXHUwMDI2cGVlci1cXHUwMDNlbGFzdF9zZW50X2hhbmRzaGFrZSk7XFxuICA1OTpcXHRcXHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaS5zdGF0ZSk7XFxuICA2MDpcXHRcXHRuZXRpZl9uYXBpX2FkZCh3Zy1cXHUwMDNlZGV2LCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSwgd2dfcGFja2V0X3J4X3BvbGwpO1xcbiAgNjE6XFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbiAgNjI6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNlcGVlcl9saXN0LCBcXHUwMDI2d2ctXFx1MDAzZXBlZXJfbGlzdCk7XFxuICA2MzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cGVlci1cXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcXG4gIDY0OlxcdFxcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVxcdTAwM2VwZWVyX2hhc2h0YWJsZSwgcGVlcik7XFxuICA2NTpcXHRcXHQrK3dnLVxcdTAwM2VudW1fcGVlcnM7XFxuICA2NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IFBlZXIgJWxsdSBjcmVhdGVkXFxcXG5cXFwiLCB3Zy1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCk7XFxuICA2NzpcXHRcXHRyZXR1cm4gcGVlcjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0ZXJyOlxcbiAgNzA6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xcbiAgNzE6XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0X21heWJlX3plcm8oc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSxcXG4gIDc3OlxcdFxcdFxcdFxcdCBcXFwiVGFraW5nIHBlZXIgcmVmZXJlbmNlIHdpdGhvdXQgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9ja1xcXCIpO1xcbiAgNzg6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyIHx8ICFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cGVlci1cXHUwMDNlcmVmY291bnQpKSlcXG4gIDc5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyNy41NDUwOTQ4MThaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA3MjQ1NTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIFBlZXIgSW5pdGlhbGl6YXRpb24gYW5kIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBwZWVyIG1hbmFnZW1lbnQgY29kZS4gRmlyc3QgdGhpbmcsIEknbSBub3RpbmcgdGhlIGV4cGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIG5ldyBgcGVlcmAgc3RydWN0dXJlIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBleHBlY3RlZCwgYXMgd2UncmUgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC4gR29vZC4gV2UncmUgemVyb2luZyB0aGUgY2FjaGUsIHdoaWNoIGlzIGEgc29saWQgaW5pdGlhbCBzYWZldHkgbWVhc3VyZSwgd2hpY2ggZ2l2ZXMgdXMgYW4gZWFzeSBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nLCBhbmQgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyBhIG5ldyBmaWVsZCBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdXNpbmcgYGF0b21pY19zZXRgIHRvIDEsIEkgc2VlLiBBbHdheXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG5ldyBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCBhbnkgcmVhZC1iZWZvcmUtd3JpdGUgb3IgcmFjZSBjb25kaXRpb25zIGxhdGVyLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIG91ciBjbGVhbnVwIHByb2Nlc3MgaXMgc2FuZSwgSSdtIG1vdmluZyBvbiB0byBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIExldCdzIHNlZSBob3cgdGhhdCBoYW5kbGVzIHRoZSBsaWZlY3ljbGUgYW5kIGRlYWxsb2NhdGlvbiBvZiBhIGRlYWQgcGVlci4gV2UgYWx3YXlzIGhhdmUgdG8gY2hlY2sgdGhlIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyOS42MTc1NTQ0ODdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFxuICA5MTpcXHRcXHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi9cXG4gIDkyOlxcdFxcdFdSSVRFX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIFRoZSBjYWxsZXIgbXVzdCBub3cgc3luY2hyb25pemVfbmV0KCkgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuICovXFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRXQVJOX09OKCFwZWVyLVxcdTAwM2Vpc19kZWFkKTtcXG4gMTAwOlxcdFxcbiAxMDE6XFx0XFx0LyogTm8gbW9yZSBrZXlwYWlycyBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBwZWVyLCBzaW5jZSBpc19kZWFkIHByb3RlY3RzXFxuIDEwMjpcXHRcXHQgKiBhZGRfbmV3X2tleXBhaXIsIHNvIHdlIGNhbiBub3cgZGVzdHJveSBleGlzdGluZyBvbmVzLlxcbiAxMDM6XFx0XFx0ICovXFxuIDEwNDpcXHRcXHR3Z19ub2lzZV9rZXlwYWlyc19jbGVhcihcXHUwMDI2cGVlci1cXHUwMDNla2V5cGFpcnMpO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQvKiBEZXN0cm95IGFsbCBvbmdvaW5nIHRpbWVycyB0aGF0IHdlcmUgaW4tZmxpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2ZcXG4gMTA3OlxcdFxcdCAqIHRoaXMgZnVuY3Rpb24uXFxuIDEwODpcXHRcXHQgKi9cXG4gMTA5OlxcdFxcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXFxuIDExMjpcXHRcXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcXG4gMTEzOlxcdFxcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYXFxuIDExNDpcXHRcXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxcbiAxMTU6XFx0XFx0ICovXFxuIDExNjpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIDExNzpcXHRcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuIDExODpcXHRcXHRcXHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gMTIzOlxcdFxcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIDEyNDpcXHRcXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxcbiAxMjU6XFx0XFx0ICovXFxuIDEyNjpcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGNsZWFyX3BlZXJfd29yayB3YXMgZmx1c2hlZCBieSB3Z190aW1lcnNfc3RvcCgpLiBFbnN1cmUgdGhlIHJlbWFpbmluZ1xcbiAxMjk6XFx0XFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiAxMzA6XFx0XFx0ICovXFxuIDEzMTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XFxuIDEzNDpcXHRcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbiAxMzU6XFx0XFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxcbiAxMzY6XFx0XFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XFxuIDEzNzpcXHRcXHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxcbiAxMzg6XFx0XFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbid0XFxuIDEzOTpcXHRcXHQgKiBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgxKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbVxcbiAxNDA6XFx0XFx0ICogYWxsb3dlZGlwczsgd2Ugd29uJ3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxcbiAxNDE6XFx0XFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxcbiAxNDI6XFx0XFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24ndCBoYXZlIG5ld1xcbiAxNDM6XFx0XFx0ICogcmVmZXJlbmNlcyBpbiAoMykgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSdyZSByZW1vdmVkIGZyb20gdGhlIHB1YmtleVxcbiAxNDQ6XFx0XFx0ICogaGFzaCB0YWJsZSwgd2hpY2ggYWxsb3dzIGZvciBhIG1heGltdW0gb2Ygb25lIGhhbmRzaGFrZSByZXNwb25zZSxcXG4gMTQ1OlxcdFxcdCAqIHZpYSB0aGUgc3RpbGwtdW5jbGVhcmVkIGluZGV4IGhhc2h0YWJsZSBlbnRyeSwgYnV0IG5vdCBtb3JlIHRoYW4gb25lLFxcbiAxNDY6XFx0XFx0ICogYW5kIGluIHdnX2Nvb2tpZV9tZXNzYWdlX2NvbnN1bWUsIHRoZSBsb29rdXAgZXZlbnR1YWxseSBnZXRzIGEgcGVlclxcbiAxNDc6XFx0XFx0ICogd2l0aCBhIHJlZmNvdW50IG9mIHplcm8sIHNvIG5vIG5ldyByZWZlcmVuY2UgaXMgdGFrZW4uXFxuIDE0ODpcXHRcXHQgKi9cXG4gMTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyOS42MTc3NTAxMzZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMTIxMjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFF1ZXVlaW5nIElzc3VlKipcblxuT2theSwgc28gSSdtIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyB3aXRoIHRoZSBxdWV1ZWluZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgcXVldWVpbmcuaGAuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBwcm9iYWJseSBhcm91bmQgbGluZSAxNTAgdG8gMjAwLiBUaGlzIGlzIHR5cGljYWxseSB3aGVyZSB5b3UnZCBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgY3JpdGljYWwgcGF0aCBvcGVyYXRpb25zIOKAkyB0aGUgZW5xdWV1ZS9kZXF1ZXVlIG1ldGhvZHMsIGludGVybmFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBvciBtYXliZSBldmVuIHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBxdWV1ZSdzIHN0YXRlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoYXQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MzEuNDI4OTY2NzY3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHRcXHRxdWV1ZS1cXHUwMDNlcGVla2VkID0gTlVMTDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiAxNTQ6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbiAxNTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0aW50IGNwdTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0YXRvbWljX3NldF9yZWxlYXNlKFxcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNlc3RhdGUsIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpO1xcbiAxNjA6XFx0XFx0LyogV2UgZmlyc3QgcXVldWUgdGhpcyB1cCBmb3IgdGhlIHBlZXIgaW5nZXN0aW9uLCBidXQgdGhlIGNvbnN1bWVyXFxuIDE2MTpcXHRcXHQgKiB3aWxsIHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8gQ1JZUFRFRCBvciBERUFEIGJlZm9yZS5cXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIDE2NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gMTY1OlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcXG4gMTY4OlxcdFxcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0Y3B1ID0gd2dfY3B1bWFza19uZXh0X29ubGluZShcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VsYXN0X2NwdSk7XFxuIDE3MTpcXHRcXHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VyaW5nLCBza2IpKSlcXG4gMTcyOlxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuIDE3MzpcXHRcXHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFxcdTAwMjZwZXJfY3B1X3B0cihkZXZpY2VfcXVldWUtXFx1MDAzZXdvcmtlciwgY3B1KS1cXHUwMDNld29yayk7XFxuIDE3NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTc1OlxcdH1cXG4gMTc2OlxcdFxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHQvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGVcXG4gMTgwOlxcdFxcdCAqIHBlZXIgY2FuIGJlIGZyZWVkIGZyb20gYmVsb3cgdXMuXFxuIDE4MTpcXHRcXHQgKi9cXG4gMTgyOlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2UEFDS0VUX0NCKHNrYiktXFx1MDAzZXN0YXRlLCBzdGF0ZSk7XFxuIDE4NTpcXHRcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIDE4NjpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTg3OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuIDE4ODpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiAxODk6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMS40MjkwNTU2OTdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc0OTE1OTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIFdpcmVHdWFyZCBSWCBwYXRoLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiByZWNlaXZlZCBwZXItcGVlci4gV2UndmUgZ290IGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCB0byBjb25zaWRlci4gTm93LCB3aGF0IGRvZXMgdGhhdCBmdW5jdGlvbiAqZG8qPyBBbmQgd2hhdCBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIGl0IHdpdGhpbiB0aGUgcHJvY2Vzc2luZyBmbG93PyBXaGVyZSBkb2VzIHRoZSBwYWNrZXQgZ28/IFdoYXQgaGFwcGVucyB0byB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYWNrZXQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuIExldCdzIHRyYWNlIGl0IHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgYW5kIGlkZW50aWZ5IGFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGhhdCB0aGUgUlgnZCBwYWNrZXQgdW5kZXJnb2VzLiBUaGlua2luZyBhYm91dCBxdWV1ZWluZyBzdHJhdGVnaWVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMy4xNzgyMTc2OTdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiAyMDA6XFx0XFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDIwMTpcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gMjAyOlxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0I2lmZGVmIERFQlVHXFxuIDIwNTpcXHRib29sIHdnX3BhY2tldF9jb3VudGVyX3NlbGZ0ZXN0KHZvaWQpO1xcbiAyMDY6XFx0I2VuZGlmXFxuIDIwNzpcXHRcXG4gMjA4OlxcdCNlbmRpZiAvKiBfV0dfUVVFVUVJTkdfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMy4xNzgyODc4NjdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMDU4MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgV2lyZUd1YXJkIHBhY2tldCByZWNlcHRpb24gY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxvd2VzdCBsZXZlbC4gTGV0J3Mgc3RhcnQgd2l0aCBgd2dfcGFja2V0X3J4X3BvbGxgIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0J3MgdGhlIGhlYXJ0IG9mIHRoZSBwb2xsaW5nIG1lY2hhbmlzbSBmb3IgcmVjZWl2aW5nIHBhY2tldHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSBzaG91bGQgYmVnaW4uIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UsIHNvIEknbSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEl0J3MgdGltZSB0byBzZWUgaG93IHRoZSBkYXRhIGZsb3dzIGluIGFuZCBpcyBwcm9jZXNzZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjM1LjE3ODg3MTcxN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdFxcdGlmICh1bmxpa2VseSghY291bnRlcl92YWxpZGF0ZShcXHUwMDI2a2V5cGFpci1cXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUEFDS0VUX0NCKHNrYiktXFx1MDAzZW5vbmNlKSkpIHtcXG4gNDYzOlxcdFxcdFxcdFxcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBQYWNrZXQgaGFzIGludmFsaWQgbm9uY2UgJWxsdSAobWF4ICVsbHUpXFxcXG5cXFwiLFxcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBBQ0tFVF9DQihza2IpLVxcdTAwM2Vub25jZSxcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBSRUFEX09OQ0Uoa2V5cGFpci1cXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIuY291bnRlcikpO1xcbiA0Njc6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiA0Njg6XFx0XFx0XFx0fVxcbiA0Njk6XFx0XFxuIDQ3MDpcXHRcXHRcXHRpZiAodW5saWtlbHkod2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKFxcdTAwMjZlbmRwb2ludCwgc2tiKSkpXFxuIDQ3MTpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdFxcdHdnX3Jlc2V0X3BhY2tldChza2IsIGZhbHNlKTtcXG4gNDc0OlxcdFxcdFxcdHdnX3BhY2tldF9jb25zdW1lX2RhdGFfZG9uZShwZWVyLCBza2IsIFxcdTAwMjZlbmRwb2ludCk7XFxuIDQ3NTpcXHRcXHRcXHRmcmVlID0gZmFsc2U7XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdG5leHQ6XFxuIDQ3ODpcXHRcXHRcXHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XFxuIDQ3OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZnJlZSkpXFxuIDQ4MDpcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIDQ4MTpcXHRcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbiA0ODI6XFx0XFx0XFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gNDgzOlxcdFxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRcXHRpZiAoKyt3b3JrX2RvbmUgXFx1MDAzZT0gYnVkZ2V0KVxcbiA0ODY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NzpcXHRcXHR9XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpXFxuIDQ5MDpcXHRcXHRcXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0cmV0dXJuIHdvcmtfZG9uZTtcXG4gNDkzOlxcdH1cXG4gNDk0OlxcdFxcbiA0OTU6XFx0dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiA0OTY6XFx0e1xcbiA0OTc6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlcixcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB3b3JrKS1cXHUwMDNlcHRyO1xcbiA0OTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MzUuMTc4OTY0NTI3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1NjY3MTgwNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBXaXJlR3VhcmQgcGF0Y2ggKm5lZWRzKiBLTVNBTi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nLiBJdCBzZWVtcyB0byBiZSByZXdvcmtpbmcgdGhlIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlcGxhY2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlKClgIGNhbGxzIHdpdGggYSBwZXItcGVlciBhdG9taWMgY291bnRlciAoYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50KClgLCBmb2xsb3dlZCBieSBmb2N1c2VkIGBmbHVzaF93b3JrKClgIGNhbGxzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogRG9lcyB0aGlzIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0J3MgYW5hbHl6ZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBuZXcgYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBDcml0aWNhbGx5LCBgd2dfcGVlcl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCAqYW5kKiBgYXRvbWljX3NldCgpYC4gVGhhdCdzIGdvb2QuIEl0IGluZGljYXRlcyB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGNoYW5jZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmb3IgdGhhdCB2YXJpYWJsZS4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgY2hhbmdlcyB0aGF0IHRvdWNoIGFueSB1c2VyLXNwYWNlLWZhY2luZyBzdHJ1Y3R1cmVzIChuZXRsaW5rLCBpb2N0bCwgZXRjLiksIG9yIG1vZGlmaWVzIHBhY2tldCBidWZmZXIgZGF0YSBsZW5ndGgsIGJvdW5kcyBjaGVja3Mgb3Igb2Zmc2V0cy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0YWNrIGJ1ZmZlcnMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0ICphcmVuJ3QqIGluaXRpYWxpemVkLCBhbmQgSSBjYXJlZnVsbHkgcmV2aWV3IHRoZSBsaXN0ZWQgcnVsZXMgYW5kIGV4YW1wbGVzLlxuXG5UaGUgcHJpbWFyeSByaXNrcyBoZXJlIHNlZW0gdG8gYmUgY29uY3VycmVuY3kgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4gVGhpbmdzIGxpa2UgcmFjZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIHJlbW92YWwsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgYSBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFmdGVyIHRoZSBwZWVyJ3MgYmVlbiBmcmVlZCAoS0FTQU4gd2lsbCBuYWlsIHRob3NlKSwgb3IgZGVhZGxvY2tzIGlmIHRoZSBjb3VudGVyIG5ldmVyIHJlYWNoZXMgemVybyAodGhlIGh1bmcgdGFzayBkZXRlY3RvciBvciBsb2NrZGVwIHdpbGwgZ3JhYiB0aGF0KS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm9uZSBvZiB0aGVzZSByZWxhdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuVGhlIGtleSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBpcyB0aGF0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyBhIHdob2xlIGhvc3Qgb2YgYnVncywgYW5kIEkgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJpbmcgS01TQU4gaWYgdGhlcmUncyBhIHJpc2sgb2YgKnVuaW5pdGlhbGl6ZWQqIHJlYWRzIG9yIGxlYWtzLCBhcyB0aGUgcnVsZXMgbWFrZSBjbGVhci4gU2luY2UgYWxsIGFkZGVkIHN0cnVjdHVyZXMvZmllbGRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBhcmUgbm8gZGlyZWN0IHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIGNhc2UuIFRoZXJlZm9yZSwgS0FTQU4gcGx1cyBsb2NrZGVwIGFyZSBmdWxseSBzdWZmaWNpZW50LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6XG5cbi0gICBgTmVlZHNLTVNBTmA6IGBmYWxzZWBcbi0gICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBieSByZXBsYWNpbmcgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzIHdpdGggYW4gYXRvbWljIHJlZmNvdW50IChgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnQoKWAgcGFpcmVkIHdpdGggYGZsdXNoX3dvcmsoKWAgb24gcGVlci1vd25lZCB3b3Jrcy4gVGhlIG9ubHkgbmV3IGZpZWxkLCBgYXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYGF0b21pY19zZXQoKWAuIE5vIGJ1ZmZlcnMsIHBhY2tldCBwYXlsb2Fkcywgb3IgdXNlci1mYWNpbmcgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZSB0byBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gc3luY2hyb25pemF0aW9uOyBhbnkgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZS9saWZldGltZSBpc3N1ZXMgKGRldGVjdGVkIGJ5IEtBU0FOL3JlZmNvdW50IGRlYnVnZ2luZykgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgKGRldGVjdGVkIGJ5IGxvY2tkZXAvaHVuZyB0YXNrIHRpbWVvdXQpLiBLTVNBTiBwcm92aWRlcyBubyBhZGRpdGlvbmFsIGNvdmVyYWdlIGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3OCwiT3V0cHV0VG9rZW5zIjozMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDc6MTAuODQ2MTQ3NzVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXJlR3VhcmQgcGVlciB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbG9naWMuIEluc3RlYWQgb2YgY2FsbGluZyBmbHVzaF93b3JrcXVldWUoKSBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2hhcmVkIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgKHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3EpLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgb24gc3RydWN0IHdnX3BlZXIgYW5kIHdhaXRzIG9uIGl0IHZpYSB3YWl0X3Zhcl9ldmVudCgpIGJlZm9yZSBwZXJmb3JtaW5nIHRhcmdldGVkIGZsdXNoX3dvcmsoKSBvbiBwZWVyLW93bmVkIHdvcmsgc3RydWN0dXJlcy5cXG5cXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XFxuMS4gVGhlIG5ldyBzdHJ1Y3QgbWVtYmVyIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgY29udGFpbmVkIHdpdGhpbiBgc3RydWN0IHdnX3BlZXJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGB3Z19wZWVyX2NyZWF0ZSgpYCwgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgYXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChuZXRsaW5rLCBzb2NrZXQsIGlvY3RsLCBldGMuKSBpcyBhZGRlZCBvciBtb2RpZmllZC5cXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgc3luY2hyb25pemF0aW9uL2xpZmV0aW1lIGlzc3VlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgaWYgcGVlciB0ZWFyZG93biBmaW5pc2hlcyBwcmVtYXR1cmVseSwgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgaWYgdGhlIHdhaXRfdmFyX2V2ZW50IGNvbmRpdGlvbiBpcyBuZXZlciBzYXRpc2ZpZWQpLiBTdWNoIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIFJFRkNPVU5ULCBhbmQgTE9DS0RFUC9odW5nIHRhc2sgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXFxuXFxuVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOlxcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKWAuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXFxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 12:41:02 +0000 UTC FinishedAt: 2026-09-13 12:47:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "INET" ], "series_id": "44b34ca2-42e6-4e95-99f5-d34e386af199" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "peer_remove_after_dead", "wg_peer_remove", "wg_peer_remove_all", "wg_peer_create", "wg_packet_rx_poll", "wg_packet_encrypt_worker", "wg_packet_tx_worker" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "70f3995830d3f1e79faa14eb0605914f778feca9", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXG5cblRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTpcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSlgLlxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB1c2VkIGR1cmluZyBXaXJlR3VhcmQgcGVlciB0ZWFyZG93bi4gSW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZGV2aWNlLXdpZGUgcGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSB3b3JrcXVldWVzIG11bHRpcGxlIHRpbWVzLCBpdCBpbnRyb2R1Y2VzIGEgcGVyLXBlZXIgYXRvbWljIHJlZmNvdW50IChwYWNrZXRfY3J5cHRfcGVuZGluZykgdHJhY2tlZCBhY3Jvc3MgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBhbmQgd2FpdHMgZm9yIGl0IHdpdGggd2FpdF92YXJfZXZlbnQoKSwgZm9sbG93ZWQgYnkgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIGNhbGxzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyIHJlYWRpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIHRocm91Z2ggcnRuZXRsaW5rIGFuZCBnZW5ldGxpbmsgaW50ZXJmYWNlcy4gQ29uY3VycmVuY3kgYW5kIHF1ZXVlaW5nIHJlZmFjdG9yaW5ncyBsaWtlIHRoaXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIHdha2V1cHMsIG9yIGhhbmdzIGR1cmluZyBwZWVyIHJlbW92YWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTI6NDM6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiBcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcbkBAIC00OSw2ICYjNDM7NTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4mIzQzO1x0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9sb2NrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcbkBAIC0xMDUsMjggJiM0MzsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbiYjMzk7dFxuLVx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UmIzM5O3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5XG4tXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXG4tXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cbi1cdCAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy5cbiYjNDM7XHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4mIzQzO1x0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXG4mIzQzO1x0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbiYjNDM7XHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxuIFx0ICovXG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuJiM0MztcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4mIzQzO1x0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4mIzQzO1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4mIzQzO1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbiYjNDM7XHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uNWNlNTc1NjVjOGZmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuJiM0MztcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbmluZGV4IDgyNGJiZWZjZTYxYzcuLmJiMzVlMzIwNTQ5MTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG5AQCAtNDc2LDkgJiM0Mzs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBuZXh0OlxuIFx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XG4tXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4mIzQzO1x0XHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuJiM0MztcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdGlmICgmIzQzOyYjNDM7d29ya19kb25lIFx1MDAzZT0gYnVkZ2V0KVxuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3ZDNiMGYxMjM4N2M0YjdjZDU5MTI2ZTA1NDA2YWMxNjkxYWNlNDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMjo0MzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTsKIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7CkBAIC00OSw2ICYjNDM7NTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csCiAJSU5JVF9XT1JLKCZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpOwogCXdnX3ByZXZfcXVldWVfaW5pdCgmYW1wO3BlZXItJmd0O3R4X3F1ZXVlKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDtyeF9xdWV1ZSk7CiYjNDM7CS8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovCiYjNDM7CWF0b21pY19zZXQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7CiAJcndsb2NrX2luaXQoJmFtcDtwZWVyLSZndDtlbmRwb2ludF9sb2NrKTsKIAlrcmVmX2luaXQoJmFtcDtwZWVyLSZndDtyZWZjb3VudCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3BlZXItJmd0O3N0YWdlZF9wYWNrZXRfcXVldWUpOwpAQCAtMTA1LDI4ICYjNDM7MTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCiAJICovCiAJd2dfdGltZXJzX3N0b3AocGVlcik7CiAKLQkvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbiYjMzk7dAotCSAqIGd1YXJkZWQgYnkgaXNfZGVhZCwgYnV0IGVhY2ggcmVmZXJlbmNlJiMzOTtzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieQotCSAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWwKLQkgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm8KLQkgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuCiYjNDM7CS8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGUKJiM0MzsJICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nCiYjNDM7CSAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYCiYjNDM7CSAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuCiAJICovCiYjNDM7CWF0b21pY19kZWMoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiYjNDM7CXdhaXRfdmFyX2V2ZW50KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsCiYjNDM7CQkgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpOwomIzQzOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmspOwogCi0JLyogYSkgRm9yIGVuY3J5cHQvZGVjcnlwdC4gKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EpOwotCS8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EpOwotCS8qIGIuMi4xKSBGb3IgcmVjZWl2ZSAoYnV0IG5vdCBzZW5kLCBzaW5jZSB0aGF0JiMzOTtzIHdxKS4gKi8KIAluYXBpX2Rpc2FibGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKLQkvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiYjNDM7CS8qIEl0JiMzOTtzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZQogCSAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAJICovCiAJbmV0aWZfbmFwaV9kZWwoJmFtcDtwZWVyLSZndDtuYXBpKTsKIAotCS8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yCi0JICogY2xlYXJfcGVlcl93b3JrKSBubyBsb25nZXIgYXJlIGluIHVzZS4KJiM0MzsJLyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nCiYjNDM7CSAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS4KIAkgKi8KLQlmbHVzaF93b3JrcXVldWUocGVlci0mZ3Q7ZGV2aWNlLSZndDtoYW5kc2hha2Vfc2VuZF93cSk7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7CiAKIAkvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZldwogCSAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaAppbmRleCA3MThmYjQyYmRhYzdlLi42NDQxMmM2N2Y0MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKQEAgLTM3LDYgJiM0MzszNyw3IEBAIHN0cnVjdCBlbmRwb2ludCB7CiBzdHJ1Y3Qgd2dfcGVlciB7CiAJc3RydWN0IHdnX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTsKJiM0MzsJYXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmc7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlOwogCWludCBzZXJpYWxfd29ya19jcHU7CiAJYm9vbCBpc19kZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAppbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXBfdHVubmVscy5oJmd0OwogCiBzdHJ1Y3Qgd2dfZGV2aWNlOwpAQCAtMTYxLDYgJiM0MzsxNjIsNyBAQCBzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoCiAJICovCiAJaWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpCiAJCXJldHVybiAtRU5PU1BDOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7UEFDS0VUX1BFRVIoc2tiKS0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwogCiAJLyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGUKIAkgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uCkBAIC0xODIsNiAmIzQzOzE4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0CiAJYXRvbWljX3NldF9yZWxlYXNlKCZhbXA7UEFDS0VUX0NCKHNrYiktJmd0O3N0YXRlLCBzdGF0ZSk7CiAJcXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoJmFtcDtwZWVyLSZndDtzZXJpYWxfd29ya19jcHUsIHBlZXItJmd0O2ludGVybmFsX2lkKSwKIAkJICAgICAgcGVlci0mZ3Q7ZGV2aWNlLSZndDtwYWNrZXRfY3J5cHRfd3EsICZhbXA7cGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmspOwomIzQzOwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSkKJiM0MzsJCXdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwogCXdnX3BlZXJfcHV0KHBlZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYwppbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKQEAgLTQ3Niw5ICYjNDM7NDc2LDExIEBAIGludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIG5leHQ6CiAJCXdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTsKLQkJd2dfcGVlcl9wdXQocGVlcik7CiAJCWlmICh1bmxpa2VseShmcmVlKSkKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJCXdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpOwomIzQzOwkJd2dfcGVlcl9wdXQocGVlcik7CiAKIAkJaWYgKCYjNDM7JiM0Mzt3b3JrX2RvbmUgJmd0Oz0gYnVkZ2V0KQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBXaXJlR3VhcmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgV2lyZUd1YXJkIHBhdGNoIHRvIGV2YWx1YXRlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIGBwZWVyLmNgLCBgcGVlci5oYCwgYHF1ZXVlaW5nLmhgLCBhbmQgYHJlY2VpdmUuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50OyBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGFyZWFzIGFmZmVjdGVkLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGxvZ2Agb3IgaWRlYWxseSwgYSB0b29sIGxpa2UgYGdyZXBwZXJgIGlmIGl0JiMzOTtzIGF2YWlsYWJsZSwgdG8gcHVsbCB1cCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHJhdGlvbmFsZSBpcyBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgcmV2aWV3LiBJdCBsb29rcyBsaWtlIEkgaGF2ZSBhY2Nlc3MgdG8gY29tbWFuZC1saW5lIHRvb2xzIGxpa2UgYGdyZXBwZXJgLCBgcmVhZC1maWxlYCBhbmQgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgd2hpY2ggaXMgZ3JlYXQsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhpbmdzIHF1aWNrbHkuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkga25vdyBgQ09ORklHX1dJUkVHVUFSRGAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCB0byBjb25maXJtIGFueSBkZXBlbmRlbmNpZXMgb3IgYXNzb2NpYXRlZCBmZWF0dXJlIGZsYWdzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXSVJFR1VBUkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFdpcmVHdWFyZCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFdpcmVHdWFyZCB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgV2lyZUd1YXJkIGlzIGEgbmV0d29yay1yZWxhdGVkIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0sIGNvbnRhaW5pbmcgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIGl0JiMzOTtzIHRoZXJlLCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZmxhZ3MsIGFuZCBhbnkgb3RoZXIga2VybmVsIHNldHRpbmdzIGxpbmtlZCB3aXRoIHRoZSBXaXJlR3VhcmQgZHJpdmVyLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHN0cmluZyAmIzM0O1dJUkVHVUFSRCYjMzQ7IGFjcm9zcyBhbGwgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBhIHNvbGlkLCBpZiBzbGlnaHRseSBicm9hZGVyLCBhcHByb2FjaC4gVGhhdCBzaG91bGQgcXVpY2tseSB0dXJuIHVwIHJlbGV2YW50IGVudHJpZXMsIGV2ZW4gaWYgV2lyZUd1YXJkIGlzbiYjMzk7dCBkaXJlY3RseSB3aXRoaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJdOKAmXMgYSBnb29kIHN0cmF0ZWd5IHRvIHF1aWNrbHkgc2NhbiBhbGwgY29uZmlndXJhdGlvbiBmaWxlcywgZm9yIG1heGltdW0gY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0lSRUdVQVJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz01OT1jb25maWcgRFVNTVlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTczLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NDpjb25maWcgV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctOTEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjkyOmNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFdJUkVHVUFSRFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfRFVNTVkpICYjNDM7PSBkdW1teS5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSAmIzQzOz0gd2lyZWd1YXJkL1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX09WUE4pICYjNDM7PSBvdnBuL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZT0xPWNjZmxhZ3MteSA6PSAtRCYjMzk7cHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10JiMzOTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZToyOmNjZmxhZ3MtJChDT05GSUdfV0lSRUdVQVJEX0RFQlVHKSAmIzQzOz0gLURERUJVR1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlLTMtd2lyZWd1YXJkLXkgOj0gbWFpbi5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlPTE2PXdpcmVndWFyZC15ICYjNDM7PSBuZXRsaW5rLm8gZ2VuZXJhdGVkL25ldGxpbmsub1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XSVJFR1VBUkQpIDo9IHdpcmVndWFyZC5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjg6I2lmbmRlZiBfTElOVVhfV0lSRUdVQVJEX0dFTl9IXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaDo5OiNkZWZpbmUgX0xJTlVYX1dJUkVHVUFSRF9HRU5fSFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmg9Mjg9aW50IHdnX3NldF9kZXZpY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oLTI5LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmg6MzA6I2VuZGlmIC8qIF9MSU5VWF9XSVJFR1VBUkRfR0VOX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jPTIwPXN0YXRpYyBpbnQgX19pbml0IHdnX21vZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy00Ny1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NDg6XHRwcl9pbmZvKFwmIzM0O1dpcmVHdWFyZCBcJiMzNDsgV0lSRUdVQVJEX1ZFUlNJT04gXCYjMzQ7IGxvYWRlZC4gU2VlIHd3dy53aXJlZ3VhcmQuY29tIGZvciBpbmZvcm1hdGlvbi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy00OS1cdHByX2luZm8oXCYjMzQ7Q29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIFx1MDAzY0phc29uQHp4MmM0LmNvbVx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM9NzU9TU9EVUxFX0FVVEhPUihcJiMzNDtKYXNvbiBBLiBEb25lbmZlbGQgXHUwMDNjSmFzb25AengyYzQuY29tXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NzY6TU9EVUxFX1ZFUlNJT04oV0lSRUdVQVJEX1ZFUlNJT04pO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYy03Ny1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKEtCVUlMRF9NT0ROQU1FKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvdmVyc2lvbi5oOjE6I2RlZmluZSBXSVJFR1VBUkRfVkVSU0lPTiBcJiMzNDsxLjAuMFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFdpcmVHdWFyZCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFdpcmVHdWFyZCBLY29uZmlnLiAqTGV0JiMzOTtzIHNlZSB0aGUgS2NvbmZpZyBmb3IgV0lSRUdVQVJEOiogUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgV2lyZUd1YXJkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGhvdyBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbHMsIHRoZWlyIGRlc2NyaXB0aW9ucywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgV2lyZUd1YXJkIG1vZHVsZSBmaXJzdCwgdGhlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBsaWtlIHBlZXIgaGFuZGxpbmcsIGtleSBtYW5hZ2VtZW50LCByb3V0aW5nLCBhbmQgbWF5YmUgZXZlbiB1c2VyLXNwYWNlIHRvb2xzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS2NvbmZpZyBvcHRpb25zIGludGVyYWN0LCBpZiB0aGVyZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljOyB0aGluZ3MgdGhhdCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJlLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYSBXaXJlR3VhcmQgYnVpbGQgaXMgY29uZmlndXJlZCwgYW5kIGlmIGl0IGlzIHdlbGwtZGVzaWduZWQuIEkmIzM5O2xsIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSBXaXJlR3VhcmQgc291cmNlIGNvZGUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IGFueSBhbWJpZ3VpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDczOlx0XG4gIDc0Olx0Y29uZmlnIFdJUkVHVUFSRFxuICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgNzc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICA3ODpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxuICA4MDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxuICA4MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXG4gIDg0Olx0XHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0JiMzOTtzXG4gIDg1Olx0XHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxuICA4NjpcdFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cbiAgODc6XHRcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cbiAgODg6XHRcbiAgODk6XHRcdCAgSXQmIzM5O3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcbiAgOTA6XHRcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgV0lSRUdVQVJEX0RFQlVHXG4gIDkzOlx0XHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXG4gIDk3Olx0XHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2lyZUd1YXJkIFBlZXIgVGVhcmRvd24gU3luY2hyb25pemF0aW9uOiBBIFJlZmFjdG9yaW5nIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IFdpcmVHdWFyZCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHBlZXIgcmVtb3ZhbCBhbmQgdGVhcmRvd24gaW4gcmVsYXRpb24gdG8gcGFja2V0cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZmxpZ2h0LiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLCByaWdodD8gSSBjYW4gY3JlYXRlIG9uZSB3aXRoIGBpcCBsaW5rIGFkZGAgYW5kIGNvbmZpZ3VyZSBpdCB3aXRoIGBnZW5ldGxpbmtgLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkIGZ1bmN0aW9ucyBsaWtlIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgIHNvIEkgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGludGVyZmFjZXMuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBmbHVzaF93b3JrcXVldWVgIG9uIHRoZSBgcGFja2V0X2NyeXB0X3dxYCBhbmQgYGhhbmRzaGFrZV9zZW5kX3dxYCB3b3JrcXVldWVzLiBUaGF0IHNlZW1zLi4uYnJ1dGUgZm9yY2UuIEVzc2VudGlhbGx5LCB0aGUgb2xkIHdheSBmbHVzaGVkIHdvcmtxdWV1ZXMgdG8gZW5zdXJlIGFsbCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBwZWVyIGlzIHJlbW92ZWQuIFRoaXMgd291bGQgZW5jb21wYXNzIGJvdGggVFggYW5kIFJYIHBhY2tldHMuIGBuYXBpX2Rpc2FibGVgIGFuZCBgbmV0aWZfbmFwaV9kZWxgIGhhbmRsZWQgdGhlIFJYIHNpZGUgc2VwYXJhdGVseS4gVGhlIFRYIHdhcyBoYW5kbGVkIGJ5IHRoZSB3b3JrcXVldWUuCgpOb3csIHRob3VnaCwgdGhlIGNvbW1pdCBpcyBpbnRyb2R1Y2luZyBhIGZpbmVyLWdyYWluZWQgYXBwcm9hY2ggdXNpbmcgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCB3aXRoaW4gdGhlIGB3Z19wZWVyYCBzdHJ1Y3QuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHBhY2tldHMgaW4gdGhlIGNyeXB0byBwaXBlbGluZS4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gMSBkdXJpbmcgcGVlciBjcmVhdGlvbi4gV2hlbmV2ZXIgYSBwYWNrZXQgaXMgZW5xdWV1ZWQsIGBhdG9taWNfaW5jYCBpcyBjYWxsZWQuIFdoZW4gYSBwYWNrZXQgY29tcGxldGVzIGNyeXB0byBhbmQgZ2V0cyBlbnF1ZXVlZCBmb3Igc2VyaWFsIHdvcmsgKG9yIGluIHRoZSBSWCBwb2xsKSwgYGF0b21pY19kZWNfYW5kX3Rlc3RgIGlzIGNhbGxlZCwgd2FraW5nIHVwIGEgd2FpdCBxdWV1ZSBpZiB0aGUgY291bnRlciBoaXRzIHplcm8uIEZpbmFsbHksIGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24sIGFmdGVyIGRlY3JlbWVudGluZyB0aGUgY291bnRlciwgdGhlIGNvZGUgd2FpdHMgZm9yIHRoZSBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGF0b21pYyB2YXJpYWJsZSB0byByZWFjaCB6ZXJvLiBUaGVuIGEgYGZsdXNoX3dvcmtgIGlzIHBlcmZvcm1lZCBmb3Igc3BlY2lmaWMgd29ya3MuCgpUaGlzIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQhIEluc3RlYWQgb2YgZmx1c2hpbmcgZW50aXJlIHdvcmtxdWV1ZXMsIGl0JiMzOTtzIG5vdyB1c2luZyBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWJpbmVkIHdpdGggYHdhaXRfdmFyX2V2ZW50YCBhbmQgc2VsZWN0aXZlIGBmbHVzaF93b3JrYC4gSXQmIzM5O3MgYSBtdWNoIG1vcmUgdGFyZ2V0ZWQgc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5LiBJdCYjMzk7cyBzdXBwb3NlZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb24gcGFja2V0IHRlYXJkb3duIGluIHdpcmVndWFyZC4KCk5vdywgbXkgZXhwZXJ0IGJyYWluIGlzIGtpY2tpbmcgaW4uIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmludGVuZGVkIHBhY2tldCBkcm9wcy4gV2hhdCBoYXBwZW5zIGlmIGEgcGFja2V0IGlzIGRyb3BwZWQgc29tZXdoZXJlICpiZWZvcmUqIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCBvciBgd2dfcGFja2V0X3J4X3BvbGxgPyBEb2VzIHRoYXQgZGVjcmVtZW50IHRoZSBjb3VudGVyPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBpcyBjYWxsZWQgZm9yICpib3RoKiBUWCBhbmQgUlggcGF0aHMuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2xsIHZlcmlmeSBieSBpbnNwZWN0aW5nIHRoZSBjb2RlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNDg9c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE1Mi1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE1MzpzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTQtXHRzdHJ1Y3QgY3J5cHRfcXVldWUgKmRldmljZV9xdWV1ZSwgc3RydWN0IHByZXZfcXVldWUgKnBlZXJfcXVldWUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI4Olx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUsIHNrYixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI5LVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBxdWV1ZWluZy5oYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBxdWV1ZWluZyBpbXBsZW1lbnRhdGlvbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGBxdWV1ZWluZy5oYCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAxNTMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleGVzLCBjb25kaXRpb24gdmFyaWFibGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucyBpZiBpdCYjMzk7cyBhIG11bHRpLXRocmVhZGVkIGRlc2lnbi4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgcXVldWUmIzM5O3MgaW50ZXJuYWwgc3RhdGUgKGhlYWQsIHRhaWwsIHNpemUpIGlzIGJlaW5nIG1hbmFnZWQgYW5kIHByb3RlY3RlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIHF1aWNrIGZlZWwgZm9yIHRoZSB0cmFkZS1vZmZzIHRoZSBkZXZlbG9wZXJzIG1hZGUg4oCTIGFyZSB3ZSBhaW1pbmcgZm9yIGhpZ2ggdGhyb3VnaHB1dCwgbG93IGxhdGVuY3ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBMaW5lIDE1MyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0LyogU2luZ2xlIGNvbnN1bWVyICovXG4gMTQ4Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxuIDE0OTpcdHtcbiAxNTA6XHRcdHF1ZXVlLVx1MDAzZXBlZWtlZCA9IE5VTEw7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiAxNTQ6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbiAxNTU6XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSlcbiAxNTY6XHR7XG4gMTU3Olx0XHRpbnQgY3B1O1xuIDE1ODpcdFxuIDE1OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBQQUNLRVRfU1RBVEVfVU5DUllQVEVEKTtcbiAxNjA6XHRcdC8qIFdlIGZpcnN0IHF1ZXVlIHRoaXMgdXAgZm9yIHRoZSBwZWVyIGluZ2VzdGlvbiwgYnV0IHRoZSBjb25zdW1lclxuIDE2MTpcdFx0ICogd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIENSWVBURUQgb3IgREVBRCBiZWZvcmUuXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAxNjU6XHRcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTY2Olx0XG4gMTY3Olx0XHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIDE2ODpcdFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHRjcHUgPSB3Z19jcHVtYXNrX25leHRfb25saW5lKFx1MDAyNmRldmljZV9xdWV1ZS1cdTAwM2VsYXN0X2NwdSk7XG4gMTcxOlx0XHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcdTAwMjZkZXZpY2VfcXVldWUtXHUwMDNlcmluZywgc2tiKSkpXG4gMTcyOlx0XHRcdHJldHVybiAtRVBJUEU7XG4gMTczOlx0XHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFx1MDAyNnBlcl9jcHVfcHRyKGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXIsIGNwdSktXHUwMDNld29yayk7XG4gMTc0Olx0XHRyZXR1cm4gMDtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTc4Olx0e1xuIDE3OTpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTgwOlx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE4MTpcdFx0ICovXG4gMTgyOlx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE4MzpcdFxuIDE4NDpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMTg1Olx0XHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gMTg2Olx0XHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gMTg3Olx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiAxODg6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTg5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMjAwOlx0XHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMjAxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAyMDI6XHR9XG4gMjAzOlx0XG4gMjA0Olx0I2lmZGVmIERFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdpcmVHdWFyZCBQYWNrZXQgUXVldWVpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTGluZXMgMTcwLTE3MyBhcmUgY3J1Y2lhbCBoZXJlLiBJIHNlZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZW5xdWV1ZSBhIHBhY2tldCAoYHNrYmApIGludG8gdGhlIGRldmljZSBxdWV1ZSYjMzk7cyByaW5nIGJ1ZmZlciB1c2luZyBgcHRyX3JpbmdfcHJvZHVjZV9iaGAuICBUaGUgY3J1Y2lhbCBwb2ludCwgb2YgY291cnNlLCBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGlzICpmYWlscyouIElmIGBwdHJfcmluZ19wcm9kdWNlX2JoYCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHplcm8sIGluZGljYXRpbmcgYW4gZXJyb3IgKGxldCYjMzk7cyBzYXkgYC1FTk9NRU1gIG9yIHRoZSByaW5nIGlzIGZ1bGwpLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRVBJUEVgLiAKClRoZSBwcm9ibGVtIGlzLCBhbmQgdGhpcyBpcyB3aGF0JiMzOTtzIGJvdGhlcmluZyBtZSwgYmVmb3JlIHRoYXQgcmV0dXJuLCBgYXRvbWljX2luYygmYW1wO1BBQ0tFVF9QRUVSKHNrYiktJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTtgIHdhcyBhbHJlYWR5IGNhbGxlZCEgVGhhdCBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgaXMgaGFwcGVuaW5nIHdpdGggZW5jcnlwdGlvbiBiZWZvcmUgdGhlIHF1ZXVlIGl0c2VsZiBpcyBjb25maXJtZWQuIFRoYXQmIzM5O3MgYSBiaXQgcmlza3ksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjb3VudGluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uIGJlZm9yZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBwcm9jZXNzZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCwgdGhlIGZ1bmN0aW9uIHRoaXMgc25pcHBldCBpcyBwYXJ0IG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGF0IHRoZSBjYWxsIHNpdGUuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGZvciB0aGUgYC1FUElQRWAgcmV0dXJuLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGJvdGggYHJlY2VpdmUuY2AgYW5kIGBzZW5kLmNgIHdoZXJlIEkmIzM5O20gZXhwZWN0aW5nIGB3Z19wYWNrZXRfY29uc3VtZV9kYXRhYCBhbmQgYHdnX3BhY2tldF9jcmVhdGVfZGF0YWAgdG8gYmUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggYW55IHBvdGVudGlhbCBmYWlsdXJlcyBhbmQgZGV0ZXJtaW5lIHdoYXQgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgYW5kIHRoZSBlbmNyeXB0aW9uIGNvdW50ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWlzc2VkIGNvdW50ZXIgdXBkYXRlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFxuIDUxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXG4gNTEyOlx0e1xuIDUxMzpcdFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cdTAwM2VkYXRhKS1cdTAwM2VrZXlfaWR4O1xuIDUxNDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMO1xuIDUxNTpcdFx0aW50IHJldDtcbiA1MTY6XHRcbiA1MTc6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiA1MTg6XHRcdFBBQ0tFVF9DQihza2IpLVx1MDAzZWtleXBhaXIgPVxuIDUxOTpcdFx0XHQoc3RydWN0IG5vaXNlX2tleXBhaXIgKil3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKFxuIDUyMDpcdFx0XHRcdHdnLVx1MDAzZWluZGV4X2hhc2h0YWJsZSwgSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIsIGlkeCxcbiA1MjE6XHRcdFx0XHRcdTAwMjZwZWVyKTtcbiA1MjI6XHRcdGlmICh1bmxpa2VseSghd2dfbm9pc2Vfa2V5cGFpcl9nZXQoUEFDS0VUX0NCKHNrYiktXHUwMDNla2V5cGFpcikpKVxuIDUyMzpcdFx0XHRnb3RvIGVycl9rZXlwYWlyO1xuIDUyNDpcdFxuIDUyNTpcdFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwZWVyLVx1MDAzZWlzX2RlYWQpKSlcbiA1MjY6XHRcdFx0Z290byBlcnI7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXHUwMDI2d2ctXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSwgc2tiLFxuIDUyOTpcdFx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4gNTMwOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXG4gNTMxOlx0XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XG4gNTMyOlx0XHRpZiAobGlrZWx5KCFyZXQgfHwgcmV0ID09IC1FUElQRSkpIHtcbiA1MzM6XHRcdFx0cmN1X3JlYWRfdW5sb2NrX2JoKCk7XG4gNTM0Olx0XHRcdHJldHVybjtcbiA1MzU6XHRcdH1cbiA1MzY6XHRlcnI6XG4gNTM3Olx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VrZXlwYWlyLCBmYWxzZSk7XG4gNTM4Olx0ZXJyX2tleXBhaXI6XG4gNTM5Olx0XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiA1NDA6XHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIDU0MTpcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIDU0MjpcdH1cbiA1NDM6XHRcbiA1NDQ6XHR2b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDU0NTpcdHtcbiA1NDY6XHRcdGlmICh1bmxpa2VseShwcmVwYXJlX3NrYl9oZWFkZXIoc2tiLCB3ZykgXHUwMDNjIDApKVxuIDU0NzpcdFx0XHRnb3RvIGVycjtcbiA1NDg6XHRcdHN3aXRjaCAoU0tCX1RZUEVfTEUzMihza2IpKSB7XG4gNTQ5Olx0XHRjYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0lOSVRJQVRJT04pOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2VuZC5jYCAtIFNwZWNpZmljYWxseSwgYHdnX3BhY2tldF9jcmVhdGVfZGF0YWAqKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHBhY2tldCBjcmVhdGlvbiB3aXRoaW4gdGhlIGBzZW5kLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhhdCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRhdGEgZm9yIHRoZXNlIFdpcmVHdWFyZCBwYWNrZXRzIGlzIGJlaW5nIGFzc2VtYmxlZC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUg4oCTIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQmIzM5O3MgZ29pbmcgaW50byBpdC4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byBpdC4gV2hhdCBraW5kIG9mIGNvbnRleHQgZG9lcyBpdCBuZWVkPyBJcyBpdCB1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLCBvciBhbGxvY2F0aW5nIG9uIHRoZSBmbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgYnVmZmVyIG92ZXJmbG93cyBvciBhbnkgb3RoZXIgc2VjdXJpdHkgY29uY2VybnMgaGVyZT8gQXJlIGFueSBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIHBhcnRpY3VsYXJseSBwcm9uZSB0byBkZW5pYWwgb2Ygc2VydmljZT8mIzM0OyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBzaXplIGNhbGN1bGF0aW9ucywgY29waWVzLCBhbmQgaG93IGRhdGEgZnJvbSBkaWZmZXJlbnQgc291cmNlcyBpcyBiZWluZyBjb25jYXRlbmF0ZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBpbiB0aGUgZmxvdy4KCkJhc2ljYWxseSwgSSB3YW50IHRvIG5haWwgZG93biBob3cgbXVjaCBjb250cm9sIGEgcG90ZW50aWFsIGF0dGFja2VyIG1pZ2h0IGhhdmUgb3ZlciB0aGUgcGFja2V0IGRhdGEgY29uc3RydWN0aW9uLiBBbnkgcG9pbnQgb2YgYXR0YWNrIHdvdWxkIGJlIGludGVyZXN0aW5nIGJ1dCBpbiBwYXJ0aWN1bGFyIGlmIEkgY2FuIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBjYW4gYmUgaW5zZXJ0ZWQgZnJvbSBleHRlcm5hbCBzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMDpcdFxuIDMxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cdTAwM2VkZXZpY2U7XG4gMzE0Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAzMTU6XHRcbiAzMTY6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiAzMTc6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cdTAwM2Vpc19kZWFkKSkpXG4gMzE4Olx0XHRcdGdvdG8gZXJyO1xuIDMxOTpcdFxuIDMyMDpcdFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUsIGZpcnN0LFxuIDMyMTpcdFx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4gMzIyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXG4gMzIzOlx0XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIFBBQ0tFVF9TVEFURV9ERUFEKTtcbiAzMjQ6XHRlcnI6XG4gMzI1Olx0XHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcbiAzMjY6XHRcdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSlcbiAzMjc6XHRcdFx0cmV0dXJuO1xuIDMyODpcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoUEFDS0VUX0NCKGZpcnN0KS1cdTAwM2VrZXlwYWlyLCBmYWxzZSk7XG4gMzI5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAzMzA6XHRcdGtmcmVlX3NrYl9saXN0KGZpcnN0KTtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0dm9pZCB3Z19wYWNrZXRfcHVyZ2Vfc3RhZ2VkX3BhY2tldHMoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTtcbiAzMzY6XHRcdERFVl9TVEFUU19BREQocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2LCB0eF9kcm9wcGVkLFxuIDMzNzpcdFx0XHQgICAgICBwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUucWxlbik7XG4gMzM4Olx0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuIDMzOTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlLmxvY2spO1xuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHR2b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyO1xuIDM0NTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBwYWNrZXRzO1xuIDM0NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qIFN0ZWFsIHRoZSBjdXJyZW50IHF1ZXVlIGludG8gb3VyIGxvY2FsIG9uZS4gKi9cbiAzNDk6XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwYWNrZXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBXaXJlR3VhcmQgUGFja2V0IFByb2Nlc3Npbmcgd2l0aCAtRVBJUEUgRXJyb3JzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcmVjdXJyaW5nIHBhdHRlcm4gd2l0aCB0aGlzIGAtRVBJUEVgIGVycm9yLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLiBXaGVuIGByZXRgIGlzIGAtRVBJUEVgLCB0aGUgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kLCBjcnVjaWFsbHksIGl0IGVucXVldWVzIGEgcGFja2V0IHdpdGggdGhlIGBQQUNLRVRfU1RBVEVfREVBRGAgZmxhZy4gSW5zaWRlIHRoaXMgZnVuY3Rpb24sIEkgc2VlIGBhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpO2AgZm9sbG93ZWQgYnkgYHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIHdheSB0byBzaWduYWwgc29tZXRoaW5nLiBOb3csIHdoYXQgYWJvdXQgdGhlIHJlY2VpdmUgc2lkZT8gSXQgc2VlbXMgd2UgaGF2ZSBhIHNpbWlsYXIgcHJvY2VzcyB3aGVuIGByZXQgPT0gLUVQSVBFYDogYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgIGdldHMgY2FsbGVkLCBhZ2FpbiB3aXRoIGBQQUNLRVRfU1RBVEVfREVBRGAsIGFuZCB0aGVuIGBuYXBpX3NjaGVkdWxlKCZhbXA7cGVlci0mZ3Q7bmFwaSlgLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGB3Z19wYWNrZXRfcnhfcG9sbGAuIEFuZCB3aGF0IGhhcHBlbnMgaW5zaWRlIHRoYXQgZnVuY3Rpb24/IFRoYXQmIzM5O3MgcmlnaHQsIGBhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYCBhbmQgYHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpYC4gSSYjMzk7bSBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUgaW52b2x2aW5nIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGJ1dCBJIGRvbiYjMzk7dCB5ZXQgdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgcHVycG9zZS4KCkJ1dCB3aGF0IGFib3V0IHRoZSBzdWNjZXNzIGNhc2VzPyBXaGVyZSBpcyB0aGlzIGNvdW50ZXIgZGVjcmVtZW50ZWQgYW5kIHRoZSBhc3NvY2lhdGVkIHdha2UtdXAgY2FsbGVkIHdoZW4gdGhlIGNyeXB0byBhY3R1YWxseSAqc3VjY2VlZHMqPyBPciBob3cgaXQmIzM5O3MgaGFuZGxlZCBieSB0aGUgd29ya2VyIHRocmVhZHM/IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBgcGFja2V0X2NyeXB0X3dxYCB3b3JrZXIgaXMgYWN0dWFsbHkgdXNlZC4gV2hlcmUgaXMgYGRldmljZV9xdWV1ZS0mZ3Q7d29ya2VyYCBkZWZpbmVkLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIGBkZWNyeXB0X3F1ZXVlYCBhbmQgYGVuY3J5cHRfcXVldWVgPyBMZXQmIzM5O3Mgc2VhcmNoIGZvciB0aG9zZSBxdWV1ZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5jcnlwdF9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1OS1cdHdnX3BhY2tldF9xdWV1ZV9mcmVlKFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNjA6XHR3Z19wYWNrZXRfcXVldWVfZnJlZShcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjYxLVx0cmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgYWxsIHRoZSBwZWVycyB0byBiZSBhY3R1YWxseSBmcmVlZC4gKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzEwPXN0YXRpYyBpbnQgd2dfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzUyOlx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXHUwMDI2d2ctXHUwMDNlZW5jcnlwdF9xdWV1ZSwgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1My1cdFx0XHRcdCAgIE1BWF9RVUVVRURfUEFDS0VUUyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1OS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzYwOlx0XHRnb3RvIGVycl9mcmVlX2VuY3J5cHRfcXVldWU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzYxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zOTEtXHR3Z19wYWNrZXRfcXVldWVfZnJlZShcdTAwMjZ3Zy1cdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzkyOmVycl9mcmVlX2VuY3J5cHRfcXVldWU6XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzkzOlx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXHUwMDI2d2ctXHUwMDNlZW5jcnlwdF9xdWV1ZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM5NC1lcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oPTQwPXN0cnVjdCB3Z19kZXZpY2Uge1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQxLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuaDo0MjpcdHN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlLCBoYW5kc2hha2VfcXVldWU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmgtNDMtXHRzdHJ1Y3Qgc29jayBfX3JjdSAqc29jazQsICpzb2NrNjtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTMxMT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGEoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpmaXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6MzIwOlx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUsIGZpcnN0LFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMjEtXHRcdFx0XHRcdFx0ICAgd2ctXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGB3Z19wYWNrZXRgIHdvcmtlciBmdW5jdGlvbnMsIHRoaW5raW5nIGFsb3VkOgoKKipBbmFseXppbmcgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyIGFuZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgZmlyc3QgZ2xhbmNlLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgd29ya2hvcnNlcywgdGhlIG9uZXMgZG9pbmcgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZS4gQXJlIHRoZXkgc2luZ2xlLXRocmVhZGVkLCBvciBkZXNpZ25lZCBmb3IgY29uY3VycmVuY3k/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZywgSSYjMzk7ZCAqaG9wZSogdGhleSBhcmUgZGVzaWduZWQgd2l0aCBjb25jdXJyZW5jeSBpbiBtaW5kLCBidXQgSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgdXNpbmcgYSB0aHJlYWQgcG9vbCwgb3Igc3Bhd25pbmcgbGlnaHR3ZWlnaHQgdGhyZWFkcyAobGlrZSBnb3JvdXRpbmVzIGlmIHdlJiMzOTtyZSBpbiBhIEdvIGNvbnRleHQsIG9yIGtlcm5lbCB0aHJlYWRzLCBvciBwZXJoYXBzIGFyZSB0aGV5IGV2ZW4gdXNpbmcgU0lNRCBpbnN0cnVjdGlvbnMpPwoKSSYjMzk7ZCB3YW50IHRvIGtub3c6CgoqICAgKipDb25jdXJyZW5jeSBNb2RlbDoqKiBIb3cgYXJlIHRoZXkgaGFuZGxpbmcgbXVsdGlwbGUgcGFja2V0cyBzaW11bHRhbmVvdXNseT8gQXJlIHRoZXkgdXNpbmcgYSBxdWV1ZWluZyBzeXN0ZW0gdG8gbWFuYWdlIGluY29taW5nIHdvcms/IFdoYXQgYXJlIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCAobXV0ZXhlcywgc2VtYXBob3JlcywgYXRvbWljIG9wZXJhdGlvbnMsIGV0Yy4pPyBBbnkgY29udGVudGlvbiBwb2ludHMsIG9yIGJvdHRsZW5lY2tzLCBjb3VsZCBiZSBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS4KKiAgICoqQ3J5cHRvZ3JhcGhpYyBQcmltaXRpdmVzOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIGFsZ29yaXRobXMgYXJlIGJlaW5nIHVzZWQgKENoYUNoYTIwLCBQb2x5MTMwNSwgZXRjLik/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvciBqdXN0IGxldmVyYWdpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAobGlic29kaXVtLCBPcGVuU1NMLCBldGMuKT8KKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGFyZSBwYWNrZXRzIGFuZCBidWZmZXJzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBpbmVmZmljaWVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgb3IgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXM/IEFyZSB0aGVyZSBhbnkgbWVtb3J5IHBvb2xzLCBvciBhcmUgd2UgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIGV2ZXJ5IHNpbmdsZSB0aW1lPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGRvIHRoZXNlIHdvcmtlcnMgZGVhbCB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBjcnlwdG9ncmFwaGljIGZhaWx1cmVzLCBvciBvdGhlciBleGNlcHRpb25hbCBjb25kaXRpb25zPyBXaGF0IGxvZ2dpbmcgb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZT8KKiAgICoqQ29udGV4dHVhbCBJbmZvcm1hdGlvbjoqKiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRlbGVzcywgb3IgZG8gdGhleSBtYWludGFpbiBzb21lIGtpbmQgb2YgcGVyLXBlZXIgY29udGV4dD8gSWYgc28sIHdoYXQgaXMgdGhhdCBjb250ZXh0LCBhbmQgaG93IGlzIGl0IG1hbmFnZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSB0aGV5IGFjY2Vzc2luZywgYW5kIHdoYXQgYXJlIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdG8gYXZvaWQgY29udGVudGlvbj8KClVsdGltYXRlbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSB3b3JrZXJzIGRldGVybWluZXMgdGhlIGJhbmR3aWR0aCBsaW1pdGF0aW9ucyBvZiBhIFdpcmVHdWFyZCBjb25uZWN0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGltcGxlbWVudGF0aW9ucyBhcmUgZWZmZWN0aXZlLCBvciBjb3VsZCBiZSBvcHRpbWl6ZWQuIEkgd291bGQgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGVmZmljaWVudCB0aGUgd29ya2VycyBhcmUsIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTMxMD1zdGF0aWMgaW50IHdnX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzUxLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM1MjpcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFx1MDAyNndnLVx1MDAzZWVuY3J5cHRfcXVldWUsIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTMtXHRcdFx0XHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTUxPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTI6dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTUzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjYyPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yODYtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI4Nzp2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB3b3JrZXIgZnVuY3Rpb25zOgoKKipEaWdnaW5nIGludG8gdGhlIFdpcmVHdWFyZCBQYWNrZXQgSGFuZGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgV2lyZUd1YXJkIGFjdHVhbGx5ICp3b3Jrcyog4oCTIHRoZSBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCBhbmQgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRoZXkmIzM5O3JlIHRoZSBoZWFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIHNvIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGNyeXB0b2dyYXBoeSwga2V5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb24sIGFuZCB0aGUgbmVjZXNzYXJ5IGRhdGEgbWFuaXB1bGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1vcHRpbWl6ZWQgY29kZSwgbGlrZWx5IGxldmVyYWdpbmcgU0lNRCBpbnN0cnVjdGlvbnMgYW5kIGNhcmVmdWwgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvcHBvcnR1bml0aWVzIGZvciBwYXJhbGxlbGl6YXRpb24gKHRob3VnaCBJIGltYWdpbmUgdGhlc2UgYXJlIGFscmVhZHkgaGlnaGx5IG9wdGltaXplZCksIGFuZCBhbnkgYXJlYXMgd2hlcmUgc3VidGxlIHRpbWluZyBhdHRhY2tzIG1pZ2h0IGJlIHBvc3NpYmxlICh0aG91Z2gsIGlkZWFsbHksIHJvYnVzdCBjb3VudGVybWVhc3VyZXMgd2lsbCBiZSBpbiBwbGFjZSkuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2V5cyBhbmQgbm9uY2VzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgdGhleSBkZWZlbnNpdmUsIG9yIGRvIHRoZXkgYXNzdW1lIGEgbW9yZSAmIzM0O3RydXN0ZWQmIzM0OyBlbnZpcm9ubWVudD8gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHNjcnV0aW5pemluZyB0aGUgbWVtb3J5IHNhZmV0eSBhc3BlY3RzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHRoaXMgYWxsIHBsYXlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDI4ODpcdHtcbiAyODk6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXG4gMjkwOlx0XHRcdFx0XHRcdFx0IHdvcmspLVx1MDAzZXB0cjtcbiAyOTE6XHRcdHN0cnVjdCBza19idWZmICpmaXJzdCwgKnNrYiwgKm5leHQ7XG4gMjkyOlx0XG4gMjkzOlx0XHR3aGlsZSAoKGZpcnN0ID0gcHRyX3JpbmdfY29uc3VtZV9iaChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nKSkgIT0gTlVMTCkge1xuIDI5NDpcdFx0XHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IFBBQ0tFVF9TVEFURV9DUllQVEVEO1xuIDI5NTpcdFxuIDI5NjpcdFx0XHRza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkge1xuIDI5NzpcdFx0XHRcdGlmIChsaWtlbHkoZW5jcnlwdF9wYWNrZXQoc2tiLFxuIDI5ODpcdFx0XHRcdFx0XHRQQUNLRVRfQ0IoZmlyc3QpLVx1MDAzZWtleXBhaXIpKSkge1xuIDI5OTpcdFx0XHRcdFx0d2dfcmVzZXRfcGFja2V0KHNrYiwgdHJ1ZSk7XG4gMzAwOlx0XHRcdFx0fSBlbHNlIHtcbiAzMDE6XHRcdFx0XHRcdHN0YXRlID0gUEFDS0VUX1NUQVRFX0RFQUQ7XG4gMzAyOlx0XHRcdFx0XHRicmVhaztcbiAzMDM6XHRcdFx0XHR9XG4gMzA0Olx0XHRcdH1cbiAzMDU6XHRcdFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpO1xuIDMwNjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gMzA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMzA4Olx0XHR9XG4gMzA5Olx0fVxuIDMxMDpcdFxuIDMxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuIDMxMjpcdHtcbiAzMTM6XHRcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cdTAwM2VkZXZpY2U7XG4gMzE0Olx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAzMTU6XHRcbiAzMTY6XHRcdHJjdV9yZWFkX2xvY2tfYmgoKTtcbiAzMTc6XHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cdTAwM2Vpc19kZWFkKSkpXG4gMzE4Olx0XHRcdGdvdG8gZXJyO1xuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV2lyZUd1YXJkIFBhY2tldCBIYW5kbGluZyBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cgd2l0aGluIFdpcmVHdWFyZCwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pdCBwYXRoLiBJdCBsb29rcyBsaWtlIHdpdGhpbiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKWAgZ2V0cyBjYWxsZWQuIEFscmlnaHQsIHN0YW5kYXJkIGVucXVldWVpbmcgZnVuY3Rpb24uIERpZ2dpbmcgaW50byB0aGF0LCBpbnNpZGUgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLCB0aGVyZSYjMzk7cyB0aGlzIGludGVyZXN0aW5nIHNlcXVlbmNlOiBgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpIHdha2VfdXBfdmFyKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpO2AgZm9sbG93ZWQgYnkgcXVldWluZyB3b3JrIHdpdGggYHF1ZXVlX3dvcmtfb24oLi4uLCAmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrKTtgLiBUaGUgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBhdG9taWMgdmFyaWFibGUgaXMgY2xlYXJseSBhY3RpbmcgYXMgYSByZWZlcmVuY2UgY291bnRlciBmb3Igb3V0c3RhbmRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciBhIGdpdmVuIHBlZXIuIFRoZSBgd2FrZV91cF92YXJgIGNhbGwgaGludHMgYXQgc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhpcyB0byB0aGUgcGVlciB0ZWFyZG93biBwYXRoLCBzcGVjaWZpY2FsbHkgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBUaGlzIGZ1bmN0aW9uIGlzIHdhaXRpbmcgZm9yIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdG8gaGl0IHplcm8gKmJlZm9yZSogcmVtb3ZpbmcgdGhlIHBlZXIuIFRoZSBjb2RlIHNob3dzIGFuIGF0b21pYyBkZWNyZW1lbnQgYW5kIGEgd2FpdDogYGF0b21pY19kZWMoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7IHdhaXRfdmFyX2V2ZW50KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsICFhdG9taWNfcmVhZF9hY3F1aXJlKCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKTtgLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSAqbXVzdCogd2FpdCBmb3IgYWxsIGVuY3J5cHRpb24vdHJhbnNtaXNzaW9uIG9wZXJhdGlvbnMgdG8gZmluaXNoIGJlZm9yZSBudWtpbmcgdGhlIHBlZXImIzM5O3Mgc3RhdGUuIFRoZXJlJiMzOTtzIGFsc28gYSBgZmx1c2hfd29ya2AgY2FsbCBvbiBgcGVlci0mZ3Q7dHJhbnNtaXRfcGFja2V0X3dvcmtgIHdoaWNoIGVuc3VyZXMgYW55IHBlbmRpbmcgd29yayBhc3NvY2lhdGVkIHdpdGggdGhlIHBlZXIgZ2V0cyBjb21wbGV0ZWQgYmVmb3JlIHdlIGNvbnRpbnVlLgoKTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBkZWNyZW1lbnQgYW5kIHdhaXQgYXJlIHN1ZmZpY2llbnQuIFRoZSBvcmRlcmluZyBhbmQgcG90ZW50aWFsIHJhY2VzIHRoYXQgY291bGQgYmUgY3JlYXRlZCBvbiBzaHV0ZG93bi4KCk9rYXksIHNvIHRoZSBUeCBwYXRoIHNlZW1zIHByZXR0eSB3ZWxsLWRlZmluZWQuIEJ1dCB0aGlzIGFsc28gbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSByZWNlaXZlIHBhdGguIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2ltaWxhciBwcmVjYXV0aW9ucyBhcmUgaW4gcGxhY2UgZHVyaW5nIGRlY3J5cHRpb24uIExldCYjMzk7cyBzaGlmdCBvdXIgZm9jdXMgYW5kIGludmVzdGlnYXRlIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTMxMD1zdGF0aWMgaW50IHdnX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzU2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM1NzpcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFx1MDAyNndnLVx1MDAzZWRlY3J5cHRfcXVldWUsIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcixcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTgtXHRcdFx0XHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTM1PWludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzYtLyogV29ya3F1ZXVlIHdvcmtlcjogKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjM3OnZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTQzOD1pbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDk0LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo0OTU6dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgcmVjZWl2ZS5jYCBhdCBMaW5lIDQ5NSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGhpbnQgdG8gbG9vayBhdCBgcmVjZWl2ZS5jYCBhcm91bmQgbGluZSA0OTUgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBtZW50YWwgY2hlY2tsaXN0LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBuZXR3b3JraW5nIG9yIGNvbW11bmljYXRpb24gcHJvdG9jb2wsIGdpdmVuIHRoZSBjb250ZXh0IG9mICYjMzQ7cmVjZWl2ZSYjMzQ7LiBMaW5lIDQ5NSBzdWdnZXN0cyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIGFuIGluY29taW5nIGNvbm5lY3Rpb24sIG9yIHRoZSBwYXJzaW5nIG9mIGEgZGF0YSBidWZmZXIuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhcm91bmQgdGhhdCBsaW5lPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNvY2tldCBkZXNjcmlwdG9yLCBhIGJ1ZmZlciwgYSBwcm90b2NvbCBjb250cm9sIGJsb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgdGhpcyBsaW5lIHRoZSBzdGFydCBvZiBhIGByZWN2KClgIGNhbGwsIGEgZGF0YSB2YWxpZGF0aW9uIGNoZWNrLCBlcnJvciBoYW5kbGluZywgb3IgdGhlIGRpc3BhdGNoaW5nIGxvZ2ljIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZT8gVGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgaWRlbnRpZnkgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZGF0YSBmbG93OiB3aGF0IGNvbWVzIGluLCB3aGF0IGdldHMgcHJvY2Vzc2VkLCBhbmQgd2hlcmUgZG9lcyB0aGUgaW5mb3JtYXRpb24gZ28gbmV4dC4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBhc3N1bXB0aW9ucyB0aGUgY29kZSBtYWtlcyBhYm91dCB0aGUgaW5jb21pbmcgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCByZXNvdXJjZSBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBoYW5kbGluZyBvZiB3aGF0ZXZlciBpcyBjb21pbmcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDkwOlx0XHRcdG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0cmV0dXJuIHdvcmtfZG9uZTtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDQ5NjpcdHtcbiA0OTc6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXG4gNDk4Olx0XHRcdFx0XHRcdFx0IHdvcmspLVx1MDAzZXB0cjtcbiA0OTk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTAwOlx0XG4gNTAxOlx0XHR3aGlsZSAoKHNrYiA9IHB0cl9yaW5nX2NvbnN1bWVfYmgoXHUwMDI2cXVldWUtXHUwMDNlcmluZykpICE9IE5VTEwpIHtcbiA1MDI6XHRcdFx0ZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUgPVxuIDUwMzpcdFx0XHRcdGxpa2VseShkZWNyeXB0X3BhY2tldChza2IsIFBBQ0tFVF9DQihza2IpLVx1MDAzZWtleXBhaXIpKSA/XG4gNTA0Olx0XHRcdFx0XHRQQUNLRVRfU1RBVEVfQ1JZUFRFRCA6IFBBQ0tFVF9TVEFURV9ERUFEO1xuIDUwNTpcdFx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xuIDUwNjpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gNTA3Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTA4Olx0XHR9XG4gNTA5Olx0fVxuIDUxMDpcdFxuIDUxMTpcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXG4gNTEyOlx0e1xuIDUxMzpcdFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cdTAwM2VkYXRhKS1cdTAwM2VrZXlfaWR4O1xuIDUxNDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVlcCBEaXZlIGludG8gV2lyZUd1YXJkJiMzOTtzIFBhY2tldCBIYW5kbGluZyAmYW1wOyBSZW1vdmFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgb24gYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuIEl0IGVucXVldWVzIHBhY2tldHMgZm9yIFJYIGRlY3J5cHRpb24gdXNpbmcgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgLCB3aGljaCBpbiB0dXJuIHNjaGVkdWxlcyBOQVBJLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGB3Z19wYWNrZXRfcnhfcG9sbGAgcnVubmluZyBmb3IgdGhhdCBwZWVyJiMzOTtzIE5BUEkgaW5zdGFuY2UuIEluc2lkZSBgd2dfcGFja2V0X3J4X3BvbGxgLCB0aGUgcGFja2V0IGlzIHByb2Nlc3NlZCBhbmQgYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBkZWNyZW1lbnRlZC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzIHRvIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgcGVlciByZW1vdmFsLiBIZXJlLCBJIHNlZSBhbiBgYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKWAgZm9sbG93ZWQgYnkgYHdhaXRfdmFyX2V2ZW50YC4gVGhpcyB3YWl0IGlzIGV4cGxpY2l0bHkgdGllZCB0byBgcGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmdgIHJlYWNoaW5nIHplcm8uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGhlcmU/IEkgYWxzbyBzZWUgYGZsdXNoX3dvcmtgIGNhbGxlZCwgdGhlbiBgbmFwaV9kaXNhYmxlYCwgYW5kIGZpbmFsbHkgYG5ldGlmX25hcGlfZGVsYC4gVGhlIGNyaXRpY2FsIHNlcXVlbmNlIGhlcmUgYXBwZWFycyB0byBiZSB0aGF0IHRoZSBjb2RlICp3YWl0cyogZm9yIHBlbmRpbmcgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlICpiZWZvcmUqIGRpc2FibGluZyBOQVBJIGFuZCByZW1vdmluZyB0aGUgTkFQSSBzdHJ1Y3R1cmUuCgpUaGUgY29ubmVjdGlvbiBiZWNvbWVzIGNsZWFyZXIgd2hlbiBJIG5vdGUgdGhhdCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGRlY3JlbWVudGVkIGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgKGZvciBSWCkgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCB3aGljaCBpcyBjYWxsZWQgYnkgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgKGZvciBUWCkuIFNvIHRoZSByZW1vdmFsIGxvZ2ljICpkZXBlbmRzKiBvbiB0aGVzZSB0YXNrcyBjb21wbGV0aW5nLgoKVGhlIHByb2JsZW0gc3RhcnRzIHRvIG1hbmlmZXN0IGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgOiBJZiB0aGUgcXVldWVpbmcgdG8gdGhlIHJpbmcgZmFpbHMsIGFuZCBgcHRyX3JpbmdfcHJvZHVjZV9iaGAgcmV0dXJucyBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRVBJUEVgLiBUaGlzIGNhdXNlcyBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAgdG8gcnVuIHdoaWNoIGNhbGxzIGBuYXBpX3NjaGVkdWxlKCZhbXA7cGVlci0mZ3Q7bmFwaSlgLiBUaGlzIHNjZW5hcmlvIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGRlYWRsb2NrLgoKTXkgYnJhaW4gaXMgbm93IHNjcmVhbWluZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBOQVBJIGFuZCBwZWVyIHJlbW92YWwuIEhlcmUmIzM5O3MgdGhlIGtleSBxdWVzdGlvbjogV2hhdCBpZiBOQVBJIGlzIGRpc2FibGVkIG9yIG5ldmVyIHJ1bnMsIG9yIGlzIGhlbGQgdXA/IFRoZSBzZXF1ZW5jZSBpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYHdhaXRfdmFyX2V2ZW50YCAqYmVmb3JlKiBgbmFwaV9kaXNhYmxlYC4gVGhpcyByYWlzZXMgc2VyaW91cyBxdWVzdGlvbnMhIFdoYXQgaWYgcGFja2V0cyBhcmUgc3RpbGwgcXVldWVkIGluIGByeF9xdWV1ZWAsIHdhaXRpbmcgZm9yIE5BUEkgdG8gcnVuIGJ1dCBOQVBJIGlzIGRpc2FibGVkIG9yIG5vdCBnaXZlbiBhIENQVT8gSXQgY291bGQgbWVhbiBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIG5ldmVyIHJlYWNoZXMgemVybywgYW5kIHRoZSBwZWVyIHJlbW92YWwgaGFuZ3MuIEV2ZW4gbW9yZSwgaWYgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiBydW5zIGJ1dCBydW5zIG91dCBvZiBidWRnZXQsIG9yIHRoZSBuZXRpZiBpcyBkb3duLCB0aGVuIHRoZSBzYW1lIHNjZW5hcmlvIGNhbiBoYXBwZW4uIE9yLCB3aGF0IGlmIGEgcGVlciBpcyByZW1vdmVkIHdoaWxlIE5BUEkgaXMgZGlzYWJsZWQgb3IgdGhlIG5ldCBkZXZpY2UgaXMgY2xvc2VkPyBUaGF0IGNvdWxkIGxlYWQgdG8gYSBtYXNzaXZlIHByb2JsZW0uIFRoaXMgZmVlbHMgbGlrZSBhIGNsYXNzaWMgcG90ZW50aWFsIGRlYWRsb2NrLiBUaGlzIGNvdWxkIGVhc2lseSBsZWF2ZSBwYWNrZXRzIGluIGEgbGltYm8gc3RhdGUsIGFuZCBwcmV2ZW50IHBlZXJzIGZyb20gYmVpbmcgcmVtb3ZlZC4KCkkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMgb2YgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIG5vdywgYW5kIHVuZGVyc3RhbmQgKndoZW4qIHRoaXMgcmVtb3ZhbCBwcm9jZXNzIGlzIHRyaWdnZXJlZCwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJpc2tzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZXJfcmVtb3ZlX2FmdGVyX2RlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz04Mz1zdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTk2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo5NzpzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0xNTg9dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2NS1cdHN5bmNocm9uaXplX25ldCgpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjY6XHRwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9MTY5PXZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTg0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNmRlYWRfcGVlcnMsIHBlZXJfbGlzdClcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTg1Olx0XHRwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xODYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBlZXIgUmVtb3ZhbCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgcGVlciByZW1vdmFsIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBkZWVtZWQgZGVhZC4gVGhlIGNvZGUmIzM5O3MgY2hhbmdlZCBoZXJlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBmbG93LiBJbml0aWFsbHksIGl0IHNlZW1zIHdlIHdlcmUgdXNpbmcgbXVsdGlwbGUgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMg4oCTIG9uZSBmb3IgYHBhY2tldF9jcnlwdF93cWAsIGFuZCBhbm90aGVyIGZvciBgaGFuZHNoYWtlX3NlbmRfd3FgLiBOb3csIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyBiZWVuIHN0cmVhbWxpbmVkLgoKTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGlzIGNoYW5nZSwgd2h5IHdlJiMzOTtyZSBubyBsb25nZXIgdXNpbmcgdGhlIGBmbHVzaF93b3JrcXVldWVgIGNhbGxzIGluIHRoZSBvbGQgd2F5LCBhbmQgd2hhdCB0aGUgY3VycmVudCBjb2RlIGFjaGlldmVzLiBUaGUgbmV3IGNvZGUgaXMgbm93IHVzaW5nIGB3YWl0X3Zhcl9ldmVudGAsIGBmbHVzaF93b3JrYCB0byBhIGB0cmFuc21pdF9wYWNrZXRfd29ya2AsIE5BUEkgZGlzYWJsaW5nLCBhbmQgYW5vdGhlciBgZmx1c2hfd29ya2AgZm9yIGB0cmFuc21pdF9oYW5kc2hha2Vfd29ya2AuIFdlJiMzOTtyZSBkZWZpbml0ZWx5IHNoaWZ0aW5nIGhvdyB3ZSYjMzk7cmUgZW5zdXJpbmcgYWxsIHBlbmRpbmcgd29yayByZWxhdGVkIHRvIHRoZSBkZWFkIHBlZXIgaXMgY2xlYW5lZCB1cCBhbmQgdGhhdCByZXNvdXJjZXMgYXJlIGZyZWVkIHNhZmVseS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGhlcmUuIExldCBtZSBjaGVjayB0aGUgY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlIGFyb3VuZCBsaW5lIDEzMyBvZiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByYXRpb25hbGUgb3IgY29udGV4dCBmb3IgdGhpcyBhZGp1c3RtZW50LiBUaGlzIG1pZ2h0IGV4cGxhaW4gdGhlIGNoYW5nZSBpbiBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiAxMzI6XHRcbiAxMzM6XHRcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gMTM0Olx0XHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuIDEzNTpcdFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxuIDEzNjpcdFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XG4gMTM3Olx0XHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxuIDEzODpcdFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbiYjMzk7dFxuIDEzOTpcdFx0ICogaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMSkgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSYjMzk7cmUgcmVtb3ZlZCBmcm9tXG4gMTQwOlx0XHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxuIDE0MTpcdFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxuIDE0MjpcdFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXdcbiAxNDM6XHRcdCAqIHJlZmVyZW5jZXMgaW4gKDMpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XG4gMTQ0Olx0XHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxuIDE0NTpcdFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXG4gMTQ2Olx0XHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXG4gMTQ3Olx0XHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cbiAxNDg6XHRcdCAqL1xuIDE0OTpcdFxuIDE1MDpcdFx0LS1wZWVyLVx1MDAzZWRldmljZS1cdTAwM2VudW1fcGVlcnM7XG4gMTUxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0LyogV2UgaGF2ZSBhIHNlcGFyYXRlIFwmIzM0O3JlbW92ZVwmIzM0OyBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxuIDE1NTpcdCAqIGEgcGVlciBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIHdpbGwgZXZlbnR1YWxseSBjb21lIHRvIGFuIGVuZCBhbmQgbm90IHBhc3NcbiAxNTY6XHQgKiB0aGVpciByZWZlcmVuY2Ugb250byBhbm90aGVyIGNvbnRleHQuXG4gMTU3Olx0ICovXG4gMTU4Olx0dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAxNTk6XHR7XG4gMTYwOlx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuIDE2MTpcdFx0XHRyZXR1cm47XG4gMTYyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gMTYzOlx0XG4gMTY0Olx0XHRwZWVyX21ha2VfZGVhZChwZWVyKTtcbiAxNjU6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE2NjpcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXaXJlR3VhcmQgQ29uY3VycmVuY3kgTG9naWMgQW5hbHlzaXMgZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkaXZpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgV2lyZUd1YXJkJiMzOTtzIHN5bmNocm9uaXphdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcGVlciByZW1vdmFsIGFuZCBwYWNrZXQgcXVldWVpbmcuIE15IGZpcnN0IHRob3VnaHQgaXM6IGNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBjb2RlIHdpdGggb3VyIGZ1enppbmcgc2V0dXA/IEx1Y2tpbHksIFdpcmVHdWFyZCBpcyBhIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggKGBkcml2ZXJzL25ldC93aXJlZ3VhcmRgKSwgc28gdGhhdCYjMzk7cyBhIHllcy4gSXQmIzM5O3MgZnVsbHkgZW11bGF0ZWQgYW5kIHJ1bnMgaW4gUUVNVS9HQ0Ugd2l0aG91dCBhbnkgcGh5c2ljYWwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBhbmQgc3l6a2FsbGVyIHJlZ3VsYXJseSBmdXp6ZXMgaXQgdGhyb3VnaCBuZXRsaW5rLCB1c2luZyBgR0VOTF9BRE1JTl9QRVJNYCBvciB1c2VyIG5hbWVzcGFjZXMgd2l0aCBgQ0FQX05FVF9BRE1JTmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIFdpcmVHdWFyZCwgd2l0aCBjYWxscyB0byBgc3l6X3dpcmVndWFyZF9zZXRfZGV2aWNlYCwgcnRuZXRsaW5rIGNhbGxzIGxpa2UgYFJUTV9ORVdMSU5LYCB3aXRoIGBraW5kID0gJiMzNDt3aXJlZ3VhcmQmIzM0O2Agc28gd2UgYXJlIGdvbGRlbi4KCk5vdywgYXBwbHlpbmcgdGhlIGVzdGFibGlzaGVkIHRyaWFnZSBwaGlsb3NvcGh5OiBJcyBpdCByZWFjaGFibGU/IFllcy4gQW5kIHRoaXMgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2U7IHRoZSBwYXRjaCBpcyBzd2l0Y2hpbmcgZnJvbSB3b3JrcXVldWUgZmx1c2hpbmcgdG8gYXRvbWljIHJlZmNvdW50aW5nIChgcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCAvIGB3YWtlX3VwX3ZhcmAuIFRoaXMgaXMgYSBjbGVhciBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZSwgc28gbm8gJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcmIzM0OyBoYW5kLXdhdmluZyB3aWxsIGRvLiBHaXZlbiB0aGVzZSBjcml0ZXJpYSBhbmQgdGhhdCBXaXJlR3VhcmQgaXMgYSByZWFjaGFibGUgZHJpdmVyIHZpYSBuZXRsaW5rLCB0aGUgZnV6emluZyBwb3RlbnRpYWwgaXMgZGVmaW5pdGl2ZWx5IGhpZ2ggKGBXb3J0aEZ1enppbmcgPSB0cnVlYCkuCgpOZXh0IHVwOiBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlIHRoZSBpbXBhY3RlZCBjb2RlOgoKRnJvbSB0aGUgZGlmZiwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHRvdWNoZWQgb3IgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZToKCjEuICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2A6CiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYAogICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCAoQ2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgKQoyLiAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYDoKICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCAoc3RhdGljIGlubGluZTsgY2FsbGVkIGZyb20gYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCkKICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgKHN0YXRpYyBpbmxpbmU7IGNhbGxlZCBmcm9tIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCkKMy4gIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYDoKICAgICogICBgd2dfcGFja2V0X3J4X3BvbGxgIChNb2RpZmllZCBkaXJlY3RseSB3aXRoIHRoZSBgYXRvbWljX2RlY19hbmRfdGVzdGAgYW5kIGB3YWtlX3VwX3ZhcmApCiAgICAqICAgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgCgpUaGUgcXVlc3Rpb24gaXMsIGlzIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBzdGF0aWM/IEl0IGxvb2tzIGxpa2UgaXQgaXMgKGBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKWApIGFuZCBpdCBpcyBub3QgaW5saW5lZC4gSXQgaXMgY2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBzbyBub3cgSSBoYXZlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKU28sIGxldCYjMzk7cyBjb21waWxlIGFsbCB0aGlzIGluZm9ybWF0aW9uOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczoKCiogICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2A6CiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYAogICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYAogICAgKiAgIGB3Z19wZWVyX3JlbW92ZWAKICAgICogICBgd2dfcGVlcl9yZW1vdmVfYWxsYAoqICAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNgOgogICAgKiAgIGB3Z19wYWNrZXRfcnhfcG9sbGAKICAgICogICBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAKKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jYDoKICAgICogICBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYAogICAgKiAgIGB3Z19wYWNrZXRfdHhfd29ya2VyYAogICAgKiAgIGB3Z19wYWNrZXRfY3JlYXRlX2RhdGFgCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggc3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgYXJlIGFjdHVhbCBzeW1ib2xzIGluIHZtbGludXggb3Igd2lyZWd1YXJkIG1vZHVsZSB0byBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBBZnRlciBjaGVja2luZyB0aGUgZGVmaW5pdGlvbnMgYW5kIHRoZWlyIHZpc2liaWxpdHksIHRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjM5MjpcdFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkzLVx0XHRpZiAoSVNfRVJSKHBlZXIpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MjI6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD0zNz1zdHJ1Y3Qgd2dfcGVlciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6NzA6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGB3Z19wZWVyX3JlbW92ZWAgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIHBlZXIgcmVtb3ZhbCBmdW5jdGlvbnMuIGB3Z19wZWVyX3JlbW92ZWAgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSwgdGhlIG9uZSB0aGF0JiMzOTtzIGRlc2lnbmVkIHRvIHJlbW92ZSBhIHNwZWNpZmljIHBlZXIgZnJvbSBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMg4oCTIGRlYWxsb2NhdGluZyBtZW1vcnksIHVwZGF0aW5nIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIGVuc3VyaW5nIHRoZSBpbnRlcmZhY2Ugc3RhdGUgaXMgY29uc2lzdGVudCBhZnRlciB0aGUgcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4gUmFjZSBjb25kaXRpb25zIHdpdGggaW5ib3VuZCBhbmQgb3V0Ym91bmQgcGFja2V0cyBjb3VsZCBiZSBicnV0YWwuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSByZW1vdmluZyBhIHBlZXIgdGhhdCYjMzk7cyBjdXJyZW50bHkgYWN0aXZlLiBEb2VzIGl0IGdyYWNlZnVsbHkgdGVhciBkb3duIHRoZSBjb25uZWN0aW9uPyBEb2VzIGl0IGRyb3AgcGFja2V0cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBwZWVyIGltbWVkaWF0ZWx5PyBBbmQgd2hhdCBhYm91dCBjcnlwdG9ncmFwaGljIGNvbnNpZGVyYXRpb25zPyBEb2VzIGl0IGludmFsaWRhdGUgYW55IGtleXMgb3Igc3RhdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBlZXI/Cgpgd2dfcGVlcl9yZW1vdmVfYWxsYCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIGxpa2UgdGhlIG51Y2xlYXIgb3B0aW9uLiBJdCYjMzk7cyB0aGUgJiMzNDtudWtlIHRoZSB3aG9sZSBwZWVyIGxpc3QmIzM0OyBmdW5jdGlvbi4gVGhpcyBwcm9iYWJseSBnZXRzIGNhbGxlZCBpbiBhIHNjZW5hcmlvIHdoZXJlIHRoZSBlbnRpcmUgaW50ZXJmYWNlIGlzIGJlaW5nIHRvcm4gZG93biwgb3Igd2hlbiB5b3UgbmVlZCBhIGNsZWFuIHNsYXRlLiBJJiMzOTttIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBlaXRoZXIgY2FsbHMgYHdnX3BlZXJfcmVtb3ZlYCByZXBlYXRlZGx5IGZvciBlYWNoIHBlZXIsIG9yIGl0IG9wdGltaXplcyB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBidWxrIHJlbW92YWwuIFRoZSBsYXR0ZXIgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBwZWVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyB0aGUgaXRlcmF0aW9uL3JlbW92YWwgcHJvY2Vzcy4gRG9lcyBpdCByZXR1cm4gZXJyb3JzLCBvciBkb2VzIGl0IHRyeSB0byBrZWVwIGNodWdnaW5nIGFsb25nPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgdG8gcHJldmVudCBkb3VibGUtZnJlZXMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgcGVlcnMuIE92ZXJhbGwsIHRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBlYXNpbHkgYmVjb21lIGEgcG9pbnQgb2YgZmFpbHVyZSwgb3IgYSBzb3VyY2Ugb2Ygc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1My1cdC8qIFRoZSBmaW5hbCByZWZlcmVuY2VzIGFyZSBjbGVhcmVkIGluIHRoZSBiZWxvdyBjYWxscyB0byBkZXN0cm95X3dvcmtxdWV1ZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNTQ6XHR3Z19wZWVyX3JlbW92ZV9hbGwod2cpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1NS1cdGRlc3Ryb3lfd29ya3F1ZXVlKHdnLVx1MDAzZWhhbmRzaGFrZV9yZWNlaXZlX3dxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDQtXHRpZiAoZmxhZ3MgXHUwMDI2IFdHUEVFUl9GX1JFTU9WRV9NRSkge1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo0MDU6XHRcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDYtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9NDczPWludCB3Z19zZXRfZGV2aWNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxNy1cdGlmIChmbGFncyBcdTAwMjYgV0dERVZJQ0VfRl9SRVBMQUNFX1BFRVJTKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1MTg6XHRcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUzOS1cdFx0XHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1NDA6XHRcdFx0XHR3Z19wZWVyX3JlbW92ZShwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTQxLVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTk3PXN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTctICovXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE1ODp2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTY4LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjk6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE3MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD04MD12b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODE6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjgyOnZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXaXJlR3VhcmQgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBzdG9jayBvZiB0aGVzZSBXaXJlR3VhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYW5kIGB3Z19wZWVyX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHBlZXIuY2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBpbmRpY2F0aW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGF0IHNwZWNpZmljIGZpbGUsIGxpa2VseSBwYXJ0IG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgQVBJLiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYWxzbyBpbiBgcGVlci5jYCwgc28gaXQgcHJvYmFibHkgcmVsYXRlcyB0byB0aGUgc2FtZSBwZWVyIGxpZmVjeWNsZSBwcm9jZXNzZXMuCgpNb3Zpbmcgb24sIEkgZmluZCB0aGF0IGB3Z19wYWNrZXRfcnhfcG9sbGAgaXMgbm9uLXN0YXRpYyBpbiBgcmVjZWl2ZS5jYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiByZWNlaXZpbmcgcGFja2V0cyBhbmQgaXMgYWNjZXNzaWJsZSBtb3JlIGJyb2FkbHkgdGhhbiBqdXN0IHdpdGhpbiBgcmVjZWl2ZS5jYC4gU2ltaWxhcmx5LCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCAoaW4gYHNlbmQuY2ApLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCAoaW4gYHJlY2VpdmUuY2ApLCBhbmQgYHdnX3BhY2tldF90eF93b3JrZXJgIChhbHNvIGluIGBzZW5kLmNgKSBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCBmb3Igd29ya2VyIHRocmVhZHMgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgdHJhbnNtaXNzaW9uIGFzcGVjdHMuCgpIbW0sIEkgc2hvdWxkIGNoZWNrIG9uIHRoZSBwYWNrZXQgY29uc3VtcHRpb24gYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucywganVzdCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4gU28sIGxldCBtZSBzZWUuLi4gQWgsIGB3Z19wYWNrZXRfY29uc3VtZV9kYXRhYCAqaXMqIHN0YXRpYyB3aXRoaW4gYHJlY2VpdmUuY2AuIEl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLiBJbnRlcmVzdGluZ2x5IHRob3VnaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB3Z19wYWNrZXRfcmVjZWl2ZWAsIHdoaWNoIGlzIG5vbi1zdGF0aWMhIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgZGF0YS1oYW5kbGluZyBib3VuZGFyeSB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgZ2l2ZW4gdGhlIGltcG9ydGFuY2Ugb2YgdGhvc2UgZnVuY3Rpb25zIEkgc2hvdWxkIGFsc28gY2hlY2sgYHdnX3BhY2tldF9yZWNlaXZlYCBhbmQgYHdnX3htaXRgIGp1c3QgdG8gbWFrZSBzdXJlIEkgYW0gc29saWQgaW4gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcGFja2V0X3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9Mjk9d2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKHdvcmtfZnVuY190IGZ1bmN0aW9uLCB2b2lkICpwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMxLS8qIHJlY2VpdmUuYyBBUElzOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MzI6dm9pZCB3Z19wYWNrZXRfcmVjZWl2ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zMy12b2lkIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUxMT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQzLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1NDQ6dm9pZCB3Z19wYWNrZXRfcmVjZWl2ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQ1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM9MzE1PXN0YXRpYyBpbnQgd2dfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNC1cdHNrYl9tYXJrX25vdF9vbl9saXN0KHNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM6MzI1Olx0d2dfcGFja2V0X3JlY2VpdmUod2csIHNrYik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzI2LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTcxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgVHJhbnNtaXNzaW9uIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIG92ZXJhbGwgdHJhbnNtaXNzaW9uIHByb2Nlc3MsIGFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRpZmZlcmVudCBhc3BlY3RzLiBTcGVjaWZpY2FsbHksIHdoYXQgYWJvdXQgdGhhdCBgdHJhbnNtaXRgIG9yIGB4bWl0YCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHdnX3htaXRgIHRvIGdldCBhIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB0cmFuc21pc3Npb24gaXMgaGFuZGxlZCBhdCB0aGF0IGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTExNT1zdGF0aWMgaW50IHdnX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMTM2LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjEzNzpzdGF0aWMgbmV0ZGV2X3R4X3Qgd2dfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTIzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTIzOC1cdC5uZG9fc3RvcFx0XHQ9IHdnX3N0b3AsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MjM5Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gd2dfeG1pdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NzAKCQkJCQkJCW91dHB1dDogMjQwCgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlR3VhcmQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkgc2VlOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFsbCBjbGVhcmx5IHJlbGF0ZSB0byBXaXJlR3VhcmQgcGVlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBkZXNjcmlwdGlvbi4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHM/IEkgbmVlZCB0byBlbnN1cmUgbXkgZnV6emluZyBlbnZpcm9ubWVudCBoYXMgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuIExldCBtZSBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOiBgV0lSRUdVQVJEYCBpcyB0aGUgY29yZSBjb25maWcsIGFuZCBpdCByZWxpZXMgb24gYE5FVGAgYW5kIGBJTkVUYCwgYWxvbmcgd2l0aCBzb21lIGNyeXB0b2dyYXBoeSBvcHRpb25zLiBPa2F5LCBzbyBgV0lSRUdVQVJEYCwgYE5FVGAsIGFuZCBgSU5FVGAgYXJlIHRoZSBpbXBvcnRhbnQgb25lcy4gU2luY2UgYFdJUkVHVUFSRGAgaXMgdGhlIHByaW1hcnkgZm9jdXMsIEkmIzM5O2xsIGluY2x1ZGUgaXQgYW5kIHRoZSBpbXBsaWVkIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgdHJlZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gZW5zdXJlIEkmIzM5O20gYWRoZXJpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBjb21wbGV0ZWx5LiBNeSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4gV2h5PyBCZWNhdXNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGl0c2VsZiAoYGRyaXZlcnMvbmV0L3dpcmVndWFyZGApLiBUaGlzIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzIOKAkyBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbiByZXBsYWNlcyB3b3JrcXVldWUgZmx1c2hpbmcgd2l0aCBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBldmVudCBzaWduYWxpbmcsIGRpcmVjdGx5IGltcGFjdGluZyBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWVpbmcuCgpNeSBGb2N1c1N5bWJvbHMsIGFzIG91dGxpbmVkIGluIHRoZSBwcm9tcHQsIGFyZSBleGFjdGx5IHRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGVhcmxpZXI6IGB3Z19wZWVyX2NyZWF0ZWAsIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfcnhfcG9sbGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYW5kIGB3Z19wYWNrZXRfdHhfd29ya2VyYC4gVGhlc2UgYXJlIG5vdCB1YmlxdWl0b3VzOyB0aGV5IGFyZSBhbGwgV2lyZUd1YXJkLXNwZWNpZmljLgoKRmluYWxseSwgdGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHNpbXBseSBgV0lSRUdVQVJEYCBhbmQgYElORVRgLiBUaGlzIGlzIGFsbCBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBkaXJlY3QuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIHN1Ym1pdCBteSBmaW5kaW5ncyBhbmQgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGVlcl9jcmVhdGUmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0lSRUdVQVJEJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZWVyX3JlbW92ZV9hZnRlcl9kZWFkJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfcnhfcG9sbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3R4X3dvcmtlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdXNlZCBkdXJpbmcgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24uIEluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGRldmljZS13aWRlIHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3Egd29ya3F1ZXVlcyBtdWx0aXBsZSB0aW1lcywgaXQgaW50cm9kdWNlcyBhIHBlci1wZWVyIGF0b21pYyByZWZjb3VudCAocGFja2V0X2NyeXB0X3BlbmRpbmcpIHRyYWNrZWQgYWNyb3NzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgYW5kIHdhaXRzIGZvciBpdCB3aXRoIHdhaXRfdmFyX2V2ZW50KCksIGZvbGxvd2VkIGJ5IHRhcmdldGVkIGZsdXNoX3dvcmsoKSBjYWxscy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciByZWFkaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyB0aHJvdWdoIHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rIGludGVyZmFjZXMuIENvbmN1cnJlbmN5IGFuZCBxdWV1ZWluZyByZWZhY3RvcmluZ3MgbGlrZSB0aGlzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciBoYW5ncyBkdXJpbmcgcGVlciByZW1vdmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTdkM2IwZjEyMzg3YzRiN2NkNTkxMjZlMDU0MDZhYzE2OTFhY2U0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2xvY2tkZXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlOwogc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTsKQEAgLTQ5LDYgJiM0Mzs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywKIAlJTklUX1dPUksoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7dHhfcXVldWUpOwogCXdnX3ByZXZfcXVldWVfaW5pdCgmYW1wO3BlZXItJmd0O3J4X3F1ZXVlKTsKJiM0MzsJLyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi8KJiM0MzsJYXRvbWljX3NldCgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTsKIAlyd2xvY2tfaW5pdCgmYW1wO3BlZXItJmd0O2VuZHBvaW50X2xvY2spOwogCWtyZWZfaW5pdCgmYW1wO3BlZXItJmd0O3JlZmNvdW50KTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7cGVlci0mZ3Q7c3RhZ2VkX3BhY2tldF9xdWV1ZSk7CkBAIC0xMDUsMjggJiM0MzsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKIAkgKi8KIAl3Z190aW1lcnNfc3RvcChwZWVyKTsKIAotCS8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJiMzOTt0Ci0JICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UmIzM5O3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5Ci0JICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbAotCSAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBubwotCSAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy4KJiM0MzsJLyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZQomIzQzOwkgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmcKJiM0MzsJICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFgKJiM0MzsJICogcGFja2V0cyB0byBzY2hlZHVsZSB0aGVpciBzZXJpYWwgd29yayBhbmQgUlggcGFja2V0cyB0byBsZWF2ZSByeF9xdWV1ZS4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLjVjZTU3NTY1YzhmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCmluZGV4IDgyNGJiZWZjZTYxYzcuLmJiMzVlMzIwNTQ5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYwpAQCAtNDc2LDkgJiM0Mzs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIAogbmV4dDoKIAkJd2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpOwotCQl3Z19wZWVyX3B1dChwZWVyKTsKIAkJaWYgKHVubGlrZWx5KGZyZWUpKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwomIzQzOwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiYjNDM7CQl3Z19wZWVyX3B1dChwZWVyKTsKIAogCQlpZiAoJiM0MzsmIzQzO3dvcmtfZG9uZSAmZ3Q7PSBidWRnZXQpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgV2lyZUd1YXJkIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBhbmQgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AsIGBwZWVyLmhgLCBgcXVldWVpbmcuaGAsIGFuZCBgcmVjZWl2ZS5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgdG91Y2hlcyBjb3JlIFdpcmVHdWFyZCBmdW5jdGlvbmFsaXR5LgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgZmx1c2hfd29ya3F1ZXVlYCBvbiBzaGFyZWQgd29ya3F1ZXVlcyAoYHBhY2tldF9jcnlwdF93cWAsIGBoYW5kc2hha2Vfc2VuZF93cWApIHRvIGVuc3VyZSBubyByZWZlcmVuY2VzIHJlbWFpbmVkIGFmdGVyIGEgcGVlciB3YXMgcmVtb3ZlZC4gVGhpcyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZHVlIHRvIGxhdGVuY3kgb3Igc3RhcnZhdGlvbiwgZXNwZWNpYWxseSB3aXRoIG1hbnkgcGVlcnMgb3IgaW50ZXJmYWNlcy4gTWF5YmUgaXQgd2FzIGFuIGludGVudGlvbmFsIGRlc2lnbiBjaG9pY2UgdG8gYXZvaWQgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBmaWVsZCBpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgKGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGApLiBJdCBpcyBkZWNyZW1lbnRlZCB3aGVuIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBvciB3aGVuIHRoZSBwZWVyIGlzIHJlbW92ZWQgKGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgYW5kIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCkuIFRoZSBgd2FpdF92YXJfZXZlbnRgIGluIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBpcyBub3cgYmFzZWQgb24gdGhpcyBhdG9taWMgY291bnRlci4gSW5zdGVhZCBvZiBzaW1wbHkgZmx1c2hpbmcgdGhlIHdvcmtxdWV1ZXMsIHRoZSBjb2RlIG5vdyB3YWl0cyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byByZWFjaCB6ZXJvLiBUaGlzIHNlZW1zIGxpa2UgYW4gYXR0ZW1wdCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB3b3JrcXVldWUgZmx1c2hlcyBieSB3YWl0aW5nIG9ubHkgb24gd2hhdCYjMzk7cyBhY3RpdmUuCgpUaGlzIHNvdW5kcyBsaWtlIGEgd2VsbC1pbnRlbnRpb25lZCBvcHRpbWl6YXRpb24sIGJ1dCBpdCYjMzk7cyBhIGJpdCBjb21wbGV4LiBUaGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHRoZSB3YWl0IGNvbmRpdGlvbiBpbnRyb2R1Y2UgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCBtZW1vcnkgcmVsZWFzZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwZWVyIHJlbW92YWwuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBjb25jZXJuaW5nIGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIGFuZCB0aGVzZSBjaGFuZ2VzIHRvdWNoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcy4KClRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGFyb3VuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gQSBxdWljayBncmVwcGVyIHNlYXJjaCBvciByZWFkaW5nIHRob3NlIGZpbGVzIG1pZ2h0IHJldmVhbCBtb3JlIGRldGFpbHMgYW5kIGhlbHAgbWUgZXZhbHVhdGUgdGhpcyBjb2RlJiMzOTtzIG51YW5jZXMuCgoqKk15IGluc3RpbmN0IGlzIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZXJlJiMzOTtzIGEgcmVhc29uYWJsZSByaXNrIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgYSBmb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBiZSBhYmxlIHRvIGNhdGNoIGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIHJlZmFjdG9yaW5nIGNoYW5nZXMuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X2NyeXB0X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01My1cdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjU0Olx0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNTUtXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExNS1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTY6XHRhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTc6XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTg6XHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTM3PXN0cnVjdCB3Z19wZWVyIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTM5LVx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo0MDpcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC00MS1cdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNTM9c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE2NC1cdFx0cmV0dXJuIC1FTk9TUEM7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNjU6XHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTY2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE3Nz1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODYtXHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxODc6XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE4ODpcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODktXHR3Z19wZWVyX3B1dChwZWVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTQzOD1pbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDgwLVx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgxOlx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgyOlx0XHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00ODMtXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgd2dfcGVlcmAgQWxsb2NhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBgd2dfcGVlcmAgc3RydWN0dXJlIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpdHMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGxpZmVjeWNsZSB3aXRoaW4gV2lyZUd1YXJkLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBzbyB0aGlzIHNob3VsZCBiZSBhIHF1aWNrIGRlZXAgZGl2ZS4KCk15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgZnVuZGFtZW50YWwgZnVuY3Rpb25hbGl0eSBpcyBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHJlbGF0ZWQgdG8gcGVlciBtYW5hZ2VtZW50LCBhbmQgdGh1cywgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgYW5kIGV2ZW50dWFsIGRlc3RydWN0aW9uIG9mIHRoZXNlIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG4gIDIxOlx0XG4gIDIyOlx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuICAyMzpcdFx0XHRcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcbiAgMjQ6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXG4gIDI1Olx0e1xuICAyNjpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXI7XG4gIDI3Olx0XHRpbnQgcmV0ID0gLUVOT01FTTtcbiAgMjg6XHRcbiAgMjk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2d2ctXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcbiAgMzA6XHRcbiAgMzE6XHRcdGlmICh3Zy1cdTAwM2VudW1fcGVlcnMgXHUwMDNlPSBNQVhfUEVFUlNfUEVSX0RFVklDRSlcbiAgMzI6XHRcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiAgMzM6XHRcbiAgMzQ6XHRcdHBlZXIgPSBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKTtcbiAgMzU6XHRcdGlmICh1bmxpa2VseSghcGVlcikpXG4gIDM2Olx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDM3Olx0XHRpZiAodW5saWtlbHkoZHN0X2NhY2hlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpKVxuICAzODpcdFx0XHRnb3RvIGVycjtcbiAgMzk6XHRcbiAgNDA6XHRcdHBlZXItXHUwMDNlZGV2aWNlID0gd2c7XG4gIDQxOlx0XHR3Z19ub2lzZV9oYW5kc2hha2VfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWhhbmRzaGFrZSwgXHUwMDI2d2ctXHUwMDNlc3RhdGljX2lkZW50aXR5LFxuICA0MjpcdFx0XHRcdFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XG4gIDQzOlx0XHRwZWVyLVx1MDAzZWludGVybmFsX2lkID0gYXRvbWljNjRfaW5jX3JldHVybihcdTAwMjZwZWVyX2NvdW50ZXIpO1xuICA0NDpcdFx0cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XG4gIDQ1Olx0XHR3Z19jb29raWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWxhdGVzdF9jb29raWUpO1xuICA0NjpcdFx0d2dfdGltZXJzX2luaXQocGVlcik7XG4gIDQ3Olx0XHR3Z19jb29raWVfY2hlY2tlcl9wcmVjb21wdXRlX3BlZXJfa2V5cyhwZWVyKTtcbiAgNDg6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XG4gIDQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XG4gIDUwOlx0XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gIDUxOlx0XHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gIDUyOlx0XHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4gIDUzOlx0XHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuICA1NDpcdFx0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiAgNTU6XHRcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gIDU2Olx0XHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gIDU3Olx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG4gIDU4Olx0XHR3Z19ub2lzZV9yZXNldF9sYXN0X3NlbnRfaGFuZHNoYWtlKFx1MDAyNnBlZXItXHUwMDNlbGFzdF9zZW50X2hhbmRzaGFrZSk7XG4gIDU5Olx0XHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcdTAwMjZwZWVyLVx1MDAzZW5hcGkuc3RhdGUpO1xuICA2MDpcdFx0bmV0aWZfbmFwaV9hZGQod2ctXHUwMDNlZGV2LCBcdTAwMjZwZWVyLVx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcbiAgNjE6XHRcdG5hcGlfZW5hYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gIDYyOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0LCBcdTAwMjZ3Zy1cdTAwM2VwZWVyX2xpc3QpO1xuICA2MzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVlci1cdTAwM2VhbGxvd2VkaXBzX2xpc3QpO1xuICA2NDpcdFx0d2dfcHVia2V5X2hhc2h0YWJsZV9hZGQod2ctXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xuICA2NTpcdFx0JiM0MzsmIzQzO3dnLVx1MDAzZW51bV9wZWVycztcbiAgNjY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBQZWVyICVsbHUgY3JlYXRlZFxcblwmIzM0Oywgd2ctXHUwMDNlZGV2LVx1MDAzZW5hbWUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpO1xuICA2NzpcdFx0cmV0dXJuIHBlZXI7XG4gIDY4Olx0XG4gIDY5Olx0ZXJyOlxuICA3MDpcdFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xuICA3MTpcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0X21heWJlX3plcm8oc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gIDc1Olx0e1xuICA3NjpcdFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXG4gIDc3Olx0XHRcdFx0IFwmIzM0O1Rha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcJiMzNDspO1xuICA3ODpcdFx0aWYgKHVubGlrZWx5KCFwZWVyIHx8ICFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KSkpXG4gIDc5Olx0XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFBlZXIgSW5pdGlhbGl6YXRpb24gYW5kIFJlbW92YWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHBlZXIgbWFuYWdlbWVudCBjb2RlLiBGaXJzdCB0aGluZywgSSYjMzk7bSBub3RpbmcgdGhlIGV4cGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIG5ldyBgcGVlcmAgc3RydWN0dXJlIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBleHBlY3RlZCwgYXMgd2UmIzM5O3JlIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuIEdvb2QuIFdlJiMzOTtyZSB6ZXJvaW5nIHRoZSBjYWNoZSwgd2hpY2ggaXMgYSBzb2xpZCBpbml0aWFsIHNhZmV0eSBtZWFzdXJlLCB3aGljaCBnaXZlcyB1cyBhbiBlYXN5IHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcsIGFuZCBpdCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGEgbmV3IGZpZWxkIGBwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdXNpbmcgYGF0b21pY19zZXRgIHRvIDEsIEkgc2VlLiBBbHdheXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG5ldyBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCBhbnkgcmVhZC1iZWZvcmUtd3JpdGUgb3IgcmFjZSBjb25kaXRpb25zIGxhdGVyLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSBvdXIgY2xlYW51cCBwcm9jZXNzIGlzIHNhbmUsIEkmIzM5O20gbW92aW5nIG9uIHRvIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBoYW5kbGVzIHRoZSBsaWZlY3ljbGUgYW5kIGRlYWxsb2NhdGlvbiBvZiBhIGRlYWQgcGVlci4gV2UgYWx3YXlzIGhhdmUgdG8gY2hlY2sgdGhlIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XG4gIDkxOlx0XHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGFsbG93IGp1bXBpbmcgY29udGV4dHMgYWZ0ZXIuICovXG4gIDkyOlx0XHRXUklURV9PTkNFKHBlZXItXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XG4gIDkzOlx0XG4gIDk0Olx0XHQvKiBUaGUgY2FsbGVyIG11c3Qgbm93IHN5bmNocm9uaXplX25ldCgpIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LiAqL1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA5ODpcdHtcbiAgOTk6XHRcdFdBUk5fT04oIXBlZXItXHUwMDNlaXNfZGVhZCk7XG4gMTAwOlx0XG4gMTAxOlx0XHQvKiBObyBtb3JlIGtleXBhaXJzIGNhbiBiZSBjcmVhdGVkIGZvciB0aGlzIHBlZXIsIHNpbmNlIGlzX2RlYWQgcHJvdGVjdHNcbiAxMDI6XHRcdCAqIGFkZF9uZXdfa2V5cGFpciwgc28gd2UgY2FuIG5vdyBkZXN0cm95IGV4aXN0aW5nIG9uZXMuXG4gMTAzOlx0XHQgKi9cbiAxMDQ6XHRcdHdnX25vaXNlX2tleXBhaXJzX2NsZWFyKFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMpO1xuIDEwNTpcdFxuIDEwNjpcdFx0LyogRGVzdHJveSBhbGwgb25nb2luZyB0aW1lcnMgdGhhdCB3ZXJlIGluLWZsaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gMTA3Olx0XHQgKiB0aGlzIGZ1bmN0aW9uLlxuIDEwODpcdFx0ICovXG4gMTA5Olx0XHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiAxMTA6XHRcbiAxMTE6XHRcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbiAxMTI6XHRcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xuIDExMzpcdFx0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbiAxMTQ6XHRcdCAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuXG4gMTE1Olx0XHQgKi9cbiAxMTY6XHRcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTE3Olx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuIDExODpcdFx0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuIDExOTpcdFxuIDEyMDpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiAxMjE6XHRcbiAxMjI6XHRcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIDEyMzpcdFx0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gMTI0Olx0XHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIDEyNTpcdFx0ICovXG4gMTI2Olx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIDEyNzpcdFxuIDEyODpcdFx0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4gMTI5Olx0XHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gMTMwOlx0XHQgKi9cbiAxMzE6XHRcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gMTMyOlx0XG4gMTMzOlx0XHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIDEzNDpcdFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbiAxMzU6XHRcdCAqIHJldHVybmluZywgMikgZnJvbSB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWRcbiAxMzY6XHRcdCAqIGFuZCByZXR1cm5pbmcsIDMpIGZyb20gd2dfcmVjZWl2ZV9oYW5kc2hha2VfcGFja2V0KCkgYWZ0ZXIgYSBwb2ludFxuIDEzNzpcdFx0ICogd2hlcmUgaXQgaGFzIHByb2Nlc3NlZCBhbiBpbmNvbWluZyBoYW5kc2hha2UgcGFja2V0LCBidXQgd2hlcmVcbiAxMzg6XHRcdCAqIGFsbCBjYWxscyB0byBwYXNzIGl0IG9mZiB0byB0aW1lcnMgZmFpbHMgYmVjYXVzZSBvZiBpc19kZWFkLiBXZSB3b24mIzM5O3RcbiAxMzk6XHRcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbVxuIDE0MDpcdFx0ICogYWxsb3dlZGlwczsgd2Ugd29uJiMzOTt0IGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDIpIGV2ZW50dWFsbHksIGJlY2F1c2VcbiAxNDE6XHRcdCAqIHdnX2luZGV4X2hhc2h0YWJsZV9sb29rdXAgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwsIHNpbmNlIHdlIHJlbW92ZWRcbiAxNDI6XHRcdCAqIGFsbCBleGlzdGluZyBrZXlwYWlycyBhbmQgbm8gbW9yZSBjYW4gYmUgY3JlYXRlZDsgd2Ugd29uJiMzOTt0IGhhdmUgbmV3XG4gMTQzOlx0XHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJiMzOTtyZSByZW1vdmVkIGZyb20gdGhlIHB1YmtleVxuIDE0NDpcdFx0ICogaGFzaCB0YWJsZSwgd2hpY2ggYWxsb3dzIGZvciBhIG1heGltdW0gb2Ygb25lIGhhbmRzaGFrZSByZXNwb25zZSxcbiAxNDU6XHRcdCAqIHZpYSB0aGUgc3RpbGwtdW5jbGVhcmVkIGluZGV4IGhhc2h0YWJsZSBlbnRyeSwgYnV0IG5vdCBtb3JlIHRoYW4gb25lLFxuIDE0NjpcdFx0ICogYW5kIGluIHdnX2Nvb2tpZV9tZXNzYWdlX2NvbnN1bWUsIHRoZSBsb29rdXAgZXZlbnR1YWxseSBnZXRzIGEgcGVlclxuIDE0NzpcdFx0ICogd2l0aCBhIHJlZmNvdW50IG9mIHplcm8sIHNvIG5vIG5ldyByZWZlcmVuY2UgaXMgdGFrZW4uXG4gMTQ4Olx0XHQgKi9cbiAxNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBRdWV1ZWluZyBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyB3aXRoIHRoZSBxdWV1ZWluZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHF1ZXVlaW5nLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIHByb2JhYmx5IGFyb3VuZCBsaW5lIDE1MCB0byAyMDAuIFRoaXMgaXMgdHlwaWNhbGx5IHdoZXJlIHlvdSYjMzk7ZCBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgY3JpdGljYWwgcGF0aCBvcGVyYXRpb25zIOKAkyB0aGUgZW5xdWV1ZS9kZXF1ZXVlIG1ldGhvZHMsIGludGVybmFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBvciBtYXliZSBldmVuIHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBxdWV1ZSYjMzk7cyBzdGF0ZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdHF1ZXVlLVx1MDAzZXBlZWtlZCA9IE5VTEw7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiAxNTQ6XHRcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbiAxNTU6XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSlcbiAxNTY6XHR7XG4gMTU3Olx0XHRpbnQgY3B1O1xuIDE1ODpcdFxuIDE1OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBQQUNLRVRfU1RBVEVfVU5DUllQVEVEKTtcbiAxNjA6XHRcdC8qIFdlIGZpcnN0IHF1ZXVlIHRoaXMgdXAgZm9yIHRoZSBwZWVyIGluZ2VzdGlvbiwgYnV0IHRoZSBjb25zdW1lclxuIDE2MTpcdFx0ICogd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIENSWVBURUQgb3IgREVBRCBiZWZvcmUuXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIDE2NDpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAxNjU6XHRcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTY2Olx0XG4gMTY3Olx0XHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIDE2ODpcdFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuIDE2OTpcdFx0ICovXG4gMTcwOlx0XHRjcHUgPSB3Z19jcHVtYXNrX25leHRfb25saW5lKFx1MDAyNmRldmljZV9xdWV1ZS1cdTAwM2VsYXN0X2NwdSk7XG4gMTcxOlx0XHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcdTAwMjZkZXZpY2VfcXVldWUtXHUwMDNlcmluZywgc2tiKSkpXG4gMTcyOlx0XHRcdHJldHVybiAtRVBJUEU7XG4gMTczOlx0XHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFx1MDAyNnBlcl9jcHVfcHRyKGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXIsIGNwdSktXHUwMDNld29yayk7XG4gMTc0Olx0XHRyZXR1cm4gMDtcbiAxNzU6XHR9XG4gMTc2Olx0XG4gMTc3Olx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTc4Olx0e1xuIDE3OTpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTgwOlx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE4MTpcdFx0ICovXG4gMTgyOlx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE4MzpcdFxuIDE4NDpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMTg1Olx0XHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gMTg2Olx0XHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gMTg3Olx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiAxODg6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gMTg5Olx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBXaXJlR3VhcmQgUlggcGF0aCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gcmVjZWl2ZWQgcGVyLXBlZXIuIFdlJiMzOTt2ZSBnb3QgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgIHRvIGNvbnNpZGVyLiBOb3csIHdoYXQgZG9lcyB0aGF0IGZ1bmN0aW9uICpkbyo/IEFuZCB3aGF0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgd2l0aGluIHRoZSBwcm9jZXNzaW5nIGZsb3c/IFdoZXJlIGRvZXMgdGhlIHBhY2tldCBnbz8gV2hhdCBoYXBwZW5zIHRvIHRoZSBkYXRhPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uPyBJIG5lZWQgdG8gdHJhY2sgdGhlIHBhY2tldCBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgYW5kIGlkZW50aWZ5IGFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGhhdCB0aGUgUlgmIzM5O2QgcGFja2V0IHVuZGVyZ29lcy4gVGhpbmtpbmcgYWJvdXQgcXVldWVpbmcgc3RyYXRlZ2llcywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGlzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkyOlx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG4gMTkzOlx0e1xuIDE5NDpcdFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXG4gMTk1Olx0XHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxuIDE5NjpcdFx0ICovXG4gMTk3Olx0XHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gMjAwOlx0XHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMjAxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAyMDI6XHR9XG4gMjAzOlx0XG4gMjA0Olx0I2lmZGVmIERFQlVHXG4gMjA1Olx0Ym9vbCB3Z19wYWNrZXRfY291bnRlcl9zZWxmdGVzdCh2b2lkKTtcbiAyMDY6XHQjZW5kaWZcbiAyMDc6XHRcbiAyMDg6XHQjZW5kaWYgLyogX1dHX1FVRVVFSU5HX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gV2lyZUd1YXJkIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgV2lyZUd1YXJkIHBhY2tldCByZWNlcHRpb24gY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxvd2VzdCBsZXZlbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHdnX3BhY2tldF9yeF9wb2xsYCBpbiBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIHBvbGxpbmcgbWVjaGFuaXNtIGZvciByZWNlaXZpbmcgcGFja2V0cywgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIHNob3VsZCBiZWdpbi4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIGhvdyB0aGUgZGF0YSBmbG93cyBpbiBhbmQgaXMgcHJvY2Vzc2VkIGF0IHRoZSBrZXJuZWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0XHRcdGlmICh1bmxpa2VseSghY291bnRlcl92YWxpZGF0ZShcdTAwMjZrZXlwYWlyLVx1MDAzZXJlY2VpdmluZ19jb3VudGVyLFxuIDQ2MjpcdFx0XHRcdFx0XHQgICAgICAgUEFDS0VUX0NCKHNrYiktXHUwMDNlbm9uY2UpKSkge1xuIDQ2MzpcdFx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IFBhY2tldCBoYXMgaW52YWxpZCBub25jZSAlbGx1IChtYXggJWxsdSlcXG5cJiMzNDssXG4gNDY0Olx0XHRcdFx0XHRcdCAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbiA0NjU6XHRcdFx0XHRcdFx0ICAgIFBBQ0tFVF9DQihza2IpLVx1MDAzZW5vbmNlLFxuIDQ2NjpcdFx0XHRcdFx0XHQgICAgUkVBRF9PTkNFKGtleXBhaXItXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIuY291bnRlcikpO1xuIDQ2NzpcdFx0XHRcdGdvdG8gbmV4dDtcbiA0Njg6XHRcdFx0fVxuIDQ2OTpcdFxuIDQ3MDpcdFx0XHRpZiAodW5saWtlbHkod2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKFx1MDAyNmVuZHBvaW50LCBza2IpKSlcbiA0NzE6XHRcdFx0XHRnb3RvIG5leHQ7XG4gNDcyOlx0XG4gNDczOlx0XHRcdHdnX3Jlc2V0X3BhY2tldChza2IsIGZhbHNlKTtcbiA0NzQ6XHRcdFx0d2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKHBlZXIsIHNrYiwgXHUwMDI2ZW5kcG9pbnQpO1xuIDQ3NTpcdFx0XHRmcmVlID0gZmFsc2U7XG4gNDc2Olx0XG4gNDc3Olx0bmV4dDpcbiA0Nzg6XHRcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpO1xuIDQ3OTpcdFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gNDgwOlx0XHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIDQ4MTpcdFx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbiA0ODI6XHRcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiA0ODM6XHRcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gNDg0Olx0XG4gNDg1Olx0XHRcdGlmICgmIzQzOyYjNDM7d29ya19kb25lIFx1MDAzZT0gYnVkZ2V0KVxuIDQ4NjpcdFx0XHRcdGJyZWFrO1xuIDQ4NzpcdFx0fVxuIDQ4ODpcdFxuIDQ4OTpcdFx0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0KVxuIDQ5MDpcdFx0XHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcbiA0OTE6XHRcbiA0OTI6XHRcdHJldHVybiB3b3JrX2RvbmU7XG4gNDkzOlx0fVxuIDQ5NDpcdFxuIDQ5NTpcdHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiA0OTY6XHR7XG4gNDk3Olx0XHRzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aWNvcmVfd29ya2VyLFxuIDQ5ODpcdFx0XHRcdFx0XHRcdCB3b3JrKS1cdTAwM2VwdHI7XG4gNDk5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk3OAoJCQkJCQkJb3V0cHV0OiAzMTMKCQkJCQkJCXRob3VnaHRzOiAxMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIFN5bmNocm9uaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCAqbmVlZHMqIEtNU0FOLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuIEl0IHNlZW1zIHRvIGJlIHJld29ya2luZyB0aGUgcGVlciB0ZWFyZG93biBhbmQgcXVldWVpbmcgc3luY2hyb25pemF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlKClgIGNhbGxzIHdpdGggYSBwZXItcGVlciBhdG9taWMgY291bnRlciAoYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudCgpYCwgZm9sbG93ZWQgYnkgZm9jdXNlZCBgZmx1c2hfd29yaygpYCBjYWxscy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBEb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBMZXQmIzM5O3MgYW5hbHl6ZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBuZXcgYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBDcml0aWNhbGx5LCBgd2dfcGVlcl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCAqYW5kKiBgYXRvbWljX3NldCgpYC4gVGhhdCYjMzk7cyBnb29kLiBJdCBpbmRpY2F0ZXMgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgY2hhbmNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGZvciB0aGF0IHZhcmlhYmxlLiBJdCBkb2VzICpub3QqIGludHJvZHVjZSBjaGFuZ2VzIHRoYXQgdG91Y2ggYW55IHVzZXItc3BhY2UtZmFjaW5nIHN0cnVjdHVyZXMgKG5ldGxpbmssIGlvY3RsLCBldGMuKSwgb3IgbW9kaWZpZXMgcGFja2V0IGJ1ZmZlciBkYXRhIGxlbmd0aCwgYm91bmRzIGNoZWNrcyBvciBvZmZzZXRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0YWNrIGJ1ZmZlcnMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0ICphcmVuJiMzOTt0KiBpbml0aWFsaXplZCwgYW5kIEkgY2FyZWZ1bGx5IHJldmlldyB0aGUgbGlzdGVkIHJ1bGVzIGFuZCBleGFtcGxlcy4KClRoZSBwcmltYXJ5IHJpc2tzIGhlcmUgc2VlbSB0byBiZSBjb25jdXJyZW5jeSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHBlZXIgcmVtb3ZhbCwgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiBhIHBhY2tldCBpcyBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHBlZXImIzM5O3MgYmVlbiBmcmVlZCAoS0FTQU4gd2lsbCBuYWlsIHRob3NlKSwgb3IgZGVhZGxvY2tzIGlmIHRoZSBjb3VudGVyIG5ldmVyIHJlYWNoZXMgemVybyAodGhlIGh1bmcgdGFzayBkZXRlY3RvciBvciBsb2NrZGVwIHdpbGwgZ3JhYiB0aGF0KS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm9uZSBvZiB0aGVzZSByZWxhdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoZSBrZXkgZGlzdGluY3Rpb24gYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gaXMgdGhhdCBLQVNBTiBhbHJlYWR5IGNhdGNoZXMgYSB3aG9sZSBob3N0IG9mIGJ1Z3MsIGFuZCBJIHNob3VsZCBvbmx5IGJlIGNvbnNpZGVyaW5nIEtNU0FOIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiAqdW5pbml0aWFsaXplZCogcmVhZHMgb3IgbGVha3MsIGFzIHRoZSBydWxlcyBtYWtlIGNsZWFyLiBTaW5jZSBhbGwgYWRkZWQgc3RydWN0dXJlcy9maWVsZHMgYXJlIHplcm9lZCBvciBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UsIEtNU0FOIGlzIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gVGhlcmVmb3JlLCBLQVNBTiBwbHVzIGxvY2tkZXAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQuCgpTbywgdGhlIGNvbmNsdXNpb24gaXM6CgotICAgYE5lZWRzS01TQU5gOiBgZmFsc2VgCi0gICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBieSByZXBsYWNpbmcgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzIHdpdGggYW4gYXRvbWljIHJlZmNvdW50IChgcGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50KClgIHBhaXJlZCB3aXRoIGBmbHVzaF93b3JrKClgIG9uIHBlZXItb3duZWQgd29ya3MuIFRoZSBvbmx5IG5ldyBmaWVsZCwgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpbiBgc3RydWN0IHdnX3BlZXJgLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGBhdG9taWNfc2V0KClgLiBObyBidWZmZXJzLCBwYWNrZXQgcGF5bG9hZHMsIG9yIHVzZXItZmFjaW5nIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGUgdG8gY29uY3VycmVuY3kgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbjsgYW55IGJ1Z3Mgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUvbGlmZXRpbWUgaXNzdWVzIChkZXRlY3RlZCBieSBLQVNBTi9yZWZjb3VudCBkZWJ1Z2dpbmcpIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIChkZXRlY3RlZCBieSBsb2NrZGVwL2h1bmcgdGFzayB0aW1lb3V0KS4gS01TQU4gcHJvdmlkZXMgbm8gYWRkaXRpb25hbCBjb3ZlcmFnZSBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gSW5zdGVhZCBvZiBjYWxsaW5nIGZsdXNoX3dvcmtxdWV1ZSgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzaGFyZWQgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyAocGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSksIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBvbiBzdHJ1Y3Qgd2dfcGVlciBhbmQgd2FpdHMgb24gaXQgdmlhIHdhaXRfdmFyX2V2ZW50KCkgYmVmb3JlIHBlcmZvcm1pbmcgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIG9uIHBlZXItb3duZWQgd29yayBzdHJ1Y3R1cmVzLlxuXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XG4xLiBUaGUgbmV3IHN0cnVjdCBtZW1iZXIgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBjb250YWluZWQgd2l0aGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIHdoaWNoIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYHdnX3BlZXJfY3JlYXRlKClgLCBhbmQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5ldGxpbmssIHNvY2tldCwgaW9jdGwsIGV0Yy4pIGlzIGFkZGVkIG9yIG1vZGlmaWVkLlxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBzeW5jaHJvbml6YXRpb24vbGlmZXRpbWUgaXNzdWVzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBpZiBwZWVyIHRlYXJkb3duIGZpbmlzaGVzIHByZW1hdHVyZWx5LCBvciBkZWFkbG9ja3MvaHVuZyB0YXNrcyBpZiB0aGUgd2FpdF92YXJfZXZlbnQgY29uZGl0aW9uIGlzIG5ldmVyIHNhdGlzZmllZCkuIFN1Y2ggaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgUkVGQ09VTlQsIGFuZCBMT0NLREVQL2h1bmcgdGFzayBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOC4zNTI5MjIxMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI0OTMyNjA4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZFwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGVlcl9jcmVhdGVcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXJlR3VhcmQgcGVlciB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbG9naWMuIEluc3RlYWQgb2YgY2FsbGluZyBmbHVzaF93b3JrcXVldWUoKSBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2hhcmVkIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgKHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3EpLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgb24gc3RydWN0IHdnX3BlZXIgYW5kIHdhaXRzIG9uIGl0IHZpYSB3YWl0X3Zhcl9ldmVudCgpIGJlZm9yZSBwZXJmb3JtaW5nIHRhcmdldGVkIGZsdXNoX3dvcmsoKSBvbiBwZWVyLW93bmVkIHdvcmsgc3RydWN0dXJlcy5cXG5cXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XFxuMS4gVGhlIG5ldyBzdHJ1Y3QgbWVtYmVyIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgY29udGFpbmVkIHdpdGhpbiBgc3RydWN0IHdnX3BlZXJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGB3Z19wZWVyX2NyZWF0ZSgpYCwgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgYXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChuZXRsaW5rLCBzb2NrZXQsIGlvY3RsLCBldGMuKSBpcyBhZGRlZCBvciBtb2RpZmllZC5cXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgc3luY2hyb25pemF0aW9uL2xpZmV0aW1lIGlzc3VlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgaWYgcGVlciB0ZWFyZG93biBmaW5pc2hlcyBwcmVtYXR1cmVseSwgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgaWYgdGhlIHdhaXRfdmFyX2V2ZW50IGNvbmRpdGlvbiBpcyBuZXZlciBzYXRpc2ZpZWQpLiBTdWNoIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIFJFRkNPVU5ULCBhbmQgTE9DS0RFUC9odW5nIHRhc2sgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdXNlZCBkdXJpbmcgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24uIEluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGRldmljZS13aWRlIHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3Egd29ya3F1ZXVlcyBtdWx0aXBsZSB0aW1lcywgaXQgaW50cm9kdWNlcyBhIHBlci1wZWVyIGF0b21pYyByZWZjb3VudCAocGFja2V0X2NyeXB0X3BlbmRpbmcpIHRyYWNrZWQgYWNyb3NzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgYW5kIHdhaXRzIGZvciBpdCB3aXRoIHdhaXRfdmFyX2V2ZW50KCksIGZvbGxvd2VkIGJ5IHRhcmdldGVkIGZsdXNoX3dvcmsoKSBjYWxscy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciByZWFkaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyB0aHJvdWdoIHJ0bmV0bGluayBhbmQgZ2VuZXRsaW5rIGludGVyZmFjZXMuIENvbmN1cnJlbmN5IGFuZCBxdWV1ZWluZyByZWZhY3RvcmluZ3MgbGlrZSB0aGlzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciBoYW5ncyBkdXJpbmcgcGVlciByZW1vdmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOC4zNTI5Mjg0MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMyNzI4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2NrZGVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcXG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcXG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xcbiBcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlKTtcXG4gXFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuK1xcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcXG4gXFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XFxuQEAgLTEwNSwyOCArMTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuIFxcdCAqL1xcbiBcXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcXG4gXFxuLVxcdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJ3RcXG4tXFx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UncyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcXG4tXFx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxcbi1cXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cXG4tXFx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxcbitcXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXFxuK1xcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xcbitcXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBUWFxcbitcXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxcbiBcXHQgKi9cXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuK1xcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4rXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gXFxuLVxcdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXFxuLVxcdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuLVxcdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xcbi1cXHRmbHVzaF93b3JrcXVldWUocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi1cXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4tXFx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuK1xcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdCAqL1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIFxcbi1cXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxcbi1cXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxcbitcXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcXG4rXFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiBcXHQgKi9cXG4tXFx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIFxcbiBcXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xcbiBcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xcbiBzdHJ1Y3Qgd2dfcGVlciB7XFxuIFxcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xcbitcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xcbiBcXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xcbiBcXHRib29sIGlzX2RlYWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZQQUNLRVRfUEVFUihza2IpLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIFxcbiBcXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxcbiBcXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXFxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIFxcdFxcdCAgICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiBcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcXG5pbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXFxuQEAgLTQ3Niw5ICs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4gXFxuIG5leHQ6XFxuIFxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTtcXG4tXFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShmcmVlKSlcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gXFxuIFxcdFxcdGlmICgrK3dvcmtfZG9uZSBcXHUwMDNlPSBidWRnZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0MzozOS42ODY5MDI2NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk4NTI5OTQzNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhN2QzYjBmMTIzODdjNGI3Y2Q1OTEyNmUwNTQwNmFjMTY5MWFjZTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTI6NDM6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuaW5kZXggMWNiNTAyYTkzMmUwNy4uMzQ4NDJiMzNiMjhhMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiBcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XG4gc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTtcbkBAIC00OSw2ICs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiBcdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJ4X3F1ZXVlKTtcbitcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXG4rXHRhdG9taWNfc2V0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2cGVlci1cdTAwM2VlbmRwb2ludF9sb2NrKTtcbiBcdGtyZWZfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGVlci1cdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcbkBAIC0xMDUsMjggKzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIFx0ICovXG4gXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiBcbi1cdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJ3Rcbi1cdCAqIGd1YXJkZWQgYnkgaXNfZGVhZCwgYnV0IGVhY2ggcmVmZXJlbmNlJ3MgbGlmZSBpcyBzdHJpY3RseSBib3VuZGVkIGJ5XG4tXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXG4tXHQgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm9cbi1cdCAqIGxvbmdlciBoYXZlIHJlZmVyZW5jZXMgaW5zaWRlIHRoZXNlIHF1ZXVlcy5cbitcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbitcdCAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZ1xuK1x0ICogc3VibWlzc2lvbiBwYXRocy4gRHJvcCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgd2FpdCBmb3IgZXhpc3RpbmcgVFhcbitcdCAqIHBhY2tldHMgdG8gc2NoZWR1bGUgdGhlaXIgc2VyaWFsIHdvcmsgYW5kIFJYIHBhY2tldHMgdG8gbGVhdmUgcnhfcXVldWUuXG4gXHQgKi9cbitcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuK1x0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuK1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLVx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4rXHQvKiBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuIFx0ICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiBcdCAqL1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbiBcbi1cdC8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yXG4tXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxuK1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4rXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gXHQgKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VoYW5kc2hha2Vfc2VuZF93cSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmspO1xuIFxuIFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcbiBcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbitcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xuIFx0aW50IHNlcmlhbF93b3JrX2NwdTtcbiBcdGJvb2wgaXNfZGVhZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi41Y2U1NzU2NWM4ZmY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSlcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFxuIFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcbiBcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cbkBAIC0xODIsNiArMTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuK1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFx0d2dfcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXG5pbmRleCA4MjRiYmVmY2U2MWM3Li5iYjM1ZTMyMDU0OTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuQEAgLTQ3Niw5ICs0NzYsMTEgQEAgaW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBuZXh0OlxuIFx0XHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XG4tXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFx0XHRpZiAodW5saWtlbHkoZnJlZSkpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1x0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbitcdFx0d2dfcGVlcl9wdXQocGVlcik7XG4gXG4gXHRcdGlmICgrK3dvcmtfZG9uZSBcdTAwM2U9IGJ1ZGdldClcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjM5LjY4NjkwNDI3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNjkwMzY0MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZUd1YXJkIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBXaXJlR3VhcmQgcGF0Y2ggdG8gZXZhbHVhdGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggYHBlZXIuY2AsIGBwZWVyLmhgLCBgcXVldWVpbmcuaGAsIGFuZCBgcmVjZWl2ZS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludDsgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHRoZSBhcmVhcyBhZmZlY3RlZC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgcmVhY2ggZm9yIGBnaXQgbG9nYCBvciBpZGVhbGx5LCBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgaWYgaXQncyBhdmFpbGFibGUsIHRvIHB1bGwgdXAgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgaXMgY3J1Y2lhbCBmb3IgYSBjb21wcmVoZW5zaXZlIHJldmlldy4gSXQgbG9va3MgbGlrZSBJIGhhdmUgYWNjZXNzIHRvIGNvbW1hbmQtbGluZSB0b29scyBsaWtlIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAgYW5kIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIHdoaWNoIGlzIGdyZWF0LCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoaW5ncyBxdWlja2x5LlxuXG5XaGlsZSBJJ20gYXQgaXQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIGtub3cgYENPTkZJR19XSVJFR1VBUkRgIGlzIHRoZSBiaWcgb25lLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCB0byBjb25maXJtIGFueSBkZXBlbmRlbmNpZXMgb3IgYXNzb2NpYXRlZCBmZWF0dXJlIGZsYWdzIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUxLjM3NzI3MTE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk4MjU3MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdJUkVHVUFSRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUxLjQyMzI2MTM2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzOTE1MDY2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgV2lyZUd1YXJkIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBXaXJlR3VhcmQgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgV2lyZUd1YXJkIGlzIGEgbmV0d29yay1yZWxhdGVkIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgY29udGFpbmluZyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgaXQncyB0aGVyZSwgdGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGJ1aWxkLXRpbWUgZmxhZ3MsIGFuZCBhbnkgb3RoZXIga2VybmVsIHNldHRpbmdzIGxpbmtlZCB3aXRoIHRoZSBXaXJlR3VhcmQgZHJpdmVyLiBBbHRlcm5hdGl2ZWx5LCBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHN0cmluZyBcIldJUkVHVUFSRFwiIGFjcm9zcyBhbGwgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBhIHNvbGlkLCBpZiBzbGlnaHRseSBicm9hZGVyLCBhcHByb2FjaC4gVGhhdCBzaG91bGQgcXVpY2tseSB0dXJuIHVwIHJlbGV2YW50IGVudHJpZXMsIGV2ZW4gaWYgV2lyZUd1YXJkIGlzbid0IGRpcmVjdGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEl04oCZcyBhIGdvb2Qgc3RyYXRlZ3kgdG8gcXVpY2tseSBzY2FuIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzLCBmb3IgbWF4aW11bSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQzOjUzLjgxNDc3MDQ1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMyMTk5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0lSRUdVQVJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTk9Y29uZmlnIERVTU1ZXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTczLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NzQ6Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTkxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6OTI6Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfRFVNTVkpICs9IGR1bW15Lm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSArPSB3aXJlZ3VhcmQvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX09WUE4pICs9IG92cG4vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGU9MT1jY2ZsYWdzLXkgOj0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXQnXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlOjI6Y2NmbGFncy0kKENPTkZJR19XSVJFR1VBUkRfREVCVUcpICs9IC1EREVCVUdcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUtMy13aXJlZ3VhcmQteSA6PSBtYWluLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZT0xNj13aXJlZ3VhcmQteSArPSBuZXRsaW5rLm8gZ2VuZXJhdGVkL25ldGxpbmsub1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtNy1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaDo4OiNpZm5kZWYgX0xJTlVYX1dJUkVHVUFSRF9HRU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjk6I2RlZmluZSBfTElOVVhfV0lSRUdVQVJEX0dFTl9IXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2dlbmVyYXRlZC9uZXRsaW5rLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZ2VuZXJhdGVkL25ldGxpbmsuaD0yOD1pbnQgd2dfc2V0X2RldmljZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oLTI5LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9nZW5lcmF0ZWQvbmV0bGluay5oOjMwOiNlbmRpZiAvKiBfTElOVVhfV0lSRUdVQVJEX0dFTl9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jPTIwPXN0YXRpYyBpbnQgX19pbml0IHdnX21vZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTQ3LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmM6NDg6XFx0cHJfaW5mbyhcXFwiV2lyZUd1YXJkIFxcXCIgV0lSRUdVQVJEX1ZFUlNJT04gXFxcIiBsb2FkZWQuIFNlZSB3d3cud2lyZWd1YXJkLmNvbSBmb3IgaW5mb3JtYXRpb24uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTQ5LVxcdHByX2luZm8oXFxcIkNvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCBcXHUwMDNjSmFzb25AengyYzQuY29tXFx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYz03NT1NT0RVTEVfQVVUSE9SKFxcXCJKYXNvbiBBLiBEb25lbmZlbGQgXFx1MDAzY0phc29uQHp4MmM0LmNvbVxcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jOjc2Ok1PRFVMRV9WRVJTSU9OKFdJUkVHVUFSRF9WRVJTSU9OKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jLTc3LU1PRFVMRV9BTElBU19SVE5MX0xJTksoS0JVSUxEX01PRE5BTUUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3ZlcnNpb24uaDoxOiNkZWZpbmUgV0lSRUdVQVJEX1ZFUlNJT04gXFxcIjEuMC4wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0Mzo1My45NDc5OTczODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNDA3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFdpcmVHdWFyZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgV2lyZUd1YXJkIEtjb25maWcuICpMZXQncyBzZWUgdGhlIEtjb25maWcgZm9yIFdJUkVHVUFSRDoqIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIFdpcmVHdWFyZCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbHMsIHRoZWlyIGRlc2NyaXB0aW9ucywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgV2lyZUd1YXJkIG1vZHVsZSBmaXJzdCwgdGhlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBsaWtlIHBlZXIgaGFuZGxpbmcsIGtleSBtYW5hZ2VtZW50LCByb3V0aW5nLCBhbmQgbWF5YmUgZXZlbiB1c2VyLXNwYWNlIHRvb2xzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS2NvbmZpZyBvcHRpb25zIGludGVyYWN0LCBpZiB0aGVyZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gSSdtIGFsc28gbG9va2luZyBmb3IgY29uZGl0aW9uYWwgbG9naWM7IHRoaW5ncyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBzZXR0aW5ncyBvciBhcmNoaXRlY3R1cmUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBhIFdpcmVHdWFyZCBidWlsZCBpcyBjb25maWd1cmVkLCBhbmQgaWYgaXQgaXMgd2VsbC1kZXNpZ25lZC4gSSdsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgV2lyZUd1YXJkIHNvdXJjZSBjb2RlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSBhbnkgYW1iaWd1aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0Mzo1Ni4yMTA0MDY2MDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDczOlxcdFxcbiAgNzQ6XFx0Y29uZmlnIFdJUkVHVUFSRFxcbiAgNzU6XFx0XFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuICA3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDc4OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDc5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0NVUlZFMjU1MTlcXG4gIDgwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0NIQUNIQTIwUE9MWTEzMDVcXG4gIDgxOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIFdpcmVHdWFyZCBpcyBhIHNlY3VyZSwgZmFzdCwgYW5kIGVhc3kgdG8gdXNlIHJlcGxhY2VtZW50IGZvciBJUFNlY1xcbiAgODQ6XFx0XFx0ICB0aGF0IHVzZXMgbW9kZXJuIGNyeXB0b2dyYXBoeSBhbmQgY2xldmVyIG5ldHdvcmtpbmcgdHJpY2tzLiBJdCdzXFxuICA4NTpcXHRcXHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxcbiAgODY6XFx0XFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cXG4gIDg3OlxcdFxcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBJdCdzIHNhZmUgdG8gc2F5IFkgb3IgTSBoZXJlLCBhcyB0aGUgZHJpdmVyIGlzIHZlcnkgbGlnaHR3ZWlnaHQgYW5kXFxuICA5MDpcXHRcXHQgIGlzIG9ubHkgaW4gdXNlIHdoZW4gYW4gYWRtaW5pc3RyYXRvciBjaG9vc2VzIHRvIGFkZCBhbiBpbnRlcmZhY2UuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkRlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIFdJUkVHVUFSRFxcbiAgOTU6XFx0XFx0aGVscFxcbiAgOTY6XFx0XFx0ICBUaGlzIHdpbGwgd3JpdGUgbG9nIG1lc3NhZ2VzIGZvciBoYW5kc2hha2UgYW5kIG90aGVyIGV2ZW50c1xcbiAgOTc6XFx0XFx0ICB0aGF0IG9jY3VyIGZvciBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEl0IHdpbGwgYWxzbyBwZXJmb3JtIHNvbWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDM6NTYuMjEwNDkxOTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjIwNjc5MTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgUGVlciBUZWFyZG93biBTeW5jaHJvbml6YXRpb246IEEgUmVmYWN0b3JpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBwZWVyIHJlbW92YWwgYW5kIHRlYXJkb3duIGluIHJlbGF0aW9uIHRvIHBhY2tldHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZsaWdodC4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgcmlnaHQ/IEkgY2FuIGNyZWF0ZSBvbmUgd2l0aCBgaXAgbGluayBhZGRgIGFuZCBjb25maWd1cmUgaXQgd2l0aCBgZ2VuZXRsaW5rYC4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkIGZ1bmN0aW9ucyBsaWtlIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgIHNvIEkgdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGludGVyZmFjZXMuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYGZsdXNoX3dvcmtxdWV1ZWAgb24gdGhlIGBwYWNrZXRfY3J5cHRfd3FgIGFuZCBgaGFuZHNoYWtlX3NlbmRfd3FgIHdvcmtxdWV1ZXMuIFRoYXQgc2VlbXMuLi5icnV0ZSBmb3JjZS4gRXNzZW50aWFsbHksIHRoZSBvbGQgd2F5IGZsdXNoZWQgd29ya3F1ZXVlcyB0byBlbnN1cmUgYWxsIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIHBlZXIgaXMgcmVtb3ZlZC4gVGhpcyB3b3VsZCBlbmNvbXBhc3MgYm90aCBUWCBhbmQgUlggcGFja2V0cy4gYG5hcGlfZGlzYWJsZWAgYW5kIGBuZXRpZl9uYXBpX2RlbGAgaGFuZGxlZCB0aGUgUlggc2lkZSBzZXBhcmF0ZWx5LiBUaGUgVFggd2FzIGhhbmRsZWQgYnkgdGhlIHdvcmtxdWV1ZS5cblxuTm93LCB0aG91Z2gsIHRoZSBjb21taXQgaXMgaW50cm9kdWNpbmcgYSBmaW5lci1ncmFpbmVkIGFwcHJvYWNoIHVzaW5nIGBhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgd2dfcGVlcmAgc3RydWN0LiBJdCdzIGVzc2VudGlhbGx5IGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHBhY2tldHMgaW4gdGhlIGNyeXB0byBwaXBlbGluZS4gSXQncyBpbml0aWFsaXplZCB0byAxIGR1cmluZyBwZWVyIGNyZWF0aW9uLiBXaGVuZXZlciBhIHBhY2tldCBpcyBlbnF1ZXVlZCwgYGF0b21pY19pbmNgIGlzIGNhbGxlZC4gV2hlbiBhIHBhY2tldCBjb21wbGV0ZXMgY3J5cHRvIGFuZCBnZXRzIGVucXVldWVkIGZvciBzZXJpYWwgd29yayAob3IgaW4gdGhlIFJYIHBvbGwpLCBgYXRvbWljX2RlY19hbmRfdGVzdGAgaXMgY2FsbGVkLCB3YWtpbmcgdXAgYSB3YWl0IHF1ZXVlIGlmIHRoZSBjb3VudGVyIGhpdHMgemVyby4gRmluYWxseSwgaW4gdGhlIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBmdW5jdGlvbiwgYWZ0ZXIgZGVjcmVtZW50aW5nIHRoZSBjb3VudGVyLCB0aGUgY29kZSB3YWl0cyBmb3IgdGhlIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgYXRvbWljIHZhcmlhYmxlIHRvIHJlYWNoIHplcm8uIFRoZW4gYSBgZmx1c2hfd29ya2AgaXMgcGVyZm9ybWVkIGZvciBzcGVjaWZpYyB3b3Jrcy5cblxuVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0ISBJbnN0ZWFkIG9mIGZsdXNoaW5nIGVudGlyZSB3b3JrcXVldWVzLCBpdCdzIG5vdyB1c2luZyBhdG9taWMgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWJpbmVkIHdpdGggYHdhaXRfdmFyX2V2ZW50YCBhbmQgc2VsZWN0aXZlIGBmbHVzaF93b3JrYC4gSXQncyBhIG11Y2ggbW9yZSB0YXJnZXRlZCBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kuIEl0J3Mgc3VwcG9zZWQgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9uIHBhY2tldCB0ZWFyZG93biBpbiB3aXJlZ3VhcmQuXG5cbk5vdywgbXkgZXhwZXJ0IGJyYWluIGlzIGtpY2tpbmcgaW4uIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoaXMuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmludGVuZGVkIHBhY2tldCBkcm9wcy4gV2hhdCBoYXBwZW5zIGlmIGEgcGFja2V0IGlzIGRyb3BwZWQgc29tZXdoZXJlICpiZWZvcmUqIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCBvciBgd2dfcGFja2V0X3J4X3BvbGxgPyBEb2VzIHRoYXQgZGVjcmVtZW50IHRoZSBjb3VudGVyPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBpcyBjYWxsZWQgZm9yICpib3RoKiBUWCBhbmQgUlggcGF0aHMuIFRoaXMgaXMgc29tZXRoaW5nIEknbGwgdmVyaWZ5IGJ5IGluc3BlY3RpbmcgdGhlIGNvZGUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgYm90aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjAyLjQxNzI4NDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcxNjY5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTItXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTUzOnN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNTQtXFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI4OlxcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXHUwMDI2d2ctXFx1MDAzZWRlY3J5cHRfcXVldWUsIFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSwgc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowMi40NjIwMDk2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2ODcyOTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcXVldWVpbmcuaGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHF1ZXVlaW5nIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gYHF1ZXVlaW5nLmhgLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgMTUzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG11dGV4ZXMsIGNvbmRpdGlvbiB2YXJpYWJsZXMsIG9yIGF0b21pYyBvcGVyYXRpb25zIGlmIGl0J3MgYSBtdWx0aS10aHJlYWRlZCBkZXNpZ24uIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgcXVldWUncyBpbnRlcm5hbCBzdGF0ZSAoaGVhZCwgdGFpbCwgc2l6ZSkgaXMgYmVpbmcgbWFuYWdlZCBhbmQgcHJvdGVjdGVkLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBxdWljayBmZWVsIGZvciB0aGUgdHJhZGUtb2ZmcyB0aGUgZGV2ZWxvcGVycyBtYWRlIOKAkyBhcmUgd2UgYWltaW5nIGZvciBoaWdoIHRocm91Z2hwdXQsIGxvdyBsYXRlbmN5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gTGluZSAxNTMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowNS42MzA3NDEwMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0LyogU2luZ2xlIGNvbnN1bWVyICovXFxuIDE0ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXFxuIDE0OTpcXHR7XFxuIDE1MDpcXHRcXHRxdWV1ZS1cXHUwMDNlcGVla2VkID0gTlVMTDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiAxNTQ6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbiAxNTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0aW50IGNwdTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0YXRvbWljX3NldF9yZWxlYXNlKFxcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNlc3RhdGUsIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpO1xcbiAxNjA6XFx0XFx0LyogV2UgZmlyc3QgcXVldWUgdGhpcyB1cCBmb3IgdGhlIHBlZXIgaW5nZXN0aW9uLCBidXQgdGhlIGNvbnN1bWVyXFxuIDE2MTpcXHRcXHQgKiB3aWxsIHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8gQ1JZUFRFRCBvciBERUFEIGJlZm9yZS5cXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIDE2NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gMTY1OlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcXG4gMTY4OlxcdFxcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0Y3B1ID0gd2dfY3B1bWFza19uZXh0X29ubGluZShcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VsYXN0X2NwdSk7XFxuIDE3MTpcXHRcXHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VyaW5nLCBza2IpKSlcXG4gMTcyOlxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuIDE3MzpcXHRcXHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFxcdTAwMjZwZXJfY3B1X3B0cihkZXZpY2VfcXVldWUtXFx1MDAzZXdvcmtlciwgY3B1KS1cXHUwMDNld29yayk7XFxuIDE3NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTc1OlxcdH1cXG4gMTc2OlxcdFxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHQvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGVcXG4gMTgwOlxcdFxcdCAqIHBlZXIgY2FuIGJlIGZyZWVkIGZyb20gYmVsb3cgdXMuXFxuIDE4MTpcXHRcXHQgKi9cXG4gMTgyOlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2UEFDS0VUX0NCKHNrYiktXFx1MDAzZXN0YXRlLCBzdGF0ZSk7XFxuIDE4NTpcXHRcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIDE4NjpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTg3OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuIDE4ODpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiAxODk6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiAyMDA6XFx0XFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDIwMTpcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gMjAyOlxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0I2lmZGVmIERFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjA1LjYzMDgxMDUyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTY2NjU2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBXaXJlR3VhcmQgUGFja2V0IFF1ZXVlaW5nIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzLiBMaW5lcyAxNzAtMTczIGFyZSBjcnVjaWFsIGhlcmUuIEkgc2VlIHRoZSBjb2RlIGlzIHRyeWluZyB0byBlbnF1ZXVlIGEgcGFja2V0IChgc2tiYCkgaW50byB0aGUgZGV2aWNlIHF1ZXVlJ3MgcmluZyBidWZmZXIgdXNpbmcgYHB0cl9yaW5nX3Byb2R1Y2VfYmhgLiAgVGhlIGNydWNpYWwgcG9pbnQsIG9mIGNvdXJzZSwgaXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhpcyAqZmFpbHMqLiBJZiBgcHRyX3JpbmdfcHJvZHVjZV9iaGAgcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiB6ZXJvLCBpbmRpY2F0aW5nIGFuIGVycm9yIChsZXQncyBzYXkgYC1FTk9NRU1gIG9yIHRoZSByaW5nIGlzIGZ1bGwpLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRVBJUEVgLiBcblxuVGhlIHByb2JsZW0gaXMsIGFuZCB0aGlzIGlzIHdoYXQncyBib3RoZXJpbmcgbWUsIGJlZm9yZSB0aGF0IHJldHVybiwgYGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7YCB3YXMgYWxyZWFkeSBjYWxsZWQhIFRoYXQgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIGlzIGhhcHBlbmluZyB3aXRoIGVuY3J5cHRpb24gYmVmb3JlIHRoZSBxdWV1ZSBpdHNlbGYgaXMgY29uZmlybWVkLiBUaGF0J3MgYSBiaXQgcmlza3ksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjb3VudGluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uIGJlZm9yZSB0aGV5J3JlIGFjdHVhbGx5IHByb2Nlc3NlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIHRoZSBmdW5jdGlvbiB0aGlzIHNuaXBwZXQgaXMgcGFydCBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBhdCB0aGUgY2FsbCBzaXRlLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBmb3IgdGhlIGAtRVBJUEVgIHJldHVybi4gSSdsbCBuZWVkIHRvIGNoZWNrIGJvdGggYHJlY2VpdmUuY2AgYW5kIGBzZW5kLmNgIHdoZXJlIEknbSBleHBlY3RpbmcgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCB0byBiZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBhbnkgcG90ZW50aWFsIGZhaWx1cmVzIGFuZCBkZXRlcm1pbmUgd2hhdCBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyBhbmQgdGhlIGVuY3J5cHRpb24gY291bnRlci4gSSdtIGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBjb3VudGVyIHVwZGF0ZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk4MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjA5LjU5NzQ2ODgzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFxuIDUxMTpcXHRzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA1MTI6XFx0e1xcbiA1MTM6XFx0XFx0X19sZTMyIGlkeCA9ICgoc3RydWN0IG1lc3NhZ2VfZGF0YSAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWtleV9pZHg7XFxuIDUxNDpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IE5VTEw7XFxuIDUxNTpcXHRcXHRpbnQgcmV0O1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIDUxODpcXHRcXHRQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNla2V5cGFpciA9XFxuIDUxOTpcXHRcXHRcXHQoc3RydWN0IG5vaXNlX2tleXBhaXIgKil3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKFxcbiA1MjA6XFx0XFx0XFx0XFx0d2ctXFx1MDAzZWluZGV4X2hhc2h0YWJsZSwgSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIsIGlkeCxcXG4gNTIxOlxcdFxcdFxcdFxcdFxcdTAwMjZwZWVyKTtcXG4gNTIyOlxcdFxcdGlmICh1bmxpa2VseSghd2dfbm9pc2Vfa2V5cGFpcl9nZXQoUEFDS0VUX0NCKHNrYiktXFx1MDAzZWtleXBhaXIpKSlcXG4gNTIzOlxcdFxcdFxcdGdvdG8gZXJyX2tleXBhaXI7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCkpKVxcbiA1MjY6XFx0XFx0XFx0Z290byBlcnI7XFxuIDUyNzpcXHRcXG4gNTI4OlxcdFxcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcXHUwMDI2d2ctXFx1MDAzZWRlY3J5cHRfcXVldWUsIFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSwgc2tiLFxcbiA1Mjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuIDUzMDpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuIDUzMTpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgUEFDS0VUX1NUQVRFX0RFQUQpO1xcbiA1MzI6XFx0XFx0aWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRVBJUEUpKSB7XFxuIDUzMzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gNTM0OlxcdFxcdFxcdHJldHVybjtcXG4gNTM1OlxcdFxcdH1cXG4gNTM2OlxcdGVycjpcXG4gNTM3OlxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KFBBQ0tFVF9DQihza2IpLVxcdTAwM2VrZXlwYWlyLCBmYWxzZSk7XFxuIDUzODpcXHRlcnJfa2V5cGFpcjpcXG4gNTM5OlxcdFxcdHJjdV9yZWFkX3VubG9ja19iaCgpO1xcbiA1NDA6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDU0MTpcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIDU0MjpcXHR9XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdHZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDU0NTpcXHR7XFxuIDU0NjpcXHRcXHRpZiAodW5saWtlbHkocHJlcGFyZV9za2JfaGVhZGVyKHNrYiwgd2cpIFxcdTAwM2MgMCkpXFxuIDU0NzpcXHRcXHRcXHRnb3RvIGVycjtcXG4gNTQ4OlxcdFxcdHN3aXRjaCAoU0tCX1RZUEVfTEUzMihza2IpKSB7XFxuIDU0OTpcXHRcXHRjYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0lOSVRJQVRJT04pOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDowOS41OTc1ODAxNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwNzc3OTkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZW5kLmNgIC0gU3BlY2lmaWNhbGx5LCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGZvY3VzaW5nIG9uIHBhY2tldCBjcmVhdGlvbiB3aXRoaW4gdGhlIGBzZW5kLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhhdCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGRhdGEgZm9yIHRoZXNlIFdpcmVHdWFyZCBwYWNrZXRzIGlzIGJlaW5nIGFzc2VtYmxlZC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBpcyB0aGUgY3JpdGljYWwganVuY3R1cmUg4oCTIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQncyBnb2luZyBpbnRvIGl0LlxuXG5JJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc2VlIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0LiBXaGF0IGtpbmQgb2YgY29udGV4dCBkb2VzIGl0IG5lZWQ/IElzIGl0IHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIsIG9yIGFsbG9jYXRpbmcgb24gdGhlIGZseT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLCBidWZmZXIgb3ZlcmZsb3dzIG9yIGFueSBvdGhlciBzZWN1cml0eSBjb25jZXJucyBoZXJlPyBBcmUgYW55IHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24gcGFydGljdWxhcmx5IHByb25lIHRvIGRlbmlhbCBvZiBzZXJ2aWNlP1wiIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2l6ZSBjYWxjdWxhdGlvbnMsIGNvcGllcywgYW5kIGhvdyBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgaXMgYmVpbmcgY29uY2F0ZW5hdGVkLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gdGhlIGZsb3cuXG5cbkJhc2ljYWxseSwgSSB3YW50IHRvIG5haWwgZG93biBob3cgbXVjaCBjb250cm9sIGEgcG90ZW50aWFsIGF0dGFja2VyIG1pZ2h0IGhhdmUgb3ZlciB0aGUgcGFja2V0IGRhdGEgY29uc3RydWN0aW9uLiBBbnkgcG9pbnQgb2YgYXR0YWNrIHdvdWxkIGJlIGludGVyZXN0aW5nIGJ1dCBpbiBwYXJ0aWN1bGFyIGlmIEkgY2FuIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZGF0YSBjYW4gYmUgaW5zZXJ0ZWQgZnJvbSBleHRlcm5hbCBzb3VyY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MTMuMzA1MzYyMTU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdFxcbiAzMTE6XFx0c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuIDMxMjpcXHR7XFxuIDMxMzpcXHRcXHRzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IHBlZXItXFx1MDAzZWRldmljZTtcXG4gMzE0OlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRyY3VfcmVhZF9sb2NrX2JoKCk7XFxuIDMxNzpcXHRcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBlZXItXFx1MDAzZWlzX2RlYWQpKSlcXG4gMzE4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuIDMyMjpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuIDMyMzpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KGZpcnN0LCBQQUNLRVRfU1RBVEVfREVBRCk7XFxuIDMyNDpcXHRlcnI6XFxuIDMyNTpcXHRcXHRyY3VfcmVhZF91bmxvY2tfYmgoKTtcXG4gMzI2OlxcdFxcdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSlcXG4gMzI3OlxcdFxcdFxcdHJldHVybjtcXG4gMzI4OlxcdFxcdHdnX25vaXNlX2tleXBhaXJfcHV0KFBBQ0tFVF9DQihmaXJzdCktXFx1MDAzZWtleXBhaXIsIGZhbHNlKTtcXG4gMzI5OlxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbiAzMzA6XFx0XFx0a2ZyZWVfc2tiX2xpc3QoZmlyc3QpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHR2b2lkIHdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gMzM0OlxcdHtcXG4gMzM1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTtcXG4gMzM2OlxcdFxcdERFVl9TVEFUU19BREQocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VkZXYsIHR4X2Ryb3BwZWQsXFxuIDMzNzpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlLnFsZW4pO1xcbiAzMzg6XFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xcbiAzMzk6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUubG9jayk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHZvaWQgd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuIDM0MzpcXHR7XFxuIDM0NDpcXHRcXHRzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcjtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgcGFja2V0cztcXG4gMzQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFN0ZWFsIHRoZSBjdXJyZW50IHF1ZXVlIGludG8gb3VyIGxvY2FsIG9uZS4gKi9cXG4gMzQ5OlxcdFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cGFja2V0cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjEzLjMwNTQ0ODU1OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NTg0MDAwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byB0aGUgV2lyZUd1YXJkIFBhY2tldCBQcm9jZXNzaW5nIHdpdGggLUVQSVBFIEVycm9ycyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSByZWN1cnJpbmcgcGF0dGVybiB3aXRoIHRoaXMgYC1FUElQRWAgZXJyb3IsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuIFdoZW4gYHJldGAgaXMgYC1FUElQRWAsIHRoZSBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQsIGNydWNpYWxseSwgaXQgZW5xdWV1ZXMgYSBwYWNrZXQgd2l0aCB0aGUgYFBBQ0tFVF9TVEFURV9ERUFEYCBmbGFnLiBJbnNpZGUgdGhpcyBmdW5jdGlvbiwgSSBzZWUgYGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7YCBmb2xsb3dlZCBieSBgd2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZylgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIGEgd2F5IHRvIHNpZ25hbCBzb21ldGhpbmcuIE5vdywgd2hhdCBhYm91dCB0aGUgcmVjZWl2ZSBzaWRlPyBJdCBzZWVtcyB3ZSBoYXZlIGEgc2ltaWxhciBwcm9jZXNzIHdoZW4gYHJldCA9PSAtRVBJUEVgOiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAgZ2V0cyBjYWxsZWQsIGFnYWluIHdpdGggYFBBQ0tFVF9TVEFURV9ERUFEYCwgYW5kIHRoZW4gYG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKWAuIFRoaXMgdGhlbiB0cmlnZ2VycyB0aGUgYHdnX3BhY2tldF9yeF9wb2xsYC4gQW5kIHdoYXQgaGFwcGVucyBpbnNpZGUgdGhhdCBmdW5jdGlvbj8gVGhhdCdzIHJpZ2h0LCBgYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKWAgYW5kIGB3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKWAuIEknbSBzdGFydGluZyB0byBzZWUgYSBwYXR0ZXJuIGhlcmUgaW52b2x2aW5nIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGJ1dCBJIGRvbid0IHlldCB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBwdXJwb3NlLlxuXG5CdXQgd2hhdCBhYm91dCB0aGUgc3VjY2VzcyBjYXNlcz8gV2hlcmUgaXMgdGhpcyBjb3VudGVyIGRlY3JlbWVudGVkIGFuZCB0aGUgYXNzb2NpYXRlZCB3YWtlLXVwIGNhbGxlZCB3aGVuIHRoZSBjcnlwdG8gYWN0dWFsbHkgKnN1Y2NlZWRzKj8gT3IgaG93IGl0J3MgaGFuZGxlZCBieSB0aGUgd29ya2VyIHRocmVhZHM/IEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBgcGFja2V0X2NyeXB0X3dxYCB3b3JrZXIgaXMgYWN0dWFsbHkgdXNlZC4gV2hlcmUgaXMgYGRldmljZV9xdWV1ZS1cdTAwM2V3b3JrZXJgIGRlZmluZWQsIGFuZCBob3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgYGRlY3J5cHRfcXVldWVgIGFuZCBgZW5jcnlwdF9xdWV1ZWA/IExldCdzIHNlYXJjaCBmb3IgdGhvc2UgcXVldWVzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyMC44ODk0NTIzODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTMxNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuY3J5cHRfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNTktXFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjI2MDpcXHR3Z19wYWNrZXRfcXVldWVfZnJlZShcXHUwMDI2d2ctXFx1MDAzZWVuY3J5cHRfcXVldWUsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjYxLVxcdHJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGFsbCB0aGUgcGVlcnMgdG8gYmUgYWN0dWFsbHkgZnJlZWQuICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzEwPXN0YXRpYyBpbnQgd2dfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzUyOlxcdHJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KFxcdTAwMjZ3Zy1cXHUwMDNlZW5jcnlwdF9xdWV1ZSwgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTMtXFx0XFx0XFx0XFx0ICAgTUFYX1FVRVVFRF9QQUNLRVRTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM2MDpcXHRcXHRnb3RvIGVycl9mcmVlX2VuY3J5cHRfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM2MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zOTEtXFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjM5MjplcnJfZnJlZV9lbmNyeXB0X3F1ZXVlOlxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozOTM6XFx0d2dfcGFja2V0X3F1ZXVlX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM5NC1lcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ6XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmg9NDA9c3RydWN0IHdnX2RldmljZSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQxLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oOjQyOlxcdHN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlLCBoYW5kc2hha2VfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oLTQzLVxcdHN0cnVjdCBzb2NrIF9fcmN1ICpzb2NrNCwgKnNvY2s2O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMxOS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcXHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCBcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUsIGZpcnN0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHdnLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyMC45NDAzOTUyMThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzMTQ4ODE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYHdnX3BhY2tldGAgd29ya2VyIGZ1bmN0aW9ucywgdGhpbmtpbmcgYWxvdWQ6XG5cbioqQW5hbHl6aW5nIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlciBhbmQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgYW5kIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhdCBmaXJzdCBnbGFuY2UuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSB3b3JraG9yc2VzLCB0aGUgb25lcyBkb2luZyB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gd2l0aGluIHRoZSBXaXJlR3VhcmQgaW1wbGVtZW50YXRpb24uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBhcmNoaXRlY3R1cmUuIEFyZSB0aGV5IHNpbmdsZS10aHJlYWRlZCwgb3IgZGVzaWduZWQgZm9yIGNvbmN1cnJlbmN5PyBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcsIEknZCAqaG9wZSogdGhleSBhcmUgZGVzaWduZWQgd2l0aCBjb25jdXJyZW5jeSBpbiBtaW5kLCBidXQgSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgdXNpbmcgYSB0aHJlYWQgcG9vbCwgb3Igc3Bhd25pbmcgbGlnaHR3ZWlnaHQgdGhyZWFkcyAobGlrZSBnb3JvdXRpbmVzIGlmIHdlJ3JlIGluIGEgR28gY29udGV4dCwgb3Iga2VybmVsIHRocmVhZHMsIG9yIHBlcmhhcHMgYXJlIHRoZXkgZXZlbiB1c2luZyBTSU1EIGluc3RydWN0aW9ucyk/XG5cbkknZCB3YW50IHRvIGtub3c6XG5cbiogICAqKkNvbmN1cnJlbmN5IE1vZGVsOioqIEhvdyBhcmUgdGhleSBoYW5kbGluZyBtdWx0aXBsZSBwYWNrZXRzIHNpbXVsdGFuZW91c2x5PyBBcmUgdGhleSB1c2luZyBhIHF1ZXVlaW5nIHN5c3RlbSB0byBtYW5hZ2UgaW5jb21pbmcgd29yaz8gV2hhdCBhcmUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkIChtdXRleGVzLCBzZW1hcGhvcmVzLCBhdG9taWMgb3BlcmF0aW9ucywgZXRjLik/IEFueSBjb250ZW50aW9uIHBvaW50cywgb3IgYm90dGxlbmVja3MsIGNvdWxkIGJlIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlLlxuKiAgICoqQ3J5cHRvZ3JhcGhpYyBQcmltaXRpdmVzOioqIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBXaGF0IHNwZWNpZmljIGFsZ29yaXRobXMgYXJlIGJlaW5nIHVzZWQgKENoYUNoYTIwLCBQb2x5MTMwNSwgZXRjLik/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvciBqdXN0IGxldmVyYWdpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAobGlic29kaXVtLCBPcGVuU1NMLCBldGMuKT9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEhvdyBhcmUgcGFja2V0cyBhbmQgYnVmZmVycyBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaW5lZmZpY2llbmNpZXMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIG9yIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzPyBBcmUgdGhlcmUgYW55IG1lbW9yeSBwb29scywgb3IgYXJlIHdlIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBldmVyeSBzaW5nbGUgdGltZT9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBIb3cgZG8gdGhlc2Ugd29ya2VycyBkZWFsIHdpdGggbWFsZm9ybWVkIHBhY2tldHMsIGNyeXB0b2dyYXBoaWMgZmFpbHVyZXMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnM/IFdoYXQgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlP1xuKiAgICoqQ29udGV4dHVhbCBJbmZvcm1hdGlvbjoqKiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRlbGVzcywgb3IgZG8gdGhleSBtYWludGFpbiBzb21lIGtpbmQgb2YgcGVyLXBlZXIgY29udGV4dD8gSWYgc28sIHdoYXQgaXMgdGhhdCBjb250ZXh0LCBhbmQgaG93IGlzIGl0IG1hbmFnZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSB0aGV5IGFjY2Vzc2luZywgYW5kIHdoYXQgYXJlIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdG8gYXZvaWQgY29udGVudGlvbj9cblxuVWx0aW1hdGVseSwgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHdvcmtlcnMgZGV0ZXJtaW5lcyB0aGUgYmFuZHdpZHRoIGxpbWl0YXRpb25zIG9mIGEgV2lyZUd1YXJkIGNvbm5lY3Rpb24uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBlZmZlY3RpdmUsIG9yIGNvdWxkIGJlIG9wdGltaXplZC4gSSB3b3VsZCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgZWZmaWNpZW50IHRoZSB3b3JrZXJzIGFyZSwgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MjQuNTcxODg2Nzg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0MzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0zMTA9c3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzUxLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNTI6XFx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXFx1MDAyNndnLVxcdTAwM2VlbmNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1My1cXHRcXHRcXHRcXHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9NTE9dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTI6dm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjYyPXZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI4Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI4Nzp2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyNC42MTc4MzQwMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjAzNDU1Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB3b3JrZXIgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgV2lyZUd1YXJkIFBhY2tldCBIYW5kbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgV2lyZUd1YXJkIGFjdHVhbGx5ICp3b3Jrcyog4oCTIHRoZSBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCBhbmQgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRoZXkncmUgdGhlIGhlYXJ0IG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZSwgc28gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3J5cHRvZ3JhcGh5LCBrZXkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbiwgYW5kIHRoZSBuZWNlc3NhcnkgZGF0YSBtYW5pcHVsYXRpb24uIEknbSBob3BpbmcgdG8gc2VlIHdlbGwtb3B0aW1pemVkIGNvZGUsIGxpa2VseSBsZXZlcmFnaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zIGFuZCBjYXJlZnVsIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvcHBvcnR1bml0aWVzIGZvciBwYXJhbGxlbGl6YXRpb24gKHRob3VnaCBJIGltYWdpbmUgdGhlc2UgYXJlIGFscmVhZHkgaGlnaGx5IG9wdGltaXplZCksIGFuZCBhbnkgYXJlYXMgd2hlcmUgc3VidGxlIHRpbWluZyBhdHRhY2tzIG1pZ2h0IGJlIHBvc3NpYmxlICh0aG91Z2gsIGlkZWFsbHksIHJvYnVzdCBjb3VudGVybWVhc3VyZXMgd2lsbCBiZSBpbiBwbGFjZSkuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2V5cyBhbmQgbm9uY2VzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZC4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGFyZSB0aGV5IGRlZmVuc2l2ZSwgb3IgZG8gdGhleSBhc3N1bWUgYSBtb3JlIFwidHJ1c3RlZFwiIGVudmlyb25tZW50PyBJJ2xsIGJlIHBhcnRpY3VsYXJseSBzY3J1dGluaXppbmcgdGhlIG1lbW9yeSBzYWZldHkgYXNwZWN0cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHRoaXMgYWxsIHBsYXlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDoyNi44MjEyOTIyMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHR2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDI4ODpcXHR7XFxuIDI4OTpcXHRcXHRzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aWNvcmVfd29ya2VyLFxcbiAyOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHdvcmspLVxcdTAwM2VwdHI7XFxuIDI5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsICpza2IsICpuZXh0O1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHR3aGlsZSAoKGZpcnN0ID0gcHRyX3JpbmdfY29uc3VtZV9iaChcXHUwMDI2cXVldWUtXFx1MDAzZXJpbmcpKSAhPSBOVUxMKSB7XFxuIDI5NDpcXHRcXHRcXHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IFBBQ0tFVF9TVEFURV9DUllQVEVEO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShlbmNyeXB0X3BhY2tldChza2IsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRcXHRQQUNLRVRfQ0IoZmlyc3QpLVxcdTAwM2VrZXlwYWlyKSkpIHtcXG4gMjk5OlxcdFxcdFxcdFxcdFxcdHdnX3Jlc2V0X3BhY2tldChza2IsIHRydWUpO1xcbiAzMDA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdHN0YXRlID0gUEFDS0VUX1NUQVRFX0RFQUQ7XFxuIDMwMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMzAzOlxcdFxcdFxcdFxcdH1cXG4gMzA0OlxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcdFxcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKTtcXG4gMzA2OlxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4gMzA3OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAzMDg6XFx0XFx0fVxcbiAzMDk6XFx0fVxcbiAzMTA6XFx0XFxuIDMxMTpcXHRzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGEoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpmaXJzdClcXG4gMzEyOlxcdHtcXG4gMzEzOlxcdFxcdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gcGVlci1cXHUwMDNlZGV2aWNlO1xcbiAzMTQ6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdHJjdV9yZWFkX2xvY2tfYmgoKTtcXG4gMzE3OlxcdFxcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCkpKVxcbiAzMTg6XFx0XFx0XFx0Z290byBlcnI7XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MjYuODIxMzkyMzI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwOTMxNTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdpcmVHdWFyZCBQYWNrZXQgSGFuZGxpbmcgYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdyB3aXRoaW4gV2lyZUd1YXJkLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWl0IHBhdGguIEl0IGxvb2tzIGxpa2Ugd2l0aGluIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpYCBnZXRzIGNhbGxlZC4gQWxyaWdodCwgc3RhbmRhcmQgZW5xdWV1ZWluZyBmdW5jdGlvbi4gRGlnZ2luZyBpbnRvIHRoYXQsIGluc2lkZSBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAsIHRoZXJlJ3MgdGhpcyBpbnRlcmVzdGluZyBzZXF1ZW5jZTogYGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKSB3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtgIGZvbGxvd2VkIGJ5IHF1ZXVpbmcgd29yayB3aXRoIGBxdWV1ZV93b3JrX29uKC4uLiwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7YC4gVGhlIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgYXRvbWljIHZhcmlhYmxlIGlzIGNsZWFybHkgYWN0aW5nIGFzIGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIG91dHN0YW5kaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgYSBnaXZlbiBwZWVyLiBUaGUgYHdha2VfdXBfdmFyYCBjYWxsIGhpbnRzIGF0IHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24uXG5cbk5vdywgbGV0J3MgY29ubmVjdCB0aGlzIHRvIHRoZSBwZWVyIHRlYXJkb3duIHBhdGgsIHNwZWNpZmljYWxseSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIFRoaXMgZnVuY3Rpb24gaXMgd2FpdGluZyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byBoaXQgemVybyAqYmVmb3JlKiByZW1vdmluZyB0aGUgcGVlci4gVGhlIGNvZGUgc2hvd3MgYW4gYXRvbWljIGRlY3JlbWVudCBhbmQgYSB3YWl0OiBgYXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTsgd2FpdF92YXJfZXZlbnQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO2AuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlICptdXN0KiB3YWl0IGZvciBhbGwgZW5jcnlwdGlvbi90cmFuc21pc3Npb24gb3BlcmF0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG51a2luZyB0aGUgcGVlcidzIHN0YXRlLiBUaGVyZSdzIGFsc28gYSBgZmx1c2hfd29ya2AgY2FsbCBvbiBgcGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29ya2Agd2hpY2ggZW5zdXJlcyBhbnkgcGVuZGluZyB3b3JrIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVlciBnZXRzIGNvbXBsZXRlZCBiZWZvcmUgd2UgY29udGludWUuXG5cbk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgZGVjcmVtZW50IGFuZCB3YWl0IGFyZSBzdWZmaWNpZW50LiBUaGUgb3JkZXJpbmcgYW5kIHBvdGVudGlhbCByYWNlcyB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgb24gc2h1dGRvd24uXG5cbk9rYXksIHNvIHRoZSBUeCBwYXRoIHNlZW1zIHByZXR0eSB3ZWxsLWRlZmluZWQuIEJ1dCB0aGlzIGFsc28gbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSByZWNlaXZlIHBhdGguIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2ltaWxhciBwcmVjYXV0aW9ucyBhcmUgaW4gcGxhY2UgZHVyaW5nIGRlY3J5cHRpb24uIExldCdzIHNoaWZ0IG91ciBmb2N1cyBhbmQgaW52ZXN0aWdhdGUgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MzAuOTE0NTUwNTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDExNjk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0zMTA9c3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzU2LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNTc6XFx0cmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoXFx1MDAyNndnLVxcdTAwM2VkZWNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTM1OC1cXHRcXHRcXHRcXHQgICBNQVhfUVVFVUVEX1BBQ0tFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9MzU9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzYtLyogV29ya3F1ZXVlIHdvcmtlcjogKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDozNzp2b2lkIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00Mzg9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDk0LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDk1OnZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQ5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjMwLjk2NDY3MzM3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5NzQ5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHJlY2VpdmUuY2AgYXQgTGluZSA0OTUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGhpbnQgdG8gbG9vayBhdCBgcmVjZWl2ZS5jYCBhcm91bmQgbGluZSA0OTUgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBtZW50YWwgY2hlY2tsaXN0LiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIGEgbmV0d29ya2luZyBvciBjb21tdW5pY2F0aW9uIHByb3RvY29sLCBnaXZlbiB0aGUgY29udGV4dCBvZiBcInJlY2VpdmVcIi4gTGluZSA0OTUgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHBhY2tldCBwcm9jZXNzaW5nLCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBhbiBpbmNvbWluZyBjb25uZWN0aW9uLCBvciB0aGUgcGFyc2luZyBvZiBhIGRhdGEgYnVmZmVyLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhcm91bmQgdGhhdCBsaW5lPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNvY2tldCBkZXNjcmlwdG9yLCBhIGJ1ZmZlciwgYSBwcm90b2NvbCBjb250cm9sIGJsb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgdGhpcyBsaW5lIHRoZSBzdGFydCBvZiBhIGByZWN2KClgIGNhbGwsIGEgZGF0YSB2YWxpZGF0aW9uIGNoZWNrLCBlcnJvciBoYW5kbGluZywgb3IgdGhlIGRpc3BhdGNoaW5nIGxvZ2ljIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZT8gVGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBkYXRhIGZsb3c6IHdoYXQgY29tZXMgaW4sIHdoYXQgZ2V0cyBwcm9jZXNzZWQsIGFuZCB3aGVyZSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBnbyBuZXh0LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IG1hcCB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSBpbmNvbWluZyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHJlc291cmNlIGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhlIGhhbmRsaW5nIG9mIHdoYXRldmVyIGlzIGNvbWluZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDozMy45MzQ0MjcxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0XFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdHJldHVybiB3b3JrX2RvbmU7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNDk2OlxcdHtcXG4gNDk3OlxcdFxcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsXFxuIDQ5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgd29yayktXFx1MDAzZXB0cjtcXG4gNDk5OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdHdoaWxlICgoc2tiID0gcHRyX3JpbmdfY29uc3VtZV9iaChcXHUwMDI2cXVldWUtXFx1MDAzZXJpbmcpKSAhPSBOVUxMKSB7XFxuIDUwMjpcXHRcXHRcXHRlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9XFxuIDUwMzpcXHRcXHRcXHRcXHRsaWtlbHkoZGVjcnlwdF9wYWNrZXQoc2tiLCBQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNla2V5cGFpcikpID9cXG4gNTA0OlxcdFxcdFxcdFxcdFxcdFBBQ0tFVF9TVEFURV9DUllQVEVEIDogUEFDS0VUX1NUQVRFX0RFQUQ7XFxuIDUwNTpcXHRcXHRcXHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xcbiA1MDY6XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKVxcbiA1MDc6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDUwODpcXHRcXHR9XFxuIDUwOTpcXHR9XFxuIDUxMDpcXHRcXG4gNTExOlxcdHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDUxMjpcXHR7XFxuIDUxMzpcXHRcXHRfX2xlMzIgaWR4ID0gKChzdHJ1Y3QgbWVzc2FnZV9kYXRhICopc2tiLVxcdTAwM2VkYXRhKS1cXHUwMDNla2V5X2lkeDtcXG4gNTE0OlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6MzMuOTM0NTQ3OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTg4OTY0NTQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBXaXJlR3VhcmQncyBQYWNrZXQgSGFuZGxpbmcgXHUwMDI2IFJlbW92YWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgb24gYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAuIEl0IGVucXVldWVzIHBhY2tldHMgZm9yIFJYIGRlY3J5cHRpb24gdXNpbmcgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgLCB3aGljaCBpbiB0dXJuIHNjaGVkdWxlcyBOQVBJLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGB3Z19wYWNrZXRfcnhfcG9sbGAgcnVubmluZyBmb3IgdGhhdCBwZWVyJ3MgTkFQSSBpbnN0YW5jZS4gSW5zaWRlIGB3Z19wYWNrZXRfcnhfcG9sbGAsIHRoZSBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFuZCBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgZGVjcmVtZW50ZWQuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZm9jdXMgdG8gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBoYW5kbGluZyBwZWVyIHJlbW92YWwuIEhlcmUsIEkgc2VlIGFuIGBhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpYCBmb2xsb3dlZCBieSBgd2FpdF92YXJfZXZlbnRgLiBUaGlzIHdhaXQgaXMgZXhwbGljaXRseSB0aWVkIHRvIGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCByZWFjaGluZyB6ZXJvLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBoZXJlPyBJIGFsc28gc2VlIGBmbHVzaF93b3JrYCBjYWxsZWQsIHRoZW4gYG5hcGlfZGlzYWJsZWAsIGFuZCBmaW5hbGx5IGBuZXRpZl9uYXBpX2RlbGAuIFRoZSBjcml0aWNhbCBzZXF1ZW5jZSBoZXJlIGFwcGVhcnMgdG8gYmUgdGhhdCB0aGUgY29kZSAqd2FpdHMqIGZvciBwZW5kaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyB0byBjb21wbGV0ZSAqYmVmb3JlKiBkaXNhYmxpbmcgTkFQSSBhbmQgcmVtb3ZpbmcgdGhlIE5BUEkgc3RydWN0dXJlLlxuXG5UaGUgY29ubmVjdGlvbiBiZWNvbWVzIGNsZWFyZXIgd2hlbiBJIG5vdGUgdGhhdCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGRlY3JlbWVudGVkIGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgKGZvciBSWCkgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCB3aGljaCBpcyBjYWxsZWQgYnkgYHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcmAgKGZvciBUWCkuIFNvIHRoZSByZW1vdmFsIGxvZ2ljICpkZXBlbmRzKiBvbiB0aGVzZSB0YXNrcyBjb21wbGV0aW5nLlxuXG5UaGUgcHJvYmxlbSBzdGFydHMgdG8gbWFuaWZlc3QgaW4gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmA6IElmIHRoZSBxdWV1ZWluZyB0byB0aGUgcmluZyBmYWlscywgYW5kIGBwdHJfcmluZ19wcm9kdWNlX2JoYCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FUElQRWAuIFRoaXMgY2F1c2VzIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCB0byBydW4gd2hpY2ggY2FsbHMgYG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKWAuIFRoaXMgc2NlbmFyaW8gc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZGVhZGxvY2suXG5cbk15IGJyYWluIGlzIG5vdyBzY3JlYW1pbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTkFQSSBhbmQgcGVlciByZW1vdmFsLiBIZXJlJ3MgdGhlIGtleSBxdWVzdGlvbjogV2hhdCBpZiBOQVBJIGlzIGRpc2FibGVkIG9yIG5ldmVyIHJ1bnMsIG9yIGlzIGhlbGQgdXA/IFRoZSBzZXF1ZW5jZSBpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgaXMgYHdhaXRfdmFyX2V2ZW50YCAqYmVmb3JlKiBgbmFwaV9kaXNhYmxlYC4gVGhpcyByYWlzZXMgc2VyaW91cyBxdWVzdGlvbnMhIFdoYXQgaWYgcGFja2V0cyBhcmUgc3RpbGwgcXVldWVkIGluIGByeF9xdWV1ZWAsIHdhaXRpbmcgZm9yIE5BUEkgdG8gcnVuIGJ1dCBOQVBJIGlzIGRpc2FibGVkIG9yIG5vdCBnaXZlbiBhIENQVT8gSXQgY291bGQgbWVhbiBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIG5ldmVyIHJlYWNoZXMgemVybywgYW5kIHRoZSBwZWVyIHJlbW92YWwgaGFuZ3MuIEV2ZW4gbW9yZSwgaWYgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiBydW5zIGJ1dCBydW5zIG91dCBvZiBidWRnZXQsIG9yIHRoZSBuZXRpZiBpcyBkb3duLCB0aGVuIHRoZSBzYW1lIHNjZW5hcmlvIGNhbiBoYXBwZW4uIE9yLCB3aGF0IGlmIGEgcGVlciBpcyByZW1vdmVkIHdoaWxlIE5BUEkgaXMgZGlzYWJsZWQgb3IgdGhlIG5ldCBkZXZpY2UgaXMgY2xvc2VkPyBUaGF0IGNvdWxkIGxlYWQgdG8gYSBtYXNzaXZlIHByb2JsZW0uIFRoaXMgZmVlbHMgbGlrZSBhIGNsYXNzaWMgcG90ZW50aWFsIGRlYWRsb2NrLiBUaGlzIGNvdWxkIGVhc2lseSBsZWF2ZSBwYWNrZXRzIGluIGEgbGltYm8gc3RhdGUsIGFuZCBwcmV2ZW50IHBlZXJzIGZyb20gYmVpbmcgcmVtb3ZlZC5cblxuSSBuZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcyBvZiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgbm93LCBhbmQgdW5kZXJzdGFuZCAqd2hlbiogdGhpcyByZW1vdmFsIHByb2Nlc3MgaXMgdHJpZ2dlcmVkLCB0byBmdWxseSBncmFzcCB0aGUgcmlza3MgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDQ6NDMuODI0MTk3ODU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVyX3JlbW92ZV9hZnRlcl9kZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTgzPXN0YXRpYyB2b2lkIHBlZXJfbWFrZV9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjk3OnN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy05OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTE1OD12b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjUtXFx0c3luY2hyb25pemVfbmV0KCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjY6XFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTE2OT12b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTg0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCBcXHUwMDI2ZGVhZF9wZWVycywgcGVlcl9saXN0KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTg1OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xODYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDo0My44Njk2OTc0NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI4NzkzNDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBlZXIgUmVtb3ZhbCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgd2UncmUgaGFuZGxpbmcgcGVlciByZW1vdmFsIGFmdGVyIGEgY29ubmVjdGlvbiBpcyBkZWVtZWQgZGVhZC4gVGhlIGNvZGUncyBjaGFuZ2VkIGhlcmUsIHNwZWNpZmljYWxseSBpbiB0aGUgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGZsb3cuIEluaXRpYWxseSwgaXQgc2VlbXMgd2Ugd2VyZSB1c2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlYCBjYWxscyDigJMgb25lIGZvciBgcGFja2V0X2NyeXB0X3dxYCwgYW5kIGFub3RoZXIgZm9yIGBoYW5kc2hha2Vfc2VuZF93cWAuIE5vdywgaXQgbG9va3MgbGlrZSB0aGF0J3MgYmVlbiBzdHJlYW1saW5lZC5cblxuTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGlzIGNoYW5nZSwgd2h5IHdlJ3JlIG5vIGxvbmdlciB1c2luZyB0aGUgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgaW4gdGhlIG9sZCB3YXksIGFuZCB3aGF0IHRoZSBjdXJyZW50IGNvZGUgYWNoaWV2ZXMuIFRoZSBuZXcgY29kZSBpcyBub3cgdXNpbmcgYHdhaXRfdmFyX2V2ZW50YCwgYGZsdXNoX3dvcmtgIHRvIGEgYHRyYW5zbWl0X3BhY2tldF93b3JrYCwgTkFQSSBkaXNhYmxpbmcsIGFuZCBhbm90aGVyIGBmbHVzaF93b3JrYCBmb3IgYHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrYC4gV2UncmUgZGVmaW5pdGVseSBzaGlmdGluZyBob3cgd2UncmUgZW5zdXJpbmcgYWxsIHBlbmRpbmcgd29yayByZWxhdGVkIHRvIHRoZSBkZWFkIHBlZXIgaXMgY2xlYW5lZCB1cCBhbmQgdGhhdCByZXNvdXJjZXMgYXJlIGZyZWVkIHNhZmVseS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMgaGVyZS4gTGV0IG1lIGNoZWNrIHRoZSBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUgYXJvdW5kIGxpbmUgMTMzIG9mIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmF0aW9uYWxlIG9yIGNvbnRleHQgZm9yIHRoaXMgYWRqdXN0bWVudC4gVGhpcyBtaWdodCBleHBsYWluIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ0OjQ4LjE1NzYzNDY5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcXG4gMTM0OlxcdFxcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXFxuIDEzNTpcXHRcXHQgKiByZXR1cm5pbmcsIDIpIGZyb20gd2dfcGFja2V0X2NvbnN1bWVfZGF0YSgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkXFxuIDEzNjpcXHRcXHQgKiBhbmQgcmV0dXJuaW5nLCAzKSBmcm9tIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldCgpIGFmdGVyIGEgcG9pbnRcXG4gMTM3OlxcdFxcdCAqIHdoZXJlIGl0IGhhcyBwcm9jZXNzZWQgYW4gaW5jb21pbmcgaGFuZHNoYWtlIHBhY2tldCwgYnV0IHdoZXJlXFxuIDEzODpcXHRcXHQgKiBhbGwgY2FsbHMgdG8gcGFzcyBpdCBvZmYgdG8gdGltZXJzIGZhaWxzIGJlY2F1c2Ugb2YgaXNfZGVhZC4gV2Ugd29uJ3RcXG4gMTM5OlxcdFxcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tXFxuIDE0MDpcXHRcXHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24ndCBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgyKSBldmVudHVhbGx5LCBiZWNhdXNlXFxuIDE0MTpcXHRcXHQgKiB3Z19pbmRleF9oYXNodGFibGVfbG9va3VwIHdpbGwgYWx3YXlzIHJldHVybiBOVUxMLCBzaW5jZSB3ZSByZW1vdmVkXFxuIDE0MjpcXHRcXHQgKiBhbGwgZXhpc3Rpbmcga2V5cGFpcnMgYW5kIG5vIG1vcmUgY2FuIGJlIGNyZWF0ZWQ7IHdlIHdvbid0IGhhdmUgbmV3XFxuIDE0MzpcXHRcXHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XFxuIDE0NDpcXHRcXHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxcbiAxNDU6XFx0XFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXFxuIDE0NjpcXHRcXHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXFxuIDE0NzpcXHRcXHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cXG4gMTQ4OlxcdFxcdCAqL1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQtLXBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlbnVtX3BlZXJzO1xcbiAxNTE6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE1MjpcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBcXFwicmVtb3ZlXFxcIiBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxcbiAxNTU6XFx0ICogYSBwZWVyIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYW4gZW5kIGFuZCBub3QgcGFzc1xcbiAxNTY6XFx0ICogdGhlaXIgcmVmZXJlbmNlIG9udG8gYW5vdGhlciBjb250ZXh0LlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybjtcXG4gMTYyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cGVlcl9tYWtlX2RlYWQocGVlcik7XFxuIDE2NTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTY2OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NDo0OC4xNTc3MjgyOTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQzNzkzNTM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2lyZUd1YXJkIENvbmN1cnJlbmN5IExvZ2ljIEFuYWx5c2lzIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyByaWdodCBpbnRvIHRoZSBoZWFydCBvZiBXaXJlR3VhcmQncyBzeW5jaHJvbml6YXRpb24sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHBlZXIgcmVtb3ZhbCBhbmQgcGFja2V0IHF1ZXVlaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSB3aXRoIG91ciBmdXp6aW5nIHNldHVwPyBMdWNraWx5LCBXaXJlR3VhcmQgaXMgYSBzdGFuZGFyZCB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIGluIExpbnV4IChgZHJpdmVycy9uZXQvd2lyZWd1YXJkYCksIHNvIHRoYXQncyBhIHllcy4gSXQncyBmdWxseSBlbXVsYXRlZCBhbmQgcnVucyBpbiBRRU1VL0dDRSB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIGFuZCBzeXprYWxsZXIgcmVndWxhcmx5IGZ1enplcyBpdCB0aHJvdWdoIG5ldGxpbmssIHVzaW5nIGBHRU5MX0FETUlOX1BFUk1gIG9yIHVzZXIgbmFtZXNwYWNlcyB3aXRoIGBDQVBfTkVUX0FETUlOYC4gU3l6a2FsbGVyIGFscmVhZHkgaGFzIGRlc2NyaXB0aW9ucyBmb3IgV2lyZUd1YXJkLCB3aXRoIGNhbGxzIHRvIGBzeXpfd2lyZWd1YXJkX3NldF9kZXZpY2VgLCBydG5ldGxpbmsgY2FsbHMgbGlrZSBgUlRNX05FV0xJTktgIHdpdGggYGtpbmQgPSBcIndpcmVndWFyZFwiYCBzbyB3ZSBhcmUgZ29sZGVuLlxuXG5Ob3csIGFwcGx5aW5nIHRoZSBlc3RhYmxpc2hlZCB0cmlhZ2UgcGhpbG9zb3BoeTogSXMgaXQgcmVhY2hhYmxlPyBZZXMuIEFuZCB0aGlzIGlzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlOyB0aGUgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gd29ya3F1ZXVlIGZsdXNoaW5nIHRvIGF0b21pYyByZWZjb3VudGluZyAoYHBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgLyBgd2FrZV91cF92YXJgLiBUaGlzIGlzIGEgY2xlYXIgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UsIHNvIG5vIFwiZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nXCIgaGFuZC13YXZpbmcgd2lsbCBkby4gR2l2ZW4gdGhlc2UgY3JpdGVyaWEgYW5kIHRoYXQgV2lyZUd1YXJkIGlzIGEgcmVhY2hhYmxlIGRyaXZlciB2aWEgbmV0bGluaywgdGhlIGZ1enppbmcgcG90ZW50aWFsIGlzIGRlZmluaXRpdmVseSBoaWdoIChgV29ydGhGdXp6aW5nID0gdHJ1ZWApLlxuXG5OZXh0IHVwOiBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBzZWUgdGhlIGltcGFjdGVkIGNvZGU6XG5cbkZyb20gdGhlIGRpZmYsIGhlcmUncyB3aGF0J3MgdG91Y2hlZCBvciBkaXJlY3RseSBjYWxsaW5nIHRoZSBtb2RpZmllZCBjb2RlOlxuXG4xLiAgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgOlxuICAgICogICBgd2dfcGVlcl9jcmVhdGVgXG4gICAgKiAgIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCAoQ2FsbGVkIGJ5IGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgKVxuMi4gIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaGA6XG4gICAgKiAgIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIChzdGF0aWMgaW5saW5lOyBjYWxsZWQgZnJvbSBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAgYW5kIGB3Z19wYWNrZXRfY3JlYXRlX2RhdGFgKVxuICAgICogICBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgKHN0YXRpYyBpbmxpbmU7IGNhbGxlZCBmcm9tIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIGFuZCBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYClcbjMuICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY2A6XG4gICAgKiAgIGB3Z19wYWNrZXRfcnhfcG9sbGAgKE1vZGlmaWVkIGRpcmVjdGx5IHdpdGggdGhlIGBhdG9taWNfZGVjX2FuZF90ZXN0YCBhbmQgYHdha2VfdXBfdmFyYClcbiAgICAqICAgYHdnX3BhY2tldF9jb25zdW1lX2RhdGFgXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIHN0YXRpYz8gSXQgbG9va3MgbGlrZSBpdCBpcyAoYHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpYCkgYW5kIGl0IGlzIG5vdCBpbmxpbmVkLiBJdCBpcyBjYWxsZWQgYnkgYHdnX3BlZXJfcmVtb3ZlYCBhbmQgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIHNvIG5vdyBJIGhhdmUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cblNvLCBsZXQncyBjb21waWxlIGFsbCB0aGlzIGluZm9ybWF0aW9uOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczpcblxuKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYDpcbiAgICAqICAgYHdnX3BlZXJfY3JlYXRlYFxuICAgICogICBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGBcbiAgICAqICAgYHdnX3BlZXJfcmVtb3ZlYFxuICAgICogICBgd2dfcGVlcl9yZW1vdmVfYWxsYFxuKiAgIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYDpcbiAgICAqICAgYHdnX3BhY2tldF9yeF9wb2xsYFxuICAgICogICBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWBcbiogICBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuY2A6XG4gICAgKiAgIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgXG4gICAgKiAgIGB3Z19wYWNrZXRfdHhfd29ya2VyYFxuICAgICogICBgd2dfcGFja2V0X2NyZWF0ZV9kYXRhYFxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBzeW1ib2xzIGFyZSBub24tc3RhdGljIGFuZCBhcmUgYWN0dWFsIHN5bWJvbHMgaW4gdm1saW51eCBvciB3aXJlZ3VhcmQgbW9kdWxlIHRvIG1ha2Ugc3VyZSB0aGVzZSBzeW1ib2xzIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIEFmdGVyIGNoZWNraW5nIHRoZSBkZWZpbml0aW9ucyBhbmQgdGhlaXIgdmlzaWJpbGl0eSwgdGhlc2UgYXJlIHRoZSB0YXJnZXRzIEknbGwgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDIuNTM3MDg0MDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4NzQzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz0zNDA9c3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzozOTI6XFx0XFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTM5My1cXHRcXHRpZiAoSVNfRVJSKHBlZXIpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTIwPXN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjIyOnN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTIzLVxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg9Mzc9c3RydWN0IHdnX3BlZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjcwOnN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTcxLVxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDIuNTg2MDc5NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5OTMyODE5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgd2dfcGVlcl9yZW1vdmVgIGFuZCBgd2dfcGVlcl9yZW1vdmVfYWxsYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBwZWVyIHJlbW92YWwgZnVuY3Rpb25zLiBgd2dfcGVlcl9yZW1vdmVgIGlzIHByb2JhYmx5IHRoZSB3b3JraG9yc2UsIHRoZSBvbmUgdGhhdCdzIGRlc2lnbmVkIHRvIHJlbW92ZSBhIHNwZWNpZmljIHBlZXIgZnJvbSBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEknbSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyDigJMgZGVhbGxvY2F0aW5nIG1lbW9yeSwgdXBkYXRpbmcgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZW5zdXJpbmcgdGhlIGludGVyZmFjZSBzdGF0ZSBpcyBjb25zaXN0ZW50IGFmdGVyIHRoZSByZW1vdmFsLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIGxvY2tpbmcsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQuIFJhY2UgY29uZGl0aW9ucyB3aXRoIGluYm91bmQgYW5kIG91dGJvdW5kIHBhY2tldHMgY291bGQgYmUgYnJ1dGFsLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSByZW1vdmluZyBhIHBlZXIgdGhhdCdzIGN1cnJlbnRseSBhY3RpdmUuIERvZXMgaXQgZ3JhY2VmdWxseSB0ZWFyIGRvd24gdGhlIGNvbm5lY3Rpb24/IERvZXMgaXQgZHJvcCBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBlZXIgaW1tZWRpYXRlbHk/IEFuZCB3aGF0IGFib3V0IGNyeXB0b2dyYXBoaWMgY29uc2lkZXJhdGlvbnM/IERvZXMgaXQgaW52YWxpZGF0ZSBhbnkga2V5cyBvciBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcGVlcj9cblxuYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIG9uIHRoZSBvdGhlciBoYW5kLCBzZWVtcyBsaWtlIHRoZSBudWNsZWFyIG9wdGlvbi4gSXQncyB0aGUgXCJudWtlIHRoZSB3aG9sZSBwZWVyIGxpc3RcIiBmdW5jdGlvbi4gVGhpcyBwcm9iYWJseSBnZXRzIGNhbGxlZCBpbiBhIHNjZW5hcmlvIHdoZXJlIHRoZSBlbnRpcmUgaW50ZXJmYWNlIGlzIGJlaW5nIHRvcm4gZG93biwgb3Igd2hlbiB5b3UgbmVlZCBhIGNsZWFuIHNsYXRlLiBJJ20gYmV0dGluZyB0aGlzIGZ1bmN0aW9uIGVpdGhlciBjYWxscyBgd2dfcGVlcl9yZW1vdmVgIHJlcGVhdGVkbHkgZm9yIGVhY2ggcGVlciwgb3IgaXQgb3B0aW1pemVzIHRoZSBjbGVhbnVwIHByb2Nlc3MgZm9yIGJ1bGsgcmVtb3ZhbC4gVGhlIGxhdHRlciB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHBlZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgdGhlIGl0ZXJhdGlvbi9yZW1vdmFsIHByb2Nlc3MuIERvZXMgaXQgcmV0dXJuIGVycm9ycywgb3IgZG9lcyBpdCB0cnkgdG8ga2VlcCBjaHVnZ2luZyBhbG9uZz8gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIHRvIHByZXZlbnQgZG91YmxlLWZyZWVzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIHBlZXJzLiBPdmVyYWxsLCB0aGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgY291bGQgZWFzaWx5IGJlY29tZSBhIHBvaW50IG9mIGZhaWx1cmUsIG9yIGEgc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTowNS41NzkzNjMzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTQ5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGVlcl9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNTMtXFx0LyogVGhlIGZpbmFsIHJlZmVyZW5jZXMgYXJlIGNsZWFyZWQgaW4gdGhlIGJlbG93IGNhbGxzIHRvIGRlc3Ryb3lfd29ya3F1ZXVlLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyNTQ6XFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjU1LVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHdnLVxcdTAwM2VoYW5kc2hha2VfcmVjZWl2ZV93cSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXR1BFRVJfRl9SRU1PVkVfTUUpIHtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjQwNTpcXHRcXHR3Z19wZWVyX3JlbW92ZShwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9NDczPWludCB3Z19zZXRfZGV2aWNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE3LVxcdGlmIChmbGFncyBcXHUwMDI2IFdHREVWSUNFX0ZfUkVQTEFDRV9QRUVSUylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjUxODpcXHRcXHR3Z19wZWVyX3JlbW92ZV9hbGwod2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01MzktXFx0XFx0XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1NDA6XFx0XFx0XFx0XFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01NDEtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz05Nz1zdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTctICovXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNTg6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE2OC1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE2OTp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE3MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTgwPXZvaWQgd2dfcGVlcl9wdXQoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODE6dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo4Mjp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC04My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MDUuNjI1ODY0NzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MzA4MTI3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdpcmVHdWFyZCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgbGV0J3MgdGFrZSBzdG9jayBvZiB0aGVzZSBXaXJlR3VhcmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYW5kIGB3Z19wZWVyX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYHBlZXIuY2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQsIGluZGljYXRpbmcgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhhdCBzcGVjaWZpYyBmaWxlLCBsaWtlbHkgcGFydCBvZiB0aGUgcGVlciBtYW5hZ2VtZW50IEFQSS4gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgIGlzIGFsc28gaW4gYHBlZXIuY2AsIHNvIGl0IHByb2JhYmx5IHJlbGF0ZXMgdG8gdGhlIHNhbWUgcGVlciBsaWZlY3ljbGUgcHJvY2Vzc2VzLlxuXG5Nb3Zpbmcgb24sIEkgZmluZCB0aGF0IGB3Z19wYWNrZXRfcnhfcG9sbGAgaXMgbm9uLXN0YXRpYyBpbiBgcmVjZWl2ZS5jYC4gVGhhdCBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHJlY2VpdmluZyBwYWNrZXRzIGFuZCBpcyBhY2Nlc3NpYmxlIG1vcmUgYnJvYWRseSB0aGFuIGp1c3Qgd2l0aGluIGByZWNlaXZlLmNgLiBTaW1pbGFybHksIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgIChpbiBgc2VuZC5jYCksIGB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJgIChpbiBgcmVjZWl2ZS5jYCksIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAgKGFsc28gaW4gYHNlbmQuY2ApIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0IGZvciB3b3JrZXIgdGhyZWFkcyBoYW5kbGluZyB0aGUgY3JpdGljYWwgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCB0cmFuc21pc3Npb24gYXNwZWN0cy5cblxuSG1tLCBJIHNob3VsZCBjaGVjayBvbiB0aGUgcGFja2V0IGNvbnN1bXB0aW9uIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMsIGp1c3QgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUuIFNvLCBsZXQgbWUgc2VlLi4uIEFoLCBgd2dfcGFja2V0X2NvbnN1bWVfZGF0YWAgKmlzKiBzdGF0aWMgd2l0aGluIGByZWNlaXZlLmNgLiBJdCdzIGFuIGludGVybmFsIGZ1bmN0aW9uLiBJbnRlcmVzdGluZ2x5IHRob3VnaCwgaXQncyBjYWxsZWQgYnkgYHdnX3BhY2tldF9yZWNlaXZlYCwgd2hpY2ggaXMgbm9uLXN0YXRpYyEgVGhhdCBpbXBsaWVzIHNvbWUga2luZCBvZiBkYXRhLWhhbmRsaW5nIGJvdW5kYXJ5IHRoZXJlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIHRob3NlIGZ1bmN0aW9ucyBJIHNob3VsZCBhbHNvIGNoZWNrIGB3Z19wYWNrZXRfcmVjZWl2ZWAgYW5kIGB3Z194bWl0YCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGFtIHNvbGlkIGluIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjExLjI1NjY3OTUxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGFja2V0X3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTI5PXdnX3BhY2tldF9wZXJjcHVfbXVsdGljb3JlX3dvcmtlcl9hbGxvYyh3b3JrX2Z1bmNfdCBmdW5jdGlvbiwgdm9pZCAqcHRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMxLS8qIHJlY2VpdmUuYyBBUElzOiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjMyOnZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTMzLXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9yZWNlaXZlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz01MTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YShzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTQ0OnZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jPTMxNT1zdGF0aWMgaW50IHdnX3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNC1cXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYzozMjU6XFx0d2dfcGFja2V0X3JlY2VpdmUod2csIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTMyNi1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTEuMzAyNTc0MzQ1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Nzk1ODQ3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFRyYW5zbWlzc2lvbiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgb3ZlcmFsbCB0cmFuc21pc3Npb24gcHJvY2VzcywgYW5kIEknbSBzdGFydGluZyB0byB0aGluayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgYXNwZWN0cy4gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoYXQgYHRyYW5zbWl0YCBvciBgeG1pdGAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHdnX3htaXRgIHRvIGdldCBhIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB0cmFuc21pc3Npb24gaXMgaGFuZGxlZCBhdCB0aGF0IGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTMuMTgyMTYyNTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcyMDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MTE1PXN0YXRpYyBpbnQgd2dfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzNi1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MTM3OnN0YXRpYyBuZXRkZXZfdHhfdCB3Z194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yMzgtXFx0Lm5kb19zdG9wXFx0XFx0PSB3Z19zdG9wLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoyMzk6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB3Z194bWl0LFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0yNDAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTMuMjI4ODg5NDM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDU1NTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdpcmVHdWFyZCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkgc2VlOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFsbCBjbGVhcmx5IHJlbGF0ZSB0byBXaXJlR3VhcmQgcGVlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBkZXNjcmlwdGlvbi5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cz8gSSBuZWVkIHRvIGVuc3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50IGhhcyB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gQWgsIGhlcmUgaXQgaXM6IGBXSVJFR1VBUkRgIGlzIHRoZSBjb3JlIGNvbmZpZywgYW5kIGl0IHJlbGllcyBvbiBgTkVUYCBhbmQgYElORVRgLCBhbG9uZyB3aXRoIHNvbWUgY3J5cHRvZ3JhcGh5IG9wdGlvbnMuIE9rYXksIHNvIGBXSVJFR1VBUkRgLCBgTkVUYCwgYW5kIGBJTkVUYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBTaW5jZSBgV0lSRUdVQVJEYCBpcyB0aGUgcHJpbWFyeSBmb2N1cywgSSdsbCBpbmNsdWRlIGl0IGFuZCB0aGUgaW1wbGllZCBkZXBlbmRlbmNpZXMuIEl0J3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgdHJlZS5cblxuTGV0J3MgZG8gYSBxdWljayBtZW50YWwgcmV2aWV3IHRvIGVuc3VyZSBJJ20gYWRoZXJpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBjb21wbGV0ZWx5LiBNeSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4gV2h5PyBCZWNhdXNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBXaXJlR3VhcmQsIHNwZWNpZmljYWxseSB0aGUgZHJpdmVyIGl0c2VsZiAoYGRyaXZlcnMvbmV0L3dpcmVndWFyZGApLiBUaGlzIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzIOKAkyBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuIFRoZSBwYXRjaCdzIGNvcmUgbW9kaWZpY2F0aW9uIHJlcGxhY2VzIHdvcmtxdWV1ZSBmbHVzaGluZyB3aXRoIGF0b21pYyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGV2ZW50IHNpZ25hbGluZywgZGlyZWN0bHkgaW1wYWN0aW5nIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZWluZy5cblxuTXkgRm9jdXNTeW1ib2xzLCBhcyBvdXRsaW5lZCBpbiB0aGUgcHJvbXB0LCBhcmUgZXhhY3RseSB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBlYXJsaWVyOiBgd2dfcGVlcl9jcmVhdGVgLCBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAsIGB3Z19wZWVyX3JlbW92ZWAsIGB3Z19wZWVyX3JlbW92ZV9hbGxgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3R4X3dvcmtlcmAuIFRoZXNlIGFyZSBub3QgdWJpcXVpdG91czsgdGhleSBhcmUgYWxsIFdpcmVHdWFyZC1zcGVjaWZpYy5cblxuRmluYWxseSwgdGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHNpbXBseSBgV0lSRUdVQVJEYCBhbmQgYElORVRgLiBUaGlzIGlzIGFsbCBjbGVhci4gVGhlIHJlYXNvbmluZyBpcyBkaXJlY3QuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IG15IGZpbmRpbmdzIGFuZCBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU3MCwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTguMTM0NDQ4MzAzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHVzZWQgZHVyaW5nIFdpcmVHdWFyZCBwZWVyIHRlYXJkb3duLiBJbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBkZXZpY2Utd2lkZSBwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxIHdvcmtxdWV1ZXMgbXVsdGlwbGUgdGltZXMsIGl0IGludHJvZHVjZXMgYSBwZXItcGVlciBhdG9taWMgcmVmY291bnQgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSB0cmFja2VkIGFjcm9zcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGFuZCB3YWl0cyBmb3IgaXQgd2l0aCB3YWl0X3Zhcl9ldmVudCgpLCBmb2xsb3dlZCBieSB0YXJnZXRlZCBmbHVzaF93b3JrKCkgY2FsbHMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgcmVhZGlseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgdGhyb3VnaCBydG5ldGxpbmsgYW5kIGdlbmV0bGluayBpbnRlcmZhY2VzLiBDb25jdXJyZW5jeSBhbmQgcXVldWVpbmcgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgaGFuZ3MgZHVyaW5nIHBlZXIgcmVtb3ZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXSVJFR1VBUkRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZWVyX3JlbW92ZV9hZnRlcl9kZWFkXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVfYWxsXCIsXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGFja2V0X3J4X3BvbGxcIixcbiAgICBcIndnX3BhY2tldF9lbmNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3R4X3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB1c2VkIGR1cmluZyBXaXJlR3VhcmQgcGVlciB0ZWFyZG93bi4gSW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZGV2aWNlLXdpZGUgcGFja2V0X2NyeXB0X3dxIGFuZCBoYW5kc2hha2Vfc2VuZF93cSB3b3JrcXVldWVzIG11bHRpcGxlIHRpbWVzLCBpdCBpbnRyb2R1Y2VzIGEgcGVyLXBlZXIgYXRvbWljIHJlZmNvdW50IChwYWNrZXRfY3J5cHRfcGVuZGluZykgdHJhY2tlZCBhY3Jvc3MgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBhbmQgd2FpdHMgZm9yIGl0IHdpdGggd2FpdF92YXJfZXZlbnQoKSwgZm9sbG93ZWQgYnkgdGFyZ2V0ZWQgZmx1c2hfd29yaygpIGNhbGxzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyIHJlYWRpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIHRocm91Z2ggcnRuZXRsaW5rIGFuZCBnZW5ldGxpbmsgaW50ZXJmYWNlcy4gQ29uY3VycmVuY3kgYW5kIHF1ZXVlaW5nIHJlZmFjdG9yaW5ncyBsaWtlIHRoaXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIHdha2V1cHMsIG9yIGhhbmdzIGR1cmluZyBwZWVyIHJlbW92YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjE4LjIxNjg1MDM5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNjI5MzIzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MTguMjE3NDE0NzU5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEyNjI4NzU0OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXFxuXFxuVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOlxcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKWAuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXFxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTdkM2IwZjEyMzg3YzRiN2NkNTkxMjZlMDU0MDZhYzE2OTFhY2U0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEyOjQzOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLjM0ODQyYjMzYjI4YTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xuIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4rXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuK1x0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gXHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbid0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxuLVx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxuLVx0ICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vXG4tXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXG4rXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4rXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbitcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYXG4rXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxuIFx0ICovXG4rXHRhdG9taWNfZGVjKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuK1x0d2FpdF92YXJfZXZlbnQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyxcbitcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbitcbitcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4gXG4tXHQvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjEpIEZvciBzZW5kIChidXQgbm90IHJlY2VpdmUsIHNpbmNlIHRoYXQncyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQncyB3cSkuICovXG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbi1cdC8qIGIuMi4xKSBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuK1x0LyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbiBcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4gXHQgKi9cbiBcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gXG4tXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxuLVx0ICogY2xlYXJfcGVlcl93b3JrKSBubyBsb25nZXIgYXJlIGluIHVzZS5cbitcdC8qIGNsZWFyX3BlZXJfd29yayB3YXMgZmx1c2hlZCBieSB3Z190aW1lcnNfc3RvcCgpLiBFbnN1cmUgdGhlIHJlbWFpbmluZ1xuK1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiBcbiBcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5pbmRleCA3MThmYjQyYmRhYzdlLi42NDQxMmM2N2Y0MTMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuQEAgLTM3LDYgKzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHtcbiBzdHJ1Y3Qgd2dfcGVlciB7XG4gXHRzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7XG4gXHRzdHJ1Y3QgcHJldl9xdWV1ZSB0eF9xdWV1ZSwgcnhfcXVldWU7XG4rXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uNWNlNTc1NjVjOGZmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxuIFxuIHN0cnVjdCB3Z19kZXZpY2U7XG5AQCAtMTYxLDYgKzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0YXRvbWljX2luYyhcdTAwMjZQQUNLRVRfUEVFUihza2IpLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcbiBcdC8qIFRoZW4gd2UgcXVldWUgaXQgdXAgaW4gdGhlIGRldmljZSBxdWV1ZSwgd2hpY2ggY29uc3VtZXMgdGhlXG4gXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXG5AQCAtMTgyLDYgKzE4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XG4gXHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2UEFDS0VUX0NCKHNrYiktXHUwMDNlc3RhdGUsIHN0YXRlKTtcbiBcdHF1ZXVlX3dvcmtfb24od2dfY3B1bWFza19jaG9vc2Vfb25saW5lKFx1MDAyNnBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVx1MDAzZWludGVybmFsX2lkKSxcbiBcdFx0ICAgICAgcGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuK1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuY1xuaW5kZXggODI0YmJlZmNlNjFjNy4uYmIzNWUzMjA1NDkxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmNcbkBAIC00NzYsOSArNDc2LDExIEBAIGludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gbmV4dDpcbiBcdFx0d2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpO1xuLVx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiBcdFx0aWYgKHVubGlrZWx5KGZyZWUpKVxuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHRcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIFxuIFx0XHRpZiAoKyt3b3JrX2RvbmUgXHUwMDNlPSBidWRnZXQpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToxOC4yMTc0MTYyNDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM5NTYyNDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBXaXJlR3VhcmQgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIFdpcmVHdWFyZCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBhbmQgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eS5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYHBlZXIuaGAsIGBxdWV1ZWluZy5oYCwgYW5kIGByZWNlaXZlLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyB0b3VjaGVzIGNvcmUgV2lyZUd1YXJkIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYGZsdXNoX3dvcmtxdWV1ZWAgb24gc2hhcmVkIHdvcmtxdWV1ZXMgKGBwYWNrZXRfY3J5cHRfd3FgLCBgaGFuZHNoYWtlX3NlbmRfd3FgKSB0byBlbnN1cmUgbm8gcmVmZXJlbmNlcyByZW1haW5lZCBhZnRlciBhIHBlZXIgd2FzIHJlbW92ZWQuIFRoaXMgbWlnaHQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1ZSB0byBsYXRlbmN5IG9yIHN0YXJ2YXRpb24sIGVzcGVjaWFsbHkgd2l0aCBtYW55IHBlZXJzIG9yIGludGVyZmFjZXMuIE1heWJlIGl0IHdhcyBhbiBpbnRlbnRpb25hbCBkZXNpZ24gY2hvaWNlIHRvIGF2b2lkIGdsb2JhbCB3b3JrcXVldWUgZmx1c2hlcy5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCBmaWVsZCBpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIHdoZW4gcGFja2V0cyBhcmUgZW5xdWV1ZWQgKGluIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGApLiBJdCBpcyBkZWNyZW1lbnRlZCB3aGVuIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBvciB3aGVuIHRoZSBwZWVyIGlzIHJlbW92ZWQgKGluIGB3Z19wYWNrZXRfcnhfcG9sbGAgYW5kIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCkuIFRoZSBgd2FpdF92YXJfZXZlbnRgIGluIGBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkYCBpcyBub3cgYmFzZWQgb24gdGhpcyBhdG9taWMgY291bnRlci4gSW5zdGVhZCBvZiBzaW1wbHkgZmx1c2hpbmcgdGhlIHdvcmtxdWV1ZXMsIHRoZSBjb2RlIG5vdyB3YWl0cyBmb3IgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCB0byByZWFjaCB6ZXJvLiBUaGlzIHNlZW1zIGxpa2UgYW4gYXR0ZW1wdCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB3b3JrcXVldWUgZmx1c2hlcyBieSB3YWl0aW5nIG9ubHkgb24gd2hhdCdzIGFjdGl2ZS5cblxuVGhpcyBzb3VuZHMgbGlrZSBhIHdlbGwtaW50ZW50aW9uZWQgb3B0aW1pemF0aW9uLCBidXQgaXQncyBhIGJpdCBjb21wbGV4LiBUaGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHRoZSB3YWl0IGNvbmRpdGlvbiBpbnRyb2R1Y2UgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1pc3NlZCBtZW1vcnkgcmVsZWFzZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBwZWVyIHJlbW92YWwuIFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBjb25jZXJuaW5nIGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIGFuZCB0aGVzZSBjaGFuZ2VzIHRvdWNoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcy5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBBIHF1aWNrIGdyZXBwZXIgc2VhcmNoIG9yIHJlYWRpbmcgdGhvc2UgZmlsZXMgbWlnaHQgcmV2ZWFsIG1vcmUgZGV0YWlscyBhbmQgaGVscCBtZSBldmFsdWF0ZSB0aGlzIGNvZGUncyBudWFuY2VzLlxuXG4qKk15IGluc3RpbmN0IGlzIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZXJlJ3MgYSByZWFzb25hYmxlIHJpc2sgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIGFuZCBhIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbiB3aWxsIGJlIGFibGUgdG8gY2F0Y2ggYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgdGhlc2UgcmVmYWN0b3JpbmcgY2hhbmdlcy4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MjMuNjEzMDQzNjU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfY3J5cHRfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUzLVxcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo1NDpcXHRhdG9taWNfc2V0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01NS1cXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTk3PXN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExNS1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjExNjpcXHRhdG9taWNfZGVjKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxMTc6XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTE4OlxcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg9Mzc9c3RydWN0IHdnX3BlZXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC0zOS1cXHRzdHJ1Y3QgcHJldl9xdWV1ZSB0eF9xdWV1ZSwgcnhfcXVldWU7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo0MDpcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oLTQxLVxcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE1Mz1zdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNjQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTY1OlxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNjYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNzc9c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xODYtXFx0XFx0ICAgICAgcGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTg3OlxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTg4OlxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTg5LVxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00Mzg9aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDgwLVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjQ4MTpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDgyOlxcdFxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy00ODMtXFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjIzLjY1OTY0ODc4OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg1MzY2Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgd2dfcGVlcmAgQWxsb2NhdGlvbiBhbmQgRGVzdHJ1Y3Rpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGB3Z19wZWVyYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGl0cyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbGlmZWN5Y2xlIHdpdGhpbiBXaXJlR3VhcmQuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgZGVlcCBkaXZlLlxuXG5NeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgaXMgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHBlZXIgbWFuYWdlbWVudCwgYW5kIHRodXMsIGhvbGQgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIGFuZCBldmVudHVhbCBkZXN0cnVjdGlvbiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjI3LjU0NTAxODExOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4gIDIzOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSxcXG4gIDI0OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSlcXG4gIDI1OlxcdHtcXG4gIDI2OlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xcbiAgMjc6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNndnLVxcdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRpZiAod2ctXFx1MDAzZW51bV9wZWVycyBcXHUwMDNlPSBNQVhfUEVFUlNfUEVSX0RFVklDRSlcXG4gIDMyOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdHBlZXIgPSBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4gIDM1OlxcdFxcdGlmICh1bmxpa2VseSghcGVlcikpXFxuICAzNjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzc6XFx0XFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VlbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpKVxcbiAgMzg6XFx0XFx0XFx0Z290byBlcnI7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHBlZXItXFx1MDAzZWRldmljZSA9IHdnO1xcbiAgNDE6XFx0XFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWhhbmRzaGFrZSwgXFx1MDAyNndnLVxcdTAwM2VzdGF0aWNfaWRlbnRpdHksXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5LCBwZWVyKTtcXG4gIDQzOlxcdFxcdHBlZXItXFx1MDAzZWludGVybmFsX2lkID0gYXRvbWljNjRfaW5jX3JldHVybihcXHUwMDI2cGVlcl9jb3VudGVyKTtcXG4gIDQ0OlxcdFxcdHBlZXItXFx1MDAzZXNlcmlhbF93b3JrX2NwdSA9IG5yX2NwdW1hc2tfYml0cztcXG4gIDQ1OlxcdFxcdHdnX2Nvb2tpZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VsYXRlc3RfY29va2llKTtcXG4gIDQ2OlxcdFxcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xcbiAgNDc6XFx0XFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XFxuICA0ODpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XFxuICA0OTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrLCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKTtcXG4gIDUwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xcbiAgNTE6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2V0eF9xdWV1ZSk7XFxuICA1MjpcXHRcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gIDUzOlxcdFxcdC8qIEtlZXAgdGhpcyBhYm92ZSB6ZXJvIHVudGlsIHRlYXJkb3duIHByZXZlbnRzIG5ldyBwYWNrZXQgaGFuZG9mZnMuICovXFxuICA1NDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XFxuICA1NTpcXHRcXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuICA1NjpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gIDU3OlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xcbiAgNTg6XFx0XFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcXHUwMDI2cGVlci1cXHUwMDNlbGFzdF9zZW50X2hhbmRzaGFrZSk7XFxuICA1OTpcXHRcXHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaS5zdGF0ZSk7XFxuICA2MDpcXHRcXHRuZXRpZl9uYXBpX2FkZCh3Zy1cXHUwMDNlZGV2LCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSwgd2dfcGFja2V0X3J4X3BvbGwpO1xcbiAgNjE6XFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbiAgNjI6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNlcGVlcl9saXN0LCBcXHUwMDI2d2ctXFx1MDAzZXBlZXJfbGlzdCk7XFxuICA2MzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cGVlci1cXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcXG4gIDY0OlxcdFxcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVxcdTAwM2VwZWVyX2hhc2h0YWJsZSwgcGVlcik7XFxuICA2NTpcXHRcXHQrK3dnLVxcdTAwM2VudW1fcGVlcnM7XFxuICA2NjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IFBlZXIgJWxsdSBjcmVhdGVkXFxcXG5cXFwiLCB3Zy1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCk7XFxuICA2NzpcXHRcXHRyZXR1cm4gcGVlcjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0ZXJyOlxcbiAgNzA6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xcbiAgNzE6XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDcyOlxcdH1cXG4gIDczOlxcdFxcbiAgNzQ6XFx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0X21heWJlX3plcm8oc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSxcXG4gIDc3OlxcdFxcdFxcdFxcdCBcXFwiVGFraW5nIHBlZXIgcmVmZXJlbmNlIHdpdGhvdXQgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9ja1xcXCIpO1xcbiAgNzg6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyIHx8ICFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cGVlci1cXHUwMDNlcmVmY291bnQpKSlcXG4gIDc5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyNy41NDUwOTQ4MThaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA3MjQ1NTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIFBlZXIgSW5pdGlhbGl6YXRpb24gYW5kIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBwZWVyIG1hbmFnZW1lbnQgY29kZS4gRmlyc3QgdGhpbmcsIEknbSBub3RpbmcgdGhlIGV4cGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBhIG5ldyBgcGVlcmAgc3RydWN0dXJlIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBleHBlY3RlZCwgYXMgd2UncmUgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC4gR29vZC4gV2UncmUgemVyb2luZyB0aGUgY2FjaGUsIHdoaWNoIGlzIGEgc29saWQgaW5pdGlhbCBzYWZldHkgbWVhc3VyZSwgd2hpY2ggZ2l2ZXMgdXMgYW4gZWFzeSBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nLCBhbmQgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyBhIG5ldyBmaWVsZCBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgdXNpbmcgYGF0b21pY19zZXRgIHRvIDEsIEkgc2VlLiBBbHdheXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG5ldyBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCBhbnkgcmVhZC1iZWZvcmUtd3JpdGUgb3IgcmFjZSBjb25kaXRpb25zIGxhdGVyLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIG91ciBjbGVhbnVwIHByb2Nlc3MgaXMgc2FuZSwgSSdtIG1vdmluZyBvbiB0byBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIExldCdzIHNlZSBob3cgdGhhdCBoYW5kbGVzIHRoZSBsaWZlY3ljbGUgYW5kIGRlYWxsb2NhdGlvbiBvZiBhIGRlYWQgcGVlci4gV2UgYWx3YXlzIGhhdmUgdG8gY2hlY2sgdGhlIGVkZ2UgY2FzZXMgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyOS42MTc1NTQ0ODdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFxuICA5MTpcXHRcXHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi9cXG4gIDkyOlxcdFxcdFdSSVRFX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIFRoZSBjYWxsZXIgbXVzdCBub3cgc3luY2hyb25pemVfbmV0KCkgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuICovXFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRXQVJOX09OKCFwZWVyLVxcdTAwM2Vpc19kZWFkKTtcXG4gMTAwOlxcdFxcbiAxMDE6XFx0XFx0LyogTm8gbW9yZSBrZXlwYWlycyBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBwZWVyLCBzaW5jZSBpc19kZWFkIHByb3RlY3RzXFxuIDEwMjpcXHRcXHQgKiBhZGRfbmV3X2tleXBhaXIsIHNvIHdlIGNhbiBub3cgZGVzdHJveSBleGlzdGluZyBvbmVzLlxcbiAxMDM6XFx0XFx0ICovXFxuIDEwNDpcXHRcXHR3Z19ub2lzZV9rZXlwYWlyc19jbGVhcihcXHUwMDI2cGVlci1cXHUwMDNla2V5cGFpcnMpO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQvKiBEZXN0cm95IGFsbCBvbmdvaW5nIHRpbWVycyB0aGF0IHdlcmUgaW4tZmxpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2ZcXG4gMTA3OlxcdFxcdCAqIHRoaXMgZnVuY3Rpb24uXFxuIDEwODpcXHRcXHQgKi9cXG4gMTA5OlxcdFxcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXFxuIDExMjpcXHRcXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcXG4gMTEzOlxcdFxcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIFRYXFxuIDExNDpcXHRcXHQgKiBwYWNrZXRzIHRvIHNjaGVkdWxlIHRoZWlyIHNlcmlhbCB3b3JrIGFuZCBSWCBwYWNrZXRzIHRvIGxlYXZlIHJ4X3F1ZXVlLlxcbiAxMTU6XFx0XFx0ICovXFxuIDExNjpcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIDExNzpcXHRcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuIDExODpcXHRcXHRcXHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gMTIzOlxcdFxcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIDEyNDpcXHRcXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxcbiAxMjU6XFx0XFx0ICovXFxuIDEyNjpcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGNsZWFyX3BlZXJfd29yayB3YXMgZmx1c2hlZCBieSB3Z190aW1lcnNfc3RvcCgpLiBFbnN1cmUgdGhlIHJlbWFpbmluZ1xcbiAxMjk6XFx0XFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiAxMzA6XFx0XFx0ICovXFxuIDEzMTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XFxuIDEzNDpcXHRcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbiAxMzU6XFx0XFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxcbiAxMzY6XFx0XFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XFxuIDEzNzpcXHRcXHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxcbiAxMzg6XFx0XFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbid0XFxuIDEzOTpcXHRcXHQgKiBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgxKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbVxcbiAxNDA6XFx0XFx0ICogYWxsb3dlZGlwczsgd2Ugd29uJ3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxcbiAxNDE6XFx0XFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxcbiAxNDI6XFx0XFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24ndCBoYXZlIG5ld1xcbiAxNDM6XFx0XFx0ICogcmVmZXJlbmNlcyBpbiAoMykgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSdyZSByZW1vdmVkIGZyb20gdGhlIHB1YmtleVxcbiAxNDQ6XFx0XFx0ICogaGFzaCB0YWJsZSwgd2hpY2ggYWxsb3dzIGZvciBhIG1heGltdW0gb2Ygb25lIGhhbmRzaGFrZSByZXNwb25zZSxcXG4gMTQ1OlxcdFxcdCAqIHZpYSB0aGUgc3RpbGwtdW5jbGVhcmVkIGluZGV4IGhhc2h0YWJsZSBlbnRyeSwgYnV0IG5vdCBtb3JlIHRoYW4gb25lLFxcbiAxNDY6XFx0XFx0ICogYW5kIGluIHdnX2Nvb2tpZV9tZXNzYWdlX2NvbnN1bWUsIHRoZSBsb29rdXAgZXZlbnR1YWxseSBnZXRzIGEgcGVlclxcbiAxNDc6XFx0XFx0ICogd2l0aCBhIHJlZmNvdW50IG9mIHplcm8sIHNvIG5vIG5ldyByZWZlcmVuY2UgaXMgdGFrZW4uXFxuIDE0ODpcXHRcXHQgKi9cXG4gMTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NToyOS42MTc3NTAxMzZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMTIxMjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFF1ZXVlaW5nIElzc3VlKipcblxuT2theSwgc28gSSdtIHN1c3BlY3Rpbmcgc29tZXRoaW5nIGZ1bmt5IG1pZ2h0IGJlIGhhcHBlbmluZyB3aXRoIHRoZSBxdWV1ZWluZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgcXVldWVpbmcuaGAuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBwcm9iYWJseSBhcm91bmQgbGluZSAxNTAgdG8gMjAwLiBUaGlzIGlzIHR5cGljYWxseSB3aGVyZSB5b3UnZCBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgY3JpdGljYWwgcGF0aCBvcGVyYXRpb25zIOKAkyB0aGUgZW5xdWV1ZS9kZXF1ZXVlIG1ldGhvZHMsIGludGVybmFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBvciBtYXliZSBldmVuIHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBxdWV1ZSdzIHN0YXRlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoYXQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MzEuNDI4OTY2NzY3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHRcXHRxdWV1ZS1cXHUwMDNlcGVla2VkID0gTlVMTDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiAxNTQ6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLFxcbiAxNTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0aW50IGNwdTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0YXRvbWljX3NldF9yZWxlYXNlKFxcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cXHUwMDNlc3RhdGUsIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpO1xcbiAxNjA6XFx0XFx0LyogV2UgZmlyc3QgcXVldWUgdGhpcyB1cCBmb3IgdGhlIHBlZXIgaW5nZXN0aW9uLCBidXQgdGhlIGNvbnN1bWVyXFxuIDE2MTpcXHRcXHQgKiB3aWxsIHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8gQ1JZUFRFRCBvciBERUFEIGJlZm9yZS5cXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIDE2NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gMTY1OlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcXG4gMTY4OlxcdFxcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cXG4gMTY5OlxcdFxcdCAqL1xcbiAxNzA6XFx0XFx0Y3B1ID0gd2dfY3B1bWFza19uZXh0X29ubGluZShcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VsYXN0X2NwdSk7XFxuIDE3MTpcXHRcXHRpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaChcXHUwMDI2ZGV2aWNlX3F1ZXVlLVxcdTAwM2VyaW5nLCBza2IpKSlcXG4gMTcyOlxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuIDE3MzpcXHRcXHRxdWV1ZV93b3JrX29uKGNwdSwgd3EsIFxcdTAwMjZwZXJfY3B1X3B0cihkZXZpY2VfcXVldWUtXFx1MDAzZXdvcmtlciwgY3B1KS1cXHUwMDNld29yayk7XFxuIDE3NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTc1OlxcdH1cXG4gMTc2OlxcdFxcbiAxNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHQvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGVcXG4gMTgwOlxcdFxcdCAqIHBlZXIgY2FuIGJlIGZyZWVkIGZyb20gYmVsb3cgdXMuXFxuIDE4MTpcXHRcXHQgKi9cXG4gMTgyOlxcdFxcdHN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGF0b21pY19zZXRfcmVsZWFzZShcXHUwMDI2UEFDS0VUX0NCKHNrYiktXFx1MDAzZXN0YXRlLCBzdGF0ZSk7XFxuIDE4NTpcXHRcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIDE4NjpcXHRcXHRcXHQgICAgICBwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSwgXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gMTg3OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXFxuIDE4ODpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiAxODk6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMS40MjkwNTU2OTdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc0OTE1OTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIFdpcmVHdWFyZCBSWCBwYXRoLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiByZWNlaXZlZCBwZXItcGVlci4gV2UndmUgZ290IGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCB0byBjb25zaWRlci4gTm93LCB3aGF0IGRvZXMgdGhhdCBmdW5jdGlvbiAqZG8qPyBBbmQgd2hhdCBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIGl0IHdpdGhpbiB0aGUgcHJvY2Vzc2luZyBmbG93PyBXaGVyZSBkb2VzIHRoZSBwYWNrZXQgZ28/IFdoYXQgaGFwcGVucyB0byB0aGUgZGF0YT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYWNrZXQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuIExldCdzIHRyYWNlIGl0IHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgYW5kIGlkZW50aWZ5IGFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGhhdCB0aGUgUlgnZCBwYWNrZXQgdW5kZXJnb2VzLiBUaGlua2luZyBhYm91dCBxdWV1ZWluZyBzdHJhdGVnaWVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMy4xNzgyMTc2OTdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0X3N0YXRlIHN0YXRlKVxcbiAxOTM6XFx0e1xcbiAxOTQ6XFx0XFx0LyogV2UgdGFrZSBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhcyBzb29uIGFzIHdlIGNhbGwgYXRvbWljX3NldCwgdGhlXFxuIDE5NTpcXHRcXHQgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLlxcbiAxOTY6XFx0XFx0ICovXFxuIDE5NzpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IHdnX3BlZXJfZ2V0KFBBQ0tFVF9QRUVSKHNrYikpO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiAyMDA6XFx0XFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIDIwMTpcXHRcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gMjAyOlxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0I2lmZGVmIERFQlVHXFxuIDIwNTpcXHRib29sIHdnX3BhY2tldF9jb3VudGVyX3NlbGZ0ZXN0KHZvaWQpO1xcbiAyMDY6XFx0I2VuZGlmXFxuIDIwNzpcXHRcXG4gMjA4OlxcdCNlbmRpZiAvKiBfV0dfUVVFVUVJTkdfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMjo0NTozMy4xNzgyODc4NjdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMDU4MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgV2lyZUd1YXJkIHBhY2tldCByZWNlcHRpb24gY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxvd2VzdCBsZXZlbC4gTGV0J3Mgc3RhcnQgd2l0aCBgd2dfcGFja2V0X3J4X3BvbGxgIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIGl0J3MgdGhlIGhlYXJ0IG9mIHRoZSBwb2xsaW5nIG1lY2hhbmlzbSBmb3IgcmVjZWl2aW5nIHBhY2tldHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSBzaG91bGQgYmVnaW4uIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UsIHNvIEknbSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEl0J3MgdGltZSB0byBzZWUgaG93IHRoZSBkYXRhIGZsb3dzIGluIGFuZCBpcyBwcm9jZXNzZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEyOjQ1OjM1LjE3ODg3MTcxN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdFxcdGlmICh1bmxpa2VseSghY291bnRlcl92YWxpZGF0ZShcXHUwMDI2a2V5cGFpci1cXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUEFDS0VUX0NCKHNrYiktXFx1MDAzZW5vbmNlKSkpIHtcXG4gNDYzOlxcdFxcdFxcdFxcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBQYWNrZXQgaGFzIGludmFsaWQgbm9uY2UgJWxsdSAobWF4ICVsbHUpXFxcXG5cXFwiLFxcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBBQ0tFVF9DQihza2IpLVxcdTAwM2Vub25jZSxcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBSRUFEX09OQ0Uoa2V5cGFpci1cXHUwMDNlcmVjZWl2aW5nX2NvdW50ZXIuY291bnRlcikpO1xcbiA0Njc6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiA0Njg6XFx0XFx0XFx0fVxcbiA0Njk6XFx0XFxuIDQ3MDpcXHRcXHRcXHRpZiAodW5saWtlbHkod2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKFxcdTAwMjZlbmRwb2ludCwgc2tiKSkpXFxuIDQ3MTpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDQ3MjpcXHRcXG4gNDczOlxcdFxcdFxcdHdnX3Jlc2V0X3BhY2tldChza2IsIGZhbHNlKTtcXG4gNDc0OlxcdFxcdFxcdHdnX3BhY2tldF9jb25zdW1lX2RhdGFfZG9uZShwZWVyLCBza2IsIFxcdTAwMjZlbmRwb2ludCk7XFxuIDQ3NTpcXHRcXHRcXHRmcmVlID0gZmFsc2U7XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdG5leHQ6XFxuIDQ3ODpcXHRcXHRcXHR3Z19ub2lzZV9rZXlwYWlyX3B1dChrZXlwYWlyLCBmYWxzZSk7XFxuIDQ3OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoZnJlZSkpXFxuIDQ4MDpcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIDQ4MTpcXHRcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbiA0ODI6XFx0XFx0XFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gNDgzOlxcdFxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRcXHRpZiAoKyt3b3JrX2RvbmUgXFx1MDAzZT0gYnVkZ2V0KVxcbiA0ODY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NzpcXHRcXHR9XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpXFxuIDQ5MDpcXHRcXHRcXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0cmV0dXJuIHdvcmtfZG9uZTtcXG4gNDkzOlxcdH1cXG4gNDk0OlxcdFxcbiA0OTU6XFx0dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiA0OTY6XFx0e1xcbiA0OTc6XFx0XFx0c3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlcixcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB3b3JrKS1cXHUwMDNlcHRyO1xcbiA0OTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDU6MzUuMTc4OTY0NTI3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1NjY3MTgwNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBXaXJlR3VhcmQgcGF0Y2ggKm5lZWRzKiBLTVNBTi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nLiBJdCBzZWVtcyB0byBiZSByZXdvcmtpbmcgdGhlIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlcGxhY2luZyBtdWx0aXBsZSBgZmx1c2hfd29ya3F1ZXVlKClgIGNhbGxzIHdpdGggYSBwZXItcGVlciBhdG9taWMgY291bnRlciAoYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50KClgLCBmb2xsb3dlZCBieSBmb2N1c2VkIGBmbHVzaF93b3JrKClgIGNhbGxzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5czogRG9lcyB0aGlzIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0J3MgYW5hbHl6ZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBuZXcgYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2Agd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBDcml0aWNhbGx5LCBgd2dfcGVlcl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCAqYW5kKiBgYXRvbWljX3NldCgpYC4gVGhhdCdzIGdvb2QuIEl0IGluZGljYXRlcyB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGNoYW5jZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBmb3IgdGhhdCB2YXJpYWJsZS4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgY2hhbmdlcyB0aGF0IHRvdWNoIGFueSB1c2VyLXNwYWNlLWZhY2luZyBzdHJ1Y3R1cmVzIChuZXRsaW5rLCBpb2N0bCwgZXRjLiksIG9yIG1vZGlmaWVzIHBhY2tldCBidWZmZXIgZGF0YSBsZW5ndGgsIGJvdW5kcyBjaGVja3Mgb3Igb2Zmc2V0cy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0YWNrIGJ1ZmZlcnMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0ICphcmVuJ3QqIGluaXRpYWxpemVkLCBhbmQgSSBjYXJlZnVsbHkgcmV2aWV3IHRoZSBsaXN0ZWQgcnVsZXMgYW5kIGV4YW1wbGVzLlxuXG5UaGUgcHJpbWFyeSByaXNrcyBoZXJlIHNlZW0gdG8gYmUgY29uY3VycmVuY3kgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4gVGhpbmdzIGxpa2UgcmFjZSBjb25kaXRpb25zIGR1cmluZyBwZWVyIHJlbW92YWwsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgYSBwYWNrZXQgaXMgcHJvY2Vzc2VkIGFmdGVyIHRoZSBwZWVyJ3MgYmVlbiBmcmVlZCAoS0FTQU4gd2lsbCBuYWlsIHRob3NlKSwgb3IgZGVhZGxvY2tzIGlmIHRoZSBjb3VudGVyIG5ldmVyIHJlYWNoZXMgemVybyAodGhlIGh1bmcgdGFzayBkZXRlY3RvciBvciBsb2NrZGVwIHdpbGwgZ3JhYiB0aGF0KS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm9uZSBvZiB0aGVzZSByZWxhdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuVGhlIGtleSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBpcyB0aGF0IEtBU0FOIGFscmVhZHkgY2F0Y2hlcyBhIHdob2xlIGhvc3Qgb2YgYnVncywgYW5kIEkgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJpbmcgS01TQU4gaWYgdGhlcmUncyBhIHJpc2sgb2YgKnVuaW5pdGlhbGl6ZWQqIHJlYWRzIG9yIGxlYWtzLCBhcyB0aGUgcnVsZXMgbWFrZSBjbGVhci4gU2luY2UgYWxsIGFkZGVkIHN0cnVjdHVyZXMvZmllbGRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBhcmUgbm8gZGlyZWN0IHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIGNhc2UuIFRoZXJlZm9yZSwgS0FTQU4gcGx1cyBsb2NrZGVwIGFyZSBmdWxseSBzdWZmaWNpZW50LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6XG5cbi0gICBgTmVlZHNLTVNBTmA6IGBmYWxzZWBcbi0gICBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gYW5kIHF1ZXVlaW5nIHN5bmNocm9uaXphdGlvbiBieSByZXBsYWNpbmcgZ2xvYmFsIHdvcmtxdWV1ZSBmbHVzaGVzIHdpdGggYW4gYXRvbWljIHJlZmNvdW50IChgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnQoKWAgcGFpcmVkIHdpdGggYGZsdXNoX3dvcmsoKWAgb24gcGVlci1vd25lZCB3b3Jrcy4gVGhlIG9ubHkgbmV3IGZpZWxkLCBgYXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGluIGBzdHJ1Y3Qgd2dfcGVlcmAsIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYGF0b21pY19zZXQoKWAuIE5vIGJ1ZmZlcnMsIHBhY2tldCBwYXlsb2Fkcywgb3IgdXNlci1mYWNpbmcgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZSB0byBjb25jdXJyZW5jeSBhbmQgdGVhcmRvd24gc3luY2hyb25pemF0aW9uOyBhbnkgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZS9saWZldGltZSBpc3N1ZXMgKGRldGVjdGVkIGJ5IEtBU0FOL3JlZmNvdW50IGRlYnVnZ2luZykgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgKGRldGVjdGVkIGJ5IGxvY2tkZXAvaHVuZyB0YXNrIHRpbWVvdXQpLiBLTVNBTiBwcm92aWRlcyBubyBhZGRpdGlvbmFsIGNvdmVyYWdlIGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3OCwiT3V0cHV0VG9rZW5zIjozMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTI6NDc6MTAuODQ2MTQ3NzVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXJlR3VhcmQgcGVlciB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbG9naWMuIEluc3RlYWQgb2YgY2FsbGluZyBmbHVzaF93b3JrcXVldWUoKSBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2hhcmVkIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgKHBhY2tldF9jcnlwdF93cSBhbmQgaGFuZHNoYWtlX3NlbmRfd3EpLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgb24gc3RydWN0IHdnX3BlZXIgYW5kIHdhaXRzIG9uIGl0IHZpYSB3YWl0X3Zhcl9ldmVudCgpIGJlZm9yZSBwZXJmb3JtaW5nIHRhcmdldGVkIGZsdXNoX3dvcmsoKSBvbiBwZWVyLW93bmVkIHdvcmsgc3RydWN0dXJlcy5cXG5cXG5UaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6XFxuMS4gVGhlIG5ldyBzdHJ1Y3QgbWVtYmVyIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgY29udGFpbmVkIHdpdGhpbiBgc3RydWN0IHdnX3BlZXJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGB3Z19wZWVyX2NyZWF0ZSgpYCwgYW5kIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgYXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChuZXRsaW5rLCBzb2NrZXQsIGlvY3RsLCBldGMuKSBpcyBhZGRlZCBvciBtb2RpZmllZC5cXG4zLiBQYWNrZXQgYnVmZmVycywgbGVuZ3RocywgYW5kIGJvdW5kcyBjaGVja3MgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgc3luY2hyb25pemF0aW9uL2xpZmV0aW1lIGlzc3VlcyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgaWYgcGVlciB0ZWFyZG93biBmaW5pc2hlcyBwcmVtYXR1cmVseSwgb3IgZGVhZGxvY2tzL2h1bmcgdGFza3MgaWYgdGhlIHdhaXRfdmFyX2V2ZW50IGNvbmRpdGlvbiBpcyBuZXZlciBzYXRpc2ZpZWQpLiBTdWNoIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIFJFRkNPVU5ULCBhbmQgTE9DS0RFUC9odW5nIHRhc2sgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2lyZUd1YXJkIHBlZXIgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIGxvZ2ljLiBJbnN0ZWFkIG9mIGNhbGxpbmcgZmx1c2hfd29ya3F1ZXVlKCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNoYXJlZCBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIChwYWNrZXRfY3J5cHRfd3EgYW5kIGhhbmRzaGFrZV9zZW5kX3dxKSwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIG9uIHN0cnVjdCB3Z19wZWVyIGFuZCB3YWl0cyBvbiBpdCB2aWEgd2FpdF92YXJfZXZlbnQoKSBiZWZvcmUgcGVyZm9ybWluZyB0YXJnZXRlZCBmbHVzaF93b3JrKCkgb24gcGVlci1vd25lZCB3b3JrIHN0cnVjdHVyZXMuXFxuXFxuVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOlxcbjEuIFRoZSBuZXcgc3RydWN0IG1lbWJlciBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYHN0cnVjdCB3Z19wZWVyYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgd2dfcGVlcl9jcmVhdGUoKWAsIGFuZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKWAuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobmV0bGluaywgc29ja2V0LCBpb2N0bCwgZXRjLikgaXMgYWRkZWQgb3IgbW9kaWZpZWQuXFxuMy4gUGFja2V0IGJ1ZmZlcnMsIGxlbmd0aHMsIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHN5bmNocm9uaXphdGlvbi9saWZldGltZSBpc3N1ZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIGlmIHBlZXIgdGVhcmRvd24gZmluaXNoZXMgcHJlbWF0dXJlbHksIG9yIGRlYWRsb2Nrcy9odW5nIHRhc2tzIGlmIHRoZSB3YWl0X3Zhcl9ldmVudCBjb25kaXRpb24gaXMgbmV2ZXIgc2F0aXNmaWVkKS4gU3VjaCBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBSRUZDT1VOVCwgYW5kIExPQ0tERVAvaHVuZyB0YXNrIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[1] Phase: Succeeded StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 12:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 12:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2] Phase: Succeeded StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 12:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 12:47:22 +0000 UTC FinishedAt: 2026-09-13 12:47:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlk926/series-workflowlk926-convert-artifact-3268341516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 12:47:32 +0000 UTC FinishedAt: 2026-09-13 13:03:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 12:47:32 +0000 UTC FinishedAt: 2026-09-13 13:03:39 +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:*5e151a0f-5da5-4010-82c8-a192aa2a17bf,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-workflowlk926/series-workflowlk926-convert-artifact-3268341516/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": "82315ce0-e77a-4111-be06-a7421dc43710", "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-workflowlk926/series-workflowlk926-build-action-3647845690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 12:47:32 +0000 UTC FinishedAt: 2026-09-13 13:03:29 +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:*5e151a0f-5da5-4010-82c8-a192aa2a17bf,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-workflowlk926/series-workflowlk926-convert-artifact-3268341516/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": "82315ce0-e77a-4111-be06-a7421dc43710", "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-workflowlk926/series-workflowlk926-build-action-3647845690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 13:03:39 +0000 UTC FinishedAt: 2026-09-13 13:03:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 13:03:39 +0000 UTC FinishedAt: 2026-09-13 13:03:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 13:03:39 +0000 UTC FinishedAt: 2026-09-13 13:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 13:03:39 +0000 UTC FinishedAt: 2026-09-13 13:03:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlk926/series-workflowlk926-convert-artifact-1206836299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 13:03:49 +0000 UTC FinishedAt: 2026-09-13 13:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 13:03:49 +0000 UTC FinishedAt: 2026-09-13 13:05:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82315ce0-e77a-4111-be06-a7421dc43710,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-workflowlk926/series-workflowlk926-build-action-3647845690/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-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 13:05:43 +0000 UTC FinishedAt: 2026-09-13 13:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 13:05:43 +0000 UTC FinishedAt: 2026-09-13 13:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 13:05:43 +0000 UTC FinishedAt: 2026-09-13 13:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 13:05:43 +0000 UTC FinishedAt: 2026-09-13 13:21:50 +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:*5e151a0f-5da5-4010-82c8-a192aa2a17bf,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-workflowlk926/series-workflowlk926-convert-artifact-1206836299/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": "d6ee1b1d-ec2f-461b-8e7d-f0f382d02656", "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-workflowlk926/series-workflowlk926-build-action-4084007151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 13:05:43 +0000 UTC FinishedAt: 2026-09-13 13:21:40 +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:*5e151a0f-5da5-4010-82c8-a192aa2a17bf,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-workflowlk926/series-workflowlk926-convert-artifact-1206836299/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": "d6ee1b1d-ec2f-461b-8e7d-f0f382d02656", "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-workflowlk926/series-workflowlk926-build-action-4084007151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 13:21:50 +0000 UTC FinishedAt: 2026-09-13 13:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 13:21:50 +0000 UTC FinishedAt: 2026-09-13 13:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 13:21:50 +0000 UTC FinishedAt: 2026-09-13 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 13:21:50 +0000 UTC FinishedAt: 2026-09-13 13:23:25 +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:*d6ee1b1d-ec2f-461b-8e7d-f0f382d02656,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-workflowlk926/series-workflowlk926-build-action-4084007151/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-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"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:*82315ce0-e77a-4111-be06-a7421dc43710,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6ee1b1d-ec2f-461b-8e7d-f0f382d02656,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-workflowlk926/series-workflowlk926-build-action-3647845690/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-workflowlk926/series-workflowlk926-build-action-4084007151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 13:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 13:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"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-workflowlk926/series-workflowlk926-convert-artifact-385818340/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 13:23:35 +0000 UTC FinishedAt: 2026-09-13 13:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 13:23:45 +0000 UTC FinishedAt: 2026-09-13 16:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk926[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"70f3995830d3f1e79faa14eb0605914f778feca9","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["peer_remove_after_dead","wg_peer_remove","wg_peer_remove_all","wg_peer_create","wg_packet_rx_poll","wg_packet_encrypt_worker","wg_packet_tx_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","INET"],"series_id":"44b34ca2-42e6-4e95-99f5-d34e386af199","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 13:23:45 +0000 UTC FinishedAt: 2026-09-13 16:29:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82315ce0-e77a-4111-be06-a7421dc43710,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6ee1b1d-ec2f-461b-8e7d-f0f382d02656,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-workflowlk926/series-workflowlk926-build-action-3647845690/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-workflowlk926/series-workflowlk926-build-action-4084007151/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-workflowlk926/series-workflowlk926-convert-artifact-385818340/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,}