Name: series-workflowltdx4 Phase: Running StartedAt: 2026-07-26 07:13:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltdx4[0] Phase: Running StartedAt: 2026-07-26 07:13:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltdx4[0].run-triage Phase: Running StartedAt: 2026-07-26 07:13:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowltdx4[0].run-triage(0) Phase: Running StartedAt: 2026-07-26 07:13:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "159d4fbb6ca5a527ffd0d37e9c8dae882038ae80", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "159d4fbb6ca5a527ffd0d37e9c8dae882038ae80", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "5a4d408b-8018-4862-a1e6-3faa6dd0bb42" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_add_kfunc_call", "bpf_free_kfunc_desc_tab", "check_helper_call", "check_kfunc_call", "check_kfunc_args", "check_func_arg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2FkZF9rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2JwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiJiMzNDssCiAgICAmIzM0O2NoZWNrX2hlbHBlcl9jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2FyZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiB2ZXJpZmllciB0byB1bmlmeSBrZnVuYyBhbmQgaGVscGVyIGFyZ3VtZW50IHZlcmlmaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBgX19jb25zdF9tYXBgIGFuZCBgX19tYXBgIGFubm90YXRpb25zIGZvciBrZnVuY3MsIHJlbmFtZXMgYEFSR19DT05TVF9TSVpFYCB0byBgQVJHX01FTV9TSVpFYCwgYW5kIG1vZGlmaWVzIGhvdyBgYnBmX2Z1bmNfcHJvdG9gIGlzIGdlbmVyYXRlZCBhbmQgdXNlZCBmb3Iga2Z1bmNzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNTUyYzkxZDc5NWY4OWVkMDIxNTY4ZTdhMjY1ZjM3ZWUzZDY4YWJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6MzM6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGM4MDFhMzMwYWVjZTA4Li5jYmRlODZkMDgyY2NlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0yNTAsNiAmIzQzOzI1MCwzNCBAQCBPcjo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuJiM0MzsyLjMuNyBfX2NvbnN0X21hcCBhbmQgX19tYXAgQW5ub3RhdGlvbnNcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztUaGVzZSBhbm5vdGF0aW9ucyBhcmUgdXNlZCBmb3IgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgYXJndW1lbnRzIGFuZCBkaXN0aW5ndWlzaCBhXG4mIzQzO3ZlcmlmaWVyLWtub3duIG1hcCBmcm9tIGFuIG9wYXF1ZSBvbmUuXG4mIzQzO1xuJiM0MztgYF9fY29uc3RfbWFwYGAgaW5kaWNhdGVzIGEgbWFwIG11c3QgYmUga25vd24gYXQgdGhlIHZlcmlmaWNhdGlvbiB0aW1lLCBpLmUuIGFcbiYjNDM7Y29uY3JldGUgbWFwIGZkIHRoZSBCUEYgcHJvZ3JhbSByZWZlcmVuY2VzIGRpcmVjdGx5LlxuJiM0MztcbiYjNDM7QW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4mIzQzO1xuJiM0MzsgICAgICAgIF9fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzOyAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgLi4uXG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiYjNDM7YGBfX21hcGBgIGluZGljYXRlcyBhbiBvcGFxdWUgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgdGhhdCBtYXkgYmUgcmVzb2x2ZWRcbiYjNDM7YXQgcnVuIHRpbWUuIFRoZSBhcmd1bWVudCBtYXkgdGFrZSBlaXRoZXIgYSBtYXAgZmQgb3IgYSBgYFBUUl9UT19CVEZfSURgYFxuJiM0MztgYHN0cnVjdCBicGZfbWFwYGAgcG9pbnRlci5cbiYjNDM7XG4mIzQzO0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuJiM0MztcbiYjNDM7ICAgICAgICBfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCAuLi4pXG4mIzQzOyAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgLi4uXG4mIzQzOyAgICAgICAgfVxuJiM0MztcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC00MTEsNyAmIzQzOzQzOSw3IEBAIEV4YW1wbGUgZGVjbGFyYXRpb246XG4gLi4gY29kZS1ibG9jazo6IGNcbiBcbiBcdF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi1cdFx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCkgeyAuLi4gfVxuIFxuIEV4YW1wbGUgdXNhZ2UgaW4gQlBGIHByb2dyYW06XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IGUwNjZmNDRhOWMwNTgwLi5lZjE3MjE0M2I5YzlhNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC03NDgsNiAmIzQzOzc0OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX21hcF9vZmZsb2FkX29wcztcbiBlbnVtIGJwZl90eXBlX2ZsYWcge1xuIFx0LyogUFRSIG1heSBiZSBOVUxMLiAqL1xuIFx0UFRSX01BWUJFX05VTExcdFx0PSBCSVQoMCAmIzQzOyBCUEZfQkFTRV9UWVBFX0JJVFMpLFxuJiM0MztcdFNDQUxBUl9NQVlCRV9aRVJPXHQ9IFBUUl9NQVlCRV9OVUxMLFxuIFxuIFx0LyogTUVNIGlzIHJlYWQtb25seS4gV2hlbiBhcHBsaWVkIG9uIGJwZl9hcmcsIGl0IGluZGljYXRlcyB0aGUgYXJnIGlzXG4gXHQgKiBjb21wYXRpYmxlIHdpdGggYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUgbWVtb3J5LlxuQEAgLTg4OCw4ICYjNDM7ODg5LDcgQEAgZW51bSBicGZfYXJnX3R5cGUge1xuIFx0QVJHX1BUUl9UT19NRU0sXHRcdC8qIHBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IChzdGFjaywgcGFja2V0LCBtYXAgdmFsdWUpICovXG4gXHRBUkdfUFRSX1RPX0FSRU5BLFxuIFxuLVx0QVJHX0NPTlNUX1NJWkUsXHRcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xuLVx0QVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSBvciAwICovXG4mIzQzO1x0QVJHX01FTV9TSVpFLFx0XHQvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi9cbiBcbiBcdEFSR19QVFJfVE9fQ1RYLFx0XHQvKiBwb2ludGVyIHRvIGNvbnRleHQgKi9cbiBcdEFSR19BTllUSElORyxcdFx0LyogYW55IChpbml0aWFsaXplZCkgYXJndW1lbnQgaXMgb2sgKi9cbkBAIC05MjIsNiAmIzQzOzkyMiw4IEBAIGVudW0gYnBmX2FyZ190eXBlIHtcbiBcdEFSR19QVFJfVE9fVU5JTklUX01FTVx0XHQ9IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBBUkdfUFRSX1RPX01FTSxcbiBcdC8qIFBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IG9mIHNpemUga25vd24gYXQgY29tcGlsZSB0aW1lLiAqL1xuIFx0QVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTVx0PSBNRU1fRklYRURfU0laRSB8IEFSR19QVFJfVE9fTUVNLFxuJiM0MztcdC8qIE51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSwgb3IgMC4gKi9cbiYjNDM7XHRBUkdfTUVNX1NJWkVfT1JfWkVST1x0XHQ9IFNDQUxBUl9NQVlCRV9aRVJPIHwgQVJHX01FTV9TSVpFLFxuIFxuIFx0LyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LiBJdHMgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhlIGVudW0gaXNcbiBcdCAqIHdpZGUgZW5vdWdoIHRvIGhvbGQgdGhlIGhpZ2hlciBiaXRzIHJlc2VydmVkIGZvciBicGZfdHlwZV9mbGFnLlxuQEAgLTk2MCw2ICYjNDM7OTYyLDIxIEBAIGVudW0gYnBmX3JldHVybl90eXBlIHtcbiB9O1xuIHN0YXRpY19hc3NlcnQoX19CUEZfUkVUX1RZUEVfTUFYIFx1MDAzYz0gQlBGX0JBU0VfVFlQRV9MSU1JVCk7XG4gXG4mIzQzOy8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuXG4mIzQzOyAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXG4mIzQzOyAqXG4mIzQzOyAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uXG4mIzQzOyAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXG4mIzQzOyAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZFxuJiM0MzsgKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTJcbiYjNDM7XG4mIzQzOy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXG4mIzQzOyAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxuJiM0MztcbiAvKiBlQlBGIGZ1bmN0aW9uIHByb3RvdHlwZSB1c2VkIGJ5IHZlcmlmaWVyIHRvIGFsbG93IEJQRl9DQUxMcyBmcm9tIGVCUEYgcHJvZ3JhbXNcbiAgKiB0byBpbi1rZXJuZWwgaGVscGVyIGZ1bmN0aW9ucyBhbmQgZm9yIGFkanVzdGluZyBpbW0zMiBmaWVsZCBpbiBCUEZfQ0FMTFxuICAqIGluc3RydWN0aW9ucyBhZnRlciB2ZXJpZnlpbmdcbkBAIC05ODQsNyAmIzQzOzEwMDEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8ge1xuIFx0XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZzRfdHlwZTtcbiBcdFx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmc1X3R5cGU7XG4gXHRcdH07XG4tXHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlWzVdO1xuJiM0MztcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGVbTUFYX0JQRl9GVU5DX0FSR1NdO1xuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbkBAIC05OTQsNyAmIzQzOzEwMTEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8ge1xuIFx0XHRcdHUzMiAqYXJnNF9idGZfaWQ7XG4gXHRcdFx0dTMyICphcmc1X2J0Zl9pZDtcbiBcdFx0fTtcbi1cdFx0dTMyICphcmdfYnRmX2lkWzVdO1xuJiM0MztcdFx0dTMyICphcmdfYnRmX2lkW01BWF9CUEZfRlVOQ19BUkdTXTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRzaXplX3QgYXJnMV9zaXplO1xuIFx0XHRcdHNpemVfdCBhcmcyX3NpemU7XG5AQCAtMTAwMiw3ICYjNDM7MTAxOSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XG4gXHRcdFx0c2l6ZV90IGFyZzRfc2l6ZTtcbiBcdFx0XHRzaXplX3QgYXJnNV9zaXplO1xuIFx0XHR9O1xuLVx0XHRzaXplX3QgYXJnX3NpemVbNV07XG4mIzQzO1x0XHRzaXplX3QgYXJnX3NpemVbTUFYX0JQRl9GVU5DX0FSR1NdO1xuIFx0fTtcbiBcdGludCAqcmV0X2J0Zl9pZDsgLyogcmV0dXJuIHZhbHVlIGJ0Zl9pZCAqL1xuIFx0Ym9vbCAoKmFsbG93ZWQpKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5AQCAtMTE5MiwyMSAmIzQzOzEyMDksNiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gXHR1MzJcdFx0XHRqaXRlZF9sZW47XG4gfTtcbiBcbi0vKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLlxuLSAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXG4tICpcbi0gKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvblxuLSAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXG4tICogc3RhY2sgYXJnIHNsb3RzLiBUaGUgSklUIG1heSBtYXAgc29tZSBzdGFjayBhcmcgc2xvdHMgdG8gcmVnaXN0ZXJzIGJhc2VkXG4tICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuXG4tICovXG4tI2RlZmluZSBNQVhfQlBGX0ZVTkNfQVJHUyAxMlxuLVxuLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXG4tICogYSBzaW5nbGUgZnVuY3Rpb24gbWF5IGhhdmUuXG4tICovXG4tI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxuLVxuIC8qIFRoZSBhcmd1bWVudCBpcyBhIHN0cnVjdHVyZSBvciBhIHVuaW9uLiAqL1xuICNkZWZpbmUgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHXHRcdEJJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzMC4uMDY1NTE2NGU2YWYyZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTUsNyAmIzQzOzE1LDcgQEBcbiAgKiBlbnN1cmVzIHRoYXQgdW1heF92YWx1ZSAmIzQzOyAoaW50KW9mZiAmIzQzOyAoaW50KXNpemUgY2Fubm90IG92ZXJmbG93IGEgdTY0LlxuICAqL1xuICNkZWZpbmUgQlBGX01BWF9WQVJfT0ZGXHQoMSBcdTAwM2NcdTAwM2MgMjkpXG4tLyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX0NPTlNUX1NJWkVbX09SX1pFUk9dLiAgVGhpcyBlbnN1cmVzXG4mIzQzOy8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19NRU1fU0laRVtfT1JfWkVST10uICBUaGlzIGVuc3VyZXNcbiAgKiB0aGF0IGNvbnZlcnRpbmcgdW1heF92YWx1ZSB0byBpbnQgY2Fubm90IG92ZXJmbG93LlxuICAqL1xuICNkZWZpbmUgQlBGX01BWF9WQVJfU0laXHQoMSBcdTAwM2NcdTAwM2MgMjkpXG5AQCAtMTE4OCw2ICYjNDM7MTE4OCw3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdCAgICB1MzIgYnRmX2lkLFxuIFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pO1xuIHZvaWQgYnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2J0Zl90YWIgKnRhYik7XG4mIzQzO3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKTtcbiBcbiBpbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbiBcbkBAIC0xMzA1LDggJiM0MzsxMzA2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdTMyIHR5cGVfZmxhZyh1MzIgdHlwZSlcbiAvKiBvbmx5IHVzZSBhZnRlciBjaGVja19hdHRhY2hfYnRmX2lkKCkgKi9cbiBzdGF0aWMgaW5saW5lIGVudW0gYnBmX3Byb2dfdHlwZSByZXNvbHZlX3Byb2dfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuLVx0cmV0dXJuIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNlYXV4LVx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGUpID9cbi1cdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSA6IHByb2ctXHUwMDNldHlwZTtcbiYjNDM7XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfRVhUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogc2F2ZWRfZHN0X3Byb2dfdHlwZSBpcyBvbmx5IHNldCBvbmNlIGNoZWNrX2F0dGFjaF9idGZfaWQoKVxuJiM0MztcdFx0ICogcnVucy4gQmVmb3JlIHRoYXQgLS0gZS5nLiB3aGVuIGdlbmVyYXRpbmcga2Z1bmMgcHJvdG90eXBlcyBhdFxuJiM0MztcdFx0ICogYWRkLWNhbGwgdGltZSAtLSBmYWxsIGJhY2sgdG8gdGhlIGF0dGFjaCB0YXJnZXQmIzM5O3MgdHlwZSwgd2hpY2hcbiYjNDM7XHRcdCAqIGlzIGF2YWlsYWJsZSBmcm9tIGxvYWQgdGltZSBhbmQgaG9sZHMgdGhlIHNhbWUgdmFsdWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvZy1cdTAwM2VhdXgtXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZTtcbiYjNDM7XHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2Vkc3RfcHJvZylcbiYjNDM7XHRcdFx0cmV0dXJuIHByb2ctXHUwMDNlYXV4LVx1MDAzZWRzdF9wcm9nLVx1MDAzZXR5cGU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwcm9nLVx1MDAzZXR5cGU7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19jaGVja19yZWN1cihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTQ3OSwxMCAmIzQzOzE0OTEsMTcgQEAgc3RydWN0IHJldF9tZW1fZGVzYyB7XG4gXHRib29sIGZvdW5kO1xuIH07XG4gXG4mIzQzOy8qIEEgY29uc3RhbnQgc2NhbGFyIGFyZ3VtZW50OyBQb3B1bGF0ZWQgYnkgcHJvY2Vzc19jb25zdF9hcmcoKSAqL1xuJiM0MztzdHJ1Y3QgYXJnX2NvbnN0YW50X2Rlc2Mge1xuJiM0MztcdHU2NCB2YWx1ZTtcbiYjNDM7XHRib29sIGZvdW5kO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEge1xuIFx0LyogQ29tbW9uICovXG4gXHRzdHJ1Y3QgYnRmICpidGY7XG4gXHR1MzIgZnVuY19pZDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuO1xuIFx0dTggcmVsZWFzZV9yZWdubztcbiBcdHUzMiByZXRfYnRmX2lkO1xuIFx0dTMyIHN1YnByb2dubztcbkBAIC0xNDk2LDEwICYjNDM7MTUxNSw3IEBAIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XG4gXHR1MzIga2Z1bmNfZmxhZ3M7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHRjb25zdCBjaGFyICpmdW5jX25hbWU7XG4tXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgdmFsdWU7XG4tXHRcdGJvb2wgZm91bmQ7XG4tXHR9IGFyZ19jb25zdGFudDtcbiYjNDM7XHRzdHJ1Y3QgYXJnX2NvbnN0YW50X2Rlc2MgYXJnX2NvbnN0YW50O1xuIFxuIFx0LyogYXJnX3tidGYsYnRmX2lkLG93bmluZ19yZWZ9IGFyZSB1c2VkIGJ5IGtmdW5jLXNwZWNpZmljIGhhbmRsaW5nLFxuIFx0ICogZ2VuZXJhbGx5IHRvIHBhc3MgaW5mbyBhYm91dCB1c2VyLWRlZmluZWQgbG9jYWwga3B0ciB0eXBlcyB0byBsYXRlclxuQEAgLTE2MTQsNiAmIzQzOzE2MzAsNyBAQCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUge1xuIFxuIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyB7XG4gXHRzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgZnVuY19tb2RlbDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xuIFx0dTMyIGZ1bmNfaWQ7XG4gXHRzMzIgaW1tO1xuIFx0dTE2IG9mZnNldDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOWQuLjJmNDczYWQ0ZmQ3YzFjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTYzNiw3ICYjNDM7NjM2LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiAgKiByNSAmIzQzOz0gMVxuICAqIC4uLlxuICAqIGNhbGwgYnBmX3BlcmZfZXZlbnRfb3V0cHV0IzI1XG4tICogICB3aGVyZSAuYXJnNV90eXBlID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVST1xuJiM0MzsgKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfTUVNX1NJWkVfT1JfWkVST1xuICAqXG4gICogYW5kIHRoaXMgY2FzZTpcbiAgKiByNiA9IDFcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCAzOTgzYjRjZTczYzgxMS4uODJjNTk4ODQxN2EwY2YgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfbHNtLmNcbkBAIC0xODYsNyAmIzQzOzE4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ltYV9pbm9kZV9oYXNoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfaW1hX2lub2RlX2hhc2hfYnRmX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hbGxvd2VkXHQ9IGJwZl9pbWFfaW5vZGVfaGFzaF9hbGxvd2VkLFxuIH07XG4gXG5AQCAtMjA1LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfZmlsZV9oYXNoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfaW1hX2ZpbGVfaGFzaF9idGZfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFsbG93ZWRcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNGVlZWFlYjY5NzkwYjkuLjVlOGFjNDVjZTU2YWYzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTg3MDksNyAmIzQzOzg3MDksNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggNDM1NWNjYjc4YTljNjcuLmZiOTM1N2I2NGNhZGJjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTIzMDUsNyAmIzQzOzIzMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25hbWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTIzNDcsNyAmIzQzOzIzNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X2N1cnJlbnRfdmFsdWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc3lzY3RsX2dldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LCBjaGFyICosIGJ1ZixcbkBAIC0yMzY3LDcgJiM0MzsyMzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9uZXdfdmFsdWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc3lzY3RsX3NldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LFxuQEAgLTIzOTMsNyAmIzQzOzIzOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfc2V0X25ld192YWx1ZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCBlMjA3NjY2N2IyNDUxNy4uY2Q4ODc3MjAyNGE4MzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xOTgsNyAmIzQzOzE5OCw5IEBAIHZvaWQgYnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdGVkX2xpbmZvID0gTlVMTDtcbiBcdH1cbiBcbi1cdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjNDM7XHRicGZfZnJlZV9rZnVuY19kZXNjX3RhYihwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIpO1xuJiM0MzsjZW5kaWZcbiBcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYiA9IE5VTEw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGMxOGYxZTE2ZWRlZTRjLi4xOGJlNWQ2ZTRmOWMyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTI3OCw3ICYjNDM7Mjc4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jb21tX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxuQEAgLTUzOSw3ICYjNDM7NTM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b2xfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcbiBcdC5hcmc0X3NpemVcdD0gc2l6ZW9mKHM2NCksXG5AQCAtNTY3LDcgJiM0Mzs1NjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cnRvdWxfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcbiBcdC5hcmc0X3NpemVcdD0gc2l6ZW9mKHU2NCksXG5AQCAtNTgzLDcgJiM0Mzs1ODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJuY21wX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX0NPTlNUX1NUUixcbiB9O1xuIFxuQEAgLTYyNyw3ICYjNDM7NjI3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfcmF3X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG8gPSB7XG5AQCAtNjUzLDcgJiM0Mzs2NTMsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvID0gIHtcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX2NvcHlfZnJvbV91c2VyLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuQEAgLTY3NSw3ICYjNDM7Njc1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNzA2LDcgJiM0Mzs3MDYsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7XG4gXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnNF9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG5AQCAtMTA5MywxMCAmIzQzOzEwOTMsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fQ09OU1RfU1RSLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgKm1hcF9rZXlfZnJvbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTMyICphcnJfaWR4KVxuQEAgLTE4ODgsNyAmIzQzOzE4ODgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfZnJvbV9tZW1fcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fRFlOUFRSIHwgRFlOUFRSX1RZUEVfTE9DQUwgfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFLFxuIH07XG5AQCAtMTk0Myw3ICYjNDM7MTk0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9yZWFkX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19EWU5QVFIsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuQEAgLTIwMDQsNyAmIzQzOzIwMDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfd3JpdGVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fRFlOUFRSLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0zNDA0LDEwICYjNDM7MzQwNCwxMCBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxuIFx0V0FSTigxLCBcJiMzNDtBIGNhbGwgdG8gQlBGIGV4Y2VwdGlvbiBjYWxsYmFjayBzaG91bGQgbmV2ZXIgcmV0dXJuXFxuXCYjMzQ7KTtcbiB9XG4gXG4tX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19tYXAsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsIHVuc2lnbmVkIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jID0gKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqKXdxO1xuLVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX21hcDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fY29uc3RfbWFwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pIFx1MDAzZSBzaXplb2Yoc3RydWN0IGJwZl93cSkpO1xuIFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfYXN5bmNfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl93cSkpO1xuQEAgLTQ2NDIsMTcgJiM0Mzs0NjQyLDE3IEBAIHN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrXG4gICogbW9kZVxuICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xuLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4mIzQzOyAqIEBtYXBfX2NvbnN0X21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4gICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcbiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXJcbiAgKlxuICAqIFJldHVybjogMCBpZiB0YXNrIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkIHN1Y2Nlc3NmdWxseSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tXHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4ge1xuLVx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcbiYjNDM7XHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9TSUdOQUwpO1xuIH1cbiBcbiAvKipcbkBAIC00NjYwLDE3ICYjNDM7NDY2MCwxNyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYlxuICAqIG1vZGVcbiAgKiBAdGFzazogVGFzayBzdHJ1Y3QgZm9yIHdoaWNoIGNhbGxiYWNrIHNob3VsZCBiZSBzY2hlZHVsZWRcbiAgKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcbi0gKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xuJiM0MzsgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xuICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXG4gICogQGF1eDogcG9pbnRlciB0byBicGZfcHJvZ19hdXggb2YgdGhlIGNhbGxlciBCUEYgcHJvZ3JhbSwgaW1wbGljaXRseSBzZXQgYnkgdGhlIHZlcmlmaWVyXG4gICpcbiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxuLVx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuIHtcbi1cdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1JFU1VNRSk7XG4mIzQzO1x0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fY29uc3RfbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcbiB9XG4gXG4gc3RhdGljIGludCBtYWtlX2ZpbGVfZHlucHRyKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIGJvb2wgbWF5X3NsZWVwLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmluZ2J1Zi5jIGIva2VybmVsL2JwZi9yaW5nYnVmLmNcbmluZGV4IDM1YWU2NGFkZTM2YjgzLi5jMWJmN2ExOTdhOTZmMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcmluZ2J1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3JpbmdidWYuY1xuQEAgLTYzNCw3ICYjNDM7NjM0LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yaW5nYnVmX291dHB1dF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IDQxZmU4N2Q3MzAyZjIyLi40NjNmOTRiYTFjYzQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5AQCAtNzgxLDcgJiM0Mzs3ODEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC03OTcsNyAmIzQzOzc5Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04MzEsNyAmIzQzOzgzMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODQ4LDcgJiM0Mzs4NDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC05MTEsNyAmIzQzOzkxMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDBmZjllM2FhMjkzZDU3Li4wYjVkYzY3ODhiYTI3ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTI0NDQsNyAmIzQzOzI0NDQsNyBAQCBzdGF0aWMgdm9pZCBfX2JwZl9wcm9nX3B1dF9ub3JlZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgZGVmZXJyZWQpXG4gXHRtb2R1bGVfcHV0KHByb2ctXHUwMDNlYXV4LVx1MDAzZW1vZCk7XG4gXHRrdmZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0ZWRfbGluZm8pO1xuIFx0a3ZmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWxpbmZvKTtcbi1cdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4mIzQzO1x0YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiKTtcbiBcdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mbyk7XG4gXHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0ZilcbiBcdFx0YnRmX3B1dChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmKTtcbkBAIC02NTQ0LDcgJiM0Mzs2NTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzX2JwZl9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICogX193ZWFrXG5AQCAtNjU5MSw3ICYjNDM7NjU5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2thbGxzeW1zX2xvb2t1cF9uYW1lX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxuIFx0LmFyZzRfc2l6ZVx0PSBzaXplb2YodTY0KSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDUyYmUwYTExOGNjZTA3Li4xY2E4Nzc5YWI1OWE1OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjcxOSw4ICYjNDM7MjcxOSwyNSBAQCBzdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvKTtcbiYjNDM7XG4mIzQzO3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICghdGFiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhYi1cdTAwM2Vucl9kZXNjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRrZnJlZSh0YWItXHUwMDNlZGVzY3NbaV0ucHJvdG8pO1xuJiM0MztcdGtmcmVlKHRhYik7XG4mIzQzO31cbiYjNDM7XG4gaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XG4mIzQzO1x0c3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bztcbiBcdHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqYnRmX3RhYjtcbiBcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xuIFx0c3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiO1xuQEAgLTI4MDYsMTEgJiM0MzsyODIzLDI5IEBAIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHByb3RvID0ga3phbGxvY19vYmooKnByb3RvLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghcHJvdG8pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNm1ldGEsIDAsIHNpemVvZihtZXRhKSk7XG4mIzQzO1x0bWV0YS5idGYgPSBrZnVuYy5idGY7XG4mIzQzO1x0bWV0YS5mdW5jX2lkID0ga2Z1bmMuaWQ7XG4mIzQzO1x0bWV0YS5mdW5jX3Byb3RvID0ga2Z1bmMucHJvdG87XG4mIzQzO1x0bWV0YS5mdW5jX25hbWUgPSBrZnVuYy5uYW1lO1xuJiM0MztcdG1ldGEua2Z1bmNfZmxhZ3MgPSBrZnVuYy5mbGFncyA/ICprZnVuYy5mbGFncyA6IDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdlbl9rZnVuY19hcmdfcHJvdG8oZW52LCBcdTAwMjZtZXRhLCBwcm90byk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHJvdG8pO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZGVzYyA9IFx1MDAyNnRhYi1cdTAwM2VkZXNjc1t0YWItXHUwMDNlbnJfZGVzY3MmIzQzOyYjNDM7XTtcbiBcdGRlc2MtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXHRkZXNjLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbiBcdGRlc2MtXHUwMDNlYWRkciA9IGFkZHI7XG4gXHRkZXNjLVx1MDAzZWZ1bmNfbW9kZWwgPSBmdW5jX21vZGVsO1xuJiM0MztcdGRlc2MtXHUwMDNlcHJvdG8gPSBwcm90bztcbiBcdHNvcnQodGFiLVx1MDAzZWRlc2NzLCB0YWItXHUwMDNlbnJfZGVzY3MsIHNpemVvZih0YWItXHUwMDNlZGVzY3NbMF0pLFxuIFx0ICAgICBrZnVuY19kZXNjX2NtcF9ieV9pZF9vZmYsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDkyNCw2ICYjNDM7NDk1OSwxOSBAQCBzdGF0aWMgdTMyICpyZWcyYnRmX2lkc1tfX0JQRl9SRUdfVFlQRV9NQVhdID0ge1xuIFx0W0NPTlNUX1BUUl9UT19NQVBdID0gYnRmX2JwZl9tYXBfaWQsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGVudW0gYnBmX3JlZ190eXBlIGxvb2t1cF9yZWcyYnRmX2lkcyhjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90KVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgX19CUEZfUkVHX1RZUEVfTUFYOyB0eXBlJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJlZzJidGZfaWRzW3R5cGVdIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCAqcmVnMmJ0Zl9pZHNbdHlwZV0pID09IHJlZl90KVxuJiM0MztcdFx0XHRyZXR1cm4gdHlwZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOT1RfSU5JVDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBpc190cnVzdGVkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdC8qIEEgcmVmZXJlbmNlZCByZWdpc3RlciBpcyBhbHdheXMgdHJ1c3RlZC4gKi9cbkBAIC02ODczLDcgJiM0Mzs2OTIxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgYm9vbCB6ZXJvX3NpemVfYWxsb3dlZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuLVx0aW50IGVycjtcbiYjNDM7XHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLVx1MDAzZXR5cGUpO1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1heV9iZV9udWxsKSB7XG4mIzQzO1x0XHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcbiYjNDM7XHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBUaGlzIGlzIHVzZWQgdG8gcmVmaW5lIHIwIHJldHVybiB2YWx1ZSBib3VuZHMgZm9yIGhlbHBlcnNcbiBcdCAqIHRoYXQgZW5mb3JjZSB0aGlzIHZhbHVlIGFzIGFuIHVwcGVyIGJvdW5kIG9uIHJldHVybiB2YWx1ZXMuXG5AQCAtNjkxMCw4ICYjNDM7Njk2NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIHNpemVfYXJnbm8pKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4tXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxuLVx0XHRcdFx0ICAgICAgYWNjZXNzX3R5cGUsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfUkVBRClcbiYjNDM7XHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG4mIzQzO1x0XHRcdFx0XHQgICAgICBCUEZfUkVBRCwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xuJiM0MztcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBhY2Nlc3NfdHlwZSBcdTAwMjYgQlBGX1dSSVRFKVxuJiM0MztcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9XUklURSwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xuJiM0MztcbiBcdGlmICghZXJyKSB7XG4gXHRcdGludCByZWdubyA9IHJlZ19mcm9tX2FyZ25vKHNpemVfYXJnbm8pO1xuIFxuQEAgLTY5MjAsMTUgJiM0Mzs2OTgxLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oc2l6ZV9hcmdubykpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAobWF5X2JlX251bGwpXG4mIzQzO1x0XHQqbWVtX3JlZyA9IHNhdmVkX3JlZztcbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi1cdFx0XHQgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplKVxuJiM0MztcdFx0XHQgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcbiYjNDM7XHRcdFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4mIzQzO1x0LyogbWV0YS1cdTAwM2VidGYgaXMgc2V0IG9ubHkgZm9yIGtmdW5jczsgYSBOVUxMIG1ldGEgbWVhbnMgYSBnbG9iYWwgc3VicHJvZy4gKi9cbiYjNDM7XHRib29sIGhlbHBlciA9IG1ldGEgXHUwMDI2XHUwMDI2ICFtZXRhLVx1MDAzZWJ0ZjtcbiBcdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKTtcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IHNpemUsIGVyciA9IDA7XG4gXG4gXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNjk0OCwxMCAmIzQzOzcwMTYsMTIgQEAgc3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdcbiBcdFx0bWFya19wdHJfbm90X251bGxfcmVnKHJlZyk7XG4gXHR9XG4gXG4tXHRpbnQgc2l6ZSA9IGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX1NUQUNLID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTtcbiYjNDM7XHRzaXplID0gKCFoZWxwZXIgXHUwMDI2XHUwMDI2IGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX1NUQUNLKSA/IC0oaW50KW1lbV9zaXplIDogbWVtX3NpemU7XG4gXG4tXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9SRUFELCB0cnVlLCBOVUxMKTtcbi1cdGVyciA9IGVyciA/OiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgTlVMTCk7XG4mIzQzO1x0aWYgKGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfUkVBRClcbiYjNDM7XHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIG1ldGEpO1xuJiM0MztcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAoYWNjZXNzX3R5cGUgXHUwMDI2IEJQRl9XUklURSkpXG4mIzQzO1x0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXG4gXHRpZiAobWF5X2JlX251bGwpXG4gXHRcdCpyZWcgPSBzYXZlZF9yZWc7XG5AQCAtNjk5MywyOCAmIzQzOzcwNjMsMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbWVtX3JlZyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcsIGFyZ25vX3QgbWVtX2FyZ25vLCBhcmdub190IHNpemVfYXJnbm8pXG4mIzQzO3N0YXRpYyBpbnQgcHJvY2Vzc19jb25zdF9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiYjNDM7XHRcdFx0ICAgICBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuLVx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwobWVtX3JlZy1cdTAwM2V0eXBlKTtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcbi1cdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xuJiM0MztcdGludCByZWdubyA9IHJlZ19mcm9tX2FyZ25vKGFyZ25vKTtcbiBcdGludCBlcnI7XG4gXG4tXHRtZW1zZXQoXHUwMDI2bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTtcbiYjNDM7XHRpZiAobWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcbiYjNDM7XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O29ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAobWF5X2JlX251bGwpIHtcbi1cdFx0c2F2ZWRfcmVnID0gKm1lbV9yZWc7XG4tXHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTtcbiYjNDM7XHRpZiAoIXRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxuXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBtZW1fcmVnLCBzaXplX3JlZywgbWVtX2FyZ25vLCBzaXplX2FyZ25vLCBCUEZfUkVBRCwgdHJ1ZSwgXHUwMDI2bWV0YSk7XG4tXHRlcnIgPSBlcnIgPzogY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1dSSVRFLCB0cnVlLCBcdTAwMjZtZXRhKTtcbiYjNDM7XHRpZiAocmVnbm8gXHUwMDNlPSAwKVxuJiM0MztcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCByZWdubyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKGFyZ25vKSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAobWF5X2JlX251bGwpXG4tXHRcdCptZW1fcmVnID0gc2F2ZWRfcmVnO1xuJiM0MztcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuIFxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gZW51bSB7XG5AQCAtNzIyNCwxOCAmIzQzOzcyOTksNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0cmV0dXJuIGNoZWNrX21hcF9maWVsZF9wb2ludGVyKGVudiwgcmVnLCBhcmdubywgQlBGX1RJTUVSLCBtYXApO1xuIH1cbiBcbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfaGVscGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tXHRcdFx0XHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4te1xuLVx0cmV0dXJuIHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbi19XG4tXG4tc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi17XG4tXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xuLX1cbi1cbiBzdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbiBcdFx0XHQgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG5AQCAtNzczOCw4ICYjNDM7NzgwMSw3IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX25leHRfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXG4gXG4gc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfbWVtX3NpemUoZW51bSBicGZfYXJnX3R5cGUgdHlwZSlcbiB7XG4tXHRyZXR1cm4gdHlwZSA9PSBBUkdfQ09OU1RfU0laRSB8fFxuLVx0ICAgICAgIHR5cGUgPT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTztcbiYjNDM7XHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IEFSR19NRU1fU0laRTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfcmF3X21lbShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxuQEAgLTc4ODUsOCAmIzQzOzc5NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgZHlucHRyX3R5cGVzID0ge1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHtcbiBcdFtBUkdfUFRSX1RPX01BUF9LRVldXHRcdD0gXHUwMDI2bWVtX3R5cGVzLFxuIFx0W0FSR19QVFJfVE9fTUFQX1ZBTFVFXVx0XHQ9IFx1MDAyNm1lbV90eXBlcyxcbi1cdFtBUkdfQ09OU1RfU0laRV1cdFx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4tXHRbQVJHX0NPTlNUX1NJWkVfT1JfWkVST11cdD0gXHUwMDI2c2NhbGFyX3R5cGVzLFxuJiM0MztcdFtBUkdfTUVNX1NJWkVdXHRcdFx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4gXHRbQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVST11cdD0gXHUwMDI2c2NhbGFyX3R5cGVzLFxuIFx0W0FSR19DT05TVF9NQVBfUFRSXVx0XHQ9IFx1MDAyNmNvbnN0X21hcF9wdHJfdHlwZXMsXG4gXHRbQVJHX1BUUl9UT19DVFhdXHRcdD0gXHUwMDI2Y29udGV4dF90eXBlcyxcbkBAIC04Mjg2LDExICYjNDM7ODM0Nyw0OSBAQCBzdGF0aWMgaW50IGdldF9jb25zdGFudF9tYXBfa2V5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gc3RhdGljIGJvb2wgY2FuX2VsaWRlX3ZhbHVlX251bGxuZXNzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuIFxuJiM0MztzdGF0aWMgaW50IHByb2Nlc3NfbWFwX3B0cl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiYjNDM7XHRcdFx0ICAgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiYjNDM7e1xuJiM0MztcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4mIzQzO1x0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuJiM0MztcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcbiYjNDM7XHQgKiBpZiAoaW5uZXJfbWFwMSBcdTAwMjZcdTAwMjYgaW5uZXJfbWFwMikge1xuJiM0MztcdCAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XG4mIzQzO1x0ICogICAgIGlmICh0aW1lcilcbiYjNDM7XHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXG4mIzQzO1x0ICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7XG4mIzQzO1x0ICogfVxuJiM0MztcdCAqXG4mIzQzO1x0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAobWV0YS1cdTAwM2VtYXAucHRyICE9IHJlZy1cdTAwM2VtYXBfcHRyIHx8IG1ldGEtXHUwMDNlbWFwLnVpZCAhPSByZWctXHUwMDNlbWFwX3VpZCkpIHtcbiYjNDM7XHRcdGFyZ25vX3Qgb2JqX2FyZ25vID0gYXJnbm9fZnJvbV9yZWcocmVnX2Zyb21fYXJnbm8oYXJnbm8pIC0gMSk7XG4mIzQzO1x0XHRzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjID0gbWV0YS1cdTAwM2VtYXAucHRyLVx1MDAzZXJlY29yZDtcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKm9ial9uYW1lID0gXCYjMzQ7d29ya3F1ZXVlXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZWMtXHUwMDNldGltZXJfb2ZmIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0b2JqX25hbWUgPSBcJiMzNDt0aW1lclwmIzM0OztcbiYjNDM7XHRcdGVsc2UgaWYgKHJlYy1cdTAwM2V0YXNrX3dvcmtfb2ZmIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0b2JqX25hbWUgPSBcJiMzNDticGZfdGFza193b3JrXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBwb2ludGVyIGluICVzIG1hcF91aWQ9JWQgXCYjMzQ7LFxuJiM0MztcdFx0XHRvYmpfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgb2JqX2FyZ25vKSwgbWV0YS1cdTAwM2VtYXAudWlkKTtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiAlcyBtYXBfdWlkPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZy1cdTAwM2VtYXBfdWlkKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4mIzQzO1x0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0XHRcdCAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbixcbiBcdFx0XHQgIGludCBpbnNuX2lkeClcbiB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiA9IG1ldGEtXHUwMDNlZm47XG4gXHR1MzIgcmVnbm8gPSBCUEZfUkVHXzEgJiM0MzsgYXJnO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbiBcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbYXJnXTtcbkBAIC04MzYxLDI5ICYjNDM7ODQ2MCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdHN3aXRjaCAoYmFzZV90eXBlKGFyZ190eXBlKSkge1xuIFx0Y2FzZSBBUkdfQ09OU1RfTUFQX1BUUjpcbiBcdFx0LyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovXG4tXHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIpIHtcbi1cdFx0XHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OlxuLVx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXG4tXHRcdFx0ICogaWYgKGlubmVyX21hcDEgXHUwMDI2XHUwMDI2IGlubmVyX21hcDIpIHtcbi1cdFx0XHQgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdCAqICAgICBpZiAodGltZXIpXG4tXHRcdFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxuLVx0XHRcdCAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpO1xuLVx0XHRcdCAqIH1cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1ldGEtXHUwMDNlbWFwLnB0ciAhPSByZWctXHUwMDNlbWFwX3B0ciB8fFxuLVx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcJiMzNDt0aW1lciBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4tXHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuJiM0MztcdFx0ZXJyID0gcHJvY2Vzc19tYXBfcHRyX2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fTUFQX0tFWTpcbiBcdFx0LyogYnBmX21hcF94eHgoLi4uLCBtYXBfcHRyLCAuLi4sIGtleSkgY2FsbDpcbkBAIC04NDY2LDcgJiM0Mzs4NTQ1LDcgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBBUkdfUFRSX1RPX1RJTUVSOlxuLVx0XHRlcnIgPSBwcm9jZXNzX3RpbWVyX2hlbHBlcihlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuJiM0MztcdFx0ZXJyID0gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGJyZWFrO1xuQEAgLTg0NzQsMzEgJiM0Mzs4NTUzLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdFx0bWV0YS1cdTAwM2VzdWJwcm9nbm8gPSByZWctXHUwMDNlc3VicHJvZ25vO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQVJHX1BUUl9UT19NRU06XG4tXHRcdC8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGVcbi1cdFx0ICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy5cbi1cdFx0ICovXG4gXHRcdGlmIChhcmdfdHlwZSBcdTAwMjYgTUVNX0ZJWEVEX1NJWkUpIHtcbi1cdFx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4tXHRcdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBtZXRhKTtcbiYjNDM7XHRcdFx0ZXJyID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddLFxuJiM0MztcdFx0XHRcdFx0ICAgIGFyZ190eXBlIFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCwgbWV0YSk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0aWYgKGFyZ190eXBlIFx1MDAyNiBNRU1fQUxJR05FRClcbiBcdFx0XHRcdGVyciA9IGNoZWNrX3B0cl9hbGlnbm1lbnQoZW52LCByZWcsIDAsIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sIHRydWUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCByZWcsIHNpemVfcmVnLCBhcmdubyxcbiYjNDM7XHRcdFx0XHRcdFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vICYjNDM7IDEpLFxuJiM0MztcdFx0XHRcdFx0XHQgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuJiM0MztcdFx0XHRcdFx0XHQgZm4tXHUwMDNlYXJnX3R5cGVbYXJnICYjNDM7IDFdIFx1MDAyNiBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFOlxuLVx0XHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCByZWdfc3RhdGUoZW52LCByZWdubyAtIDEpLCByZWcsXG4tXHRcdFx0XHRcdCBhcmdub19mcm9tX3JlZyhyZWdubyAtIDEpLCBhcmdubyxcbi1cdFx0XHRcdFx0IGZuLVx1MDAzZWFyZ190eXBlW2FyZyAtIDFdIFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcbi1cdFx0XHRcdFx0IGZhbHNlLCBtZXRhKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFX09SX1pFUk86XG4tXHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcbi1cdFx0XHRcdFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxuLVx0XHRcdFx0XHQgZm4tXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHQgdHJ1ZSwgbWV0YSk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBBUkdfUFRSX1RPX0RZTlBUUjpcbiBcdFx0ZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLFxuIFx0XHRcdFx0XHQgIFx1MDAyNm1ldGEtXHUwMDNlZHlucHRyKTtcbkBAIC04ODIzLDcgJiM0Mzs4ODkzLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcmF3X21vZGVfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgc3RydWN0IGJwZl9jYWxsX2FcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCFhcmdfdHlwZV9pc19yYXdfbWVtKGZuLVx1MDAzZWFyZ190eXBlW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1ldGEtXHUwMDNlYXJnX3Jhd19tZW0ucmVnbm8pXG5AQCAtODg0MCw3ICYjNDM7ODkxMCw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2FyZ3NfcGFpcl9pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIGludCBhcmcpXG4gXHRib29sIGhhc19zaXplID0gZm4tXHUwMDNlYXJnX3NpemVbYXJnXSAhPSAwO1xuIFx0Ym9vbCBpc19uZXh0X3NpemUgPSBmYWxzZTtcbiBcbi1cdGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSkpXG4mIzQzO1x0aWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpXG4gXHRcdGlzX25leHRfc2l6ZSA9IGFyZ190eXBlX2lzX21lbV9zaXplKGZuLVx1MDAzZWFyZ190eXBlW2FyZyAmIzQzOyAxXSk7XG4gXG4gXHRpZiAoYmFzZV90eXBlKGZuLVx1MDAzZWFyZ190eXBlW2FyZ10pICE9IEFSR19QVFJfVE9fTUVNKVxuQEAgLTg4NzEsNyAmIzQzOzg5NDEsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19idGZfaWRfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbilcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGJhc2VfdHlwZShmbi1cdTAwM2VhcmdfdHlwZVtpXSkgPT0gQVJHX1BUUl9UT19CVEZfSUQpXG4gXHRcdFx0cmV0dXJuICEhZm4tXHUwMDNlYXJnX2J0Zl9pZFtpXTtcbiBcdFx0aWYgKGJhc2VfdHlwZShmbi1cdTAwM2VhcmdfdHlwZVtpXSkgPT0gQVJHX1BUUl9UT19TUElOX0xPQ0spXG5AQCAtODg5MCw3ICYjNDM7ODk2MCw3IEBAIHN0YXRpYyBib29sIGNoZWNrX21lbV9hcmdfcndfZmxhZ19vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVx1MDAzZWFyZ190eXBlW2ldO1xuIFxuIFx0XHRpZiAoYmFzZV90eXBlKGFyZ190eXBlKSAhPSBBUkdfUFRSX1RPX01FTSlcbkBAIC04OTA2LDcgJiM0Mzs4OTc2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHJvdG9fcmVsZWFzZV9yZWcoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgc3RydWN0IGJwZl9cbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbiBcbiBcdFx0aWYgKGFyZ190eXBlX2lzX3JlbGVhc2UoYXJnX3R5cGUpKSB7XG5AQCAtOTI1Miw3ICYjNDM7OTMyMiw3IEBAIHN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuIFx0XHRcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdGlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLVx1MDAzZW1lbV9zaXplKSlcbiYjNDM7XHRcdFx0aWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctXHUwMDNlbWVtX3NpemUsIEJQRl9SRUFEIHwgQlBGX1dSSVRFLCBOVUxMKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGlmICghKGFyZy1cdTAwM2VhcmdfdHlwZSBcdTAwMjYgUFRSX01BWUJFX05VTEwpIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkge1xuIFx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0OyVzIGlzIGV4cGVjdGVkIHRvIGJlIG5vbi1OVUxMXFxuXCYjMzQ7LFxuQEAgLTEwMjk3LDkgJiM0MzsxMDM2NywxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSA9IHRydWU7XG4gXG4gXHRtZXRhLmZ1bmNfaWQgPSBmdW5jX2lkO1xuJiM0MztcdG1ldGEuZm4gPSBmbjtcbiBcdC8qIGNoZWNrIGFyZ3MgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCBcdTAwMjZtZXRhLCBmbiwgaW5zbl9pZHgpO1xuJiM0MztcdFx0ZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCBcdTAwMjZtZXRhLCBpbnNuX2lkeCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0xMDc3MSwyNiAmIzQzOzEwODQyLDI0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWVtX3NpemUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXG4tXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuIFxuIFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuJiM0MztcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19zelwmIzM0Oyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4gXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSB8fCByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4mIzQzO1x0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX3N6a1wmIzM0Oyk7XG5AQCAtMTA4MTEsNiAmIzQzOzEwODgwLDExIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19tYXAoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19tYXBcJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2NvbnN0X21hcFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hbGxvY1wmIzM0Oyk7XG5AQCAtMTEwNTEsMTggJiM0MzsxMTEyNSwyMSBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4gXHRLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERSxcbiBcdEtGX0FSR19QVFJfVE9fQlRGX0lELFx0ICAgICAgIC8qIEFsc28gY292ZXJzIHJlZzJidGZfaWRzIGNvbnZlcnNpb25zICovXG4gXHRLRl9BUkdfUFRSX1RPX01FTSxcbi1cdEtGX0FSR19QVFJfVE9fTUVNX1NJWkUsXHQgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqL1xuIFx0S0ZfQVJHX1BUUl9UT19DQUxMQkFDSyxcbiBcdEtGX0FSR19QVFJfVE9fUkJfUk9PVCxcbiBcdEtGX0FSR19QVFJfVE9fUkJfTk9ERSxcbi1cdEtGX0FSR19QVFJfVE9fTlVMTCxcbiBcdEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSLFxuLVx0S0ZfQVJHX1BUUl9UT19NQVAsXG4mIzQzO1x0S0ZfQVJHX0NPTlNUX01BUF9QVFIsXG4gXHRLRl9BUkdfUFRSX1RPX1RJTUVSLFxuIFx0S0ZfQVJHX1BUUl9UT19XT1JLUVVFVUUsXG4gXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxuIFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxuIFx0S0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssXG4mIzQzO1x0S0ZfQVJHX0NPTlNULFx0XHQgICAgICAgLyogY29uc3Qgc2NhbGFyICovXG4mIzQzO1x0S0ZfQVJHX0NPTlNUX01FTV9TSVpFLFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xuJiM0MztcdEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk8sIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSByZXR1cm5lZCBidWZmZXIgKi9cbiYjNDM7XHRLRl9BUkdfTUVNX1NJWkUsXHQgICAgICAgLyogc2NhbGFyIHNpemluZyBhIHByZWNlZGluZyBtZW1vcnkgYXJnICovXG4mIzQzO1x0S0ZfQVJHX0FOWVRISU5HLFx0ICAgICAgIC8qIHVuY29uc3RyYWluZWQgc2NhbGFyICovXG4gfTtcbiBcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG5AQCAtMTEzMTgsMTA4ICYjNDM7MTEzOTUsMTU1IEBAIGJvb2wgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XG4gfVxuIFxuLXN0YXRpYyBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZVxuLWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90LFxuLVx0XHQgICAgICAgY29uc3QgY2hhciAqcmVmX3RuYW1lLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLFxuLVx0XHQgICAgICAgaW50IGFyZywgaW50IG5hcmdzLCBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuJiM0MztzdGF0aWMgaW50XG4mIzQzO2dldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKnJlZl90ID0gTlVMTDtcbiYjNDM7XHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoYXJnICYjNDM7IDEpO1xuJiM0MztcdGNvbnN0IGNoYXIgKnJlZl90bmFtZSA9IE5VTEw7XG4gXHRib29sIGFyZ19tZW1fc2l6ZSA9IGZhbHNlO1xuJiM0MztcdGludCBhcmdfdHlwZTtcbiBcbi1cdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxuLVx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuXSB8fFxuLVx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ1RYO1xuJiM0MztcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xuIFxuLVx0aWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyAmIzQzOyAxKSkgfHxcbi1cdCAgICAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyAmIzQzOyAxKSkpKVxuLVx0XHRhcmdfbWVtX3NpemUgPSB0cnVlO1xuJiM0MztcdC8qIFNjYWxhciBhcmd1bWVudHMgYXJlIGNsYXNzaWZpZWQgZnJvbSB0aGVpciBCVEYgc3VmZml4L25hbWUgYWxvbmUuICovXG4mIzQzO1x0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuJiM0MztcdFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVDtcbiYjNDM7XHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRcdHJldHVybiBLRl9BUkdfQ09OU1RfTUVNX1NJWkU7XG4mIzQzO1x0XHRpZiAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0XHRyZXR1cm4gS0ZfQVJHX01FTV9TSVpFO1xuJiM0MztcdFx0aWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10sIFwmIzM0O3Jkb25seV9idWZfc2l6ZVwmIzM0OykgfHxcbiYjNDM7XHRcdCAgICBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddLCBcJiMzNDtyZHdyX2J1Zl9zaXplXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk87XG4mIzQzO1x0XHRyZXR1cm4gS0ZfQVJHX0FOWVRISU5HO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXHUwMDNlYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuJiM0MztcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuIFxuIFx0LyogSW4gdGhpcyBmdW5jdGlvbiwgd2UgdmVyaWZ5IHRoZSBrZnVuYyYjMzk7cyBCVEYgYXMgcGVyIHRoZSBhcmd1bWVudCB0eXBlLFxuIFx0ICogbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdmVyaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgcmVnaXN0ZXJcbiBcdCAqIHR5cGUgdG8gb3VyIGNhbGxlci4gV2hlbiBhIHNldCBvZiBjb25kaXRpb25zIGhvbGQgaW4gdGhlIEJURiB0eXBlIG9mXG4gXHQgKiBhcmd1bWVudHMsIHdlIHJlc29sdmUgaXQgdG8gYSBrbm93biBrZnVuY19wdHJfYXJnX3R5cGUuXG4gXHQgKi9cbi1cdGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZShcdTAwMjZlbnYtXHUwMDNlbG9nLCBtZXRhLVx1MDAzZWJ0ZiwgdCwgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpLCBhcmcpKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DVFg7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhcmdfbWVtX3NpemUpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX05VTEw7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19EWU5QVFI7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2l0ZXIobWV0YSwgYXJnLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JVEVSO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfbGlzdF9ub2RlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19MSVNUX05PREU7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3JidHJlZV9yb290KG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfY29uc3Rfc3RyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI7XG4mIzQzO1x0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XG4mIzQzO1x0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuXSB8fFxuJiM0MztcdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xuJiM0MztcdGVsc2UgaWYgKGJ0Zl9pc19wcm9nX2N0eF90eXBlKFx1MDAyNmVudi1cdTAwM2Vsb2csIG1ldGEtXHUwMDNlYnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtXHUwMDNlcHJvZyksIGFyZykpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hbGxvY19vYmoobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fRFlOUFRSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19pdGVyKG1ldGEsIGFyZywgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JVEVSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9IRUFEO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SQl9OT0RFO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tYXAobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19DT05TVF9NQVBfUFRSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19tYXAobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7XG4mIzQzO1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3RpbWVyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RJTUVSO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190YXNrX3dvcmsobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fVEFTS19XT1JLO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRztcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLO1xuJiM0MztcdGVsc2Uge1xuJiM0MztcdFx0aWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkgfHxcbiYjNDM7XHRcdCAgICAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkpKVxuJiM0MztcdFx0XHRhcmdfbWVtX3NpemUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QocmVmX3QpIFx1MDAyNlx1MDAyNiAhYXJnX21lbV9zaXplKSB7XG4mIzQzO1x0XHRcdC8qIEEgcG9pbnRlciB0byBhIHN0cnVjdCB3aXRob3V0IGEgc2l6ZSBhcmd1bWVudCBpcyBjbGFzc2lmaWVkXG4mIzQzO1x0XHRcdCAqIGFzIEtGX0FSR19QVFJfVE9fQlRGX0lELlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAoYXJnX21lbV9zaXplID8gIWJ0Zl90eXBlX2lzX3ZvaWQocmVmX3QpIDogMSkpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxuJiM0MztcdFx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gXCYjMzQ7dm9pZCwgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBPdGhlcndpc2UgdGhpcyBpcyBhIG1lbW9yeSBidWZmZXIgc3VwcG9ydGVkIGJ5XG4mIzQzO1x0XHRcdCAqIGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKCk6IGEgcG9pbnRlciB0byBhIHNjYWxhciwgb3IgdG8gdm9pZFxuJiM0MztcdFx0XHQgKiB3aGVuIHBhaXJlZCB3aXRoIGEgc2l6ZSBhcmd1bWVudC4gVGhlIGFjY2VzcyBzaXplIGlzIGRlcml2ZWRcbiYjNDM7XHRcdFx0ICogZnJvbSB0aGUgcG9pbnRlZC10byBCVEYgdHlwZSB1bmxlc3MgYSBzaXplIGFyZ3VtZW50IGZvbGxvd3MuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRhcmdfdHlwZSA9IGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNIDogS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTUFQO1xuJiM0MztcdGlmIChpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSB8PSBQVFJfTUFZQkVfTlVMTDtcbiBcbi1cdGlmIChpc19rZnVuY19hcmdfd3EobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTtcbiYjNDM7XHRyZXR1cm4gYXJnX3R5cGU7XG4mIzQzO31cbiBcbi1cdGlmIChpc19rZnVuY19hcmdfdGltZXIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1RJTUVSO1xuJiM0MztzdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG1ldGEtXHUwMDNlYnRmO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4mIzQzO1x0dTMyIGksIG5hcmdzO1xuJiM0MztcdGludCBhcmdfdHlwZTtcbiBcbi1cdGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks7XG4mIzQzO1x0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEtXHUwMDNlZnVuY19wcm90byAmIzQzOyAxKTtcbiYjNDM7XHRuYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS1cdTAwM2VmdW5jX3Byb3RvKTtcbiYjNDM7XHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKSB7XG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7RnVuY3Rpb24gJXMgaGFzICVkIFx1MDAzZSAlZCBhcmdzXFxuXCYjMzQ7LCBtZXRhLVx1MDAzZWZ1bmNfbmFtZSxcbiYjNDM7XHRcdFx0bmFyZ3MsIE1BWF9CUEZfRlVOQ19BUkdTKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG1ldGEtXHUwMDNlZnVuY19uYW1lLCBuYXJncyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcdH1cbiBcbi1cdGlmIChpc19rZnVuY19hcmdfaXJxX2ZsYWcobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5hcmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGlzX2tmdW5jX2FyZ19wcm9nX2F1eChidGYsIFx1MDAyNmFyZ3NbaV0pIHx8XG4mIzQzO1x0XHQgICAgaXNfa2Z1bmNfYXJnX2lnbm9yZShidGYsIFx1MDAyNmFyZ3NbaV0pIHx8XG4mIzQzO1x0XHQgICAgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KG1ldGEsIGkpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiYjNDM7XHRcdGFyZ190eXBlID0gZ2V0X2tmdW5jX2FyZ190eXBlKGVudiwgbWV0YSwgYXJncywgaSwgbmFyZ3MpO1xuJiM0MztcdFx0aWYgKGFyZ190eXBlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gYXJnX3R5cGU7XG4gXG4tXHRpZiAoKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fCByZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpXSkpIHtcbi1cdFx0aWYgKCFidGZfdHlwZV9pc19zdHJ1Y3QocmVmX3QpKSB7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdG1ldGEtXHUwMDNlZnVuY19uYW1lLCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksXG4tXHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0JURl9JRDtcbiYjNDM7XHRcdHByb3RvLVx1MDAzZWFyZ190eXBlW2ldID0gYXJnX3R5cGU7XG4gXHR9XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NBTExCQUNLO1xuLVxuLVx0LyogVGhpcyBpcyB0aGUgY2F0Y2ggYWxsIGFyZ3VtZW50IHR5cGUgb2YgcmVnaXN0ZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XG4tXHQgKiBjaGVja19oZWxwZXJfbWVtX2FjY2Vzcy4gSG93ZXZlciwgd2Ugb25seSBhbGxvdyB3aGVuIGFyZ3VtZW50IHR5cGUgaXNcbi1cdCAqIHBvaW50ZXIgdG8gc2NhbGFyLCBvciBzdHJ1Y3QgY29tcG9zZWQgKHJlY3Vyc2l2ZWx5KSBvZiBzY2FsYXJzLiBXaGVuXG4tXHQgKiBhcmdfbWVtX3NpemUgaXMgdHJ1ZSwgdGhlIHBvaW50ZXIgY2FuIGJlIHZvaWQgKi5cbi1cdCAqL1xuLVx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNiAhX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90LCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoYXJnX21lbV9zaXplID8gIWJ0Zl90eXBlX2lzX3ZvaWQocmVmX3QpIDogMSkpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cJiMzNDssXG4tXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxuLVx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gXCYjMzQ7dm9pZCwgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXHRyZXR1cm4gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU1fU0laRSA6IEtGX0FSR19QVFJfVE9fTUVNO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0xMjAwNSwxNiAmIzQzOzEyMTI5LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcbiBcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVx1MDAzZWZ1bmNfcHJvdG8gJiM0MzsgMSk7XG4gXHRuYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS1cdTAwM2VmdW5jX3Byb3RvKTtcbi1cdGlmIChuYXJncyBcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpIHtcbi1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmN0aW9uICVzIGhhcyAlZCBcdTAwM2UgJWQgYXJnc1xcblwmIzM0OywgZnVuY19uYW1lLCBuYXJncyxcbi1cdFx0XHRNQVhfQlBGX0ZVTkNfQVJHUyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVx0aWYgKG5hcmdzIFx1MDAzZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgXHUwMDI2XHUwMDI2ICFicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3MoKSkge1xuLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcXG5cJiMzNDssXG4tXHRcdFx0ZnVuY19uYW1lLCBuYXJncyk7XG4tXHRcdHJldHVybiAtRU5PVFNVUFA7XG4tXHR9XG4gXG4gXHRyZXQgPSBjaGVja19vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY2FsbGVyLCBuYXJncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMDMxLDggJiM0MzsxMjE0NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdGludCByZWdubyA9IHJlZ19mcm9tX2FyZ25vKGFyZ25vKTtcbiBcdFx0Ym9vbCBidGZfaWRfZml4ZWRfb2ZmX29rID0gdHJ1ZTtcbiBcdFx0dTMyIHJlZl9pZCwgdHlwZV9zaXplO1xuLVx0XHRib29sIGlzX3JldF9idWZfc3ogPSBmYWxzZTtcbi1cdFx0aW50IGtmX2FyZ190eXBlO1xuJiM0MztcdFx0aW50IGtmX2FyZ190eXBlID0gbWV0YS1cdTAwM2Vmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbiBcbiBcdFx0aWYgKGlzX2tmdW5jX2FyZ19wcm9nX2F1eChidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4gXHRcdFx0LyogUmVqZWN0IHJlcGVhdGVkIHVzZSBicGZfcHJvZ19hdXggKi9cbkBAIC0xMjA1NSw1MiAmIzQzOzEyMTY4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcbiBcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbiBcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbi1cdFx0XHRcdGlmIChtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCkge1xuLVx0XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChyZWdubyBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdHJldCA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRyZXQgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBpKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0XHRcdH0gZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcJiMzNDtyZG9ubHlfYnVmX3NpemVcJiMzNDspKSB7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZXIwX3Jkb25seSA9IHRydWU7XG4tXHRcdFx0XHRpc19yZXRfYnVmX3N6ID0gdHJ1ZTtcbi1cdFx0XHR9IGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGJ0ZiwgXHUwMDI2YXJnc1tpXSwgXCYjMzQ7cmR3cl9idWZfc2l6ZVwmIzM0OykpIHtcbi1cdFx0XHRcdGlzX3JldF9idWZfc3ogPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaXNfcmV0X2J1Zl9zeikge1xuLVx0XHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlcmV0X21lbSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdH1cbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcdTAwMjZcdTAwMjYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbkBAIC0xMjExNyw3NiAmIzQzOzEyMTg1LDM2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdGlmIChyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0dXBkYXRlX3JlZl9vYmooXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLCByZWcpO1xuIFxuLVx0XHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZyZWZfaWQpO1xuLVx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4mIzQzO1x0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4mIzQzO1x0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgYXJncywgaSwgbmFyZ3MsIGFyZ25vLCByZWcpO1xuLVx0XHRpZiAoa2ZfYXJnX3R5cGUgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGtmX2FyZ190eXBlO1xuIFxuLVx0XHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxuJiM0MztcdFx0aWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUFQOlxuLVx0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtwb2ludGVyIGluICVzIGlzbiYjMzk7dCBtYXAgcG9pbnRlclxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXdxX29mZiBcdTAwM2U9IDAgfHxcbi1cdFx0XHRcdFx0ICAgICAgcmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSkge1xuLVx0XHRcdFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcbi1cdFx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5Milcbi1cdFx0XHRcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4tXHRcdFx0XHQgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdFx0ICogICAgIGlmICh3cSlcbi1cdFx0XHRcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbi1cdFx0XHRcdCAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpO1xuLVx0XHRcdFx0ICogfVxuLVx0XHRcdFx0ICpcbi1cdFx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHxcbi1cdFx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdFx0aWYgKHJlZy1cdTAwM2VtYXBfcHRyLVx1MDAzZXJlY29yZC1cdTAwM2V0YXNrX3dvcmtfb2ZmIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFx0XCYjMzQ7YnBmX3Rhc2tfd29yayBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjMgbWFwX3VpZD0lZFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCwgcmVnLVx1MDAzZW1hcF91aWQpO1xuLVx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0XHR9XG4tXHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFwmIzM0O3dvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnB0ciA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpc19rZnVuY19hcmdfbWFwKGJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbiYjNDM7XHRcdFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xuJiM0MztcdFx0XHRyZWZfdCA9IGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCByZWZfaWQpO1xuJiM0MztcdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19DT05TVDpcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOlxuJiM0MztcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19BTllUSElORzpcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcbi1cdFx0XHRpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSkge1xuLVx0XHRcdFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19DT05TVF9NQVBfUFRSOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fSVRFUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbkBAIC0xMjIxNyw3ICYjNDM7MTIyNDUsMzcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0XHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUOlxuJiM0MztcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XG4mIzQzO1x0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXFxuXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19BTllUSElORzpcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk86XG4mIzQzO1x0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXFxuXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcJiMzNDtyZG9ubHlfYnVmX3NpemVcJiMzNDspKVxuJiM0MztcdFx0XHRcdG1ldGEtXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlcmV0X21lbSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XG4gXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBleHBlY3RlZCBwb2ludGVyIHRvIGN0eCwgYnV0IGdvdCAlc1xcblwmIzM0OyxcbkBAIC0xMjM4Niw1MSAmIzQzOzEyNDQ0LDc3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XG4tXHRcdFx0LyogSWYgYXJndW1lbnQgaGFzICYjMzk7X19tYXAmIzM5OyBzdWZmaXggZXhwZWN0ICYjMzk7c3RydWN0IGJwZl9tYXAgKiYjMzk7ICovXG4tXHRcdFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xuLVx0XHRcdHJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7XG4tXHRcdFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuLVx0XHRcdC8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi9cbi1cdFx0XHRpZiAoKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fFxuLVx0XHRcdCAgICAgKGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIWlzX3JjdV9yZWcocmVnKSkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAhcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyAlcyBcJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbi1cdFx0XHRcdFx0cmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtleHBlY3RlZCAlcyBvciBzb2NrZXRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgfFxuLVx0XHRcdFx0XHRcdFx0ICAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgQlBGX1JFR19UUlVTVEVEX01PRElGSUVSUykpKTtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XG4mIzQzO1x0XHRcdGlmIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IENPTlNUX1BUUl9UT19NQVApIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cG9pbnRlciBpbiAlcyBpc24mIzM5O3QgbWFwIHBvaW50ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xuJiM0MztcdFx0XHRyZXQgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG4tXHRcdFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFx1MDAyNnR5cGVfc2l6ZSk7XG4tXHRcdFx0aWYgKElTX0VSUihyZXNvbHZlX3JldCkpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyByZWZlcmVuY2UgdHlwZSgmIzM5OyVzICVzJiMzOTspIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxuLVx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XG4mIzQzO1x0XHRcdC8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi9cbiYjNDM7XHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fFxuJiM0MztcdFx0XHQgICAgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pIHtcbiYjNDM7XHRcdFx0XHRpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSB8fFxuJiM0MztcdFx0XHRcdCAgICBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyhyZWctXHUwMDNldHlwZSkpIHtcbiYjNDM7XHRcdFx0XHRcdGlmICghaXNfa2Z1bmNfcmN1KG1ldGEpKSB7XG4mIzQzO1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRcdGlmICghaXNfcmN1X3JlZyhyZWcpKSB7XG4mIzQzO1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzICVzIGV4cGVjdGVkICVzICVzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXHUwMDNldHlwZSksXG4mIzQzO1x0XHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuJiM0MztcdFx0XHRcdGlmIChyZWcyYnRmX3R5cGUgIT0gTk9UX0lOSVQpXG4mIzQzO1x0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IG9yICVzXCYjMzQ7LCByZWdfdHlwZV9zdHIoZW52LCByZWcyYnRmX3R5cGUpKTtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxuLVx0XHR7XG4tXHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmJ1ZmZfcmVnID0gcmVnO1xuLVx0XHRcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmJ1ZmZfYXJnID0gXHUwMDI2YXJnc1tpXTtcbi1cdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSAmIzQzOyAxKTtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpzaXplX2FyZyA9IFx1MDAyNmFyZ3NbaSAmIzQzOyAxXTtcbi1cdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpO1xuLVxuLVx0XHRcdGlmICghYnBmX3JlZ2lzdGVyX2lzX251bGwoYnVmZl9yZWcpIHx8ICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIGJ1ZmZfYXJnKSkge1xuLVx0XHRcdFx0cmV0ID0gY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGFyZ25vLCBuZXh0X2FyZ25vKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIHRoZSByZWdpc3RlciBkb2VzIG5vdCBjb250YWluIGJ0ZiBpZCBidXQgdGhlIGFyZ3VtZW50IHR5cGUgaXMgYSBwb2ludGVyIHRvXG4mIzQzO1x0XHRcdCAqIHNjYWxhci1vbmx5IHN0cnVjdCwgYWxsb3cgdmVyaWZ5aW5nIGl0IGFzIGEgZml4ZWQgc2l6ZSBtZW1vcnkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRrZl9hcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTUVNIHwgTUVNX0ZJWEVEX1NJWkU7XG4mIzQzO1x0XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbiYjNDM7XHRcdFx0aWYgKGtmX2FyZ190eXBlIFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xuJiM0MztcdFx0XHRcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcdTAwMjZ0eXBlX3NpemUpO1xuJiM0MztcdFx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4mIzQzO1x0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcmVmZXJlbmNlIHR5cGUoJiMzOTslcyAlcyYjMzk7KSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSxcbiYjNDM7XHRcdFx0XHRcdFx0cmVmX3RuYW1lLCBQVFJfRVJSKHJlc29sdmVfcmV0KSk7XG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0cmV0ID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIHR5cGVfc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIG1ldGEpO1xuJiM0MztcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpidWZmX3JlZyA9IHJlZztcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRyZXQgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsIGFyZ25vLCBuZXh0X2FyZ25vLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBCUEZfUkVBRCB8IEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBhbmQgXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbWVtb3J5LCBsZW4gcGFpciBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NcXG5cJiMzNDssXG5AQCAtMTI0MzgsMjUgJiM0MzsxMjUyMiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIHNpemVfYXJnLCBzaXplX3JlZykpIHtcbi1cdFx0XHRcdGlmIChtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCkge1xuLVx0XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmICghdG51bV9pc19jb25zdChzaXplX3JlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIG5leHRfYXJnbm8pKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHNpemVfcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qIFNraXAgbmV4dCAmIzM5O19fc3omIzM5OyBvciAmIzM5O19fc3prJiMzOTsgYXJndW1lbnQgKi9cbi1cdFx0XHRpJiM0MzsmIzQzOztcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6XG4gXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19GVU5DKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgZXhwZWN0ZWQgcG9pbnRlciB0byBmdW5jXFxuXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuQEAgLTEyNTE0LDcgJiM0MzsxMjU4MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0cmV0ID0gcHJvY2Vzc190aW1lcl9rZnVuYyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuJiM0MztcdFx0XHRyZXQgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZW1hcCk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTI2NzYsNyAmIzQzOzEyNzQyLDcgQEAgczY0IGJwZl9oZWxwZXJfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdHNpemUgPSBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYXJnICYjNDM7IDEgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGFyZ190eXBlX2lzX21lbV9zaXplKGZuLVx1MDAzZWFyZ190eXBlW2FyZyAmIzQzOyAxXSkpIHtcbiBcdFx0XHRpbnQgc2l6ZV9yZWcgPSBCUEZfUkVHXzEgJiM0MzsgYXJnICYjNDM7IDE7XG4gXG5AQCAtMTI5NzUsNiAmIzQzOzEzMDQxLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xuIFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbiBcbkBAIC0xMjk5MSw2ICYjNDM7MTMwNTgsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGZ1bmNfbmFtZSA9IG1ldGEuZnVuY19uYW1lO1xuIFx0aW5zbl9hdXggPSBcdTAwMjZlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF07XG4gXG4mIzQzO1x0ZGVzYyA9IGZpbmRfa2Z1bmNfZGVzYyhlbnYtXHUwMDNlcHJvZywgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRpZiAoIWRlc2MpIHtcbiYjNDM7XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2tmdW5jIGRlc2NyaXB0b3Igbm90IGZvdW5kIGZvciBmdW5jX2lkICV1XCYjMzQ7LCBpbnNuLVx1MDAzZWltbSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1x0bWV0YS5mbiA9IGRlc2MtXHUwMDNlcHJvdG87XG4mIzQzO1xuIFx0aW5zbl9hdXgtXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKTtcbiBcbiBcdGlmICghaW5zbi1cdTAwM2VvZmYgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA3NmFiNTFkZWFhNmI5NS4uODkxODk3ZjhhMWIzNTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTIyMSw3ICYjNDM7MjIxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTI1OCw3ICYjNDM7MjU4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0yNzMsNyAmIzQzOzI3Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTMwOCw3ICYjNDM7MzA4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTMyOCw3ICYjNDM7MzI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTM0Nyw3ICYjNDM7MzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfc3RyX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFICovXG5AQCAtMzgzLDcgJiM0MzszODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV93cml0ZV91c2VyX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiAjZGVmaW5lIE1BWF9UUkFDRV9QUklOVEtfVkFSQVJHU1x0M1xuQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfcHJpbnRrX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX3NldF9wcmludGtfY2xyX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC00NzQsOSAmIzQzOzQ3NCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RyYWNlX3ZwcmludGtfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF90cmFjZV92cHJpbnRrX3Byb3RvKHZvaWQpXG5AQCAtNTE4LDkgJiM0Mzs1MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc2VxX3dyaXRlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgY29uc3Qgdm9pZCAqLCBkYXRhLCB1MzIsIGxlbilcbkBAIC01MzUsNyAmIzQzOzUzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV93cml0ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3NlcV9maWxlX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF80KGJwZl9zZXFfcHJpbnRmX2J0Ziwgc3RydWN0IHNlcV9maWxlICosIG0sIHN0cnVjdCBidGZfcHRyICosIHB0cixcbkBAIC01NTksNyAmIzQzOzU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfYnRmX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmJwZl9nZXRfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvKHZvaWQpXG5AQCAtNzMwLDcgJiM0Mzs3MzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBicGZfZXZlbnRfb3V0cHV0X25lc3RfbGV2ZWwpO1xuQEAgLTk5Niw3ICYjNDM7OTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZF9wYXRoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfZF9wYXRoX2J0Zl9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYWxsb3dlZFx0PSBicGZfZF9wYXRoX2FsbG93ZWQsXG4gfTtcbiBcbkBAIC0xMDUzLDkgJiM0MzsxMDUzLDkgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTIxOCw3ICYjNDM7MTIxOCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2JyYW5jaF9zbmFwc2hvdF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoZ2V0X2Z1bmNfYXJnLCB2b2lkICosIGN0eCwgdTMyLCBuLCB1NjQgKiwgdmFsdWUpXG5AQCAtMTQyMSw3ICYjNDM7MTQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3RwID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3RwLCB2b2lkICosIHRwX2J1ZmYsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbkBAIC0xNDYyLDcgJiM0MzsxNDYyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3RwID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE1MjQsMTIgJiM0MzsxNTI0LDEyIEBAIEJQRl9DQUxMXzMoYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWVfcHJvdG8gPSB7XG4tICAgICAgICAgLmZ1bmMgICAgICAgICAgID0gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLFxuLSAgICAgICAgIC5ncGxfb25seSAgICAgICA9IHRydWUsXG4tICAgICAgICAgLnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4tICAgICAgICAgLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4tICAgICAgICAgLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLSAgICAgICAgIC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5mdW5jICAgICAgICAgICA9IGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSxcbiYjNDM7XHQuZ3BsX29ubHkgICAgICAgPSB0cnVlLFxuJiM0MztcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLFxuJiM0MztcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuJiM0MztcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF80KGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbkBAIC0xNTY2LDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVhZF9icmFuY2hfcmVjb3Jkc19wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE2NDYsNyAmIzQzOzE2NDYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90b19yYXdfdHAgPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90bztcbkBAIC0xNzAxLDcgJiM0MzsxNzAxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3Jhd190cCA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAwYjdhZmRkMGFlNDc0OC4uZWIwYjcwNmFmNGIyOTYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xNzQ3LDcgJiM0MzsxNzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0xNzg0LDcgJiM0MzsxNzg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBpbnQgX19icGZfc2tiX2xvYWRfYnl0ZXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldCwgdm9pZCAqdG8sIHUzMiBsZW4pXG5AQCAtMTgyMyw3ICYjNDM7MTgyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2Zsb3dfZGlzc2VjdG9yX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTE4NjcsNyAmIzQzOzE4NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjA2Myw5ICYjNDM7MjA2Myw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NzdW1fZGlmZl9wcm90byA9IHtcbiBcdC5wa3RfYWNjZXNzXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTI2MjEsNyAmIzQzOzI2MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9uZWlnaF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC00MTk0LDcgJiM0Mzs0MTk0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBpbnQgX19icGZfeGRwX2xvYWRfYnl0ZXMoc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBvZmZzZXQsIHZvaWQgKmJ1ZiwgdTMyIGxlbilcbkBAIC00MjI2LDcgJiM0Mzs0MjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gaW50IF9fYnBmX3hkcF9zdG9yZV9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxuQEAgLTQ3ODksNyAmIzQzOzQ3ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJURl9JRF9MSVNUX1NJTkdMRShicGZfc2tiX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHNrX2J1ZmYpXG5AQCAtNDgwMyw3ICYjNDM7NDgwMyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYnBmX3R1bm5lbF9rZXlfYWYodTY0IGZsYWdzKVxuQEAgLTQ4ODYsNyAmIzQzOzQ4ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9rZXlfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC00OTIxLDcgJiM0Mzs0OTIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfb3B0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbWV0YWRhdGFfZHN0IF9fcGVyY3B1ICptZF9kc3Q7XG5AQCAtNTAwMyw3ICYjNDM7NTAwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX2tleV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTUwMzEsNyAmIzQzOzUwMzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5AQCAtNTIwMyw3ICYjNDM7NTIwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9ldmVudF9vdXRwdXRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl94ZHBfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgeGRwX2J1ZmYpXG5AQCAtNTIxNyw3ICYjNDM7NTIxNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8xKGJwZl9nZXRfc29ja2V0X2Nvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxuQEAgLTU3NjQsNyAmIzQzOzU3NjQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTc4MSw3ICYjNDM7NTc4MSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXksIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MDUsNyAmIzQzOzU4MDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01ODIyLDcgJiM0Mzs1ODIyLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MzksNyAmIzQzOzU4MzksNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3VubG9ja2VkX3NrX2dldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc29ja19hZGRyX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxuQEAgLTU4NTYsNyAmIzQzOzU4NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5AQCAtNTg3Myw3ICYjNDM7NTg3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2tfYnBmX3NldF9nZXRfYnlwYXNzX3Byb3RfbWVtKHN0cnVjdCBzb2NrICpzayxcbkBAIC01OTE4LDcgJiM0Mzs1OTE4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19jcmVhdGVfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2NyZWF0ZV9nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01OTQ0LDcgJiM0Mzs1OTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX29wc19zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXG5AQCAtNTk3MCw3ICYjNDM7NTk3MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfc29ja19vcHNfZ2V0X3N5bihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKmJwZl9zb2NrLFxuQEAgLTYwODAsNyAmIzQzOzYwODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuQEAgLTYxNDcsNyAmIzQzOzYxNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9iaW5kX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfWEZSTVxuQEAgLTYyMDAsNyAmIzQzOzYyMDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuICNlbmRpZlxuQEAgLTY2MDcsNyAmIzQzOzY2MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZmliX2xvb2t1cF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTY2NjcsNyAmIzQzOzY2NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZmliX2xvb2t1cF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTY4NjUsNyAmIzQzOzY4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfaW5fcHVzaF9lbmNhcF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuQEAgLTY4NzUsNyAmIzQzOzY4NzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuQEAgLTY5MTksNyAmIzQzOzY5MTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTcwMDgsNyAmIzQzOzcwMDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbkBAIC03MjQ5LDcgJiM0Mzs3MjQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzI2OCw3ICYjNDM7NzI2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTcyODcsNyAmIzQzOzcyODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03MzExLDcgJiM0Mzs3MzExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzMzNSw3ICYjNDM7NzMzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczNTksNyAmIzQzOzczNTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03Mzk3LDcgJiM0Mzs3Mzk3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGUgICAgICAgPSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzQyMSw3ICYjNDM7NzQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0NDUsNyAmIzQzOzc0NDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NDY1LDcgJiM0Mzs3NDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0ODQsNyAmIzQzOzc0ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzUwMyw3ICYjNDM7NzUwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03ODIzLDkgJiM0Mzs3ODIzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2NoZWNrX3N5bmNvb2tpZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG5AQCAtNzg5Miw5ICYjNDM7Nzg5Miw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbkBAIC04MDQ4LDcgJiM0Mzs4MDQ4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfbG9hZF9oZHJfb3B0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04MTI2LDcgJiM0Mzs4MTI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc3RvcmVfaGRyX29wdF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTgyMjEsNyAmIzQzOzgyMjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9SRE9OTFksXG4gXHQuYXJnMV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG5AQCAtODI1Myw3ICYjNDM7ODI1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1JET05MWSxcbiBcdC5hcmcxX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxuQEAgLTExNzI2LDcgJiM0MzsxMTcyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlLFxuQEAgLTExNzQ0LDcgJiM0MzsxMTc0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Zi4uYTgxZmFhNzA5ZGQ1YmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9tYXNraW5nLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX21heV9nb3RvXzEuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbWF5X2dvdG9fMi5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbWVtX3NpemVfcmVnLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX21ldGFfYWNjZXNzLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX21vdnN4LnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX210dS5za2VsLmhcJiMzNDtcbkBAIC0yMjEsNiAmIzQzOzIyMiw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9tYXBfcmV0X3ZhbCh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXBfcmV0X3ZhbCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWFza2luZyh2b2lkKSAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWFza2luZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMSh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMik7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX21lbV9zaXplX3JlZyh2b2lkKSAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21lbV9zaXplX3JlZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWV0YV9hY2Nlc3Modm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWV0YV9hY2Nlc3MpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21vdnN4KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tb3ZzeCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbXVsKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbXVsKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xuaW5kZXggZDBkNjVkNmQ0NTBjZjUuLmVmZTdiY2FlNzBmODVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcbkBAIC02NCw3ICYjNDM7NjQsNyBAQCBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX25vX251bGxfY2hlY2ssIHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IGNoYXIgKlxuIH1cbiBcbiBTRUMoXCYjMzQ7dHBfYnRmL2Nncm91cF9ta2RpclwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCBjZ3JvdXAgbXVzdCBwb2ludFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBjZ3JvdXBcJiMzNDspXG4gaW50IEJQRl9QUk9HKGNncnBfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqcGF0aClcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwICphY3F1aXJlZCwgKnN0YWNrX2NncnAgPSAoc3RydWN0IGNncm91cCAqKVx1MDAyNnBhdGg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xuaW5kZXggNWI0NDUzNzQ3YzIzMDguLjA5NTJkMWViZjBmMTdhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jXG5AQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgaGVscGVyX3BhcmFtX25vdF9vayh2b2lkICpjdHgpXG4gXG4gXHRwID0gYnBmX3Jkb25seV9jYXN0KDAsIDApO1xuIFx0Lypcbi1cdCAqIEFueSBoZWxwZXIgd2l0aCBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIGNvbnN0cmFpbnQgd2lsbCBkbyxcbiYjNDM7XHQgKiBBbnkgaGVscGVyIHdpdGggQVJHX01FTV9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLFxuIFx0ICogdGhlIG1vc3QgcGVybWlzc2l2ZSBjb25zdHJhaW50XG4gXHQgKi9cbiBcdGJwZl9jb3B5X2Zyb21fdXNlcihwLCAwLCAodm9pZCAqKTQyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmNcbmluZGV4IDg5NDJiNTQ3ODEyOTE3Li41Yzk5YjFlNjUzMmJmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXG5AQCAtNTAsNyAmIzQzOzUwLDcgQEAgaW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZcbiB9XG4gXG4gU0VDKFwmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2tcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgdGFza19zdHJ1Y3QgbXVzdCBwb2ludFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFwmIzM0OylcbiBpbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkLCAqc3RhY2tfdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilcdTAwMjZjbG9uZV9mbGFncztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbmluZGV4IGJjMDM4YWMyZGY5OGUyLi4xYTI3M2U0MTZmZWRmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG5AQCAtMTE5NSw3ICYjNDM7MTE5NSw3IEBAIGwwXyU9Olx0cjEgPSByNjtcdFx0XHRcdFx0XFxcbiBcdHIzICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiBcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogVGhlIDR0aCBhcmd1bWVudCBvZiBicGZfc2tiX3N0b3JlX2J5dGVzIGlzIGRlZmluZWQgYXMgXFxcbi1cdCAqIEFSR19DT05TVF9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJiMzOTtyNCAhPSAwJiMzOTsgXFxcbiYjNDM7XHQgKiBBUkdfTUVNX1NJWkUsIHNvIDAgaXMgbm90IGFsbG93ZWQuIFRoZSAmIzM5O3I0ICE9IDAmIzM5OyBcXFxuIFx0ICogaXMgcHJvdmlkaW5nIHVzIHRoaXMgZXhjbHVzaW9uIG9mIHplcm8gZnJvbSBpbml0aWFsIFxcXG4gXHQgKiBbMCwgN10gcmFuZ2UuXHRcdFx0XHRcXFxuIFx0ICovXHRcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmNcbmluZGV4IGYyYzU0ZTRkODllYmVmLi4zNDNmYzA4ZDk3NDc5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXG5AQCAtODUsNyAmIzQzOzg1LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2JpdHdpc2VfYW5kX3plcm9faW5jbHVkZWQodm9pZClcbiBcdHIyICYjNDM7PSAtNjQ7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuJiM0MztcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4gXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgYXQgXHUwMDI2ZnBbLTY0XSBpc1xcXG4gXHQgKiBub3QgaW5pdGlhbGl6ZWQuXHRcdFx0XHRcXFxuIFx0ICovXHRcdFx0XHRcdFx0XFxcbkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIF9fbmFrZWQgdm9pZCBzdGFja19qbXBfbm9fbWluX2NoZWNrKHZvaWQpXG4gXHRyMiAmIzQzOz0gLTY0O1x0XHRcdFx0XHRcXFxuIFx0cjQgPSAwO1x0XHRcdFx0XHRcdFxcXG4gXHQvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXFxcbi1cdCAqIEFSR19DT05TVF9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiYjNDM7XHQgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuIFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IGF0IFx1MDAyNmZwWy02NF0gaXNcXFxuIFx0ICogbm90IGluaXRpYWxpemVkLlx0XHRcdFx0XFxcbiBcdCAqL1x0XHRcdFx0XHRcdFxcXG5AQCAtNzc4LDcgJiM0Mzs3NzgsNyBAQCBfX25ha2VkIHZvaWQgdmFyaWFibGVfbWVtb3J5XzhfYnl0ZXNfbGVhayh2b2lkKVxuIFx0cjMgJiM0Mzs9IDE7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuJiM0MztcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4gXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgcmVnaW9uIFsxLCA2NF1cXFxuIFx0ICogYXQgXHUwMDI2ZnBbLTY0XSBpcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQuXHRcXFxuIFx0ICovXHRcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuY1xuaW5kZXggNmQyYTM4NTk3YzM0ZjQuLmM2NjAzYTExOGZkYzM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuY1xuQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIGwwXyU9Olx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuIFxuIC8qIENhbGwgYSBmdW5jdGlvbiB0YWtpbmcgYSBwb2ludGVyIGFuZCBhIHNpemUgd2hpY2ggZG9lc24mIzM5O3QgYWxsb3cgdGhlIHNpemUgdG9cbiAgKiBiZSB6ZXJvIChpLmUuIGJwZl90cmFjZV9wcmludGsoKSBkZWNsYXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlXG4tICogQVJHX0NPTlNUX1NJWkUsIG5vdCBBUkdfQ09OU1RfU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZVxuJiM0MzsgKiBBUkdfTUVNX1NJWkUsIG5vdCBBUkdfTUVNX1NJWkVfT1JfWkVSTykuIFdlIGF0dGVtcHQgdG8gcGFzcyB6ZXJvIGZvciB0aGVcbiAgKiBzaXplIGFuZCBleHBlY3QgdG8gZmFpbC5cbiAgKi9cbiBTRUMoXCYjMzQ7dHJhY2Vwb2ludFwmIzM0OylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWVtX3NpemVfcmVnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWVtX3NpemVfcmVnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhlZWUxMzUwMDI3MGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xuQEAgLTAsMCAmIzQzOzEsNjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9rZnVuY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCBpbm5lcl9tYXAge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIGludCk7XG4mIzQzO30gaW5uZXJfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbWFwKTtcbiYjNDM7fSBvdXRlcl9tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KSA9IHtcbiYjNDM7XHQudmFsdWVzID0geyBbMF0gPSBcdTAwMjZpbm5lcl9tYXAgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBfX251bGxhYmxlIGtmdW5jIG1lbSBidWZmZXIgKi9cbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O3R5cGU9bWFwX3B0ciBleHBlY3RlZD1mcFwmIzM0OylcbiYjNDM7aW50IG1hcG9mbWFwc192YWx1ZV9hc19rZnVuY19tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGRwdHI7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XHR2b2lkICppbm5lcjtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2b3V0ZXJfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fc2tiKHNrYiwgMCwgXHUwMDI2ZHB0cik7XG4mIzQzO1x0LyogcGFzcyB0aGUgdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgYXMgdGhlIHNjcmF0Y2ggYnVmZmVyICovXG4mIzQzO1x0cCA9IGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2ZHB0ciwgMCwgaW5uZXIsIDQpO1xuJiM0MztcdGlmIChwKVxuJiM0MztcdFx0cmV0dXJuIHBbMF07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBQVFJfTUFZQkVfTlVMTCBoZWxwZXIgbWVtIGJ1ZmZlciAqL1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7dHlwZT1tYXBfcHRyIGV4cGVjdGVkPWZwXCYjMzQ7KVxuJiM0MztpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2hlbHBlcl9tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1x0dm9pZCAqaW5uZXI7XG4mIzQzO1xuJiM0MztcdGlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZvdXRlcl9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXG4mIzQzO1xuJiM0MztcdC8qIEBmcm9tIGlzIGEgbnVsbGFibGUgcmVhZC1vbmx5IG1lbSYjNDM7c2l6ZSBhcmc7IG91dGVyIHZhbHVlX3NpemUgaXMgNCAqL1xuJiM0MztcdHJldHVybiBicGZfY3N1bV9kaWZmKGlubmVyLCA0LCBOVUxMLCAwLCAwKSAmIzQzOyBza2ItXHUwMDNlbGVuO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbmluZGV4IDI4NzA3MzhkOTNmN2VjLi44ZjBjNDU0MjFmODkzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBpbnQgQlBGX1BST0coZ2V0X3Rhc2tfZXhlX2ZpbGVfa2Z1bmNfbnVsbClcbiB9XG4gXG4gU0VDKFwmIzM0O2xzbS5zL2lub2RlX2dldHhhdHRyXCYjMzQ7KVxuLV9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgdGFza19zdHJ1Y3RcJiMzNDspXG4gaW50IEJQRl9QUk9HKGdldF90YXNrX2V4ZV9maWxlX2tmdW5jX2ZwKVxuIHtcbiBcdHU2NCB4O1xuQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19udWxsKVxuIH1cbiBcbiBTRUMoXCYjMzQ7bHNtLnMvdGFza19hbGxvY1wmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCB1bnRydXN0ZWRfcHRyX1wmIzM0OylcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiB7XG4gXHRzdHJ1Y3QgcGF0aCAqcm9vdDtcbkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrXG4gfVxuIFxuIFNFQyhcJiMzNDtsc20ucy9maWxlX29wZW5cJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cJiMzNDspXG4gaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2N1cnJlbnQpXG4ge1xuIFx0c3RydWN0IHBhdGggKnB3ZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXG5pbmRleCAzMDJkNzEyZTBkN2VkMi4uOGNkNjI2ZTA0NTUxNTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcbkBAIC0zMSw3ICYjNDM7MzEsNyBAQFxuIFx0fSxcbiBcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbiBcdC5yZXN1bHQgPSBSRUpFQ1QsXG4tXHQuZXJyc3RyID0gXCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDEgbXVzdCBwb2ludCB0byBzY2FsYXJcJiMzNDssXG4mIzQzO1x0LmVycnN0ciA9IFwmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDFcJiMzNDssXG4gXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xuIFx0XHR7IFwmIzM0O2JwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDFcJiMzNDssIDIgfSxcbiBcdH0sXG5AQCAtNDYsNyAmIzQzOzQ2LDcgQEBcbiBcdH0sXG4gXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG4gXHQucmVzdWx0ID0gUkVKRUNULFxuLVx0LmVycnN0ciA9IFwmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXCYjMzQ7LFxuJiM0MztcdC5lcnJzdHIgPSBcJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5SMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXCYjMzQ7LFxuIFx0LmZpeHVwX2tmdW5jX2J0Zl9pZCA9IHtcbiBcdFx0eyBcJiMzNDticGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwyXCYjMzQ7LCAyIH0sXG4gXHR9LFxuQEAgLTYxLDcgJiM0Mzs2MSw3IEBAXG4gXHR9LFxuIFx0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxuIFx0LnJlc3VsdCA9IFJFSkVDVCxcbi1cdC5lcnJzdHIgPSBcJiMzNDtSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMyBtdXN0IHBvaW50IHRvIHNjYWxhclwmIzM0OyxcbiYjNDM7XHQuZXJyc3RyID0gXCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsM1wmIzM0OyxcbiBcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XG4gXHRcdHsgXCYjMzQ7YnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsM1wmIzM0OywgMiB9LFxuIFx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfYWRkX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWImIzM0OywKICAgICYjMzQ7Y2hlY2tfaGVscGVyX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHZlcmlmaWVyIHRvIHVuaWZ5IGtmdW5jIGFuZCBoZWxwZXIgYXJndW1lbnQgdmVyaWZpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMgZm9yIGtmdW5jcywgcmVuYW1lcyBgQVJHX0NPTlNUX1NJWkVgIHRvIGBBUkdfTUVNX1NJWkVgLCBhbmQgbW9kaWZpZXMgaG93IGBicGZfZnVuY19wcm90b2AgaXMgZ2VuZXJhdGVkIGFuZCB1c2VkIGZvciBrZnVuY3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1NTJjOTFkNzk1Zjg5ZWQwMjE1NjhlN2EyNjVmMzdlZTNkNjhhYmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAwNzozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IGM4MDFhMzMwYWVjZTA4Li5jYmRlODZkMDgyY2NlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CkBAIC0yNTAsNiAmIzQzOzI1MCwzNCBAQCBPcjo6CiAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgIH0KIAomIzQzOzIuMy43IF9fY29uc3RfbWFwIGFuZCBfX21hcCBBbm5vdGF0aW9ucwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO1RoZXNlIGFubm90YXRpb25zIGFyZSB1c2VkIGZvciBgYHN0cnVjdCBicGZfbWFwICpgYCBhcmd1bWVudHMgYW5kIGRpc3Rpbmd1aXNoIGEKJiM0Mzt2ZXJpZmllci1rbm93biBtYXAgZnJvbSBhbiBvcGFxdWUgb25lLgomIzQzOwomIzQzO2BgX19jb25zdF9tYXBgYCBpbmRpY2F0ZXMgYSBtYXAgbXVzdCBiZSBrbm93biBhdCB0aGUgdmVyaWZpY2F0aW9uIHRpbWUsIGkuZS4gYQomIzQzO2NvbmNyZXRlIG1hcCBmZCB0aGUgQlBGIHByb2dyYW0gcmVmZXJlbmNlcyBkaXJlY3RseS4KJiM0MzsKJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjoKJiM0MzsKJiM0MzsgICAgICAgIF9fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKJiM0MzsgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgLi4uCiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7YGBfX21hcGBgIGluZGljYXRlcyBhbiBvcGFxdWUgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgdGhhdCBtYXkgYmUgcmVzb2x2ZWQKJiM0MzthdCBydW4gdGltZS4gVGhlIGFyZ3VtZW50IG1heSB0YWtlIGVpdGhlciBhIG1hcCBmZCBvciBhIGBgUFRSX1RPX0JURl9JRGBgCiYjNDM7YGBzdHJ1Y3QgYnBmX21hcGBgIHBvaW50ZXIuCiYjNDM7CiYjNDM7QW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiYjNDM7CiYjNDM7ICAgICAgICBfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCAuLi4pCiYjNDM7ICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgIC4uLgomIzQzOyAgICAgICAgfQomIzQzOwogLi4gX0JQRl9rZnVuY19ub2RlZjoKIAogMi40IFVzaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCBmdW5jdGlvbgpAQCAtNDExLDcgJiM0Mzs0MzksNyBAQCBFeGFtcGxlIGRlY2xhcmF0aW9uOgogLi4gY29kZS1ibG9jazo6IGMKIAogCV9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dywKLQkJCQkJCSAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssCiYjNDM7CQkJCQkJICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjaywKIAkJCQkJCSAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCkgeyAuLi4gfQogCiBFeGFtcGxlIHVzYWdlIGluIEJQRiBwcm9ncmFtOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggZTA2NmY0NGE5YzA1ODAuLmVmMTcyMTQzYjljOWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTc0OCw2ICYjNDM7NzQ4LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfbWFwX29mZmxvYWRfb3BzOwogZW51bSBicGZfdHlwZV9mbGFnIHsKIAkvKiBQVFIgbWF5IGJlIE5VTEwuICovCiAJUFRSX01BWUJFX05VTEwJCT0gQklUKDAgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSwKJiM0MzsJU0NBTEFSX01BWUJFX1pFUk8JPSBQVFJfTUFZQkVfTlVMTCwKIAogCS8qIE1FTSBpcyByZWFkLW9ubHkuIFdoZW4gYXBwbGllZCBvbiBicGZfYXJnLCBpdCBpbmRpY2F0ZXMgdGhlIGFyZyBpcwogCSAqIGNvbXBhdGlibGUgd2l0aCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZSBtZW1vcnkuCkBAIC04ODgsOCAmIzQzOzg4OSw3IEBAIGVudW0gYnBmX2FyZ190eXBlIHsKIAlBUkdfUFRSX1RPX01FTSwJCS8qIHBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IChzdGFjaywgcGFja2V0LCBtYXAgdmFsdWUpICovCiAJQVJHX1BUUl9UT19BUkVOQSwKIAotCUFSR19DT05TVF9TSVpFLAkJLyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5ICovCi0JQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywJLyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5IG9yIDAgKi8KJiM0MzsJQVJHX01FTV9TSVpFLAkJLyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5ICovCiAKIAlBUkdfUFRSX1RPX0NUWCwJCS8qIHBvaW50ZXIgdG8gY29udGV4dCAqLwogCUFSR19BTllUSElORywJCS8qIGFueSAoaW5pdGlhbGl6ZWQpIGFyZ3VtZW50IGlzIG9rICovCkBAIC05MjIsNiAmIzQzOzkyMiw4IEBAIGVudW0gYnBmX2FyZ190eXBlIHsKIAlBUkdfUFRSX1RPX1VOSU5JVF9NRU0JCT0gTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IEFSR19QVFJfVE9fTUVNLAogCS8qIFBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IG9mIHNpemUga25vd24gYXQgY29tcGlsZSB0aW1lLiAqLwogCUFSR19QVFJfVE9fRklYRURfU0laRV9NRU0JPSBNRU1fRklYRURfU0laRSB8IEFSR19QVFJfVE9fTUVNLAomIzQzOwkvKiBOdW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnksIG9yIDAuICovCiYjNDM7CUFSR19NRU1fU0laRV9PUl9aRVJPCQk9IFNDQUxBUl9NQVlCRV9aRVJPIHwgQVJHX01FTV9TSVpFLAogCiAJLyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LiBJdHMgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhlIGVudW0gaXMKIAkgKiB3aWRlIGVub3VnaCB0byBob2xkIHRoZSBoaWdoZXIgYml0cyByZXNlcnZlZCBmb3IgYnBmX3R5cGVfZmxhZy4KQEAgLTk2MCw2ICYjNDM7OTYyLDIxIEBAIGVudW0gYnBmX3JldHVybl90eXBlIHsKIH07CiBzdGF0aWNfYXNzZXJ0KF9fQlBGX1JFVF9UWVBFX01BWCAmbHQ7PSBCUEZfQkFTRV9UWVBFX0xJTUlUKTsKIAomIzQzOy8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuCiYjNDM7ICogU2VlIGluY2x1ZGUvdHJhY2UvYnBmX3Byb2JlLmgKJiM0MzsgKgomIzQzOyAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uCiYjNDM7ICogb3IgYSBrZnVuYyBjYW4gaGF2ZS4gQXJncyAxLTUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMsIGFyZ3MgNi0xMiB2aWEKJiM0MzsgKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWQKJiM0MzsgKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyCiYjNDM7CiYjNDM7LyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMKJiM0MzsgKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyA1CiYjNDM7CiAvKiBlQlBGIGZ1bmN0aW9uIHByb3RvdHlwZSB1c2VkIGJ5IHZlcmlmaWVyIHRvIGFsbG93IEJQRl9DQUxMcyBmcm9tIGVCUEYgcHJvZ3JhbXMKICAqIHRvIGluLWtlcm5lbCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBmb3IgYWRqdXN0aW5nIGltbTMyIGZpZWxkIGluIEJQRl9DQUxMCiAgKiBpbnN0cnVjdGlvbnMgYWZ0ZXIgdmVyaWZ5aW5nCkBAIC05ODQsNyAmIzQzOzEwMDEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gewogCQkJZW51bSBicGZfYXJnX3R5cGUgYXJnNF90eXBlOwogCQkJZW51bSBicGZfYXJnX3R5cGUgYXJnNV90eXBlOwogCQl9OwotCQllbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZVs1XTsKJiM0MzsJCWVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlW01BWF9CUEZfRlVOQ19BUkdTXTsKIAl9OwogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTk5NCw3ICYjNDM7MTAxMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7CiAJCQl1MzIgKmFyZzRfYnRmX2lkOwogCQkJdTMyICphcmc1X2J0Zl9pZDsKIAkJfTsKLQkJdTMyICphcmdfYnRmX2lkWzVdOwomIzQzOwkJdTMyICphcmdfYnRmX2lkW01BWF9CUEZfRlVOQ19BUkdTXTsKIAkJc3RydWN0IHsKIAkJCXNpemVfdCBhcmcxX3NpemU7CiAJCQlzaXplX3QgYXJnMl9zaXplOwpAQCAtMTAwMiw3ICYjNDM7MTAxOSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7CiAJCQlzaXplX3QgYXJnNF9zaXplOwogCQkJc2l6ZV90IGFyZzVfc2l6ZTsKIAkJfTsKLQkJc2l6ZV90IGFyZ19zaXplWzVdOwomIzQzOwkJc2l6ZV90IGFyZ19zaXplW01BWF9CUEZfRlVOQ19BUkdTXTsKIAl9OwogCWludCAqcmV0X2J0Zl9pZDsgLyogcmV0dXJuIHZhbHVlIGJ0Zl9pZCAqLwogCWJvb2wgKCphbGxvd2VkKShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpOwpAQCAtMTE5MiwyMSAmIzQzOzEyMDksNiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7CiAJdTMyCQkJaml0ZWRfbGVuOwogfTsKIAotLyogVGhlIGxvbmdlc3QgdHJhY2Vwb2ludCBoYXMgMTIgYXJncy4KLSAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oCi0gKgotICogQWxzbyByZXVzZSB0aGlzIG1hY3JvIGZvciBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgYSBCUEYgZnVuY3Rpb24KLSAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhCi0gKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWQKLSAqIG9uIHRoZSBuYXRpdmUgY2FsbGluZyBjb252ZW50aW9uIChlLmcuLCBhcmcgNiB0byBSOSBvbiB4ODYtNjQpLgotICovCi0jZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyCi0KLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzCi0gKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS4KLSAqLwotI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNQotCiAvKiBUaGUgYXJndW1lbnQgaXMgYSBzdHJ1Y3R1cmUgb3IgYSB1bmlvbi4gKi8KICNkZWZpbmUgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHCQlCSVQoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggNjgyYzJjZDNiODQ0MzAuLjA2NTUxNjRlNmFmMmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE1LDcgJiM0MzsxNSw3IEBACiAgKiBlbnN1cmVzIHRoYXQgdW1heF92YWx1ZSAmIzQzOyAoaW50KW9mZiAmIzQzOyAoaW50KXNpemUgY2Fubm90IG92ZXJmbG93IGEgdTY0LgogICovCiAjZGVmaW5lIEJQRl9NQVhfVkFSX09GRgkoMSAmbHQ7Jmx0OyAyOSkKLS8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19DT05TVF9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlcwomIzQzOy8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19NRU1fU0laRVtfT1JfWkVST10uICBUaGlzIGVuc3VyZXMKICAqIHRoYXQgY29udmVydGluZyB1bWF4X3ZhbHVlIHRvIGludCBjYW5ub3Qgb3ZlcmZsb3cuCiAgKi8KICNkZWZpbmUgQlBGX01BWF9WQVJfU0laCSgxICZsdDsmbHQ7IDI5KQpAQCAtMTE4OCw2ICYjNDM7MTE4OCw3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLAogCQkJICAgIHUzMiBidGZfaWQsCiAJCQkgICAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTsKIHZvaWQgYnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2J0Zl90YWIgKnRhYik7CiYjNDM7dm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpOwogCiBpbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTsKIApAQCAtMTMwNSw4ICYjNDM7MTMwNiwxOSBAQCBzdGF0aWMgaW5saW5lIHUzMiB0eXBlX2ZsYWcodTMyIHR5cGUpCiAvKiBvbmx5IHVzZSBhZnRlciBjaGVja19hdHRhY2hfYnRmX2lkKCkgKi8KIHN0YXRpYyBpbmxpbmUgZW51bSBicGZfcHJvZ190eXBlIHJlc29sdmVfcHJvZ190eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIHsKLQlyZXR1cm4gKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQgJmFtcDsmYW1wOyBwcm9nLSZndDthdXgtJmd0O3NhdmVkX2RzdF9wcm9nX3R5cGUpID8KLQkJcHJvZy0mZ3Q7YXV4LSZndDtzYXZlZF9kc3RfcHJvZ190eXBlIDogcHJvZy0mZ3Q7dHlwZTsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBzYXZlZF9kc3RfcHJvZ190eXBlIGlzIG9ubHkgc2V0IG9uY2UgY2hlY2tfYXR0YWNoX2J0Zl9pZCgpCiYjNDM7CQkgKiBydW5zLiBCZWZvcmUgdGhhdCAtLSBlLmcuIHdoZW4gZ2VuZXJhdGluZyBrZnVuYyBwcm90b3R5cGVzIGF0CiYjNDM7CQkgKiBhZGQtY2FsbCB0aW1lIC0tIGZhbGwgYmFjayB0byB0aGUgYXR0YWNoIHRhcmdldCYjMzk7cyB0eXBlLCB3aGljaAomIzQzOwkJICogaXMgYXZhaWxhYmxlIGZyb20gbG9hZCB0aW1lIGFuZCBob2xkcyB0aGUgc2FtZSB2YWx1ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHByb2ctJmd0O2F1eC0mZ3Q7c2F2ZWRfZHN0X3Byb2dfdHlwZSkKJiM0MzsJCQlyZXR1cm4gcHJvZy0mZ3Q7YXV4LSZndDtzYXZlZF9kc3RfcHJvZ190eXBlOwomIzQzOwkJaWYgKHByb2ctJmd0O2F1eC0mZ3Q7ZHN0X3Byb2cpCiYjNDM7CQkJcmV0dXJuIHByb2ctJmd0O2F1eC0mZ3Q7ZHN0X3Byb2ctJmd0O3R5cGU7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHByb2ctJmd0O3R5cGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19jaGVja19yZWN1cihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCkBAIC0xNDc5LDEwICYjNDM7MTQ5MSwxNyBAQCBzdHJ1Y3QgcmV0X21lbV9kZXNjIHsKIAlib29sIGZvdW5kOwogfTsKIAomIzQzOy8qIEEgY29uc3RhbnQgc2NhbGFyIGFyZ3VtZW50OyBQb3B1bGF0ZWQgYnkgcHJvY2Vzc19jb25zdF9hcmcoKSAqLwomIzQzO3N0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyB7CiYjNDM7CXU2NCB2YWx1ZTsKJiM0MzsJYm9vbCBmb3VuZDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIHsKIAkvKiBDb21tb24gKi8KIAlzdHJ1Y3QgYnRmICpidGY7CiAJdTMyIGZ1bmNfaWQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm47CiAJdTggcmVsZWFzZV9yZWdubzsKIAl1MzIgcmV0X2J0Zl9pZDsKIAl1MzIgc3VicHJvZ25vOwpAQCAtMTQ5NiwxMCAmIzQzOzE1MTUsNyBAQCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgewogCXUzMiBrZnVuY19mbGFnczsKIAljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87CiAJY29uc3QgY2hhciAqZnVuY19uYW1lOwotCXN0cnVjdCB7Ci0JCXU2NCB2YWx1ZTsKLQkJYm9vbCBmb3VuZDsKLQl9IGFyZ19jb25zdGFudDsKJiM0MzsJc3RydWN0IGFyZ19jb25zdGFudF9kZXNjIGFyZ19jb25zdGFudDsKIAogCS8qIGFyZ197YnRmLGJ0Zl9pZCxvd25pbmdfcmVmfSBhcmUgdXNlZCBieSBrZnVuYy1zcGVjaWZpYyBoYW5kbGluZywKIAkgKiBnZW5lcmFsbHkgdG8gcGFzcyBpbmZvIGFib3V0IHVzZXItZGVmaW5lZCBsb2NhbCBrcHRyIHR5cGVzIHRvIGxhdGVyCkBAIC0xNjE0LDYgJiM0MzsxNjMwLDcgQEAgZW51bSBicGZfcmVnX2FyZ190eXBlIHsKIAogc3RydWN0IGJwZl9rZnVuY19kZXNjIHsKIAlzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgZnVuY19tb2RlbDsKJiM0MzsJc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bzsKIAl1MzIgZnVuY19pZDsKIAlzMzIgaW1tOwogCXUxNiBvZmZzZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwppbmRleCAyZTRhZTBlZjA4NjA5ZC4uMmY0NzNhZDRmZDdjMWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCBzdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LAogICogcjUgJiM0Mzs9IDEKICAqIC4uLgogICogY2FsbCBicGZfcGVyZl9ldmVudF9vdXRwdXQjMjUKLSAqICAgd2hlcmUgLmFyZzVfdHlwZSA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8KJiM0MzsgKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTwogICoKICAqIGFuZCB0aGlzIGNhc2U6CiAgKiByNiA9IDEKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmMKaW5kZXggMzk4M2I0Y2U3M2M4MTEuLjgyYzU5ODg0MTdhMGNmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9sc20uYwpAQCAtMTg2LDcgJiM0MzsxODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfaW5vZGVfaGFzaF9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDticGZfaW1hX2lub2RlX2hhc2hfYnRmX2lkc1swXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYWxsb3dlZAk9IGJwZl9pbWFfaW5vZGVfaGFzaF9hbGxvd2VkLAogfTsKIApAQCAtMjA1LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfZmlsZV9oYXNoX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2JwZl9pbWFfZmlsZV9oYXNoX2J0Zl9pZHNbMF0sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFsbG93ZWQJPSBicGZfaW1hX2lub2RlX2hhc2hfYWxsb3dlZCwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDRlZWVhZWI2OTc5MGI5Li41ZThhYzQ1Y2U1NmFmMyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jCkBAIC04NzA5LDcgJiM0Mzs4NzA5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDQzNTVjY2I3OGE5YzY3Li5mYjkzNTdiNjRjYWRiYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jCkBAIC0yMzA1LDcgJiM0MzsyMzA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9uYW1lX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0yMzQ3LDcgJiM0MzsyMzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9jdXJyZW50X3ZhbHVlX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzMoYnBmX3N5c2N0bF9nZXRfbmV3X3ZhbHVlLCBzdHJ1Y3QgYnBmX3N5c2N0bF9rZXJuICosIGN0eCwgY2hhciAqLCBidWYsCkBAIC0yMzY3LDcgJiM0MzsyMzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9uZXdfdmFsdWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfMyhicGZfc3lzY3RsX3NldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LApAQCAtMjM5Myw3ICYjNDM7MjM5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9zZXRfbmV3X3ZhbHVlX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBlMjA3NjY2N2IyNDUxNy4uY2Q4ODc3MjAyNGE4MzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jCkBAIC0xOTgsNyAmIzQzOzE5OCw5IEBAIHZvaWQgYnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJCXByb2ctJmd0O2F1eC0mZ3Q7aml0ZWRfbGluZm8gPSBOVUxMOwogCX0KIAotCWtmcmVlKHByb2ctJmd0O2F1eC0mZ3Q7a2Z1bmNfdGFiKTsKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiYjNDM7CWJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHByb2ctJmd0O2F1eC0mZ3Q7a2Z1bmNfdGFiKTsKJiM0MzsjZW5kaWYKIAlwcm9nLSZndDthdXgtJmd0O2tmdW5jX3RhYiA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjE4YmU1ZDZlNGY5YzI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtMjc4LDcgJiM0MzsyNzgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUVVFVUVEX1NQSU5MT0NLUykgfHwgZGVmaW5lZChDT05GSUdfQlBGX0FSQ0hfU1BJTkxPQ0spCkBAIC01MzksNyAmIzQzOzUzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG9sX3Byb3RvID0gewogCS5ncGxfb25seQk9IGZhbHNlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsCiAJLmFyZzRfc2l6ZQk9IHNpemVvZihzNjQpLApAQCAtNTY3LDcgJiM0Mzs1NjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cnRvdWxfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCwKIAkuYXJnNF9zaXplCT0gc2l6ZW9mKHU2NCksCkBAIC01ODMsNyAmIzQzOzU4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cm5jbXBfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fQ09OU1RfU1RSLAogfTsKIApAQCAtNjI3LDcgJiM0Mzs2MjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9uc19jdXJyZW50X3BpZF90Z2lkX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzRfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUgICAgICA9IEFSR19NRU1fU0laRSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9yYXdfc21wX3Byb2Nlc3Nvcl9pZF9wcm90byA9IHsKQEAgLTY1Myw3ICYjNDM7NjUzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90byA9ICB7CiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzNfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJQRl9DQUxMXzMoYnBmX2NvcHlfZnJvbV91c2VyLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLApAQCAtNjc1LDcgJiM0Mzs2NzUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0gewogCS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC03MDYsNyAmIzQzOzcwNiw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHsKIAkubWlnaHRfc2xlZXAJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnNF9idGZfaWQJPSAmYW1wO2J0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLApAQCAtMTA5MywxMCAmIzQzOzEwOTMsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fQ09OU1RfU1RSLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogc3RhdGljIHZvaWQgKm1hcF9rZXlfZnJvbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTMyICphcnJfaWR4KQpAQCAtMTg4OCw3ICYjNDM7MTg4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9mcm9tX21lbV9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19EWU5QVFIgfCBEWU5QVFJfVFlQRV9MT0NBTCB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUsCiB9OwpAQCAtMTk0Myw3ICYjNDM7MTk0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9yZWFkX3Byb3RvID0gewogCS5ncGxfb25seQk9IGZhbHNlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19EWU5QVFIsCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLApAQCAtMjAwNCw3ICYjNDM7MjAwNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl93cml0ZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19EWU5QVFIsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTM0MDQsMTAgJiM0MzszNDA0LDEwIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rocm93KHU2NCBjb29raWUpCiAJV0FSTigxLCAmIzM0O0EgY2FsbCB0byBCUEYgZXhjZXB0aW9uIGNhbGxiYWNrIHNob3VsZCBuZXZlciByZXR1cm5cbiYjMzQ7KTsKIH0KIAotX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19tYXAsIHVuc2lnbmVkIGludCBmbGFncykKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX2NvbnN0X21hcCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMgPSAoc3RydWN0IGJwZl9hc3luY19rZXJuICopd3E7Ci0Jc3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX21hcDsKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX2NvbnN0X21hcDsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJwZl9hc3luY19rZXJuKSAmZ3Q7IHNpemVvZihzdHJ1Y3QgYnBmX3dxKSk7CiAJQlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfYXN5bmNfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl93cSkpOwpAQCAtNDY0MiwxNyAmIzQzOzQ2NDIsMTcgQEAgc3RhdGljIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsKICAqIG1vZGUKICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZAogICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nCi0gKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlcwomIzQzOyAqIEBtYXBfX2NvbnN0X21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzCiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbAogICogQGF1eDogcG9pbnRlciB0byBicGZfcHJvZ19hdXggb2YgdGhlIGNhbGxlciBCUEYgcHJvZ3JhbSwgaW1wbGljaXRseSBzZXQgYnkgdGhlIHZlcmlmaWVyCiAgKgogICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCiBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsCi0JCQkJCSAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssCiYjNDM7CQkJCQkgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLAogCQkJCQkgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpCiB7Ci0JcmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTsKJiM0MzsJcmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fY29uc3RfbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTsKIH0KIAogLyoqCkBAIC00NjYwLDE3ICYjNDM7NDY2MCwxNyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYgogICogbW9kZQogICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkCiAgKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmcKLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzCiYjNDM7ICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXMKICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsCiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXIKICAqCiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dywKLQkJCQkJICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjaywKJiM0MzsJCQkJCSAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssCiAJCQkJCSAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCkKIHsKLQlyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpOwomIzQzOwlyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpOwogfQogCiBzdGF0aWMgaW50IG1ha2VfZmlsZV9keW5wdHIoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncywgYm9vbCBtYXlfc2xlZXAsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JpbmdidWYuYyBiL2tlcm5lbC9icGYvcmluZ2J1Zi5jCmluZGV4IDM1YWU2NGFkZTM2YjgzLi5jMWJmN2ExOTdhOTZmMyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9yaW5nYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9yaW5nYnVmLmMKQEAgLTYzNCw3ICYjNDM7NjM0LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yaW5nYnVmX291dHB1dF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggNDFmZTg3ZDczMDJmMjIuLjQ2M2Y5NGJhMWNjNDc4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jCkBAIC03ODEsNyAmIzQzOzc4MSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTc5Nyw3ICYjNDM7Nzk3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTgzMSw3ICYjNDM7ODMxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTg0OCw3ICYjNDM7ODQ4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lELAogCS5hcmcxX2J0Zl9pZAk9ICZhbXA7YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC05MTEsNyAmIzQzOzkxMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggMGZmOWUzYWEyOTNkNTcuLjBiNWRjNjc4OGJhMjdmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMjQ0NCw3ICYjNDM7MjQ0NCw3IEBAIHN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0X25vcmVmKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgYm9vbCBkZWZlcnJlZCkKIAltb2R1bGVfcHV0KHByb2ctJmd0O2F1eC0mZ3Q7bW9kKTsKIAlrdmZyZWUocHJvZy0mZ3Q7YXV4LSZndDtqaXRlZF9saW5mbyk7CiAJa3ZmcmVlKHByb2ctJmd0O2F1eC0mZ3Q7bGluZm8pOwotCWtmcmVlKHByb2ctJmd0O2F1eC0mZ3Q7a2Z1bmNfdGFiKTsKJiM0MzsJYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy0mZ3Q7YXV4LSZndDtrZnVuY190YWIpOwogCWtmcmVlKHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvKTsKIAlpZiAocHJvZy0mZ3Q7YXV4LSZndDthdHRhY2hfYnRmKQogCQlidGZfcHV0KHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zik7CkBAIC02NTQ0LDcgJiM0Mzs2NTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzX2JwZl9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICogX193ZWFrCkBAIC02NTkxLDcgJiM0Mzs2NTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa2FsbHN5bXNfbG9va3VwX25hbWVfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsCiAJLmFyZzRfc2l6ZQk9IHNpemVvZih1NjQpLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDUyYmUwYTExOGNjZTA3Li4xY2E4Nzc5YWI1OWE1OSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjcxOSw4ICYjNDM7MjcxOSwyNSBAQCBzdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG8pOwomIzQzOwomIzQzO3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKQomIzQzO3sKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlmICghdGFiKQomIzQzOwkJcmV0dXJuOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFiLSZndDtucl9kZXNjczsgaSYjNDM7JiM0MzspCiYjNDM7CQlrZnJlZSh0YWItJmd0O2Rlc2NzW2ldLnByb3RvKTsKJiM0MzsJa2ZyZWUodGFiKTsKJiM0Mzt9CiYjNDM7CiBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KQogewomIzQzOwlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKJiM0MzsJc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bzsKIAlzdHJ1Y3QgYnBmX2tmdW5jX2J0Zl90YWIgKmJ0Zl90YWI7CiAJc3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7CiAJc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiOwpAQCAtMjgwNiwxMSAmIzQzOzI4MjMsMjkgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldCkKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CXByb3RvID0ga3phbGxvY19vYmooKnByb3RvLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlpZiAoIXByb3RvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO21ldGEsIDAsIHNpemVvZihtZXRhKSk7CiYjNDM7CW1ldGEuYnRmID0ga2Z1bmMuYnRmOwomIzQzOwltZXRhLmZ1bmNfaWQgPSBrZnVuYy5pZDsKJiM0MzsJbWV0YS5mdW5jX3Byb3RvID0ga2Z1bmMucHJvdG87CiYjNDM7CW1ldGEuZnVuY19uYW1lID0ga2Z1bmMubmFtZTsKJiM0MzsJbWV0YS5rZnVuY19mbGFncyA9IGtmdW5jLmZsYWdzID8gKmtmdW5jLmZsYWdzIDogMDsKJiM0MzsKJiM0MzsJZXJyID0gZ2VuX2tmdW5jX2FyZ19wcm90byhlbnYsICZhbXA7bWV0YSwgcHJvdG8pOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcm90byk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiAJZGVzYyA9ICZhbXA7dGFiLSZndDtkZXNjc1t0YWItJmd0O25yX2Rlc2NzJiM0MzsmIzQzO107CiAJZGVzYy0mZ3Q7ZnVuY19pZCA9IGZ1bmNfaWQ7CiAJZGVzYy0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwogCWRlc2MtJmd0O2FkZHIgPSBhZGRyOwogCWRlc2MtJmd0O2Z1bmNfbW9kZWwgPSBmdW5jX21vZGVsOwomIzQzOwlkZXNjLSZndDtwcm90byA9IHByb3RvOwogCXNvcnQodGFiLSZndDtkZXNjcywgdGFiLSZndDtucl9kZXNjcywgc2l6ZW9mKHRhYi0mZ3Q7ZGVzY3NbMF0pLAogCSAgICAga2Z1bmNfZGVzY19jbXBfYnlfaWRfb2ZmLCBOVUxMKTsKIAlyZXR1cm4gMDsKQEAgLTQ5MjQsNiAmIzQzOzQ5NTksMTkgQEAgc3RhdGljIHUzMiAqcmVnMmJ0Zl9pZHNbX19CUEZfUkVHX1RZUEVfTUFYXSA9IHsKIAlbQ09OU1RfUFRSX1RPX01BUF0gPSBidGZfYnBmX21hcF9pZCwKIH07CiAKJiM0MztzdGF0aWMgZW51bSBicGZfcmVnX3R5cGUgbG9va3VwX3JlZzJidGZfaWRzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqcmVmX3QpCiYjNDM7ewomIzQzOwllbnVtIGJwZl9yZWdfdHlwZSB0eXBlOwomIzQzOwomIzQzOwlmb3IgKHR5cGUgPSAwOyB0eXBlICZsdDsgX19CUEZfUkVHX1RZUEVfTUFYOyB0eXBlJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJlZzJidGZfaWRzW3R5cGVdICZhbXA7JmFtcDsKJiM0MzsJCSAgICBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgKnJlZzJidGZfaWRzW3R5cGVdKSA9PSByZWZfdCkKJiM0MzsJCQlyZXR1cm4gdHlwZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTk9UX0lOSVQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaXNfdHJ1c3RlZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKIHsKIAkvKiBBIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgYWx3YXlzIHRydXN0ZWQuICovCkBAIC02ODczLDcgJiM0Mzs2OTIxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkgICAgICBib29sIHplcm9fc2l6ZV9hbGxvd2VkLAogCQkJICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewotCWludCBlcnI7CiYjNDM7CWJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctJmd0O3R5cGUpOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAobWF5X2JlX251bGwpIHsKJiM0MzsJCXNhdmVkX3JlZyA9ICptZW1fcmVnOwomIzQzOwkJbWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpOwomIzQzOwl9CiAKIAkvKiBUaGlzIGlzIHVzZWQgdG8gcmVmaW5lIHIwIHJldHVybiB2YWx1ZSBib3VuZHMgZm9yIGhlbHBlcnMKIAkgKiB0aGF0IGVuZm9yY2UgdGhpcyB2YWx1ZSBhcyBhbiB1cHBlciBib3VuZCBvbiByZXR1cm4gdmFsdWVzLgpAQCAtNjkxMCw4ICYjNDM7Njk2NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJcmVnX2FyZ19uYW1lKGVudiwgc2l6ZV9hcmdubykpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9Ci0JZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSwKLQkJCQkgICAgICBhY2Nlc3NfdHlwZSwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzX3R5cGUgJmFtcDsgQlBGX1JFQUQpCiYjNDM7CQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLAomIzQzOwkJCQkJICAgICAgQlBGX1JFQUQsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOyBhY2Nlc3NfdHlwZSAmYW1wOyBCUEZfV1JJVEUpCiYjNDM7CQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLAomIzQzOwkJCQkJICAgICAgQlBGX1dSSVRFLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7CiYjNDM7CiAJaWYgKCFlcnIpIHsKIAkJaW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oc2l6ZV9hcmdubyk7CiAKQEAgLTY5MjAsMTUgJiM0Mzs2OTgxLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCWVsc2UKIAkJCWVyciA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGFyZ19pZHhfZnJvbV9hcmdubyhzaXplX2FyZ25vKSk7CiAJfQomIzQzOwomIzQzOwlpZiAobWF5X2JlX251bGwpCiYjNDM7CQkqbWVtX3JlZyA9IHNhdmVkX3JlZzsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywKLQkJCSBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUpCiYjNDM7CQkJIGFyZ25vX3QgYXJnbm8sIHUzMiBtZW1fc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgYWNjZXNzX3R5cGUsCiYjNDM7CQkJIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIHsKJiM0MzsJLyogbWV0YS0mZ3Q7YnRmIGlzIHNldCBvbmx5IGZvciBrZnVuY3M7IGEgTlVMTCBtZXRhIG1lYW5zIGEgZ2xvYmFsIHN1YnByb2cuICovCiYjNDM7CWJvb2wgaGVscGVyID0gbWV0YSAmYW1wOyZhbXA7ICFtZXRhLSZndDtidGY7CiAJYm9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwocmVnLSZndDt0eXBlKTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7Ci0JaW50IGVycjsKJiM0MzsJaW50IHNpemUsIGVyciA9IDA7CiAKIAlpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSkKIAkJcmV0dXJuIDA7CkBAIC02OTQ4LDEwICYjNDM7NzAxNiwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZwogCQltYXJrX3B0cl9ub3RfbnVsbF9yZWcocmVnKTsKIAl9CiAKLQlpbnQgc2l6ZSA9IGJhc2VfdHlwZShyZWctJmd0O3R5cGUpID09IFBUUl9UT19TVEFDSyA/IC0oaW50KW1lbV9zaXplIDogbWVtX3NpemU7CiYjNDM7CXNpemUgPSAoIWhlbHBlciAmYW1wOyZhbXA7IGJhc2VfdHlwZShyZWctJmd0O3R5cGUpID09IFBUUl9UT19TVEFDSykgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplOwogCi0JZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgTlVMTCk7Ci0JZXJyID0gZXJyID86IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBOVUxMKTsKJiM0MzsJaWYgKGFjY2Vzc190eXBlICZhbXA7IEJQRl9SRUFEKQomIzQzOwkJZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgbWV0YSk7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgKGFjY2Vzc190eXBlICZhbXA7IEJQRl9XUklURSkpCiYjNDM7CQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7CiAKIAlpZiAobWF5X2JlX251bGwpCiAJCSpyZWcgPSBzYXZlZF9yZWc7CkBAIC02OTkzLDI4ICYjNDM7NzA2MywzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29uc3RfYWxsb2NfbWVtX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbWVtX3JlZywKLQkJCQkgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnLCBhcmdub190IG1lbV9hcmdubywgYXJnbm9fdCBzaXplX2FyZ25vKQomIzQzO3N0YXRpYyBpbnQgcHJvY2Vzc19jb25zdF9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywKJiM0MzsJCQkgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIHsKLQlib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLSZndDt0eXBlKTsKLQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7Ci0Jc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7CiYjNDM7CWludCByZWdubyA9IHJlZ19mcm9tX2FyZ25vKGFyZ25vKTsKIAlpbnQgZXJyOwogCi0JbWVtc2V0KCZhbXA7bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTsKJiM0MzsJaWYgKG1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCkgewomIzQzOwkJdmVyaWZpZXJfYnVnKGVudiwgJiMzNDtvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQogCi0JaWYgKG1heV9iZV9udWxsKSB7Ci0JCXNhdmVkX3JlZyA9ICptZW1fcmVnOwotCQltYXJrX3B0cl9ub3RfbnVsbF9yZWcobWVtX3JlZyk7CiYjNDM7CWlmICghdG51bV9pc19jb25zdChyZWctJmd0O3Zhcl9vZmYpKSB7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDslcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcbiYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1JFQUQsIHRydWUsICZhbXA7bWV0YSk7Ci0JZXJyID0gZXJyID86IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIG1lbV9yZWcsIHNpemVfcmVnLCBtZW1fYXJnbm8sIHNpemVfYXJnbm8sIEJQRl9XUklURSwgdHJ1ZSwgJmFtcDttZXRhKTsKJiM0MzsJaWYgKHJlZ25vICZndDs9IDApCiYjNDM7CQllcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKGFyZ25vKSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKIAotCWlmIChtYXlfYmVfbnVsbCkKLQkJKm1lbV9yZWcgPSBzYXZlZF9yZWc7CiYjNDM7CW1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7CiYjNDM7CW1ldGEtJmd0O2FyZ19jb25zdGFudC52YWx1ZSA9IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKIAotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiAwOwogfQogCiBlbnVtIHsKQEAgLTcyMjQsMTggJiM0Mzs3Mjk5LDYgQEAgc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUKIAlyZXR1cm4gY2hlY2tfbWFwX2ZpZWxkX3BvaW50ZXIoZW52LCByZWcsIGFyZ25vLCBCUEZfVElNRVIsIG1hcCk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9oZWxwZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywKLQkJCQlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCi17Ci0JcmV0dXJuIHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7bWFwKTsKLX0KLQotc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sCi0JCQkgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQotewotCXJldHVybiBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCAmYW1wO21ldGEtJmd0O21hcCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLAogCQkJICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiB7CkBAIC03NzM4LDggJiM0Mzs3ODAxLDcgQEAgc3RhdGljIGludCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwKIAogc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfbWVtX3NpemUoZW51bSBicGZfYXJnX3R5cGUgdHlwZSkKIHsKLQlyZXR1cm4gdHlwZSA9PSBBUkdfQ09OU1RfU0laRSB8fAotCSAgICAgICB0eXBlID09IEFSR19DT05TVF9TSVpFX09SX1pFUk87CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gQVJHX01FTV9TSVpFOwogfQogCiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19yYXdfbWVtKGVudW0gYnBmX2FyZ190eXBlIHR5cGUpCkBAIC03ODg1LDggJiM0Mzs3OTQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGR5bnB0cl90eXBlcyA9IHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHsKIAlbQVJHX1BUUl9UT19NQVBfS0VZXQkJPSAmYW1wO21lbV90eXBlcywKIAlbQVJHX1BUUl9UT19NQVBfVkFMVUVdCQk9ICZhbXA7bWVtX3R5cGVzLAotCVtBUkdfQ09OU1RfU0laRV0JCT0gJmFtcDtzY2FsYXJfdHlwZXMsCi0JW0FSR19DT05TVF9TSVpFX09SX1pFUk9dCT0gJmFtcDtzY2FsYXJfdHlwZXMsCiYjNDM7CVtBUkdfTUVNX1NJWkVdCQkJPSAmYW1wO3NjYWxhcl90eXBlcywKIAlbQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVST10JPSAmYW1wO3NjYWxhcl90eXBlcywKIAlbQVJHX0NPTlNUX01BUF9QVFJdCQk9ICZhbXA7Y29uc3RfbWFwX3B0cl90eXBlcywKIAlbQVJHX1BUUl9UT19DVFhdCQk9ICZhbXA7Y29udGV4dF90eXBlcywKQEAgLTgyODYsMTEgJiM0Mzs4MzQ3LDQ5IEBAIHN0YXRpYyBpbnQgZ2V0X2NvbnN0YW50X21hcF9rZXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogc3RhdGljIGJvb2wgY2FuX2VsaWRlX3ZhbHVlX251bGxuZXNzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogCiYjNDM7c3RhdGljIGludCBwcm9jZXNzX21hcF9wdHJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsCiYjNDM7CQkJICAgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKJiM0Mzt7CiYjNDM7CS8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6CiYjNDM7CSAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSkKJiM0MzsJICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKQomIzQzOwkgKiBpZiAoaW5uZXJfbWFwMSAmYW1wOyZhbXA7IGlubmVyX21hcDIpIHsKJiM0MzsJICogICAgIHRpbWVyID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTsKJiM0MzsJICogICAgIGlmICh0aW1lcikKJiM0MzsJICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZAomIzQzOwkgKiAgICAgICAgIGJwZl90aW1lcl9pbml0KHRpbWVyLCBpbm5lcl9tYXAyKTsKJiM0MzsJICogfQomIzQzOwkgKgomIzQzOwkgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1ldGEtJmd0O21hcC5wdHIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1ldGEtJmd0O21hcC5wdHIgIT0gcmVnLSZndDttYXBfcHRyIHx8IG1ldGEtJmd0O21hcC51aWQgIT0gcmVnLSZndDttYXBfdWlkKSkgewomIzQzOwkJYXJnbm9fdCBvYmpfYXJnbm8gPSBhcmdub19mcm9tX3JlZyhyZWdfZnJvbV9hcmdubyhhcmdubykgLSAxKTsKJiM0MzsJCXN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSBtZXRhLSZndDttYXAucHRyLSZndDtyZWNvcmQ7CiYjNDM7CQljb25zdCBjaGFyICpvYmpfbmFtZSA9ICYjMzQ7d29ya3F1ZXVlJiMzNDs7CiYjNDM7CiYjNDM7CQlpZiAocmVjLSZndDt0aW1lcl9vZmYgJmd0Oz0gMCkKJiM0MzsJCQlvYmpfbmFtZSA9ICYjMzQ7dGltZXImIzM0OzsKJiM0MzsJCWVsc2UgaWYgKHJlYy0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKQomIzQzOwkJCW9ial9uYW1lID0gJiMzNDticGZfdGFza193b3JrJiMzNDs7CiYjNDM7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIGluICVzIG1hcF91aWQ9JWQgJiMzNDssCiYjNDM7CQkJb2JqX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIG9ial9hcmdubyksIG1ldGEtJmd0O21hcC51aWQpOwomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7ZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gJXMgbWFwX3VpZD0lZFxuJiMzNDssCiYjNDM7CQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWctJmd0O21hcF91aWQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWV0YS0mZ3Q7bWFwLnB0ciA9IHJlZy0mZ3Q7bWFwX3B0cjsKJiM0MzsJbWV0YS0mZ3Q7bWFwLnVpZCA9IHJlZy0mZ3Q7bWFwX3VpZDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLAogCQkJICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCi0JCQkgIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sCiAJCQkgIGludCBpbnNuX2lkeCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiA9IG1ldGEtJmd0O2ZuOwogCXUzMiByZWdubyA9IEJQRl9SRUdfMSAmIzQzOyBhcmc7CiAJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTsKIAllbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLSZndDthcmdfdHlwZVthcmddOwpAQCAtODM2MSwyOSAmIzQzOzg0NjAsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsCiAJc3dpdGNoIChiYXNlX3R5cGUoYXJnX3R5cGUpKSB7CiAJY2FzZSBBUkdfQ09OU1RfTUFQX1BUUjoKIAkJLyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovCi0JCWlmIChtZXRhLSZndDttYXAucHRyKSB7Ci0JCQkvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OgotCQkJICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKQotCQkJICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKQotCQkJICogaWYgKGlubmVyX21hcDEgJmFtcDsmYW1wOyBpbm5lcl9tYXAyKSB7Ci0JCQkgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpOwotCQkJICogICAgIGlmICh0aW1lcikKLQkJCSAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWQKLQkJCSAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpOwotCQkJICogfQotCQkJICoKLQkJCSAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuCi0JCQkgKi8KLQkJCWlmIChtZXRhLSZndDttYXAucHRyICE9IHJlZy0mZ3Q7bWFwX3B0ciB8fAotCQkJICAgIG1ldGEtJmd0O21hcC51aWQgIT0gcmVnLSZndDttYXBfdWlkKSB7Ci0JCQkJdmVyYm9zZShlbnYsCi0JCQkJCSYjMzQ7dGltZXIgcG9pbnRlciBpbiBSMSBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcbiYjMzQ7LAotCQkJCQltZXRhLSZndDttYXAudWlkLCByZWctJmd0O21hcF91aWQpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JCW1ldGEtJmd0O21hcC5wdHIgPSByZWctJmd0O21hcF9wdHI7Ci0JCW1ldGEtJmd0O21hcC51aWQgPSByZWctJmd0O21hcF91aWQ7CiYjNDM7CQllcnIgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgQVJHX1BUUl9UT19NQVBfS0VZOgogCQkvKiBicGZfbWFwX3h4eCguLi4sIG1hcF9wdHIsIC4uLiwga2V5KSBjYWxsOgpAQCAtODQ2Niw3ICYjNDM7ODU0NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZywKIAkJfQogCQlicmVhazsKIAljYXNlIEFSR19QVFJfVE9fVElNRVI6Ci0JCWVyciA9IHByb2Nlc3NfdGltZXJfaGVscGVyKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQllcnIgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCAmYW1wO21ldGEtJmd0O21hcCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKQEAgLTg0NzQsMzEgJiM0Mzs4NTUzLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZywKIAkJbWV0YS0mZ3Q7c3VicHJvZ25vID0gcmVnLSZndDtzdWJwcm9nbm87CiAJCWJyZWFrOwogCWNhc2UgQVJHX1BUUl9UT19NRU06Ci0JCS8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGUKLQkJICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy4KLQkJICovCiAJCWlmIChhcmdfdHlwZSAmYW1wOyBNRU1fRklYRURfU0laRSkgewotCQkJZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBmbi0mZ3Q7YXJnX3NpemVbYXJnXSwKLQkJCQkJCSAgICAgIGFyZ190eXBlICZhbXA7IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELAotCQkJCQkJICAgICAgZmFsc2UsIG1ldGEpOwomIzQzOwkJCWVyciA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vX2Zyb21fcmVnKHJlZ25vKSwgZm4tJmd0O2FyZ19zaXplW2FyZ10sCiYjNDM7CQkJCQkgICAgYXJnX3R5cGUgJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsIG1ldGEpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKGFyZ190eXBlICZhbXA7IE1FTV9BTElHTkVEKQogCQkJCWVyciA9IGNoZWNrX3B0cl9hbGlnbm1lbnQoZW52LCByZWcsIDAsIGZuLSZndDthcmdfc2l6ZVthcmddLCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8gJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnLCBzaXplX3JlZywgYXJnbm8sCiYjNDM7CQkJCQkJIGFyZ25vX2Zyb21fcmVnKHJlZ25vICYjNDM7IDEpLAomIzQzOwkJCQkJCSBhcmdfdHlwZSAmYW1wOyBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCwKJiM0MzsJCQkJCQkgZm4tJmd0O2FyZ190eXBlW2FyZyAmIzQzOyAxXSAmYW1wOyBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBBUkdfQ09OU1RfU0laRToKLQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLAotCQkJCQkgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sCi0JCQkJCSBmbi0mZ3Q7YXJnX3R5cGVbYXJnIC0gMV0gJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsCi0JCQkJCSBmYWxzZSwgbWV0YSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJHX0NPTlNUX1NJWkVfT1JfWkVSTzoKLQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLAotCQkJCQkgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sCi0JCQkJCSBmbi0mZ3Q7YXJnX3R5cGVbYXJnIC0gMV0gJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsCi0JCQkJCSB0cnVlLCBtZXRhKTsKLQkJYnJlYWs7CiAJY2FzZSBBUkdfUFRSX1RPX0RZTlBUUjoKIAkJZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgJmFtcDttZXRhLSZndDtyZWZfb2JqLAogCQkJCQkgICZhbXA7bWV0YS0mZ3Q7ZHlucHRyKTsKQEAgLTg4MjMsNyAmIzQzOzg4OTMsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCFhcmdfdHlwZV9pc19yYXdfbWVtKGZuLSZndDthcmdfdHlwZVtpXSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG1ldGEtJmd0O2FyZ19yYXdfbWVtLnJlZ25vKQpAQCAtODg0MCw3ICYjNDM7ODkxMCw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2FyZ3NfcGFpcl9pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIGludCBhcmcpCiAJYm9vbCBoYXNfc2l6ZSA9IGZuLSZndDthcmdfc2l6ZVthcmddICE9IDA7CiAJYm9vbCBpc19uZXh0X3NpemUgPSBmYWxzZTsKIAotCWlmIChhcmcgJiM0MzsgMSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKSkKJiM0MzsJaWYgKGFyZyAmIzQzOyAxICZsdDsgTUFYX0JQRl9GVU5DX1JFR19BUkdTKQogCQlpc19uZXh0X3NpemUgPSBhcmdfdHlwZV9pc19tZW1fc2l6ZShmbi0mZ3Q7YXJnX3R5cGVbYXJnICYjNDM7IDFdKTsKIAogCWlmIChiYXNlX3R5cGUoZm4tJmd0O2FyZ190eXBlW2FyZ10pICE9IEFSR19QVFJfVE9fTUVNKQpAQCAtODg3MSw3ICYjNDM7ODk0MSw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2J0Zl9pZF9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGJhc2VfdHlwZShmbi0mZ3Q7YXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fQlRGX0lEKQogCQkJcmV0dXJuICEhZm4tJmd0O2FyZ19idGZfaWRbaV07CiAJCWlmIChiYXNlX3R5cGUoZm4tJmd0O2FyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX1NQSU5fTE9DSykKQEAgLTg4OTAsNyAmIzQzOzg5NjAsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19tZW1fYXJnX3J3X2ZsYWdfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZuLSZndDthcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tJmd0O2FyZ190eXBlW2ldOwogCiAJCWlmIChiYXNlX3R5cGUoYXJnX3R5cGUpICE9IEFSR19QVFJfVE9fTUVNKQpAQCAtODkwNiw3ICYjNDM7ODk3Niw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbi0mZ3Q7YXJnX3R5cGUpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykgewogCQllbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLSZndDthcmdfdHlwZVtpXTsKIAogCQlpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHsKQEAgLTkyNTIsNyAmIzQzOzkzMjIsNyBAQCBzdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX2FyZ19tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywKIAkJCXJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLSZndDttZW1fc2l6ZSkpCiYjNDM7CQkJaWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctJmd0O21lbV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgTlVMTCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoIShhcmctJmd0O2FyZ190eXBlICZhbXA7IFBUUl9NQVlCRV9OVUxMKSAmYW1wOyZhbXA7IChyZWctJmd0O3R5cGUgJmFtcDsgUFRSX01BWUJFX05VTEwpKSB7CiAJCQkJYnBmX2xvZyhsb2csICYjMzQ7JXMgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLU5VTExcbiYjMzQ7LApAQCAtMTAyOTcsOSAmIzQzOzEwMzY3LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSA9IHRydWU7CiAKIAltZXRhLmZ1bmNfaWQgPSBmdW5jX2lkOwomIzQzOwltZXRhLmZuID0gZm47CiAJLyogY2hlY2sgYXJncyAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgJmFtcDttZXRhLCBmbiwgaW5zbl9pZHgpOwomIzQzOwkJZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCAmYW1wO21ldGEsIGluc25faWR4KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA3NzEsMjYgJiM0MzsxMDg0MiwyNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIH0KIAogc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZywKLQkJCQkgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDsKIAogCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy0mZ3Q7dHlwZSwgTlVMTCk7Ci0JaWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkKJiM0MzsJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fc3omIzM0Oyk7CiB9CiAKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCi0JCQkJCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZywKLQkJCQkJY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZykKIHsKIAljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7CiAKIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctJmd0O3R5cGUsIE5VTEwpOwotCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpIHx8IHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpCiYjNDM7CWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX3N6ayYjMzQ7KTsKQEAgLTEwODExLDYgJiM0MzsxMDg4MCwxMSBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWFwKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fbWFwJiMzNDspOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fY29uc3RfbWFwJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hbGxvY19vYmooY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiB7CiAJcmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hbGxvYyYjMzQ7KTsKQEAgLTExMDUxLDE4ICYjNDM7MTExMjUsMjEgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUgewogCUtGX0FSR19QVFJfVE9fTElTVF9OT0RFLAogCUtGX0FSR19QVFJfVE9fQlRGX0lELAkgICAgICAgLyogQWxzbyBjb3ZlcnMgcmVnMmJ0Zl9pZHMgY29udmVyc2lvbnMgKi8KIAlLRl9BUkdfUFRSX1RPX01FTSwKLQlLRl9BUkdfUFRSX1RPX01FTV9TSVpFLAkgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqLwogCUtGX0FSR19QVFJfVE9fQ0FMTEJBQ0ssCiAJS0ZfQVJHX1BUUl9UT19SQl9ST09ULAogCUtGX0FSR19QVFJfVE9fUkJfTk9ERSwKLQlLRl9BUkdfUFRSX1RPX05VTEwsCiAJS0ZfQVJHX1BUUl9UT19DT05TVF9TVFIsCi0JS0ZfQVJHX1BUUl9UT19NQVAsCiYjNDM7CUtGX0FSR19DT05TVF9NQVBfUFRSLAogCUtGX0FSR19QVFJfVE9fVElNRVIsCiAJS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUUsCiAJS0ZfQVJHX1BUUl9UT19JUlFfRkxBRywKIAlLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssCiAJS0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssCiYjNDM7CUtGX0FSR19DT05TVCwJCSAgICAgICAvKiBjb25zdCBzY2FsYXIgKi8KJiM0MzsJS0ZfQVJHX0NPTlNUX01FTV9TSVpFLAkgICAgICAgLyogY29uc3Qgc2NhbGFyIHNpemluZyBhIHByZWNlZGluZyBtZW1vcnkgYXJnICovCiYjNDM7CUtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk8sIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSByZXR1cm5lZCBidWZmZXIgKi8KJiM0MzsJS0ZfQVJHX01FTV9TSVpFLAkgICAgICAgLyogc2NhbGFyIHNpemluZyBhIHByZWNlZGluZyBtZW1vcnkgYXJnICovCiYjNDM7CUtGX0FSR19BTllUSElORywJICAgICAgIC8qIHVuY29uc3RyYWluZWQgc2NhbGFyICovCiB9OwogCiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7CkBAIC0xMTMxOCwxMDggJiM0MzsxMTM5NSwxNTUgQEAgYm9vbCBicGZfaXNfa2Z1bmNfcGt0X2NoYW5naW5nKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIAlyZXR1cm4gbWV0YS0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3hkcF9wdWxsX2RhdGFdOwogfQogCi1zdGF0aWMgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUKLWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsCi0JCSAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90LAotCQkgICAgICAgY29uc3QgY2hhciAqcmVmX3RuYW1lLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLAotCQkgICAgICAgaW50IGFyZywgaW50IG5hcmdzLCBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQomIzQzO3N0YXRpYyBpbnQKJiM0MztnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAomIzQzOwkJICAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncywgaW50IGFyZywgaW50IG5hcmdzKQogewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpyZWZfdCA9IE5VTEw7CiYjNDM7CWFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhhcmcgJiM0MzsgMSk7CiYjNDM7CWNvbnN0IGNoYXIgKnJlZl90bmFtZSA9IE5VTEw7CiAJYm9vbCBhcmdfbWVtX3NpemUgPSBmYWxzZTsKJiM0MzsJaW50IGFyZ190eXBlOwogCi0JaWYgKG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fAotCSAgICBtZXRhLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8Ci0JICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDsKJiM0MzsJdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtJmd0O2J0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpOwogCi0JaWYgKGFyZyAmIzQzOyAxICZsdDsgbmFyZ3MgJmFtcDsmYW1wOwotCSAgICAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyAmIzQzOyAxKSkgfHwKLQkgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmcgJiM0MzsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgJiM0MzsgMSkpKSkKLQkJYXJnX21lbV9zaXplID0gdHJ1ZTsKJiM0MzsJLyogU2NhbGFyIGFyZ3VtZW50cyBhcmUgY2xhc3NpZmllZCBmcm9tIHRoZWlyIEJURiBzdWZmaXgvbmFtZSBhbG9uZS4gKi8KJiM0MzsJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCQlyZXR1cm4gS0ZfQVJHX0NPTlNUOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCQlyZXR1cm4gS0ZfQVJHX0NPTlNUX01FTV9TSVpFOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCQlyZXR1cm4gS0ZfQVJHX01FTV9TSVpFOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10sICYjMzQ7cmRvbmx5X2J1Zl9zaXplJiMzNDspIHx8CiYjNDM7CQkgICAgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSwgJiMzNDtyZHdyX2J1Zl9zaXplJiMzNDspKQomIzQzOwkJCXJldHVybiBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOwomIzQzOwkJcmV0dXJuIEtGX0FSR19BTllUSElORzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkgewomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7VW5yZWNvZ25pemVkICVzIHR5cGUgJXNcbiYjMzQ7LAomIzQzOwkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS0mZ3Q7YnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKJiM0MzsJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtJmd0O2J0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIAogCS8qIEluIHRoaXMgZnVuY3Rpb24sIHdlIHZlcmlmeSB0aGUga2Z1bmMmIzM5O3MgQlRGIGFzIHBlciB0aGUgYXJndW1lbnQgdHlwZSwKIAkgKiBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB2ZXJpZmljYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSByZWdpc3RlcgogCSAqIHR5cGUgdG8gb3VyIGNhbGxlci4gV2hlbiBhIHNldCBvZiBjb25kaXRpb25zIGhvbGQgaW4gdGhlIEJURiB0eXBlIG9mCiAJICogYXJndW1lbnRzLCB3ZSByZXNvbHZlIGl0IHRvIGEga25vd24ga2Z1bmNfcHRyX2FyZ190eXBlLgogCSAqLwotCWlmIChidGZfaXNfcHJvZ19jdHhfdHlwZSgmYW1wO2Vudi0mZ3Q7bG9nLCBtZXRhLSZndDtidGYsIHQsIHJlc29sdmVfcHJvZ190eXBlKGVudi0mZ3Q7cHJvZyksIGFyZykpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDsKLQotCWlmIChpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkgJmFtcDsmYW1wOyBicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpICZhbXA7JmFtcDsKLQkgICAgIWFyZ19tZW1fc2l6ZSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fTlVMTDsKLQotCWlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ7Ci0KLQlpZiAoaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOwotCi0JaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0RZTlBUUjsKLQotCWlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fSVRFUjsKLQotCWlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19MSVNUX0hFQUQ7Ci0KLQlpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOwotCi0JaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fUkJfUk9PVDsKLQotCWlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX1JCX05PREU7Ci0KLQlpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOwomIzQzOwlpZiAobWV0YS0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8CiYjNDM7CSAgICBtZXRhLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8CiYjNDM7CSAgICBtZXRhLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDsKJiM0MzsJZWxzZSBpZiAoYnRmX2lzX3Byb2dfY3R4X3R5cGUoJmFtcDtlbnYtJmd0O2xvZywgbWV0YS0mZ3Q7YnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtJmd0O3Byb2cpLCBhcmcpKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0RZTlBUUjsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2l0ZXIobWV0YSwgYXJnLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fSVRFUjsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3RfaGVhZChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19MSVNUX0hFQUQ7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfUk9PVDsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3JidHJlZV9ub2RlKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JCX05PREU7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3RfbWFwKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfQ09OU1RfTUFQX1BUUjsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19USU1FUjsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7CiYjNDM7CWVsc2UgewomIzQzOwkJaWYgKGFyZyAmIzQzOyAxICZsdDsgbmFyZ3MgJmFtcDsmYW1wOwomIzQzOwkJICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSB8fAomIzQzOwkJICAgICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpCiYjNDM7CQkJYXJnX21lbV9zaXplID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCWlmIChidGZfdHlwZV9pc19zdHJ1Y3QocmVmX3QpICZhbXA7JmFtcDsgIWFyZ19tZW1fc2l6ZSkgewomIzQzOwkJCS8qIEEgcG9pbnRlciB0byBhIHN0cnVjdCB3aXRob3V0IGEgc2l6ZSBhcmd1bWVudCBpcyBjbGFzc2lmaWVkCiYjNDM7CQkJICogYXMgS0ZfQVJHX1BUUl9UT19CVEZfSUQuCiYjNDM7CQkJICovCiYjNDM7CQkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDsKJiM0MzsJCX0gZWxzZSBpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gJXNzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiYjNDM7CQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwKJiM0MzsJCQkJYnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyAmIzM0O3ZvaWQsICYjMzQ7IDogJiMzNDsmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIE90aGVyd2lzZSB0aGlzIGlzIGEgbWVtb3J5IGJ1ZmZlciBzdXBwb3J0ZWQgYnkKJiM0MzsJCQkgKiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcygpOiBhIHBvaW50ZXIgdG8gYSBzY2FsYXIsIG9yIHRvIHZvaWQKJiM0MzsJCQkgKiB3aGVuIHBhaXJlZCB3aXRoIGEgc2l6ZSBhcmd1bWVudC4gVGhlIGFjY2VzcyBzaXplIGlzIGRlcml2ZWQKJiM0MzsJCQkgKiBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlIHVubGVzcyBhIHNpemUgYXJndW1lbnQgZm9sbG93cy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhcmdfdHlwZSA9IGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNIDogS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTsKJiM0MzsJCX0KJiM0MzsJfQogCi0JaWYgKGlzX2tmdW5jX2FyZ19tYXAobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX01BUDsKJiM0MzsJaWYgKGlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlIHw9IFBUUl9NQVlCRV9OVUxMOwogCi0JaWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOwomIzQzOwlyZXR1cm4gYXJnX3R5cGU7CiYjNDM7fQogCi0JaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fVElNRVI7CiYjNDM7c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG1ldGEtJmd0O2J0ZjsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKJiM0MzsJdTMyIGksIG5hcmdzOwomIzQzOwlpbnQgYXJnX3R5cGU7CiAKLQlpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fVEFTS19XT1JLOwomIzQzOwlhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS0mZ3Q7ZnVuY19wcm90byAmIzQzOyAxKTsKJiM0MzsJbmFyZ3MgPSBidGZfdHlwZV92bGVuKG1ldGEtJmd0O2Z1bmNfcHJvdG8pOwomIzQzOwlpZiAobmFyZ3MgJmd0OyBNQVhfQlBGX0ZVTkNfQVJHUykgewomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7RnVuY3Rpb24gJXMgaGFzICVkICZndDsgJWQgYXJnc1xuJiMzNDssIG1ldGEtJmd0O2Z1bmNfbmFtZSwKJiM0MzsJCQluYXJncywgTUFYX0JQRl9GVU5DX0FSR1MpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKG5hcmdzICZndDsgTUFYX0JQRl9GVU5DX1JFR19BUkdTICZhbXA7JmFtcDsgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggJWQgYXJnc1xuJiMzNDssCiYjNDM7CQkJbWV0YS0mZ3Q7ZnVuY19uYW1lLCBuYXJncyk7CiYjNDM7CQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwl9CiAKLQlpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5hcmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19wcm9nX2F1eChidGYsICZhbXA7YXJnc1tpXSkgfHwKJiM0MzsJCSAgICBpc19rZnVuY19hcmdfaWdub3JlKGJ0ZiwgJmFtcDthcmdzW2ldKSB8fAomIzQzOwkJICAgIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChtZXRhLCBpKSkKJiM0MzsJCQljb250aW51ZTsKIAotCWlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzsKJiM0MzsJCWFyZ190eXBlID0gZ2V0X2tmdW5jX2FyZ190eXBlKGVudiwgbWV0YSwgYXJncywgaSwgbmFyZ3MpOwomIzQzOwkJaWYgKGFyZ190eXBlICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gYXJnX3R5cGU7CiAKLQlpZiAoKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpID09IFBUUl9UT19CVEZfSUQgfHwgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSldKSkgewotCQlpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkpIHsKLQkJCXZlcmJvc2UoZW52LCAmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCi0JCQkJbWV0YS0mZ3Q7ZnVuY19uYW1lLCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksCi0JCQkJYnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0JURl9JRDsKJiM0MzsJCXByb3RvLSZndDthcmdfdHlwZVtpXSA9IGFyZ190eXBlOwogCX0KIAotCWlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7Ci0KLQkvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnkKLQkgKiBjaGVja19oZWxwZXJfbWVtX2FjY2Vzcy4gSG93ZXZlciwgd2Ugb25seSBhbGxvdyB3aGVuIGFyZ3VtZW50IHR5cGUgaXMKLQkgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlbgotCSAqIGFyZ19tZW1fc2l6ZSBpcyB0cnVlLCB0aGUgcG9pbnRlciBjYW4gYmUgdm9pZCAqLgotCSAqLwotCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSAmYW1wOyZhbXA7ICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSAmYW1wOyZhbXA7Ci0JICAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byAlc3NjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXG4mIzM0OywKLQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwKLQkJCWJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gJiMzNDt2b2lkLCAmIzM0OyA6ICYjMzQ7JiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNX1NJWkUgOiBLRl9BUkdfUFRSX1RPX01FTTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LApAQCAtMTIwMDUsMTYgJiM0MzsxMjEyOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAKIAlhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS0mZ3Q7ZnVuY19wcm90byAmIzQzOyAxKTsKIAluYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS0mZ3Q7ZnVuY19wcm90byk7Ci0JaWYgKG5hcmdzICZndDsgTUFYX0JQRl9GVU5DX0FSR1MpIHsKLQkJdmVyYm9zZShlbnYsICYjMzQ7RnVuY3Rpb24gJXMgaGFzICVkICZndDsgJWQgYXJnc1xuJiMzNDssIGZ1bmNfbmFtZSwgbmFyZ3MsCi0JCQlNQVhfQlBGX0ZVTkNfQVJHUyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAobmFyZ3MgJmd0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgJmFtcDsmYW1wOyAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHsKLQkJdmVyYm9zZShlbnYsICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcbiYjMzQ7LAotCQkJZnVuY19uYW1lLCBuYXJncyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQogCiAJcmV0ID0gY2hlY2tfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlciwgbmFyZ3MpOwogCWlmIChyZXQpCkBAIC0xMjAzMSw4ICYjNDM7MTIxNDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQlpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhhcmdubyk7CiAJCWJvb2wgYnRmX2lkX2ZpeGVkX29mZl9vayA9IHRydWU7CiAJCXUzMiByZWZfaWQsIHR5cGVfc2l6ZTsKLQkJYm9vbCBpc19yZXRfYnVmX3N6ID0gZmFsc2U7Ci0JCWludCBrZl9hcmdfdHlwZTsKJiM0MzsJCWludCBrZl9hcmdfdHlwZSA9IG1ldGEtJmd0O2ZuLSZndDthcmdfdHlwZVtpXTsKIAogCQlpZiAoaXNfa2Z1bmNfYXJnX3Byb2dfYXV4KGJ0ZiwgJmFtcDthcmdzW2ldKSkgewogCQkJLyogUmVqZWN0IHJlcGVhdGVkIHVzZSBicGZfcHJvZ19hdXggKi8KQEAgLTEyMDU1LDUyICYjNDM7MTIxNjgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7CiAKLQkJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHsKLQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcbiYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2ldKSkgewotCQkJCWlmIChtZXRhLSZndDthcmdfY29uc3RhbnQuZm91bmQpIHsKLQkJCQkJdmVyaWZpZXJfYnVnKGVudiwgJiMzNDtvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWQmIzM0Oyk7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQkJCQlpZiAoIXRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSkgewotCQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcbiYjMzQ7LAotCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCWlmIChyZWdubyAmZ3Q7PSAwKQotCQkJCQlyZXQgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTsKLQkJCQllbHNlCi0JCQkJCXJldCA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGkpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJCW1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7Ci0JCQkJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwotCQkJfSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsICZhbXA7YXJnc1tpXSwgJiMzNDtyZG9ubHlfYnVmX3NpemUmIzM0OykpIHsKLQkJCQltZXRhLSZndDtyMF9yZG9ubHkgPSB0cnVlOwotCQkJCWlzX3JldF9idWZfc3ogPSB0cnVlOwotCQkJfSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsICZhbXA7YXJnc1tpXSwgJiMzNDtyZHdyX2J1Zl9zaXplJiMzNDspKSB7Ci0JCQkJaXNfcmV0X2J1Zl9zeiA9IHRydWU7Ci0JCQl9Ci0KLQkJCWlmIChpc19yZXRfYnVmX3N6KSB7Ci0JCQkJcmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7cmV0X21lbSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7Ci0JCQl2ZXJib3NlKGVudiwgJiMzNDtVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xuJiMzNDssCi0JCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpKSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoYnRmX3R5cGVfaXNfcHRyKHQpICZhbXA7JmFtcDsgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpKSAmYW1wOyZhbXA7CiAJCSAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2ldKSkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXG4mIzM0OywKIAkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwpAQCAtMTIxMTcsNzYgJiM0MzsxMjE4NSwzNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQlpZiAocmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKQogCQkJdXBkYXRlX3JlZl9vYmooJmFtcDttZXRhLSZndDtyZWZfb2JqLCByZWcpOwogCi0JCXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCAmYW1wO3JlZl9pZCk7Ci0JCXJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LSZndDtuYW1lX29mZik7CiYjNDM7CQlpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiYjNDM7CQkJcmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtJmd0O3R5cGUsICZhbXA7cmVmX2lkKTsKJiM0MzsJCQlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwomIzQzOwkJfQogCi0JCWtmX2FyZ190eXBlID0gZ2V0X2tmdW5jX3B0cl9hcmdfdHlwZShlbnYsIGNhbGxlciwgcmVncywgbWV0YSwgdCwgcmVmX3QsIHJlZl90bmFtZSwKLQkJCQkJCSAgICAgYXJncywgaSwgbmFyZ3MsIGFyZ25vLCByZWcpOwotCQlpZiAoa2ZfYXJnX3R5cGUgJmx0OyAwKQotCQkJcmV0dXJuIGtmX2FyZ190eXBlOwogCi0JCXN3aXRjaCAoa2ZfYXJnX3R5cGUpIHsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX05VTEw6CiYjNDM7CQlpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSAmYW1wOyZhbXA7IHR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKQogCQkJY29udGludWU7Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6Ci0JCQlpZiAoIXJlZy0mZ3Q7bWFwX3B0cikgewotCQkJCXZlcmJvc2UoZW52LCAmIzM0O3BvaW50ZXIgaW4gJXMgaXNuJiMzOTt0IG1hcCBwb2ludGVyXG4mIzM0OywKLQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChtZXRhLSZndDttYXAucHRyICZhbXA7JmFtcDsgKHJlZy0mZ3Q7bWFwX3B0ci0mZ3Q7cmVjb3JkLSZndDt3cV9vZmYgJmd0Oz0gMCB8fAotCQkJCQkgICAgICByZWctJmd0O21hcF9wdHItJmd0O3JlY29yZC0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKSkgewotCQkJCS8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6Ci0JCQkJICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKQotCQkJCSAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MikKLQkJCQkgKiBpZiAoaW5uZXJfbWFwMSAmYW1wOyZhbXA7IGlubmVyX21hcDIpIHsKLQkJCQkgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpOwotCQkJCSAqICAgICBpZiAod3EpCi0JCQkJICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZAotCQkJCSAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpOwotCQkJCSAqIH0KLQkJCQkgKgotCQkJCSAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuCi0JCQkJICovCi0JCQkJaWYgKG1ldGEtJmd0O21hcC5wdHIgIT0gcmVnLSZndDttYXBfcHRyIHx8Ci0JCQkJICAgIG1ldGEtJmd0O21hcC51aWQgIT0gcmVnLSZndDttYXBfdWlkKSB7Ci0JCQkJCWlmIChyZWctJmd0O21hcF9wdHItJmd0O3JlY29yZC0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKSB7Ci0JCQkJCQl2ZXJib3NlKGVudiwKLQkJCQkJCQkmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcbiYjMzQ7LAotCQkJCQkJCW1ldGEtJmd0O21hcC51aWQsIHJlZy0mZ3Q7bWFwX3VpZCk7Ci0JCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkJfQotCQkJCQl2ZXJib3NlKGVudiwKLQkJCQkJCSYjMzQ7d29ya3F1ZXVlIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXG4mIzM0OywKLQkJCQkJCW1ldGEtJmd0O21hcC51aWQsIHJlZy0mZ3Q7bWFwX3VpZCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCX0KLQkJCW1ldGEtJmd0O21hcC5wdHIgPSByZWctJmd0O21hcF9wdHI7Ci0JCQltZXRhLSZndDttYXAudWlkID0gcmVnLSZndDttYXBfdWlkOwotCQkJZmFsbHRocm91Z2g7CiYjNDM7CiYjNDM7CQlpZiAoaXNfa2Z1bmNfYXJnX21hcChidGYsICZhbXA7YXJnc1tpXSkpIHsKJiM0MzsJCQlyZWZfaWQgPSAqcmVnMmJ0Zl9pZHNbQ09OU1RfUFRSX1RPX01BUF07CiYjNDM7CQkJcmVmX3QgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgcmVmX2lkKTsKJiM0MzsJCQlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7CiYjNDM7CQljYXNlIEtGX0FSR19DT05TVDoKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOgomIzQzOwkJY2FzZSBLRl9BUkdfTUVNX1NJWkU6CiYjNDM7CQljYXNlIEtGX0FSR19BTllUSElORzoKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDoKLQkJCWlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7Ci0JCQkJaWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHsKLQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcbiYjMzQ7LAotCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCWlmICghaXNfcmN1X3JlZyhyZWcpKSB7Ci0JCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxuJiMzNDssCi0JCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCQlmYWxsdGhyb3VnaDsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOgogCQljYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOgogCQljYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOgogCQljYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19NRU06Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRToKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOgogCQljYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOgogCQljYXNlIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOgpAQCAtMTIyMTcsNyAmIzQzOzEyMjQ1LDM3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlzd2l0Y2ggKGtmX2FyZ190eXBlKSB7CiYjNDM7CQlzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUOgomIzQzOwkJY2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6CiYjNDM7CQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IHByb2Nlc3NfY29uc3RfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtGX0FSR19NRU1fU0laRToKJiM0MzsJCWNhc2UgS0ZfQVJHX0FOWVRISU5HOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGlzIG5vdCBhIHNjYWxhclxuJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzoKJiM0MzsJCQlpZiAocmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcbiYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGJ0ZiwgJmFtcDthcmdzW2ldLCAmIzM0O3Jkb25seV9idWZfc2l6ZSYjMzQ7KSkKJiM0MzsJCQkJbWV0YS0mZ3Q7cjBfcmRvbmx5ID0gdHJ1ZTsKJiM0MzsJCQlyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgJmFtcDttZXRhLSZndDtyZXRfbWVtKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlicmVhazsKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0NUWDoKIAkJCWlmIChyZWctJmd0O3R5cGUgIT0gUFRSX1RPX0NUWCkgewogCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGV4cGVjdGVkIHBvaW50ZXIgdG8gY3R4LCBidXQgZ290ICVzXG4mIzM0OywKQEAgLTEyMzg2LDUxICYjNDM7MTI0NDQsNzcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCWlmIChyZXQgJmx0OyAwKQogCQkJCXJldHVybiByZXQ7CiAJCQlicmVhazsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX01BUDoKLQkJCS8qIElmIGFyZ3VtZW50IGhhcyAmIzM5O19fbWFwJiMzOTsgc3VmZml4IGV4cGVjdCAmIzM5O3N0cnVjdCBicGZfbWFwIComIzM5OyAqLwotCQkJcmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdOwotCQkJcmVmX3QgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgcmVmX2lkKTsKLQkJCXJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LSZndDtuYW1lX29mZik7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDoKLQkJCS8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi8KLQkJCWlmICgoYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fAotCQkJICAgICAoYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnMocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICFpc19yY3VfcmVnKHJlZykpKSAmYW1wOyZhbXA7Ci0JCQkgICAgIXJlZzJidGZfaWRzW2Jhc2VfdHlwZShyZWctJmd0O3R5cGUpXSkgewotCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGlzICVzICYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksCi0JCQkJCXJlZ190eXBlX3N0cihlbnYsIHJlZy0mZ3Q7dHlwZSkpOwotCQkJCXZlcmJvc2UoZW52LCAmIzM0O2V4cGVjdGVkICVzIG9yIHNvY2tldFxuJiMzNDssCi0JCQkJCXJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctJmd0O3R5cGUpIHwKLQkJCQkJCQkgICh0eXBlX2ZsYWcocmVnLSZndDt0eXBlKSAmYW1wOyBCUEZfUkVHX1RSVVNURURfTU9ESUZJRVJTKSkpOwomIzQzOwkJY2FzZSBLRl9BUkdfQ09OU1RfTUFQX1BUUjoKJiM0MzsJCQlpZiAoYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gQ09OU1RfUFRSX1RPX01BUCkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDtwb2ludGVyIGluICVzIGlzbiYjMzk7dCBtYXAgcG9pbnRlclxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJcmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7CiYjNDM7CQkJcmV0ID0gcHJvY2Vzc19tYXBfcHRyX2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwotCQljYXNlIEtGX0FSR19QVFJfVE9fTUVNOgotCQkJcmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsICZhbXA7dHlwZV9zaXplKTsKLQkJCWlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7Ci0JCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgcmVmZXJlbmNlIHR5cGUoJiMzOTslcyAlcyYjMzk7KSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcbiYjMzQ7LAotCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksCi0JCQkJCXJlZl90bmFtZSwgUFRSX0VSUihyZXNvbHZlX3JldCkpOwomIzQzOwkJY2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDoKJiM0MzsJCQkvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovCiYjNDM7CQkJaWYgKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpID09IFBUUl9UT19CVEZfSUQgfHwKJiM0MzsJCQkgICAgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSldKSB7CiYjNDM7CQkJCWlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpIHx8CiYjNDM7CQkJCSAgICBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyhyZWctJmd0O3R5cGUpKSB7CiYjNDM7CQkJCQlpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkgewomIzQzOwkJCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXG4mIzM0OywKJiM0MzsJCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkJCX0KJiM0MzsJCQkJCWlmICghaXNfcmN1X3JlZyhyZWcpKSB7CiYjNDM7CQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgbXVzdCBiZSBhIHJjdSBwb2ludGVyXG4mIzM0OywKJiM0MzsJCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkJCX0KJiM0MzsJCQkJfQomIzQzOwomIzQzOwkJCQlyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTsKJiM0MzsJCQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKCFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSkgewomIzQzOwkJCQllbnVtIGJwZl9yZWdfdHlwZSByZWcyYnRmX3R5cGUgPSBsb29rdXBfcmVnMmJ0Zl9pZHMocmVmX3QpOwomIzQzOwomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyAlcyBleHBlY3RlZCAlcyAlcyYjMzQ7LAomIzQzOwkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctJmd0O3R5cGUpLAomIzQzOwkJCQkJYnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lKTsKJiM0MzsJCQkJaWYgKHJlZzJidGZfdHlwZSAhPSBOT1RfSU5JVCkKJiM0MzsJCQkJCXZlcmJvc2UoZW52LCAmIzM0OyBvciAlcyYjMzQ7LCByZWdfdHlwZV9zdHIoZW52LCByZWcyYnRmX3R5cGUpKTsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7XG4mIzM0Oyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCXJldHVybiByZXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOgotCQl7Ci0JCQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7Ci0JCQljb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpidWZmX2FyZyA9ICZhbXA7YXJnc1tpXTsKLQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZyA9IGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBpICYjNDM7IDEpOwotCQkJY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc2l6ZV9hcmcgPSAmYW1wO2FyZ3NbaSAmIzQzOyAxXTsKLQkJCWFyZ25vX3QgbmV4dF9hcmdubyA9IGFyZ25vX2Zyb21fYXJnKGkgJiM0MzsgMik7Ci0KLQkJCWlmICghYnBmX3JlZ2lzdGVyX2lzX251bGwoYnVmZl9yZWcpIHx8ICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCBidWZmX2FyZykpIHsKLQkJCQlyZXQgPSBjaGVja19rZnVuY19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsCi0JCQkJCQkJICAgICAgIGFyZ25vLCBuZXh0X2FyZ25vKTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIHRoZSByZWdpc3RlciBkb2VzIG5vdCBjb250YWluIGJ0ZiBpZCBidXQgdGhlIGFyZ3VtZW50IHR5cGUgaXMgYSBwb2ludGVyIHRvCiYjNDM7CQkJICogc2NhbGFyLW9ubHkgc3RydWN0LCBhbGxvdyB2ZXJpZnlpbmcgaXQgYXMgYSBmaXhlZCBzaXplIG1lbW9yeS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlrZl9hcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTUVNIHwgTUVNX0ZJWEVEX1NJWkU7CiYjNDM7CQkJZmFsbHRocm91Z2g7CiYjNDM7CQljYXNlIEtGX0FSR19QVFJfVE9fTUVNOgomIzQzOwkJCWlmIChrZl9hcmdfdHlwZSAmYW1wOyBNRU1fRklYRURfU0laRSkgewomIzQzOwkJCQlyZXNvbHZlX3JldCA9IGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgJmFtcDt0eXBlX3NpemUpOwomIzQzOwkJCQlpZiAoSVNfRVJSKHJlc29sdmVfcmV0KSkgewomIzQzOwkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgcmVmZXJlbmNlIHR5cGUoJiMzOTslcyAlcyYjMzk7KSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcbiYjMzQ7LAomIzQzOwkJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSwKJiM0MzsJCQkJCQlyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTsKJiM0MzsJCQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCQl9CiYjNDM7CQkJCXJldCA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCB0eXBlX3NpemUsIEJQRl9SRUFEIHwgQlBGX1dSSVRFLCBtZXRhKTsKJiM0MzsJCQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpidWZmX3JlZyA9IHJlZzsKJiM0MzsJCQkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGkgJiM0MzsgMSk7CiYjNDM7CQkJCWFyZ25vX3QgbmV4dF9hcmdubyA9IGFyZ25vX2Zyb21fYXJnKGkgJiM0MzsgMik7CiYjNDM7CiYjNDM7CQkJCXJldCA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIGJ1ZmZfcmVnLCBzaXplX3JlZywgYXJnbm8sIG5leHRfYXJnbm8sCiYjNDM7CQkJCQkJCSBCUEZfUkVBRCB8IEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7CiAJCQkJaWYgKHJldCAmbHQ7IDApIHsKIAkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgYW5kICYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBtZW1vcnksIGxlbiBwYWlyIGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc1xuJiMzNDssCkBAIC0xMjQzOCwyNSAmIzQzOzEyNTIyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCQkJcmV0dXJuIHJldDsKIAkJCQl9CiAJCQl9Ci0KLQkJCWlmIChpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCBzaXplX2FyZywgc2l6ZV9yZWcpKSB7Ci0JCQkJaWYgKG1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCkgewotCQkJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O29ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZCYjMzQ7KTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCQkJCWlmICghdG51bV9pc19jb25zdChzaXplX3JlZy0mZ3Q7dmFyX29mZikpIHsKLQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XG4mIzM0OywKLQkJCQkJCXJlZ19hcmdfbmFtZShlbnYsIG5leHRfYXJnbm8pKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCW1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7Ci0JCQkJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LnZhbHVlID0gc2l6ZV9yZWctJmd0O3Zhcl9vZmYudmFsdWU7Ci0JCQl9Ci0KLQkJCS8qIFNraXAgbmV4dCAmIzM5O19fc3omIzM5OyBvciAmIzM5O19fc3prJiMzOTsgYXJndW1lbnQgKi8KLQkJCWkmIzQzOyYjNDM7OwogCQkJYnJlYWs7Ci0JCX0KIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOgogCQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBQVFJfVE9fRlVOQykgewogCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGV4cGVjdGVkIHBvaW50ZXIgdG8gZnVuY1xuJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CkBAIC0xMjUxNCw3ICYjNDM7MTI1ODAsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJcmV0ID0gcHJvY2Vzc190aW1lcl9rZnVuYyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpOwomIzQzOwkJCXJldCA9IHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7bWFwKTsKIAkJCWlmIChyZXQgJmx0OyAwKQogCQkJCXJldHVybiByZXQ7CiAJCQlicmVhazsKQEAgLTEyNjc2LDcgJiM0MzsxMjc0Miw3IEBAIHM2NCBicGZfaGVscGVyX3N0YWNrX2FjY2Vzc19ieXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24KIAkJCXNpemUgPSBmbi0mZ3Q7YXJnX3NpemVbYXJnXTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChhcmcgJiM0MzsgMSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoYXJnICYjNDM7IDEgJmx0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgJmFtcDsmYW1wOwogCQkgICAgYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tJmd0O2FyZ190eXBlW2FyZyAmIzQzOyAxXSkpIHsKIAkJCWludCBzaXplX3JlZyA9IEJQRl9SRUdfMSAmIzQzOyBhcmcgJiM0MzsgMTsKIApAQCAtMTI5NzUsNiAmIzQzOzEzMDQxLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wOwogCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7CiAJdTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDsKJiM0MzsJc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjOwogCXN0cnVjdCBidGYgKmRlc2NfYnRmOwogCWludCBpZDsKIApAQCAtMTI5OTEsNiAmIzQzOzEzMDU4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJZnVuY19uYW1lID0gbWV0YS5mdW5jX25hbWU7CiAJaW5zbl9hdXggPSAmYW1wO2Vudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF07CiAKJiM0MzsJZGVzYyA9IGZpbmRfa2Z1bmNfZGVzYyhlbnYtJmd0O3Byb2csIGluc24tJmd0O2ltbSwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJaWYgKCFkZXNjKSB7CiYjNDM7CQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O2tmdW5jIGRlc2NyaXB0b3Igbm90IGZvdW5kIGZvciBmdW5jX2lkICV1JiMzNDssIGluc24tJmd0O2ltbSk7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwltZXRhLmZuID0gZGVzYy0mZ3Q7cHJvdG87CiYjNDM7CiAJaW5zbl9hdXgtJmd0O2lzX2l0ZXJfbmV4dCA9IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKTsKIAogCWlmICghaW5zbi0mZ3Q7b2ZmICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwppbmRleCA3NmFiNTFkZWFhNmI5NS4uODkxODk3ZjhhMWIzNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTIyMSw3ICYjNDM7MjIxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTI1OCw3ICYjNDM7MjU4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyX3Byb3RvID0gewogCS5ncGxfb25seQk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0yNzMsNyAmIzQzOzI3Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTMwOCw3ICYjNDM7MzA4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTMyOCw3ICYjNDM7MzI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTM0Nyw3ICYjNDM7MzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfc3RyX3Byb3RvID0gewogCS5ncGxfb25seQk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRSAqLwpAQCAtMzgzLDcgJiM0MzszODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV93cml0ZV91c2VyX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiAjZGVmaW5lIE1BWF9UUkFDRV9QUklOVEtfVkFSQVJHUwkzCkBAIC00MTgsNyAmIzQzOzQxOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RyYWNlX3ByaW50a19wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIHZvaWQgX19zZXRfcHJpbnRrX2Nscl9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC00NzQsOSAmIzQzOzQ3NCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RyYWNlX3ZwcmludGtfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF90cmFjZV92cHJpbnRrX3Byb3RvKHZvaWQpCkBAIC01MTgsOSAmIzQzOzUxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lELAogCS5hcmcxX2J0Zl9pZAk9ICZhbXA7YnRmX3NlcV9maWxlX2lkc1swXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJQRl9DQUxMXzMoYnBmX3NlcV93cml0ZSwgc3RydWN0IHNlcV9maWxlICosIG0sIGNvbnN0IHZvaWQgKiwgZGF0YSwgdTMyLCBsZW4pCkBAIC01MzUsNyAmIzQzOzUzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV93cml0ZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfc2VxX2ZpbGVfaWRzWzBdLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJQRl9DQUxMXzQoYnBmX3NlcV9wcmludGZfYnRmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgc3RydWN0IGJ0Zl9wdHIgKiwgcHRyLApAQCAtNTU5LDcgJiM0Mzs1NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfc2VxX2ZpbGVfaWRzWzBdLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmJwZl9nZXRfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvKHZvaWQpCkBAIC03MzAsNyAmIzQzOzczMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9ldmVudF9vdXRwdXRfbmVzdF9sZXZlbCk7CkBAIC05OTYsNyAmIzQzOzk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2RfcGF0aF9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDticGZfZF9wYXRoX2J0Zl9pZHNbMF0sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFsbG93ZWQJPSBicGZfZF9wYXRoX2FsbG93ZWQsCiB9OwogCkBAIC0xMDUzLDkgJiM0MzsxMDUzLDkgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMTIxOCw3ICYjNDM7MTIxOCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2JyYW5jaF9zbmFwc2hvdF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJQRl9DQUxMXzMoZ2V0X2Z1bmNfYXJnLCB2b2lkICosIGN0eCwgdTMyLCBuLCB1NjQgKiwgdmFsdWUpCkBAIC0xNDIxLDcgJiM0MzsxNDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fdHAgPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfdHAsIHZvaWQgKiwgdHBfYnVmZiwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLApAQCAtMTQ2Miw3ICYjNDM7MTQ2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b190cCA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0xNTI0LDEyICYjNDM7MTUyNCwxMiBAQCBCUEZfQ0FMTF8zKGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlX3Byb3RvID0gewotICAgICAgICAgLmZ1bmMgICAgICAgICAgID0gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLAotICAgICAgICAgLmdwbF9vbmx5ICAgICAgID0gdHJ1ZSwKLSAgICAgICAgIC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLAotICAgICAgICAgLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCi0gICAgICAgICAuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0gICAgICAgICAuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmZ1bmMgICAgICAgICAgID0gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLAomIzQzOwkuZ3BsX29ubHkgICAgICAgPSB0cnVlLAomIzQzOwkucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUiwKJiM0MzsJLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCiYjNDM7CS5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNChicGZfcmVhZF9icmFuY2hfcmVjb3Jkcywgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCkBAIC0xNTY2LDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVhZF9icmFuY2hfcmVjb3Jkc19wcm90byA9IHsKIAkucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLAotCS5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIH07CiAKQEAgLTE2NDYsNyAmIzQzOzE2NDYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90b19yYXdfdHAgPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90bzsKQEAgLTE3MDEsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcmF3X3RwID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMGI3YWZkZDBhZTQ3NDguLmViMGI3MDZhZjRiMjk2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTc0Nyw3ICYjNDM7MTc0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zdG9yZV9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMTc4NCw3ICYjNDM7MTc4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogaW50IF9fYnBmX3NrYl9sb2FkX2J5dGVzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXQsIHZvaWQgKnRvLCB1MzIgbGVuKQpAQCAtMTgyMyw3ICYjNDM7MTgyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2Zsb3dfZGlzc2VjdG9yX2xvYWRfYnl0ZXNfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLApAQCAtMTg2Nyw3ICYjNDM7MTg2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0yMDYzLDkgJiM0MzsyMDYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY3N1bV9kaWZmX3Byb3RvID0gewogCS5wa3RfYWNjZXNzCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMjYyMSw3ICYjNDM7MjYyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTQxOTQsNyAmIzQzOzQxOTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfbG9hZF9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIGludCBfX2JwZl94ZHBfbG9hZF9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKQpAQCAtNDIyNiw3ICYjNDM7NDIyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9zdG9yZV9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIGludCBfX2JwZl94ZHBfc3RvcmVfYnl0ZXMoc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBvZmZzZXQsIHZvaWQgKmJ1ZiwgdTMyIGxlbikKQEAgLTQ3ODksNyAmIzQzOzQ3ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJURl9JRF9MSVNUX1NJTkdMRShicGZfc2tiX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHNrX2J1ZmYpCkBAIC00ODAzLDcgJiM0Mzs0ODAzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpCkBAIC00ODg2LDcgJiM0Mzs0ODg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfa2V5X3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNDkyMSw3ICYjNDM7NDkyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfdHVubmVsX29wdF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1ldGFkYXRhX2RzdCBfX3BlcmNwdSAqbWRfZHN0OwpAQCAtNTAwMyw3ICYjNDM7NTAwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX2tleV9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTUwMzEsNyAmIzQzOzUwMzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCkBAIC01MjAzLDcgJiM0Mzs1MjAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2V2ZW50X291dHB1dF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBCVEZfSURfTElTVF9TSU5HTEUoYnBmX3hkcF9vdXRwdXRfYnRmX2lkcywgc3RydWN0LCB4ZHBfYnVmZikKQEAgLTUyMTcsNyAmIzQzOzUyMTcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9vdXRwdXRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMShicGZfZ2V0X3NvY2tldF9jb29raWUsIHN0cnVjdCBza19idWZmICosIHNrYikKQEAgLTU3NjQsNyAmIzQzOzU3NjQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsCkBAIC01NzgxLDcgJiM0Mzs1NzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19nZXRzb2Nrb3B0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheSwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsCkBAIC01ODA1LDcgJiM0Mzs1ODA1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXlfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfc2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsCkBAIC01ODIyLDcgJiM0Mzs1ODIyLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLApAQCAtNTgzOSw3ICYjNDM7NTgzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsCkBAIC01ODU2LDcgJiM0Mzs1ODU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfc29ja19hZGRyX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LApAQCAtNTg3Myw3ICYjNDM7NTg3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIHN0YXRpYyBpbnQgc2tfYnBmX3NldF9nZXRfYnlwYXNzX3Byb3RfbWVtKHN0cnVjdCBzb2NrICpzaywKQEAgLTU5MTgsNyAmIzQzOzU5MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9zZXRzb2Nrb3B0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoYnBmX3NvY2tfY3JlYXRlX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLApAQCAtNTk0NCw3ICYjNDM7NTk0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfY3JlYXRlX2dldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfc29ja19vcHNfc2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLApAQCAtNTk3MCw3ICYjNDM7NTk3MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX3NldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIGludCBicGZfc29ja19vcHNfZ2V0X3N5bihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKmJwZl9zb2NrLApAQCAtNjA4MCw3ICYjNDM7NjA4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2dldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfMihicGZfc29ja19vcHNfY2JfZmxhZ3Nfc2V0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssCkBAIC02MTQ3LDcgJiM0Mzs2MTQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTYyMDAsNyAmIzQzOzYyMDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAjZW5kaWYKQEAgLTY2MDcsNyAmIzQzOzY2MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZmliX2xvb2t1cF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSwKLQkuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC02NjY3LDcgJiM0Mzs2NjY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2ZpYl9sb29rdXBfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNjg2NSw3ICYjNDM7Njg2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9pbl9wdXNoX2VuY2FwX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7CkBAIC02ODc1LDcgJiM0Mzs2ODc1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRQomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFCiB9OwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRikKQEAgLTY5MTksNyAmIzQzOzY5MTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRQomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFCiB9OwogCiBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzAwOCw3ICYjNDM7NzAwOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRQomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFCiB9OwogCiBCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LApAQCAtNzI0OSw3ICYjNDM7NzI0OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03MjY4LDcgJiM0Mzs3MjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKQEAgLTcyODcsNyAmIzQzOzcyODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzMxMSw3ICYjNDM7NzMxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03MzM1LDcgJiM0Mzs3MzM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKQEAgLTczNTksNyAmIzQzOzczNTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzM5Nyw3ICYjNDM7NzM5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0gewogCS5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzQyMSw3ICYjNDM7NzQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHsKIAkucmV0X3R5cGUgICAgICAgPSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsCiAJLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzQ0NSw3ICYjNDM7NzQ0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzQ2NSw3ICYjNDM7NzQ2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzQ4NCw3ICYjNDM7NzQ4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzUwMyw3ICYjNDM7NzUwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzgyMyw5ICYjNDM7NzgyMyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9jaGVja19zeW5jb29raWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLApAQCAtNzg5Miw5ICYjNDM7Nzg5Miw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTiwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncykKQEAgLTgwNDgsNyAmIzQzOzgwNDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19sb2FkX2hkcl9vcHRfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTgxMjYsNyAmIzQzOzgxMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19zdG9yZV9oZHJfb3B0X3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtODIyMSw3ICYjNDM7ODIyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0X3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1JET05MWSwKIAkuYXJnMV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCwKQEAgLTgyNTMsNyAmIzQzOzgyNTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2Nl9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9SRE9OTFksCiAJLmFyZzFfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMihicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2NCwgc3RydWN0IGlwaGRyICosIGlwaCwKQEAgLTExNzI2LDcgJiM0MzsxMTcyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlLApAQCAtMTE3NDQsNyAmIzQzOzExNzQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19yZWxhdGl2ZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKaW5kZXggYmU5N2Y2ODg3ZjBlN2YuLmE4MWZhYTcwOWRkNWJiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX21hc2tpbmcuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbWF5X2dvdG9fMS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tYXlfZ290b18yLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tZW1fc2l6ZV9yZWcuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbWV0YV9hY2Nlc3Muc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbW92c3guc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbXR1LnNrZWwuaCYjMzQ7CkBAIC0yMjEsNiAmIzQzOzIyMiw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9tYXBfcmV0X3ZhbCh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXBfcmV0X3ZhbCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9tYXNraW5nKHZvaWQpICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXNraW5nKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX21heV9nb3RvXzEodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21heV9nb3RvXzEpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMik7IH0KJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfbWVtX3NpemVfcmVnKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWVtX3NpemVfcmVnKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX21ldGFfYWNjZXNzKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21ldGFfYWNjZXNzKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX21vdnN4KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tb3ZzeCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9tdWwodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tdWwpOyB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmMKaW5kZXggZDBkNjVkNmQ0NTBjZjUuLmVmZTdiY2FlNzBmODVhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jCkBAIC02NCw3ICYjNDM7NjQsNyBAQCBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX25vX251bGxfY2hlY2ssIHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IGNoYXIgKgogfQogCiBTRUMoJiMzNDt0cF9idGYvY2dyb3VwX21rZGlyJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBwb2ludGVyIHR5cGUgU1RSVUNUIGNncm91cCBtdXN0IHBvaW50JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIGNncm91cCYjMzQ7KQogaW50IEJQRl9QUk9HKGNncnBfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlzdHJ1Y3QgY2dyb3VwICphY3F1aXJlZCwgKnN0YWNrX2NncnAgPSAoc3RydWN0IGNncm91cCAqKSZhbXA7cGF0aDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmMKaW5kZXggNWI0NDUzNzQ3YzIzMDguLjA5NTJkMWViZjBmMTdhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuYwpAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgaGVscGVyX3BhcmFtX25vdF9vayh2b2lkICpjdHgpCiAKIAlwID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOwogCS8qCi0JICogQW55IGhlbHBlciB3aXRoIEFSR19DT05TVF9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLAomIzQzOwkgKiBBbnkgaGVscGVyIHdpdGggQVJHX01FTV9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLAogCSAqIHRoZSBtb3N0IHBlcm1pc3NpdmUgY29uc3RyYWludAogCSAqLwogCWJwZl9jb3B5X2Zyb21fdXNlcihwLCAwLCAodm9pZCAqKTQyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYwppbmRleCA4OTQyYjU0NzgxMjkxNy4uNWM5OWIxZTY1MzJiZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMKQEAgLTUwLDcgJiM0Mzs1MCw3IEBAIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mCiB9CiAKIFNFQygmIzM0O3RwX2J0Zi90YXNrX25ld3Rhc2smIzM0OykKLV9fZmFpbHVyZSBfX21zZygmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgdGFza19zdHJ1Y3QgbXVzdCBwb2ludCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdCYjMzQ7KQogaW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICphY3F1aXJlZCwgKnN0YWNrX3Rhc2sgPSAoc3RydWN0IHRhc2tfc3RydWN0ICopJmFtcDtjbG9uZV9mbGFnczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYwppbmRleCBiYzAzOGFjMmRmOThlMi4uMWEyNzNlNDE2ZmVkZmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMKQEAgLTExOTUsNyAmIzQzOzExOTUsNyBAQCBsMF8lPToJcjEgPSByNjsJCQkJCVwKIAlyMyAmIzQzOz0gLTg7CQkJCQlcCiAJcjUgPSAwOwkJCQkJCVwKIAkvKiBUaGUgNHRoIGFyZ3VtZW50IG9mIGJwZl9za2Jfc3RvcmVfYnl0ZXMgaXMgZGVmaW5lZCBhcyBcCi0JICogQVJHX0NPTlNUX1NJWkUsIHNvIDAgaXMgbm90IGFsbG93ZWQuIFRoZSAmIzM5O3I0ICE9IDAmIzM5OyBcCiYjNDM7CSAqIEFSR19NRU1fU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICYjMzk7cjQgIT0gMCYjMzk7IFwKIAkgKiBpcyBwcm92aWRpbmcgdXMgdGhpcyBleGNsdXNpb24gb2YgemVybyBmcm9tIGluaXRpYWwgXAogCSAqIFswLCA3XSByYW5nZS4JCQkJXAogCSAqLwkJCQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYwppbmRleCBmMmM1NGU0ZDg5ZWJlZi4uMzQzZmMwOGQ5NzQ3OTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmMKQEAgLTg1LDcgJiM0Mzs4NSw3IEBAIF9fbmFrZWQgdm9pZCBzdGFja19iaXR3aXNlX2FuZF96ZXJvX2luY2x1ZGVkKHZvaWQpCiAJcjIgJiM0Mzs9IC02NDsJCQkJCVwKIAlyNCA9IDA7CQkJCQkJXAogCS8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcCi0JICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cCiYjNDM7CSAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlwKIAkgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgYXQgJmFtcDtmcFstNjRdIGlzXAogCSAqIG5vdCBpbml0aWFsaXplZC4JCQkJXAogCSAqLwkJCQkJCVwKQEAgLTI3OCw3ICYjNDM7Mjc4LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2ptcF9ub19taW5fY2hlY2sodm9pZCkKIAlyMiAmIzQzOz0gLTY0OwkJCQkJXAogCXI0ID0gMDsJCQkJCQlcCiAJLyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFwKLQkgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlwKJiM0MzsJICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXAogCSAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCAmYW1wO2ZwWy02NF0gaXNcCiAJICogbm90IGluaXRpYWxpemVkLgkJCQlcCiAJICovCQkJCQkJXApAQCAtNzc4LDcgJiM0Mzs3NzgsNyBAQCBfX25ha2VkIHZvaWQgdmFyaWFibGVfbWVtb3J5XzhfYnl0ZXNfbGVhayh2b2lkKQogCXIzICYjNDM7PSAxOwkJCQkJXAogCXI0ID0gMDsJCQkJCQlcCiAJLyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFwKLQkgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlwKJiM0MzsJICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXAogCSAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSByZWdpb24gWzEsIDY0XVwKIAkgKiBhdCAmYW1wO2ZwWy02NF0gaXMgbm90IGZ1bGx5IGluaXRpYWxpemVkLglcCiAJICovCQkJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMKaW5kZXggNmQyYTM4NTk3YzM0ZjQuLmM2NjAzYTExOGZkYzM5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMKQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIGwwXyU9OglleGl0OwkJCQkJCVwKIAogLyogQ2FsbCBhIGZ1bmN0aW9uIHRha2luZyBhIHBvaW50ZXIgYW5kIGEgc2l6ZSB3aGljaCBkb2VzbiYjMzk7dCBhbGxvdyB0aGUgc2l6ZSB0bwogICogYmUgemVybyAoaS5lLiBicGZfdHJhY2VfcHJpbnRrKCkgZGVjbGFyZXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZQotICogQVJHX0NPTlNUX1NJWkUsIG5vdCBBUkdfQ09OU1RfU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZQomIzQzOyAqIEFSR19NRU1fU0laRSwgbm90IEFSR19NRU1fU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZQogICogc2l6ZSBhbmQgZXhwZWN0IHRvIGZhaWwuCiAgKi8KIFNFQygmIzM0O3RyYWNlcG9pbnQmIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzhlZWUxMzUwMDI3MGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWVtX3NpemVfcmVnLmMKQEAgLTAsMCAmIzQzOzEsNjAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfa2Z1bmNzLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgaW5uZXJfbWFwIHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgaW50KTsKJiM0Mzt9IGlubmVyX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZX09GX01BUFMpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX2FycmF5KHZhbHVlcywgc3RydWN0IGlubmVyX21hcCk7CiYjNDM7fSBvdXRlcl9tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0OykgPSB7CiYjNDM7CS52YWx1ZXMgPSB7IFswXSA9ICZhbXA7aW5uZXJfbWFwIH0sCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBbiB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBtdXN0IGJlIHJlamVjdGVkIGFzIGEgX19udWxsYWJsZSBrZnVuYyBtZW0gYnVmZmVyICovCiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7dHlwZT1tYXBfcHRyIGV4cGVjdGVkPWZwJiMzNDspCiYjNDM7aW50IG1hcG9mbWFwc192YWx1ZV9hc19rZnVuY19tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIGRwdHI7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CXZvaWQgKmlubmVyOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtvdXRlcl9tYXAsICZhbXA7a2V5KTsKJiM0MzsJLyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovCiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfZnJvbV9za2Ioc2tiLCAwLCAmYW1wO2RwdHIpOwomIzQzOwkvKiBwYXNzIHRoZSB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBhcyB0aGUgc2NyYXRjaCBidWZmZXIgKi8KJiM0MzsJcCA9IGJwZl9keW5wdHJfc2xpY2UoJmFtcDtkcHRyLCAwLCBpbm5lciwgNCk7CiYjNDM7CWlmIChwKQomIzQzOwkJcmV0dXJuIHBbMF07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBtdXN0IGJlIHJlamVjdGVkIGFzIGEgUFRSX01BWUJFX05VTEwgaGVscGVyIG1lbSBidWZmZXIgKi8KJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDt0eXBlPW1hcF9wdHIgZXhwZWN0ZWQ9ZnAmIzM0OykKJiM0MztpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2hlbHBlcl9tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CXZvaWQgKmlubmVyOwomIzQzOwomIzQzOwlpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtvdXRlcl9tYXAsICZhbXA7a2V5KTsKJiM0MzsJLyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovCiYjNDM7CiYjNDM7CS8qIEBmcm9tIGlzIGEgbnVsbGFibGUgcmVhZC1vbmx5IG1lbSYjNDM7c2l6ZSBhcmc7IG91dGVyIHZhbHVlX3NpemUgaXMgNCAqLwomIzQzOwlyZXR1cm4gYnBmX2NzdW1fZGlmZihpbm5lciwgNCwgTlVMTCwgMCwgMCkgJiM0Mzsgc2tiLSZndDtsZW47CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKaW5kZXggMjg3MDczOGQ5M2Y3ZWMuLjhmMGM0NTQyMWY4OTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19udWxsKQogfQogCiBTRUMoJiMzNDtsc20ucy9pbm9kZV9nZXR4YXR0ciYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCB0YXNrX3N0cnVjdCBtdXN0IHBvaW50IHRvIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHRhc2tfc3RydWN0JiMzNDspCiBpbnQgQlBGX1BST0coZ2V0X3Rhc2tfZXhlX2ZpbGVfa2Z1bmNfZnApCiB7CiAJdTY0IHg7CkBAIC05OCw3ICYjNDM7OTgsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbnVsbCkKIH0KIAogU0VDKCYjMzQ7bHNtLnMvdGFza19hbGxvYyYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCB1bnRydXN0ZWRfcHRyXyYjMzQ7KQogaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2FyZ3VtZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHBhdGggKnJvb3Q7CkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrCiB9CiAKIFNFQygmIzM0O2xzbS5zL2ZpbGVfb3BlbiYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCB1bnRydXN0ZWRfcHRyXyYjMzQ7KQogaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2N1cnJlbnQpCiB7CiAJc3RydWN0IHBhdGggKnB3ZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmMKaW5kZXggMzAyZDcxMmUwZDdlZDIuLjhjZDYyNmUwNDU1MTU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYwpAQCAtMzEsNyAmIzQzOzMxLDcgQEAKIAl9LAogCS5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywKIAkucmVzdWx0ID0gUkVKRUNULAotCS5lcnJzdHIgPSAmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwxIG11c3QgcG9pbnQgdG8gc2NhbGFyJiMzNDssCiYjNDM7CS5lcnJzdHIgPSAmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDEmIzM0OywKIAkuZml4dXBfa2Z1bmNfYnRmX2lkID0gewogCQl7ICYjMzQ7YnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsMSYjMzQ7LCAyIH0sCiAJfSwKQEAgLTQ2LDcgJiM0Mzs0Niw3IEBACiAJfSwKIAkucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsCiAJLnJlc3VsdCA9IFJFSkVDVCwKLQkuZXJyc3RyID0gJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcblIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyJiMzNDssCiYjNDM7CS5lcnJzdHIgPSAmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxuUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsMiYjMzQ7LAogCS5maXh1cF9rZnVuY19idGZfaWQgPSB7CiAJCXsgJiMzNDticGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwyJiMzNDssIDIgfSwKIAl9LApAQCAtNjEsNyAmIzQzOzYxLDcgQEAKIAl9LAogCS5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywKIAkucmVzdWx0ID0gUkVKRUNULAotCS5lcnJzdHIgPSAmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwzIG11c3QgcG9pbnQgdG8gc2NhbGFyJiMzNDssCiYjNDM7CS5lcnJzdHIgPSAmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDMmIzM0OywKIAkuZml4dXBfa2Z1bmNfYnRmX2lkID0gewogCQl7ICYjMzQ7YnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsMyYjMzQ7LCAyIH0sCiAJfSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5NTcKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBob3cga2Z1bmMgYXJndW1lbnRzIGFyZSBiZWluZyB2ZXJpZmllZCwgZXNwZWNpYWxseSB3aGVuIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIGBBUkdfTUVNX1NJWkVgIGFuZCBgQVJHX01FTV9TSVpFX09SX1pFUk9gLiBJbnRlcmVzdGluZy4gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYE1BWF9CUEZfRlVOQ19BUkdTYCBhbmQgYE1BWF9CUEZfRlVOQ19SRUdfQVJHU2AsIHdoaWNoIHN1Z2dlc3RzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFyZ3VtZW50IGhhbmRsaW5nIGFwcHJvYWNoLiBUaGV5JiMzOTt2ZSBhbHNvIHJlZmFjdG9yZWQgYGNoZWNrX2Z1bmNfYXJnYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEFsc28gdGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb246IGBicGZfZnJlZV9rZnVuY19kZXNjX3RhYmAsIHdoaWNoIGltcGxpZXMgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCBmcmVlaW5nIGtmdW5jIGRlc2NyaXB0b3JzLiBQbHVzLCB0aGV54oCZcmUgbW9kaWZ5aW5nIGBnZW5fa2Z1bmNfYXJnX3Byb3RvYCB0byBnZW5lcmF0ZSBgYnBmX2Z1bmNfcHJvdG9gIGZvciB0aGVzZSBrZnVuY3MuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gU2luY2UgdGhpcyBpcyB0b3VjaGluZyB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZSwgSSYjMzk7bSBjb25maWRlbnQgaXQmIzM5O3MgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZGlyZWN0bHkgZnVuY3Rpb25hbC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIHB1dHRpbmcgdGhyb3VnaCBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfYXJnYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGdlbl9rZnVuY19hcmdfcHJvdG9gLCBhbmQgYGdldF9rZnVuY19hcmdfdHlwZWAuIFRoZXkmIzM5O3JlIHRoZSBjb3JlIG9mIHRoZSBuZXcgdmVyaWZpY2F0aW9uIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBgS2NvbmZpZ2Agb3B0aW9ucy4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGlzIGVuYWJsZWQuCgpMYXN0bHksIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZWFjaCBtb2RpZmllZCBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZHxib29sKVxccyYjNDM7KGJwZl9hZGRfa2Z1bmNfY2FsbHxjaGVja19rZnVuY19hcmdzfGNoZWNrX2tmdW5jX2NhbGx8Y2hlY2tfZnVuY19hcmd8Y2hlY2tfaGVscGVyX2NhbGx8Z2VuX2tmdW5jX2FyZ19wcm90b3xnZXRfa2Z1bmNfYXJnX3R5cGUpXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzI2PXZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3Mzc6aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzk1OQoJCQkJCQkJb3V0cHV0OiA5OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNoZWNraW5nIGBjaGVja19rZnVuY19hcmdzYCBhbmQgUmVsYXRlZCBDb2RlKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgc2VlbXMgdG8gYmUgZm9jdXNlZCBhcm91bmQgZXZhbHVhdGluZyBzb21lIGZ1bmN0aW9uIGFyZ3VtZW50cywgcG90ZW50aWFsbHkgd2l0aGluIGEga2VybmVsIGNvbnRleHQsIGdpdmVuIHRoZSBtZW50aW9uIG9mIGBrZnVuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29kZSBhbmQgcGlucG9pbnQgdGhlIGBjaGVja19rZnVuY19hcmdzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCBob3cgaXQgdmFsaWRhdGVzIHRoZSBhcmd1bWVudHMsIGFuZCB3aGF0IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGl0IGhhbmRsZXMuIEFyZSB0aGVyZSBhbnkgY29ybmVyIGNhc2VzIHRoYXQgbWlnaHQgYmUgbWlzc2VkPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMg4oCTIGFueSBmdW5jdGlvbnMgaXQgY2FsbHMsIGFueSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kIGFueSBlcnJvciBjb2RlcyBpdCByZXR1cm5zLgoKQmV5b25kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgJiMzNDtvdGhlcnMmIzM0Oy4gV2hhdCBvdGhlciBmdW5jdGlvbnMgb3IgbW9kdWxlcyBhcmUgcmVsYXRlZCB0byB0aGlzIGFyZ3VtZW50IHZhbGlkYXRpb24/IElzIHRoZXJlIGEgYnJvYWRlciBmcmFtZXdvcmsgb3IgZGVzaWduIHBhdHRlcm4gYXQgcGxheT8gQXJlIHRoZXJlIGFueSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgdGhhdCBzdG9yZSBtZXRhZGF0YSBhYm91dCB0aGUgYXJndW1lbnRzPyBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY29uc3VtZSB0aGUgb3V0cHV0IG9mIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgYXJndW1lbnQgaGFuZGxpbmcsIHZhbGlkYXRpb24gb3IgcGFyc2luZy4gSSBuZWVkIHRvIGdldCBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIHN5c3RlbS4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBBcmUgdGhlcmUgYW55IHdheXMgdG8gYnlwYXNzIHRoZSBjaGVja3MsIGNhdXNlIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWFsaWNpb3VzbHkgY3JhZnRlZCBpbnB1dHM/IE15IG1pbmQgaXMgc3RhcnRpbmcgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUsIHRoZSBtb3JlIHRlc3Qgc2NlbmFyaW9zIEkmIzM5O2xsIG5lZWQgdG8gZGVmaW5lIHRvIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGV2ZXJ5dGhpbmcgcHJvcGVybHkuIEkgd2lsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBzZWN1cml0eSBmbGF3cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpY1xccyYjNDM7KT8oaW50fHZvaWR8Ym9vbClcXHMmIzQzOyhicGZfYWRkX2tmdW5jX2NhbGx8Y2hlY2tfa2Z1bmNfYXJnc3xjaGVja19rZnVuY19jYWxsfGNoZWNrX2Z1bmNfYXJnfGNoZWNrX2hlbHBlcl9jYWxsfGdlbl9rZnVuY19hcmdfcHJvdG98Z2V0X2tmdW5jX2FyZ190eXBlKVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjY1OT1zdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjcyMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNzIyOnN0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI3MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyNj12b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczNi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNzM3OmludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczOC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgzNTA9c3RhdGljIGludCBwcm9jZXNzX21hcF9wdHJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgzODctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM4ODpzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM4OS1cdFx0XHQgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyODc9c3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMwNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDMwNTpzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDMwNi1cdFx0XHQgICAgIGludCAqaW5zbl9pZHhfcClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzOTk9Z2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1MTI6c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUxMy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMDI9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTg6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExOS1cdFx0XHQgICAgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzAyOT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDMwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMDMxOnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwMzItXHRcdFx0ICAgIGludCAqaW5zbl9pZHhfcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTMzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDkzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBSZWZhY3RvcmluZyBmb3IgRW5oYW5jZWQgS2Z1bmMgYW5kIEhlbHBlciBBcmd1bWVudCBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBCUEYgdmVyaWZpZXIgcmVmYWN0b3JpbmcuIFRoZSBmdW5jdGlvbnMgbGlzdGVkIOKAkyBgYnBmX2FkZF9rZnVuY19jYWxsYCwgYGdlbl9rZnVuY19hcmdfcHJvdG9gLCBgY2hlY2tfZnVuY19hcmdgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIOKAkyBhcmUgdGhlIGNydWNpYWwgcGllY2VzLCBhbmQgdGhleSBuZWVkIGEgY2xvc2UgbG9vay4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcywgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBvbmUgdG8gY29uc2lkZXIuIE5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIGFib3V0IHVuaWZpY2F0aW9uLiBJdCYjMzk7cyBhZGRpbmcgYW5ub3RhdGlvbnMsIHJlbmFtaW5nIHNvbWUgYXJndW1lbnQgc2l6ZSBjb25zdGFudHMsIGJ1bXBpbmcgYE1BWF9CUEZfRlVOQ19BUkdTYCB0byAxMiwgYW5kIGdlbmVyYWxseSBhZGp1c3RpbmcgaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGJvdGgga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudHMuIEl0IHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGJwZl9hZGRfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2FyZ2AsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBjaGVja19rZnVuY19jYWxsYCBhcmUgY2VudHJhbCB0byB0aGlzIHVuaWZpY2F0aW9uLiBJdCYjMzk7cyBnb29kIHRvIHNlZSBgYnBmX2Z1bmNfcHJvdG9gIGdldHRpbmcgdXNlZC4KClRoaXMgaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGNoYW5nZSBzZXQgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb24gc3ltYm9scyBhcmUgc3RhdGljLCBzaW5jZSBJIGFtIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb24gc3ltYm9scy4gYGdldF9rZnVuY19hcmdfdHlwZWAsIGBnZW5fa2Z1bmNfYXJnX3Byb3RvYCwgYGNoZWNrX2Z1bmNfYXJnYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIGFyZSBhbGwgc3RhdGljLiBMZXQmIzM5O3Mgc2VlIGFib3V0IGlubGluaW5nIHNpbmNlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGFyZSBwcmVmZXJhYmxlLgoKYGJwZl9hZGRfa2Z1bmNfY2FsbGAgaXMgbm90IHN0YXRpYy4gYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfZnVuY19hcmdgLCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBhbGwgc3RhdGljIGJ1dCBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBvZiB0aGVpciBzaXplLgoKSSYjMzk7bGwgY2hlY2sgYGJwZl9jaGVja2AsIHRoZSBtYWluIGVudHJ5IHBvaW50LCBidXQgaXQmIzM5O3MgdG9vIGdlbmVyaWMuIEkmIzM5O2xsIGluY2x1ZGUgYGJwZl9hZGRfa2Z1bmNfY2FsbGAsIGBjaGVja19oZWxwZXJfY2FsbGAsIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgYXMgcHJvbWlzaW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBmaW5kIHNvbWUgKm5vbiotc3RhdGljIGZ1bmN0aW9ucy4gYGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiYCBpcyBvbmUuIEFoLCBoZXJlIGFyZSBhIGZldyBtb3JlOiBgYnBmX3dxX2luaXRgLCBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxgLCBhbmQgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYC4gVGhvc2UgbG9vayBnb29kIQoKU28sIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyBgYnBmX2FkZF9rZnVuY19jYWxsYCwgYGJwZl93cV9pbml0YCwgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsYCwgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLCBhc3N1bWluZyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZCwgd2hpY2ggZ2l2ZW4gdGhlaXIgc2l6ZSwgaXMgYSBzYWZlIGJldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0zMzg4PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rocm93KHU2NCBjb29raWUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzQwNi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjM0MDc6X19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9icGYvaGVscGVycy5jLTM0MDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTE1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gZGlyZWN0bHkgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgYSBCUEYgcHJvZ3JhbSB0cmlnZ2VycyBhIHNpZ25hbCBkZWxpdmVyeSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHRhc2tfd29yayBtZWNoYW5pc20uIFRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gaGVscGVycy5jIHNob3VsZCB0ZWxsIG1lIGlmIGl0IHVzZXMgdGFza193b3JrIHNjaGVkdWxpbmcgaW4ga2VybmVsIHNwYWNlIG9yIGhvdyB0byBkZXRlcm1pbmUgdGhlIHNpZ25hbCYjMzk7cyBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBudWFuY2VzIGluIHRoZSBzaWduYWwgZGVsaXZlcnkgcHJvY2VzcywgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBhbmQgb2YgY291cnNlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQga2VybmVsJiMzOTtzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIGxvY2sgdXNhZ2UsIGFuZCBhbnkgdW51c3VhbCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCByZWxldmFudCB0YXNrX3dvcmsgZG9jdW1lbnRhdGlvbiBhbmQgcmVsYXRlZCBCUEYgaGVscGVycyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEhvcGVmdWxseSwgdGhpcyByb3V0aW5lIGNhbiBleHBsYWluIHdoZXJlIHRoZSBpc3N1ZSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz00NTk2PXN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjUwLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjUyLVx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU4NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYCBvcGVyYXRlcywgYW5kIHdoZXJlIGl0IHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHRhc2sgd29yayBtZWNoYW5pc207IHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIHJlc3VtaW5nIGxvZ2ljIGlzIGtleS4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2VzPyBBbnkgY2xldmVyIGxvY2tpbmcgb3IgYXRvbWljcyBpbiBwbGF5PyBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byByZXN1bWluZyBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB0aGlzIHBhdGguIFVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIHNwZWNpZmljIGRlYnVnZ2luZyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDY1MT1fX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2OC0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2Njk6X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3MC1cdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIwMjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoZXNlIGNvZGUgY2hhbmdlcywgaXQmIzM5O3MgY2xlYXIgdGhlIGFkanVzdG1lbnRzIHRvIGBicGZfd3FfaW5pdGAsIGBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbGAsIGFuZCBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWVgIGFyZSB0cml2aWFsIHJlZmFjdG9yaW5ncy4gUmVhbGx5LCBpdCYjMzk7cyBqdXN0IGEgcmVuYW1lIG9mIHRob3NlIG1hcCBwb2ludGVycy4gVGhlIGNvcmUgbG9naWMgb2YgdGhvc2UgZnVuY3Rpb25zIGlzIHVudG91Y2hlZC4gVGhlcmVmb3JlLCB0aGUgc2lnbmlmaWNhbnQgc2hpZnQgaGFzIHRvIGJlIGluIHRoZSB2ZXJpZmllci4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aG9zZSB2ZXJpZmllciBmdW5jdGlvbnM6IGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2FyZ2AsIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuCgpOb3csIGxldCBtZSBjb25maXJtIGlmIGBjaGVja19oZWxwZXJfY2FsbGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gWWVwLCB0aGV5IGFyZS4gVGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgSSBjYW4gc2VlIHRoYXQgdGhleSBhcmUgbWFzc2l2ZSBmdW5jdGlvbnMuIE5vIGNoYW5jZSB0aGV5JiMzOTtyZSBpbmxpbmVkLgoKSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gaW5jbHVkZSBgYnBmX2FkZF9rZnVuY19jYWxsYCBhcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEFuZCBhbHNvIGxldCYjMzk7cyBsb29rIGF0IGBicGZfZnJlZV9rZnVuY19kZXNjX3RhYmAuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgYGJwZl9hZGRfa2Z1bmNfY2FsbGAgZnVuY3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnBmX2FkZF9rZnVuY19jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzI2PXZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3Mzc6aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc3Vic3RhbnRpYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgY29yZS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIERlZmluaXRlbHksIEkmIzM5O2xsIG5lZWQgdG8gaW5jbHVkZSBgYnBmX2FkZF9rZnVuY19jYWxsYCBhbmQgYGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiYCwgdGhvc2UgYXJlIGNyaXRpY2FsLiBBbHNvLCBJIGhhdmUgdG8gaW5jbHVkZSBgY2hlY2tfaGVscGVyX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAsIHNpbmNlIHRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBnb3QgdGhlIHJlZmFjdG9yaW5nLgoKTXkgZXhwZXJ0IGV5ZSB0ZWxscyBtZSB0aGlzIHVuaWZpY2F0aW9uIG9mIGtmdW5jIGFuZCBoZWxwZXIgYXJndW1lbnQgdmVyaWZpY2F0aW9uIGhhcyBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMsIHRoZSByZW5hbWluZyBvZiBgQVJHX0NPTlNUX1NJWkVgIHRvIGBBUkdfTUVNX1NJWkVgLCBhbmQgdGhlIHJldmlzZWQgYGJwZl9mdW5jX3Byb3RvYCBnZW5lcmF0aW9uIGFuZCB1c2FnZSBmb3Iga2Z1bmNzIOKAkyB0aGVzZSBhcmUgYWxsIGluZGljYXRvcnMgb2YgYSBzaGlmdCBpbiB0aGUgZnVuZGFtZW50YWwgQlBGIHZlcmlmaWVyIGxvZ2ljLiBJJiMzOTtkIGFyZ3VlIHRoYXQgZ2l2ZW4gdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhdGNoIEkgc2hvdWxkIGhhdmUgaXQgZnV6emVkIGltbWVkaWF0ZWx5IHRvIGd1YXJhbnRlZSB0aGF0IG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4KCkkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGUgY29uZmlncyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgcGxheSBpbnRvIHRoaXMuIEl0JiMzOTtzIG9idmlvdXNseSBnb2luZyB0byBiZSB0cmlnZ2VyZWQgYnkgYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyB0aGUgbWFpbiBvbmUgZm9yIHRoZSBCUEYgdmVyaWZpZXIsIG5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBJIHdvbmRlciwgaXMgYENPTkZJR19ERUJVR19JTkZPX0JURmAgcmVsZXZhbnQgdG8gdGhlIGtmdW5jIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMzkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBCUEZfU1lTQ0FMTGAgaXMgY29uZmlndXJlZC4gVGhhdCBzdWdnZXN0cyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBpdCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gS2NvbmZpZyBpcyB0aGUgaGVhcnQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNvIGlmIHNvbWV0aGluZyBpcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwsIGl0JiMzOTtzICpnb3R0YSogYmUgZGVzY3JpYmVkIHRoZXJlIHNvbWV3aGVyZS4gSSYjMzk7bGwgc2VhcmNoIGZvciAmIzM0O0JQRl9TWVNDQUxMJiMzNDsgZGlyZWN0bHkuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBleHBsYW5hdGlvbiBvZiB3aGF0IGVuYWJsaW5nIGl0IGVudGFpbHMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBhdCBsZWFzdCB0ZWxsIG1lIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGlmIG5lY2Vzc2FyeS4gTGV0JiMzOTtzIHNlZSB3aGF0IEtjb25maWcgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjMzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uZmlnIFZlcmlmaWNhdGlvbiBhbmQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgQlBGX1NZU0NBTExgIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTWFraW5nIHN1cmUgdGhhdCYjMzk7cyBzZXQgaXMgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIHBlcmZvcm0gYSBxdWljayBzd2VlcCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eS4KCkFuZCwgb2YgY291cnNlLCB3aXRoIGtmdW5jcywgYERFQlVHX0lORk9fQlRGYCBpcyBhbG1vc3QgYWx3YXlzIGEgcHJlcmVxdWlzaXRlLCBpc24mIzM5O3QgaXQ/IEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHRoYXQmIzM5O3MgZW5hYmxlZC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGV2YW50IHNldHRpbmdzLiBObyBwb2ludCBpbiBtYWtpbmcgYXNzdW1wdGlvbnMgaGVyZSwgSSBuZWVkIHRvIGhhdmUgY29uY3JldGUgZXZpZGVuY2Ugb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA4NAoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWxpemluZyB0aGUgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBwbGFuLiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZXNlIGFyZSBrZXkgZm9yIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuCgpUaGUgY29yZSBvZiB0aGlzIGZ1enppbmcgZWZmb3J0IGlzIHRhcmdldGVkIGF0IHRoYXQgcmVjZW50IHJlZmFjdG9yLiBUaGUgcGF0Y2ggdW5pZmllcyBrZnVuYyBhbmQgaGVscGVyIGFyZ3VtZW50IHZlcmlmaWNhdGlvbiwgYW5kIHRoYXQmIzM5O3MgYSAqbWFqb3IqIGNoYW5nZS4gR2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgX19jb25zdF9tYXBgIGFuZCBgX19tYXBgIGFubm90YXRpb25zLCB0aGUgcmVuYW1pbmcgb2YgYEFSR19DT05TVF9TSVpFYCB0byBgQVJHX01FTV9TSVpFYCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGhvdyBgYnBmX2Z1bmNfcHJvdG9gIGlzIGdlbmVyYXRlZCwgSSAqa25vdyogdGhpcyB3YXJyYW50cyBmb2N1c2VkIGF0dGVudGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50IHZhbGlkYXRpb24sIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hlcmUgZnV6emluZyBuZWVkcyB0byBiZSBzaGFycC4KClRoZXJlZm9yZSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWJgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBjaGVja19mdW5jX2FyZ2AuIFRob3NlIHN5bWJvbHMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgYmVjYXVzZSB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24uCgpBbmQgZmluYWxseSwgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuIFRoZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIGlzIGhpZ2ggZW5vdWdoIHRoYXQgaWdub3JpbmcgdGhpcyB3b3VsZCBiZSBuZWdsaWdlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9hZGRfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfZnJlZV9rZnVuY19kZXNjX3RhYiYjMzQ7LAogICAgJiMzNDtjaGVja19oZWxwZXJfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfZnVuY19hcmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdW5pZnkga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24uIEl0IGludHJvZHVjZXMgYF9fY29uc3RfbWFwYCBhbmQgYF9fbWFwYCBhbm5vdGF0aW9ucyBmb3Iga2Z1bmNzLCByZW5hbWVzIGBBUkdfQ09OU1RfU0laRWAgdG8gYEFSR19NRU1fU0laRWAsIGFuZCBtb2RpZmllcyBob3cgYGJwZl9mdW5jX3Byb3RvYCBpcyBnZW5lcmF0ZWQgYW5kIHVzZWQgZm9yIGtmdW5jcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9hZGRfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfZnJlZV9rZnVuY19kZXNjX3RhYiYjMzQ7LAogICAgJiMzNDtjaGVja19oZWxwZXJfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfZnVuY19hcmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdW5pZnkga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24uIEl0IGludHJvZHVjZXMgYF9fY29uc3RfbWFwYCBhbmQgYF9fbWFwYCBhbm5vdGF0aW9ucyBmb3Iga2Z1bmNzLCByZW5hbWVzIGBBUkdfQ09OU1RfU0laRWAgdG8gYEFSR19NRU1fU0laRWAsIGFuZCBtb2RpZmllcyBob3cgYGJwZl9mdW5jX3Byb3RvYCBpcyBnZW5lcmF0ZWQgYW5kIHVzZWQgZm9yIGtmdW5jcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzM6NTkuMDU1NzAwMjY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzOTgwMTc4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FkZF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfZnJlZV9rZnVuY19kZXNjX3RhYlwiLFxuICAgIFwiY2hlY2tfaGVscGVyX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2FyZ3NcIixcbiAgICBcImNoZWNrX2Z1bmNfYXJnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdW5pZnkga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24uIEl0IGludHJvZHVjZXMgYF9fY29uc3RfbWFwYCBhbmQgYF9fbWFwYCBhbm5vdGF0aW9ucyBmb3Iga2Z1bmNzLCByZW5hbWVzIGBBUkdfQ09OU1RfU0laRWAgdG8gYEFSR19NRU1fU0laRWAsIGFuZCBtb2RpZmllcyBob3cgYGJwZl9mdW5jX3Byb3RvYCBpcyBnZW5lcmF0ZWQgYW5kIHVzZWQgZm9yIGtmdW5jcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzozMzo1OS4wNTU3MDY1MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTA1NTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY1NTJjOTFkNzk1Zjg5ZWQwMjE1NjhlN2EyNjVmMzdlZTNkNjhhYmNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6MzM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5pbmRleCBjODAxYTMzMGFlY2UwOC4uY2JkZTg2ZDA4MmNjZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5AQCAtMjUwLDYgKzI1MCwzNCBAQCBPcjo6XFxuICAgICAgICAgICAgICAgICAuLi5cXG4gICAgICAgICB9XFxuIFxcbisyLjMuNyBfX2NvbnN0X21hcCBhbmQgX19tYXAgQW5ub3RhdGlvbnNcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitUaGVzZSBhbm5vdGF0aW9ucyBhcmUgdXNlZCBmb3IgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgYXJndW1lbnRzIGFuZCBkaXN0aW5ndWlzaCBhXFxuK3ZlcmlmaWVyLWtub3duIG1hcCBmcm9tIGFuIG9wYXF1ZSBvbmUuXFxuK1xcbitgYF9fY29uc3RfbWFwYGAgaW5kaWNhdGVzIGEgbWFwIG11c3QgYmUga25vd24gYXQgdGhlIHZlcmlmaWNhdGlvbiB0aW1lLCBpLmUuIGFcXG4rY29uY3JldGUgbWFwIGZkIHRoZSBCUEYgcHJvZ3JhbSByZWZlcmVuY2VzIGRpcmVjdGx5LlxcbitcXG4rQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuK1xcbisgICAgICAgIF9fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuKyAgICAgICAge1xcbisgICAgICAgICAgICAgICAgLi4uXFxuKyAgICAgICAgfVxcbitcXG4rYGBfX21hcGBgIGluZGljYXRlcyBhbiBvcGFxdWUgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgdGhhdCBtYXkgYmUgcmVzb2x2ZWRcXG4rYXQgcnVuIHRpbWUuIFRoZSBhcmd1bWVudCBtYXkgdGFrZSBlaXRoZXIgYSBtYXAgZmQgb3IgYSBgYFBUUl9UT19CVEZfSURgYFxcbitgYHN0cnVjdCBicGZfbWFwYGAgcG9pbnRlci5cXG4rXFxuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxcbitcXG4rICAgICAgICBfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCAuLi4pXFxuKyAgICAgICAge1xcbisgICAgICAgICAgICAgICAgLi4uXFxuKyAgICAgICAgfVxcbitcXG4gLi4gX0JQRl9rZnVuY19ub2RlZjpcXG4gXFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cXG5AQCAtNDExLDcgKzQzOSw3IEBAIEV4YW1wbGUgZGVjbGFyYXRpb246XFxuIC4uIGNvZGUtYmxvY2s6OiBjXFxuIFxcbiBcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCkgeyAuLi4gfVxcbiBcXG4gRXhhbXBsZSB1c2FnZSBpbiBCUEYgcHJvZ3JhbTpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCBlMDY2ZjQ0YTljMDU4MC4uZWYxNzIxNDNiOWM5YTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtNzQ4LDYgKzc0OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX21hcF9vZmZsb2FkX29wcztcXG4gZW51bSBicGZfdHlwZV9mbGFnIHtcXG4gXFx0LyogUFRSIG1heSBiZSBOVUxMLiAqL1xcbiBcXHRQVFJfTUFZQkVfTlVMTFxcdFxcdD0gQklUKDAgKyBCUEZfQkFTRV9UWVBFX0JJVFMpLFxcbitcXHRTQ0FMQVJfTUFZQkVfWkVST1xcdD0gUFRSX01BWUJFX05VTEwsXFxuIFxcbiBcXHQvKiBNRU0gaXMgcmVhZC1vbmx5LiBXaGVuIGFwcGxpZWQgb24gYnBmX2FyZywgaXQgaW5kaWNhdGVzIHRoZSBhcmcgaXNcXG4gXFx0ICogY29tcGF0aWJsZSB3aXRoIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlIG1lbW9yeS5cXG5AQCAtODg4LDggKzg4OSw3IEBAIGVudW0gYnBmX2FyZ190eXBlIHtcXG4gXFx0QVJHX1BUUl9UT19NRU0sXFx0XFx0LyogcG9pbnRlciB0byB2YWxpZCBtZW1vcnkgKHN0YWNrLCBwYWNrZXQsIG1hcCB2YWx1ZSkgKi9cXG4gXFx0QVJHX1BUUl9UT19BUkVOQSxcXG4gXFxuLVxcdEFSR19DT05TVF9TSVpFLFxcdFxcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xcbi1cXHRBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSBvciAwICovXFxuK1xcdEFSR19NRU1fU0laRSxcXHRcXHQvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi9cXG4gXFxuIFxcdEFSR19QVFJfVE9fQ1RYLFxcdFxcdC8qIHBvaW50ZXIgdG8gY29udGV4dCAqL1xcbiBcXHRBUkdfQU5ZVEhJTkcsXFx0XFx0LyogYW55IChpbml0aWFsaXplZCkgYXJndW1lbnQgaXMgb2sgKi9cXG5AQCAtOTIyLDYgKzkyMiw4IEBAIGVudW0gYnBmX2FyZ190eXBlIHtcXG4gXFx0QVJHX1BUUl9UT19VTklOSVRfTUVNXFx0XFx0PSBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgQVJHX1BUUl9UT19NRU0sXFxuIFxcdC8qIFBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IG9mIHNpemUga25vd24gYXQgY29tcGlsZSB0aW1lLiAqL1xcbiBcXHRBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNXFx0PSBNRU1fRklYRURfU0laRSB8IEFSR19QVFJfVE9fTUVNLFxcbitcXHQvKiBOdW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnksIG9yIDAuICovXFxuK1xcdEFSR19NRU1fU0laRV9PUl9aRVJPXFx0XFx0PSBTQ0FMQVJfTUFZQkVfWkVSTyB8IEFSR19NRU1fU0laRSxcXG4gXFxuIFxcdC8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBlbnRyeS4gSXRzIHB1cnBvc2UgaXMgdG8gZW5zdXJlIHRoZSBlbnVtIGlzXFxuIFxcdCAqIHdpZGUgZW5vdWdoIHRvIGhvbGQgdGhlIGhpZ2hlciBiaXRzIHJlc2VydmVkIGZvciBicGZfdHlwZV9mbGFnLlxcbkBAIC05NjAsNiArOTYyLDIxIEBAIGVudW0gYnBmX3JldHVybl90eXBlIHtcXG4gfTtcXG4gc3RhdGljX2Fzc2VydChfX0JQRl9SRVRfVFlQRV9NQVggXFx1MDAzYz0gQlBGX0JBU0VfVFlQRV9MSU1JVCk7XFxuIFxcbisvKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLlxcbisgKiBTZWUgaW5jbHVkZS90cmFjZS9icGZfcHJvYmUuaFxcbisgKlxcbisgKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvblxcbisgKiBvciBhIGtmdW5jIGNhbiBoYXZlLiBBcmdzIDEtNSBhcmUgcGFzc2VkIGluIHJlZ2lzdGVycywgYXJncyA2LTEyIHZpYVxcbisgKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWRcXG4rICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuXFxuKyAqL1xcbisjZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyXFxuK1xcbisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVyc1xcbisgKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS5cXG4rICovXFxuKyNkZWZpbmUgTUFYX0JQRl9GVU5DX1JFR19BUkdTIDVcXG4rXFxuIC8qIGVCUEYgZnVuY3Rpb24gcHJvdG90eXBlIHVzZWQgYnkgdmVyaWZpZXIgdG8gYWxsb3cgQlBGX0NBTExzIGZyb20gZUJQRiBwcm9ncmFtc1xcbiAgKiB0byBpbi1rZXJuZWwgaGVscGVyIGZ1bmN0aW9ucyBhbmQgZm9yIGFkanVzdGluZyBpbW0zMiBmaWVsZCBpbiBCUEZfQ0FMTFxcbiAgKiBpbnN0cnVjdGlvbnMgYWZ0ZXIgdmVyaWZ5aW5nXFxuQEAgLTk4NCw3ICsxMDAxLDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcXG4gXFx0XFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnNF90eXBlO1xcbiBcXHRcXHRcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmc1X3R5cGU7XFxuIFxcdFxcdH07XFxuLVxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlWzVdO1xcbitcXHRcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZVtNQVhfQlBGX0ZVTkNfQVJHU107XFxuIFxcdH07XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG5AQCAtOTk0LDcgKzEwMTEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8ge1xcbiBcXHRcXHRcXHR1MzIgKmFyZzRfYnRmX2lkO1xcbiBcXHRcXHRcXHR1MzIgKmFyZzVfYnRmX2lkO1xcbiBcXHRcXHR9O1xcbi1cXHRcXHR1MzIgKmFyZ19idGZfaWRbNV07XFxuK1xcdFxcdHUzMiAqYXJnX2J0Zl9pZFtNQVhfQlBGX0ZVTkNfQVJHU107XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHNpemVfdCBhcmcxX3NpemU7XFxuIFxcdFxcdFxcdHNpemVfdCBhcmcyX3NpemU7XFxuQEAgLTEwMDIsNyArMTAxOSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XFxuIFxcdFxcdFxcdHNpemVfdCBhcmc0X3NpemU7XFxuIFxcdFxcdFxcdHNpemVfdCBhcmc1X3NpemU7XFxuIFxcdFxcdH07XFxuLVxcdFxcdHNpemVfdCBhcmdfc2l6ZVs1XTtcXG4rXFx0XFx0c2l6ZV90IGFyZ19zaXplW01BWF9CUEZfRlVOQ19BUkdTXTtcXG4gXFx0fTtcXG4gXFx0aW50ICpyZXRfYnRmX2lkOyAvKiByZXR1cm4gdmFsdWUgYnRmX2lkICovXFxuIFxcdGJvb2wgKCphbGxvd2VkKShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbkBAIC0xMTkyLDIxICsxMjA5LDYgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQge1xcbiBcXHR1MzJcXHRcXHRcXHRqaXRlZF9sZW47XFxuIH07XFxuIFxcbi0vKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLlxcbi0gKiBTZWUgaW5jbHVkZS90cmFjZS9icGZfcHJvYmUuaFxcbi0gKlxcbi0gKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvblxcbi0gKiBvciBhIGtmdW5jIGNhbiBoYXZlLiBBcmdzIDEtNSBhcmUgcGFzc2VkIGluIHJlZ2lzdGVycywgYXJncyA2LTEyIHZpYVxcbi0gKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWRcXG4tICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuXFxuLSAqL1xcbi0jZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyXFxuLVxcbi0vKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVyc1xcbi0gKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS5cXG4tICovXFxuLSNkZWZpbmUgTUFYX0JQRl9GVU5DX1JFR19BUkdTIDVcXG4tXFxuIC8qIFRoZSBhcmd1bWVudCBpcyBhIHN0cnVjdHVyZSBvciBhIHVuaW9uLiAqL1xcbiAjZGVmaW5lIEJURl9GTU9ERUxfU1RSVUNUX0FSR1xcdFxcdEJJVCgwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCA2ODJjMmNkM2I4NDQzMC4uMDY1NTE2NGU2YWYyZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTUsNyArMTUsNyBAQFxcbiAgKiBlbnN1cmVzIHRoYXQgdW1heF92YWx1ZSArIChpbnQpb2ZmICsgKGludClzaXplIGNhbm5vdCBvdmVyZmxvdyBhIHU2NC5cXG4gICovXFxuICNkZWZpbmUgQlBGX01BWF9WQVJfT0ZGXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjkpXFxuLS8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19DT05TVF9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlc1xcbisvKiBNYXhpbXVtIHZhcmlhYmxlIHNpemUgcGVybWl0dGVkIGZvciBBUkdfTUVNX1NJWkVbX09SX1pFUk9dLiAgVGhpcyBlbnN1cmVzXFxuICAqIHRoYXQgY29udmVydGluZyB1bWF4X3ZhbHVlIHRvIGludCBjYW5ub3Qgb3ZlcmZsb3cuXFxuICAqL1xcbiAjZGVmaW5lIEJQRl9NQVhfVkFSX1NJWlxcdCgxIFxcdTAwM2NcXHUwMDNjIDI5KVxcbkBAIC0xMTg4LDYgKzExODgsNyBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4gXFx0XFx0XFx0ICAgIHUzMiBidGZfaWQsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pO1xcbiB2b2lkIGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoc3RydWN0IGJwZl9rZnVuY19idGZfdGFiICp0YWIpO1xcbit2b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYik7XFxuIFxcbiBpbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcXG4gXFxuQEAgLTEzMDUsOCArMTMwNiwxOSBAQCBzdGF0aWMgaW5saW5lIHUzMiB0eXBlX2ZsYWcodTMyIHR5cGUpXFxuIC8qIG9ubHkgdXNlIGFmdGVyIGNoZWNrX2F0dGFjaF9idGZfaWQoKSAqL1xcbiBzdGF0aWMgaW5saW5lIGVudW0gYnBmX3Byb2dfdHlwZSByZXNvbHZlX3Byb2dfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIHtcXG4tXFx0cmV0dXJuIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfRVhUIFxcdTAwMjZcXHUwMDI2IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSkgP1xcbi1cXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGUgOiBwcm9nLVxcdTAwM2V0eXBlO1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzYXZlZF9kc3RfcHJvZ190eXBlIGlzIG9ubHkgc2V0IG9uY2UgY2hlY2tfYXR0YWNoX2J0Zl9pZCgpXFxuK1xcdFxcdCAqIHJ1bnMuIEJlZm9yZSB0aGF0IC0tIGUuZy4gd2hlbiBnZW5lcmF0aW5nIGtmdW5jIHByb3RvdHlwZXMgYXRcXG4rXFx0XFx0ICogYWRkLWNhbGwgdGltZSAtLSBmYWxsIGJhY2sgdG8gdGhlIGF0dGFjaCB0YXJnZXQncyB0eXBlLCB3aGljaFxcbitcXHRcXHQgKiBpcyBhdmFpbGFibGUgZnJvbSBsb2FkIHRpbWUgYW5kIGhvbGRzIHRoZSBzYW1lIHZhbHVlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSlcXG4rXFx0XFx0XFx0cmV0dXJuIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZTtcXG4rXFx0XFx0aWYgKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZHN0X3Byb2cpXFxuK1xcdFxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWRzdF9wcm9nLVxcdTAwM2V0eXBlO1xcbitcXHR9XFxuK1xcdHJldHVybiBwcm9nLVxcdTAwM2V0eXBlO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfY2hlY2tfcmVjdXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbkBAIC0xNDc5LDEwICsxNDkxLDE3IEBAIHN0cnVjdCByZXRfbWVtX2Rlc2Mge1xcbiBcXHRib29sIGZvdW5kO1xcbiB9O1xcbiBcXG4rLyogQSBjb25zdGFudCBzY2FsYXIgYXJndW1lbnQ7IFBvcHVsYXRlZCBieSBwcm9jZXNzX2NvbnN0X2FyZygpICovXFxuK3N0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyB7XFxuK1xcdHU2NCB2YWx1ZTtcXG4rXFx0Ym9vbCBmb3VuZDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XFxuIFxcdC8qIENvbW1vbiAqL1xcbiBcXHRzdHJ1Y3QgYnRmICpidGY7XFxuIFxcdHUzMiBmdW5jX2lkO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuO1xcbiBcXHR1OCByZWxlYXNlX3JlZ25vO1xcbiBcXHR1MzIgcmV0X2J0Zl9pZDtcXG4gXFx0dTMyIHN1YnByb2dubztcXG5AQCAtMTQ5NiwxMCArMTUxNSw3IEBAIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XFxuIFxcdHUzMiBrZnVuY19mbGFncztcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvO1xcbiBcXHRjb25zdCBjaGFyICpmdW5jX25hbWU7XFxuLVxcdHN0cnVjdCB7XFxuLVxcdFxcdHU2NCB2YWx1ZTtcXG4tXFx0XFx0Ym9vbCBmb3VuZDtcXG4tXFx0fSBhcmdfY29uc3RhbnQ7XFxuK1xcdHN0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyBhcmdfY29uc3RhbnQ7XFxuIFxcbiBcXHQvKiBhcmdfe2J0ZixidGZfaWQsb3duaW5nX3JlZn0gYXJlIHVzZWQgYnkga2Z1bmMtc3BlY2lmaWMgaGFuZGxpbmcsXFxuIFxcdCAqIGdlbmVyYWxseSB0byBwYXNzIGluZm8gYWJvdXQgdXNlci1kZWZpbmVkIGxvY2FsIGtwdHIgdHlwZXMgdG8gbGF0ZXJcXG5AQCAtMTYxNCw2ICsxNjMwLDcgQEAgZW51bSBicGZfcmVnX2FyZ190eXBlIHtcXG4gXFxuIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyB7XFxuIFxcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xcbiBcXHR1MzIgZnVuY19pZDtcXG4gXFx0czMyIGltbTtcXG4gXFx0dTE2IG9mZnNldDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5pbmRleCAyZTRhZTBlZjA4NjA5ZC4uMmY0NzNhZDRmZDdjMWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuICAqIHI1ICs9IDFcXG4gICogLi4uXFxuICAqIGNhbGwgYnBmX3BlcmZfZXZlbnRfb3V0cHV0IzI1XFxuLSAqICAgd2hlcmUgLmFyZzVfdHlwZSA9IEFSR19DT05TVF9TSVpFX09SX1pFUk9cXG4rICogICB3aGVyZSAuYXJnNV90eXBlID0gQVJHX01FTV9TSVpFX09SX1pFUk9cXG4gICpcXG4gICogYW5kIHRoaXMgY2FzZTpcXG4gICogcjYgPSAxXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcXG5pbmRleCAzOTgzYjRjZTczYzgxMS4uODJjNTk4ODQxN2EwY2YgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfaW1hX2lub2RlX2hhc2hfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZicGZfaW1hX2lub2RlX2hhc2hfYnRmX2lkc1swXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYWxsb3dlZFxcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXFxuIH07XFxuIFxcbkBAIC0yMDUsNyArMjA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfaW1hX2ZpbGVfaGFzaF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9pbWFfZmlsZV9oYXNoX2J0Zl9pZHNbMF0sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFsbG93ZWRcXHQ9IGJwZl9pbWFfaW5vZGVfaGFzaF9hbGxvd2VkLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcXG5pbmRleCA0ZWVlYWViNjk3OTBiOS4uNWU4YWM0NWNlNTZhZjMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtODcwOSw3ICs4NzA5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNjcuLmZiOTM1N2I2NGNhZGJjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuQEAgLTIzMDUsNyArMjMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfbmFtZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0yMzQ3LDcgKzIzNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X2N1cnJlbnRfdmFsdWVfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZSwgc3RydWN0IGJwZl9zeXNjdGxfa2VybiAqLCBjdHgsIGNoYXIgKiwgYnVmLFxcbkBAIC0yMzY3LDcgKzIzNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzMoYnBmX3N5c2N0bF9zZXRfbmV3X3ZhbHVlLCBzdHJ1Y3QgYnBmX3N5c2N0bF9rZXJuICosIGN0eCxcXG5AQCAtMjM5Myw3ICsyMzkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX3NldF9uZXdfdmFsdWVfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IGUyMDc2NjY3YjI0NTE3Li5jZDg4NzcyMDI0YTgzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE5OCw3ICsxOTgsOSBAQCB2b2lkIGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdGVkX2xpbmZvID0gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0a2ZyZWUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VrZnVuY190YWIpO1xcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuK1xcdGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNla2Z1bmNfdGFiKTtcXG4rI2VuZGlmXFxuIFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNla2Z1bmNfdGFiID0gTlVMTDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbmluZGV4IGMxOGYxZTE2ZWRlZTRjLi4xOGJlNWQ2ZTRmOWMyOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuQEAgLTI3OCw3ICsyNzgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19RVUVVRURfU1BJTkxPQ0tTKSB8fCBkZWZpbmVkKENPTkZJR19CUEZfQVJDSF9TUElOTE9DSylcXG5AQCAtNTM5LDcgKzUzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG9sX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcXG4gXFx0LmFyZzRfc2l6ZVxcdD0gc2l6ZW9mKHM2NCksXFxuQEAgLTU2Nyw3ICs1NjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cnRvdWxfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxcbiBcXHQuYXJnNF9zaXplXFx0PSBzaXplb2YodTY0KSxcXG5AQCAtNTgzLDcgKzU4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cm5jbXBfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19DT05TVF9TVFIsXFxuIH07XFxuIFxcbkBAIC02MjcsNyArNjI3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9yYXdfc21wX3Byb2Nlc3Nvcl9pZF9wcm90byA9IHtcXG5AQCAtNjUzLDcgKzY1Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG8gPSAge1xcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfY29weV9mcm9tX3VzZXIsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuQEAgLTY3NSw3ICs2NzUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xcbiBcXHQubWlnaHRfc2xlZXBcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTcwNiw3ICs3MDYsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7XFxuIFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gXFx0LmFyZzRfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXFxuQEAgLTEwOTMsMTAgKzEwOTMsMTAgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19DT05TVF9TVFIsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkICptYXBfa2V5X2Zyb21fdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIHUzMiAqYXJyX2lkeClcXG5AQCAtMTg4OCw3ICsxODg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX2Zyb21fbWVtX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fRFlOUFRSIHwgRFlOUFRSX1RZUEVfTE9DQUwgfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFLFxcbiB9O1xcbkBAIC0xOTQzLDcgKzE5NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfcmVhZF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19EWU5QVFIsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbkBAIC0yMDA0LDcgKzIwMDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfd3JpdGVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fRFlOUFRSLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTM0MDQsMTAgKzM0MDQsMTAgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGhyb3codTY0IGNvb2tpZSlcXG4gXFx0V0FSTigxLCBcXFwiQSBjYWxsIHRvIEJQRiBleGNlcHRpb24gY2FsbGJhY2sgc2hvdWxkIG5ldmVyIHJldHVyblxcXFxuXFxcIik7XFxuIH1cXG4gXFxuLV9fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fbWFwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK19fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9hc3luY19rZXJuICphc3luYyA9IChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKil3cTtcXG4tXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX21hcDtcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX2NvbnN0X21hcDtcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJwZl9hc3luY19rZXJuKSBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX3dxKSk7XFxuIFxcdEJVSUxEX0JVR19PTihfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfd3EpKTtcXG5AQCAtNDY0MiwxNyArNDY0MiwxNyBAQCBzdGF0aWMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya1xcbiAgKiBtb2RlXFxuICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxcbiAgKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcXG4tICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcXG4rICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcXG4gICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcXG4gICogQGF1eDogcG9pbnRlciB0byBicGZfcHJvZ19hdXggb2YgdGhlIGNhbGxlciBCUEYgcHJvZ3JhbSwgaW1wbGljaXRseSBzZXQgYnkgdGhlIHZlcmlmaWVyXFxuICAqXFxuICAqIFJldHVybjogMCBpZiB0YXNrIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkIHN1Y2Nlc3NmdWxseSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbiB7XFxuLVxcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XFxuK1xcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX2NvbnN0X21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00NjYwLDE3ICs0NjYwLDE3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBiXFxuICAqIG1vZGVcXG4gICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xcbi0gKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbisgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxcbiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXJcXG4gICpcXG4gICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4gX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuIHtcXG4tXFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcXG4rXFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fY29uc3RfbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtYWtlX2ZpbGVfZHlucHRyKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIGJvb2wgbWF5X3NsZWVwLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JpbmdidWYuYyBiL2tlcm5lbC9icGYvcmluZ2J1Zi5jXFxuaW5kZXggMzVhZTY0YWRlMzZiODMuLmMxYmY3YTE5N2E5NmYzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvcmluZ2J1Zi5jXFxuKysrIGIva2VybmVsL2JwZi9yaW5nYnVmLmNcXG5AQCAtNjM0LDcgKzYzNCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmluZ2J1Zl9vdXRwdXRfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5pbmRleCA0MWZlODdkNzMwMmYyMi4uNDYzZjk0YmExY2M0NzggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9zdGFja21hcC5jXFxuQEAgLTc4MSw3ICs3ODEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTc5Nyw3ICs3OTcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC04MzEsNyArODMxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC04NDgsNyArODQ4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtOTExLDcgKzkxMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDBmZjllM2FhMjkzZDU3Li4wYjVkYzY3ODhiYTI3ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTI0NDQsNyArMjQ0NCw3IEBAIHN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0X25vcmVmKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgYm9vbCBkZWZlcnJlZClcXG4gXFx0bW9kdWxlX3B1dChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1vZCk7XFxuIFxcdGt2ZnJlZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdGVkX2xpbmZvKTtcXG4gXFx0a3ZmcmVlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbGluZm8pO1xcbi1cXHRrZnJlZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWtmdW5jX3RhYik7XFxuK1xcdGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNla2Z1bmNfdGFiKTtcXG4gXFx0a2ZyZWUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm8pO1xcbiBcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmKVxcbiBcXHRcXHRidGZfcHV0KHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zik7XFxuQEAgLTY1NDQsNyArNjU0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c19icGZfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICogX193ZWFrXFxuQEAgLTY1OTEsNyArNjU5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2thbGxzeW1zX2xvb2t1cF9uYW1lX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsXFxuIFxcdC5hcmc0X3NpemVcXHQ9IHNpemVvZih1NjQpLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA1MmJlMGExMThjY2UwNy4uMWNhODc3OWFiNTlhNTkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTI3MTksOCArMjcxOSwyNSBAQCBzdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90byk7XFxuK1xcbit2b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYilcXG4re1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlmICghdGFiKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWItXFx1MDAzZW5yX2Rlc2NzOyBpKyspXFxuK1xcdFxcdGtmcmVlKHRhYi1cXHUwMDNlZGVzY3NbaV0ucHJvdG8pO1xcbitcXHRrZnJlZSh0YWIpO1xcbit9XFxuK1xcbiBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbitcXHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xcbiBcXHRzdHJ1Y3QgYnBmX2tmdW5jX2J0Zl90YWIgKmJ0Zl90YWI7XFxuIFxcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xcbiBcXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWI7XFxuQEAgLTI4MDYsMTEgKzI4MjMsMjkgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHByb3RvID0ga3phbGxvY19vYmooKnByb3RvLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRpZiAoIXByb3RvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTtcXG4rXFx0bWV0YS5idGYgPSBrZnVuYy5idGY7XFxuK1xcdG1ldGEuZnVuY19pZCA9IGtmdW5jLmlkO1xcbitcXHRtZXRhLmZ1bmNfcHJvdG8gPSBrZnVuYy5wcm90bztcXG4rXFx0bWV0YS5mdW5jX25hbWUgPSBrZnVuYy5uYW1lO1xcbitcXHRtZXRhLmtmdW5jX2ZsYWdzID0ga2Z1bmMuZmxhZ3MgPyAqa2Z1bmMuZmxhZ3MgOiAwO1xcbitcXG4rXFx0ZXJyID0gZ2VuX2tmdW5jX2FyZ19wcm90byhlbnYsIFxcdTAwMjZtZXRhLCBwcm90byk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHJvdG8pO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRkZXNjID0gXFx1MDAyNnRhYi1cXHUwMDNlZGVzY3NbdGFiLVxcdTAwM2Vucl9kZXNjcysrXTtcXG4gXFx0ZGVzYy1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcdGRlc2MtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4gXFx0ZGVzYy1cXHUwMDNlYWRkciA9IGFkZHI7XFxuIFxcdGRlc2MtXFx1MDAzZWZ1bmNfbW9kZWwgPSBmdW5jX21vZGVsO1xcbitcXHRkZXNjLVxcdTAwM2Vwcm90byA9IHByb3RvO1xcbiBcXHRzb3J0KHRhYi1cXHUwMDNlZGVzY3MsIHRhYi1cXHUwMDNlbnJfZGVzY3MsIHNpemVvZih0YWItXFx1MDAzZWRlc2NzWzBdKSxcXG4gXFx0ICAgICBrZnVuY19kZXNjX2NtcF9ieV9pZF9vZmYsIE5VTEwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDkyNCw2ICs0OTU5LDE5IEBAIHN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XFxuIFxcdFtDT05TVF9QVFJfVE9fTUFQXSA9IGJ0Zl9icGZfbWFwX2lkLFxcbiB9O1xcbiBcXG4rc3RhdGljIGVudW0gYnBmX3JlZ190eXBlIGxvb2t1cF9yZWcyYnRmX2lkcyhjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90KVxcbit7XFxuK1xcdGVudW0gYnBmX3JlZ190eXBlIHR5cGU7XFxuK1xcbitcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgX19CUEZfUkVHX1RZUEVfTUFYOyB0eXBlKyspIHtcXG4rXFx0XFx0aWYgKHJlZzJidGZfaWRzW3R5cGVdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgKnJlZzJidGZfaWRzW3R5cGVdKSA9PSByZWZfdClcXG4rXFx0XFx0XFx0cmV0dXJuIHR5cGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOT1RfSU5JVDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfdHJ1c3RlZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4ge1xcbiBcXHQvKiBBIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgYWx3YXlzIHRydXN0ZWQuICovXFxuQEAgLTY4NzMsNyArNjkyMSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICBib29sIHplcm9fc2l6ZV9hbGxvd2VkLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuIHtcXG4tXFx0aW50IGVycjtcXG4rXFx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwobWVtX3JlZy1cXHUwMDNldHlwZSk7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAobWF5X2JlX251bGwpIHtcXG4rXFx0XFx0c2F2ZWRfcmVnID0gKm1lbV9yZWc7XFxuK1xcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogVGhpcyBpcyB1c2VkIHRvIHJlZmluZSByMCByZXR1cm4gdmFsdWUgYm91bmRzIGZvciBoZWxwZXJzXFxuIFxcdCAqIHRoYXQgZW5mb3JjZSB0aGlzIHZhbHVlIGFzIGFuIHVwcGVyIGJvdW5kIG9uIHJldHVybiB2YWx1ZXMuXFxuQEAgLTY5MTAsOCArNjk2NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBzaXplX2FyZ25vKSk7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuLVxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XFxuK1xcbitcXHRpZiAoYWNjZXNzX3R5cGUgXFx1MDAyNiBCUEZfUkVBRClcXG4rXFx0XFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX1JFQUQsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgYWNjZXNzX3R5cGUgXFx1MDAyNiBCUEZfV1JJVEUpXFxuK1xcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEJQRl9XUklURSwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xcbitcXG4gXFx0aWYgKCFlcnIpIHtcXG4gXFx0XFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oc2l6ZV9hcmdubyk7XFxuIFxcbkBAIC02OTIwLDE1ICs2OTgxLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKHNpemVfYXJnbm8pKTtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKG1heV9iZV9udWxsKVxcbitcXHRcXHQqbWVtX3JlZyA9IHNhdmVkX3JlZztcXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi1cXHRcXHRcXHQgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplKVxcbitcXHRcXHRcXHQgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcXG4rXFx0XFx0XFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbitcXHQvKiBtZXRhLVxcdTAwM2VidGYgaXMgc2V0IG9ubHkgZm9yIGtmdW5jczsgYSBOVUxMIG1ldGEgbWVhbnMgYSBnbG9iYWwgc3VicHJvZy4gKi9cXG4rXFx0Ym9vbCBoZWxwZXIgPSBtZXRhIFxcdTAwMjZcXHUwMDI2ICFtZXRhLVxcdTAwM2VidGY7XFxuIFxcdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSk7XFxuIFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcXG4tXFx0aW50IGVycjtcXG4rXFx0aW50IHNpemUsIGVyciA9IDA7XFxuIFxcbiBcXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTY5NDgsMTAgKzcwMTYsMTIgQEAgc3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdcXG4gXFx0XFx0bWFya19wdHJfbm90X251bGxfcmVnKHJlZyk7XFxuIFxcdH1cXG4gXFxuLVxcdGludCBzaXplID0gYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkgPT0gUFRSX1RPX1NUQUNLID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTtcXG4rXFx0c2l6ZSA9ICghaGVscGVyIFxcdTAwMjZcXHUwMDI2IGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19TVEFDSykgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplO1xcbiBcXG4tXFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgTlVMTCk7XFxuLVxcdGVyciA9IGVyciA/OiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgTlVMTCk7XFxuK1xcdGlmIChhY2Nlc3NfdHlwZSBcXHUwMDI2IEJQRl9SRUFEKVxcbitcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9SRUFELCB0cnVlLCBtZXRhKTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgKGFjY2Vzc190eXBlIFxcdTAwMjYgQlBGX1dSSVRFKSlcXG4rXFx0XFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIG1ldGEpO1xcbiBcXG4gXFx0aWYgKG1heV9iZV9udWxsKVxcbiBcXHRcXHQqcmVnID0gc2F2ZWRfcmVnO1xcbkBAIC02OTkzLDI4ICs3MDYzLDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbWVtX3JlZyxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZywgYXJnbm9fdCBtZW1fYXJnbm8sIGFyZ25vX3Qgc2l6ZV9hcmdubylcXG4rc3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbitcXHRcXHRcXHQgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbi1cXHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLVxcdTAwM2V0eXBlKTtcXG4tXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xcbi1cXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcXG4rXFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bWVtc2V0KFxcdTAwMjZtZXRhLCAwLCBzaXplb2YobWV0YSkpO1xcbitcXHRpZiAobWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XFxuK1xcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChtYXlfYmVfbnVsbCkge1xcbi1cXHRcXHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcXG4tXFx0XFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xcbitcXHRpZiAoIXRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcXFxuXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIG1lbV9yZWcsIHNpemVfcmVnLCBtZW1fYXJnbm8sIHNpemVfYXJnbm8sIEJQRl9SRUFELCB0cnVlLCBcXHUwMDI2bWV0YSk7XFxuLVxcdGVyciA9IGVyciA/OiBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBtZW1fcmVnLCBzaXplX3JlZywgbWVtX2FyZ25vLCBzaXplX2FyZ25vLCBCUEZfV1JJVEUsIHRydWUsIFxcdTAwMjZtZXRhKTtcXG4rXFx0aWYgKHJlZ25vIFxcdTAwM2U9IDApXFxuK1xcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVyciA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGFyZ19pZHhfZnJvbV9hcmdubyhhcmdubykpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChtYXlfYmVfbnVsbClcXG4tXFx0XFx0Km1lbV9yZWcgPSBzYXZlZF9yZWc7XFxuK1xcdG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XFxuK1xcdG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBlbnVtIHtcXG5AQCAtNzIyNCwxOCArNzI5OSw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlXFxuIFxcdHJldHVybiBjaGVja19tYXBfZmllbGRfcG9pbnRlcihlbnYsIHJlZywgYXJnbm8sIEJQRl9USU1FUiwgbWFwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2hlbHBlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuLXtcXG4tXFx0cmV0dXJuIHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFxcdTAwMjZtZXRhLVxcdTAwM2VtYXApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4te1xcbi1cXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXFx1MDAyNm1ldGEtXFx1MDAzZW1hcCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbkBAIC03NzM4LDggKzc4MDEsNyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxcbiBcXG4gc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfbWVtX3NpemUoZW51bSBicGZfYXJnX3R5cGUgdHlwZSlcXG4ge1xcbi1cXHRyZXR1cm4gdHlwZSA9PSBBUkdfQ09OU1RfU0laRSB8fFxcbi1cXHQgICAgICAgdHlwZSA9PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPO1xcbitcXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IEFSR19NRU1fU0laRTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfcmF3X21lbShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxcbkBAIC03ODg1LDggKzc5NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgZHlucHRyX3R5cGVzID0ge1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgKmNvbXBhdGlibGVfcmVnX3R5cGVzW19fQlBGX0FSR19UWVBFX01BWF0gPSB7XFxuIFxcdFtBUkdfUFRSX1RPX01BUF9LRVldXFx0XFx0PSBcXHUwMDI2bWVtX3R5cGVzLFxcbiBcXHRbQVJHX1BUUl9UT19NQVBfVkFMVUVdXFx0XFx0PSBcXHUwMDI2bWVtX3R5cGVzLFxcbi1cXHRbQVJHX0NPTlNUX1NJWkVdXFx0XFx0PSBcXHUwMDI2c2NhbGFyX3R5cGVzLFxcbi1cXHRbQVJHX0NPTlNUX1NJWkVfT1JfWkVST11cXHQ9IFxcdTAwMjZzY2FsYXJfdHlwZXMsXFxuK1xcdFtBUkdfTUVNX1NJWkVdXFx0XFx0XFx0PSBcXHUwMDI2c2NhbGFyX3R5cGVzLFxcbiBcXHRbQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVST11cXHQ9IFxcdTAwMjZzY2FsYXJfdHlwZXMsXFxuIFxcdFtBUkdfQ09OU1RfTUFQX1BUUl1cXHRcXHQ9IFxcdTAwMjZjb25zdF9tYXBfcHRyX3R5cGVzLFxcbiBcXHRbQVJHX1BUUl9UT19DVFhdXFx0XFx0PSBcXHUwMDI2Y29udGV4dF90eXBlcyxcXG5AQCAtODI4NiwxMSArODM0Nyw0OSBAQCBzdGF0aWMgaW50IGdldF9jb25zdGFudF9tYXBfa2V5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcbiBzdGF0aWMgYm9vbCBjYW5fZWxpZGVfdmFsdWVfbnVsbG5lc3MoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuIFxcbitzdGF0aWMgaW50IHByb2Nlc3NfbWFwX3B0cl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4rXFx0XFx0XFx0ICAgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4re1xcbitcXHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OlxcbitcXHQgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpXFxuK1xcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcXG4rXFx0ICogaWYgKGlubmVyX21hcDEgXFx1MDAyNlxcdTAwMjYgaW5uZXJfbWFwMikge1xcbitcXHQgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xcbitcXHQgKiAgICAgaWYgKHRpbWVyKVxcbitcXHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXFxuK1xcdCAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpO1xcbitcXHQgKiB9XFxuK1xcdCAqXFxuK1xcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXFxuK1xcdCAqL1xcbitcXHRpZiAobWV0YS1cXHUwMDNlbWFwLnB0ciBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKG1ldGEtXFx1MDAzZW1hcC5wdHIgIT0gcmVnLVxcdTAwM2VtYXBfcHRyIHx8IG1ldGEtXFx1MDAzZW1hcC51aWQgIT0gcmVnLVxcdTAwM2VtYXBfdWlkKSkge1xcbitcXHRcXHRhcmdub190IG9ial9hcmdubyA9IGFyZ25vX2Zyb21fcmVnKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSAtIDEpO1xcbitcXHRcXHRzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjID0gbWV0YS1cXHUwMDNlbWFwLnB0ci1cXHUwMDNlcmVjb3JkO1xcbitcXHRcXHRjb25zdCBjaGFyICpvYmpfbmFtZSA9IFxcXCJ3b3JrcXVldWVcXFwiO1xcbitcXG4rXFx0XFx0aWYgKHJlYy1cXHUwMDNldGltZXJfb2ZmIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdG9ial9uYW1lID0gXFxcInRpbWVyXFxcIjtcXG4rXFx0XFx0ZWxzZSBpZiAocmVjLVxcdTAwM2V0YXNrX3dvcmtfb2ZmIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdG9ial9uYW1lID0gXFxcImJwZl90YXNrX3dvcmtcXFwiO1xcbitcXG4rXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBwb2ludGVyIGluICVzIG1hcF91aWQ9JWQgXFxcIixcXG4rXFx0XFx0XFx0b2JqX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIG9ial9hcmdubyksIG1ldGEtXFx1MDAzZW1hcC51aWQpO1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcImRvZXNuJ3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gJXMgbWFwX3VpZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWctXFx1MDAzZW1hcF91aWQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0bWV0YS1cXHUwMDNlbWFwLnB0ciA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4rXFx0bWV0YS1cXHUwMDNlbWFwLnVpZCA9IHJlZy1cXHUwMDNlbWFwX3VpZDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbixcXG4gXFx0XFx0XFx0ICBpbnQgaW5zbl9pZHgpXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiA9IG1ldGEtXFx1MDAzZWZuO1xcbiBcXHR1MzIgcmVnbm8gPSBCUEZfUkVHXzEgKyBhcmc7XFxuIFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyk7XFxuIFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2FyZ107XFxuQEAgLTgzNjEsMjkgKzg0NjAsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuIFxcdHN3aXRjaCAoYmFzZV90eXBlKGFyZ190eXBlKSkge1xcbiBcXHRjYXNlIEFSR19DT05TVF9NQVBfUFRSOlxcbiBcXHRcXHQvKiBicGZfbWFwX3h4eChtYXBfcHRyKSBjYWxsOiByZW1lbWJlciB0aGF0IG1hcF9wdHIgKi9cXG4tXFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIpIHtcXG4tXFx0XFx0XFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcXG4tXFx0XFx0XFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxcbi1cXHRcXHRcXHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXFxuLVxcdFxcdFxcdCAqIGlmIChpbm5lcl9tYXAxIFxcdTAwMjZcXHUwMDI2IGlubmVyX21hcDIpIHtcXG4tXFx0XFx0XFx0ICogICAgIHRpbWVyID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTtcXG4tXFx0XFx0XFx0ICogICAgIGlmICh0aW1lcilcXG4tXFx0XFx0XFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxcbi1cXHRcXHRcXHQgKiAgICAgICAgIGJwZl90aW1lcl9pbml0KHRpbWVyLCBpbm5lcl9tYXAyKTtcXG4tXFx0XFx0XFx0ICogfVxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIgIT0gcmVnLVxcdTAwM2VtYXBfcHRyIHx8XFxuLVxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VtYXAudWlkICE9IHJlZy1cXHUwMDNlbWFwX3VpZCkge1xcbi1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4tXFx0XFx0XFx0XFx0XFx0XFxcInRpbWVyIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQsIHJlZy1cXHUwMDNlbWFwX3VpZCk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0bWV0YS1cXHUwMDNlbWFwLnB0ciA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4tXFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCA9IHJlZy1cXHUwMDNlbWFwX3VpZDtcXG4rXFx0XFx0ZXJyID0gcHJvY2Vzc19tYXBfcHRyX2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBBUkdfUFRSX1RPX01BUF9LRVk6XFxuIFxcdFxcdC8qIGJwZl9tYXBfeHh4KC4uLiwgbWFwX3B0ciwgLi4uLCBrZXkpIGNhbGw6XFxuQEAgLTg0NjYsNyArODU0NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBBUkdfUFRSX1RPX1RJTUVSOlxcbi1cXHRcXHRlcnIgPSBwcm9jZXNzX3RpbWVyX2hlbHBlcihlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xcbitcXHRcXHRlcnIgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcXHUwMDI2bWV0YS1cXHUwMDNlbWFwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTg0NzQsMzEgKzg1NTMsMjIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbiBcXHRcXHRtZXRhLVxcdTAwM2VzdWJwcm9nbm8gPSByZWctXFx1MDAzZXN1YnByb2dubztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQVJHX1BUUl9UT19NRU06XFxuLVxcdFxcdC8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGVcXG4tXFx0XFx0ICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy5cXG4tXFx0XFx0ICovXFxuIFxcdFxcdGlmIChhcmdfdHlwZSBcXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XFxuLVxcdFxcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgZm4tXFx1MDAzZWFyZ19zaXplW2FyZ10sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGZhbHNlLCBtZXRhKTtcXG4rXFx0XFx0XFx0ZXJyID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBmbi1cXHUwMDNlYXJnX3NpemVbYXJnXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsIG1ldGEpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRpZiAoYXJnX3R5cGUgXFx1MDAyNiBNRU1fQUxJR05FRClcXG4gXFx0XFx0XFx0XFx0ZXJyID0gY2hlY2tfcHRyX2FsaWdubWVudChlbnYsIHJlZywgMCwgZm4tXFx1MDAzZWFyZ19zaXplW2FyZ10sIHRydWUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyArIDEpO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnLCBzaXplX3JlZywgYXJnbm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBhcmdub19mcm9tX3JlZyhyZWdubyArIDEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYXJnX3R5cGUgXFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGZuLVxcdTAwM2VhcmdfdHlwZVthcmcgKyAxXSBcXHUwMDI2IFNDQUxBUl9NQVlCRV9aRVJPLCBtZXRhKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBBUkdfQ09OU1RfU0laRTpcXG4tXFx0XFx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHQgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sXFxuLVxcdFxcdFxcdFxcdFxcdCBmbi1cXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcXG4tXFx0XFx0XFx0XFx0XFx0IGZhbHNlLCBtZXRhKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQVJHX0NPTlNUX1NJWkVfT1JfWkVSTzpcXG4tXFx0XFx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHQgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sXFxuLVxcdFxcdFxcdFxcdFxcdCBmbi1cXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcXG4tXFx0XFx0XFx0XFx0XFx0IHRydWUsIG1ldGEpO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBBUkdfUFRSX1RPX0RZTlBUUjpcXG4gXFx0XFx0ZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgXFx1MDAyNm1ldGEtXFx1MDAzZXJlZl9vYmosXFxuIFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm1ldGEtXFx1MDAzZWR5bnB0cik7XFxuQEAgLTg4MjMsNyArODg5Myw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3Jhd19tb2RlX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfY2FsbF9hXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XFxuIFxcdFxcdGlmICghYXJnX3R5cGVfaXNfcmF3X21lbShmbi1cXHUwMDNlYXJnX3R5cGVbaV0pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKG1ldGEtXFx1MDAzZWFyZ19yYXdfbWVtLnJlZ25vKVxcbkBAIC04ODQwLDcgKzg5MTAsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19hcmdzX3BhaXJfaW52YWxpZChjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBpbnQgYXJnKVxcbiBcXHRib29sIGhhc19zaXplID0gZm4tXFx1MDAzZWFyZ19zaXplW2FyZ10gIT0gMDtcXG4gXFx0Ym9vbCBpc19uZXh0X3NpemUgPSBmYWxzZTtcXG4gXFxuLVxcdGlmIChhcmcgKyAxIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpKVxcbitcXHRpZiAoYXJnICsgMSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUylcXG4gXFx0XFx0aXNfbmV4dF9zaXplID0gYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXFx1MDAzZWFyZ190eXBlW2FyZyArIDFdKTtcXG4gXFxuIFxcdGlmIChiYXNlX3R5cGUoZm4tXFx1MDAzZWFyZ190eXBlW2FyZ10pICE9IEFSR19QVFJfVE9fTUVNKVxcbkBAIC04ODcxLDcgKzg5NDEsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19idGZfaWRfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbilcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcXG4gXFx0XFx0aWYgKGJhc2VfdHlwZShmbi1cXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fQlRGX0lEKVxcbiBcXHRcXHRcXHRyZXR1cm4gISFmbi1cXHUwMDNlYXJnX2J0Zl9pZFtpXTtcXG4gXFx0XFx0aWYgKGJhc2VfdHlwZShmbi1cXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fU1BJTl9MT0NLKVxcbkBAIC04ODkwLDcgKzg5NjAsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19tZW1fYXJnX3J3X2ZsYWdfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbilcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcXG4gXFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cXHUwMDNlYXJnX3R5cGVbaV07XFxuIFxcbiBcXHRcXHRpZiAoYmFzZV90eXBlKGFyZ190eXBlKSAhPSBBUkdfUFRSX1RPX01FTSlcXG5AQCAtODkwNiw3ICs4OTc2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHJvdG9fcmVsZWFzZV9yZWcoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgc3RydWN0IGJwZl9cXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcXG4gXFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cXHUwMDNlYXJnX3R5cGVbaV07XFxuIFxcbiBcXHRcXHRpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHtcXG5AQCAtOTI1Miw3ICs5MzIyLDcgQEAgc3RhdGljIGludCBidGZfY2hlY2tfZnVuY19hcmdfbWF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csXFxuIFxcdFxcdFxcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpO1xcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0aWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctXFx1MDAzZW1lbV9zaXplKSlcXG4rXFx0XFx0XFx0aWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctXFx1MDAzZW1lbV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgTlVMTCkpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRpZiAoIShhcmctXFx1MDAzZWFyZ190eXBlIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpIFxcdTAwMjZcXHUwMDI2IChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcXG4gXFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCIlcyBpcyBleHBlY3RlZCB0byBiZSBub24tTlVMTFxcXFxuXFxcIixcXG5AQCAtMTAyOTcsOSArMTAzNjcsMTAgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cXG4gXFx0XFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlID0gdHJ1ZTtcXG4gXFxuIFxcdG1ldGEuZnVuY19pZCA9IGZ1bmNfaWQ7XFxuK1xcdG1ldGEuZm4gPSBmbjtcXG4gXFx0LyogY2hlY2sgYXJncyAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCBcXHUwMDI2bWV0YSwgZm4sIGluc25faWR4KTtcXG4rXFx0XFx0ZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCBcXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTEwNzcxLDI2ICsxMDg0MiwyNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXFxuLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbiBcXG4gXFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4tXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4rXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19zelxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XFxuIFxcbiBcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXFx1MDAzZXR5cGUsIE5VTEwpO1xcbi1cXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSB8fCByZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxcbitcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX3N6a1xcXCIpO1xcbkBAIC0xMDgxMSw2ICsxMDg4MCwxMSBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWFwKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbiBcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fbWFwXFxcIik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19jb25zdF9tYXAoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXFxuK3tcXG4rXFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2NvbnN0X21hcFxcXCIpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYWxsb2Nfb2JqKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbiB7XFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hbGxvY1xcXCIpO1xcbkBAIC0xMTA1MSwxOCArMTExMjUsMjEgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xcbiBcXHRLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERSxcXG4gXFx0S0ZfQVJHX1BUUl9UT19CVEZfSUQsXFx0ICAgICAgIC8qIEFsc28gY292ZXJzIHJlZzJidGZfaWRzIGNvbnZlcnNpb25zICovXFxuIFxcdEtGX0FSR19QVFJfVE9fTUVNLFxcbi1cXHRLRl9BUkdfUFRSX1RPX01FTV9TSVpFLFxcdCAgICAgICAvKiBTaXplIGRlcml2ZWQgZnJvbSBuZXh0IGFyZ3VtZW50LCBza2lwIGl0ICovXFxuIFxcdEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0ssXFxuIFxcdEtGX0FSR19QVFJfVE9fUkJfUk9PVCxcXG4gXFx0S0ZfQVJHX1BUUl9UT19SQl9OT0RFLFxcbi1cXHRLRl9BUkdfUFRSX1RPX05VTEwsXFxuIFxcdEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSLFxcbi1cXHRLRl9BUkdfUFRSX1RPX01BUCxcXG4rXFx0S0ZfQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdEtGX0FSR19QVFJfVE9fVElNRVIsXFxuIFxcdEtGX0FSR19QVFJfVE9fV09SS1FVRVVFLFxcbiBcXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXFxuIFxcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxcbitcXHRLRl9BUkdfQ09OU1QsXFx0XFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciAqL1xcbitcXHRLRl9BUkdfQ09OU1RfTUVNX1NJWkUsXFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xcbitcXHRLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPLCAvKiBjb25zdCBzY2FsYXIgc2l6aW5nIGEgcmV0dXJuZWQgYnVmZmVyICovXFxuK1xcdEtGX0FSR19NRU1fU0laRSxcXHQgICAgICAgLyogc2NhbGFyIHNpemluZyBhIHByZWNlZGluZyBtZW1vcnkgYXJnICovXFxuK1xcdEtGX0FSR19BTllUSElORyxcXHQgICAgICAgLyogdW5jb25zdHJhaW5lZCBzY2FsYXIgKi9cXG4gfTtcXG4gXFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG5AQCAtMTEzMTgsMTA4ICsxMTM5NSwxNTUgQEAgYm9vbCBicGZfaXNfa2Z1bmNfcGt0X2NoYW5naW5nKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4gXFx0cmV0dXJuIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl94ZHBfcHVsbF9kYXRhXTtcXG4gfVxcbiBcXG4tc3RhdGljIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlXFxuLWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90LFxcbi1cXHRcXHQgICAgICAgY29uc3QgY2hhciAqcmVmX3RuYW1lLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLFxcbi1cXHRcXHQgICAgICAgaW50IGFyZywgaW50IG5hcmdzLCBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbitzdGF0aWMgaW50XFxuK2dldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuK1xcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3MsIGludCBhcmcsIGludCBuYXJncylcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpyZWZfdCA9IE5VTEw7XFxuK1xcdGFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhhcmcgKyAxKTtcXG4rXFx0Y29uc3QgY2hhciAqcmVmX3RuYW1lID0gTlVMTDtcXG4gXFx0Ym9vbCBhcmdfbWVtX3NpemUgPSBmYWxzZTtcXG4rXFx0aW50IGFyZ190eXBlO1xcbiBcXG4tXFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxcbi1cXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuXSB8fFxcbi1cXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ1RYO1xcbitcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cXHUwMDNlYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XFxuIFxcbi1cXHRpZiAoYXJnICsgMSBcXHUwMDNjIG5hcmdzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnICsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgKyAxKSkgfHxcXG4tXFx0ICAgICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyArIDEpKSkpXFxuLVxcdFxcdGFyZ19tZW1fc2l6ZSA9IHRydWU7XFxuK1xcdC8qIFNjYWxhciBhcmd1bWVudHMgYXJlIGNsYXNzaWZpZWQgZnJvbSB0aGVpciBCVEYgc3VmZml4L25hbWUgYWxvbmUuICovXFxuK1xcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcXG4rXFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRcXHRyZXR1cm4gS0ZfQVJHX0NPTlNUO1xcbitcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdFxcdHJldHVybiBLRl9BUkdfQ09OU1RfTUVNX1NJWkU7XFxuK1xcdFxcdGlmIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0XFx0cmV0dXJuIEtGX0FSR19NRU1fU0laRTtcXG4rXFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSwgXFxcInJkb25seV9idWZfc2l6ZVxcXCIpIHx8XFxuK1xcdFxcdCAgICBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10sIFxcXCJyZHdyX2J1Zl9zaXplXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybiBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPO1xcbitcXHRcXHRyZXR1cm4gS0ZfQVJHX0FOWVRISU5HO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkge1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlVucmVjb2duaXplZCAlcyB0eXBlICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNldHlwZSwgTlVMTCk7XFxuK1xcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVxcdTAwM2VidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbiBcXHQvKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSB2ZXJpZnkgdGhlIGtmdW5jJ3MgQlRGIGFzIHBlciB0aGUgYXJndW1lbnQgdHlwZSxcXG4gXFx0ICogbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdmVyaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgcmVnaXN0ZXJcXG4gXFx0ICogdHlwZSB0byBvdXIgY2FsbGVyLiBXaGVuIGEgc2V0IG9mIGNvbmRpdGlvbnMgaG9sZCBpbiB0aGUgQlRGIHR5cGUgb2ZcXG4gXFx0ICogYXJndW1lbnRzLCB3ZSByZXNvbHZlIGl0IHRvIGEga25vd24ga2Z1bmNfcHRyX2FyZ190eXBlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGJ0Zl9pc19wcm9nX2N0eF90eXBlKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgbWV0YS1cXHUwMDNlYnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtXFx1MDAzZXByb2cpLCBhcmcpKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DVFg7XFxuLVxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkgXFx1MDAyNlxcdTAwMjYgYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWFyZ19tZW1fc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTlVMTDtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JVEVSO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9OT0RFO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSO1xcbitcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XFxuK1xcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XFxuK1xcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xcbitcXHRlbHNlIGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZShcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIG1ldGEtXFx1MDAzZWJ0ZiwgdCwgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSwgYXJnKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2l0ZXIobWV0YSwgYXJnLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0lURVI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3RfbWFwKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX0NPTlNUX01BUF9QVFI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19tYXAobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fVElNRVI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190YXNrX3dvcmsobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSztcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRztcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcXG4rXFx0ZWxzZSB7XFxuK1xcdFxcdGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4rXFx0XFx0ICAgICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKVxcbitcXHRcXHRcXHRhcmdfbWVtX3NpemUgPSB0cnVlO1xcbitcXG4rXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkgXFx1MDAyNlxcdTAwMjYgIWFyZ19tZW1fc2l6ZSkge1xcbitcXHRcXHRcXHQvKiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aG91dCBhIHNpemUgYXJndW1lbnQgaXMgY2xhc3NpZmllZFxcbitcXHRcXHRcXHQgKiBhcyBLRl9BUkdfUFRSX1RPX0JURl9JRC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXFx1MDAzZWJ0ZiwgcmVmX3QsIDApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcXG4rXFx0XFx0XFx0XFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcXFwidm9pZCwgXFxcIiA6IFxcXCJcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIE90aGVyd2lzZSB0aGlzIGlzIGEgbWVtb3J5IGJ1ZmZlciBzdXBwb3J0ZWQgYnlcXG4rXFx0XFx0XFx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoKTogYSBwb2ludGVyIHRvIGEgc2NhbGFyLCBvciB0byB2b2lkXFxuK1xcdFxcdFxcdCAqIHdoZW4gcGFpcmVkIHdpdGggYSBzaXplIGFyZ3VtZW50LiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZFxcbitcXHRcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlIHVubGVzcyBhIHNpemUgYXJndW1lbnQgZm9sbG93cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFyZ190eXBlID0gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU0gOiBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfbWFwKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX01BUDtcXG4rXFx0aWYgKGlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSB8PSBQVFJfTUFZQkVfTlVMTDtcXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfd3EobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFO1xcbitcXHRyZXR1cm4gYXJnX3R5cGU7XFxuK31cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfdGltZXIobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fVElNRVI7XFxuK3N0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG1ldGEtXFx1MDAzZWJ0ZjtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcXG4rXFx0dTMyIGksIG5hcmdzO1xcbitcXHRpbnQgYXJnX3R5cGU7XFxuIFxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks7XFxuK1xcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVxcdTAwM2VmdW5jX3Byb3RvICsgMSk7XFxuK1xcdG5hcmdzID0gYnRmX3R5cGVfdmxlbihtZXRhLVxcdTAwM2VmdW5jX3Byb3RvKTtcXG4rXFx0aWYgKG5hcmdzIFxcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpIHtcXG4rXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jdGlvbiAlcyBoYXMgJWQgXFx1MDAzZSAlZCBhcmdzXFxcXG5cXFwiLCBtZXRhLVxcdTAwM2VmdW5jX25hbWUsXFxuK1xcdFxcdFxcdG5hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChuYXJncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHtcXG4rXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggJWQgYXJnc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWV0YS1cXHUwMDNlZnVuY19uYW1lLCBuYXJncyk7XFxuK1xcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfaXJxX2ZsYWcobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYXJnczsgaSsrKSB7XFxuK1xcdFxcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcXHUwMDI2YXJnc1tpXSkgfHxcXG4rXFx0XFx0ICAgIGlzX2tmdW5jX2FyZ19pZ25vcmUoYnRmLCBcXHUwMDI2YXJnc1tpXSkgfHxcXG4rXFx0XFx0ICAgIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChtZXRhLCBpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcXG4rXFx0XFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncyk7XFxuK1xcdFxcdGlmIChhcmdfdHlwZSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBhcmdfdHlwZTtcXG4gXFxuLVxcdGlmICgoYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fCByZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKV0pKSB7XFxuLVxcdFxcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHJlZl90KSkge1xcbi1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImtlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlZnVuY19uYW1lLCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksXFxuLVxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0JURl9JRDtcXG4rXFx0XFx0cHJvdG8tXFx1MDAzZWFyZ190eXBlW2ldID0gYXJnX3R5cGU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcXG4tXFxuLVxcdC8qIFRoaXMgaXMgdGhlIGNhdGNoIGFsbCBhcmd1bWVudCB0eXBlIG9mIHJlZ2lzdGVyIHR5cGVzIHN1cHBvcnRlZCBieVxcbi1cXHQgKiBjaGVja19oZWxwZXJfbWVtX2FjY2Vzcy4gSG93ZXZlciwgd2Ugb25seSBhbGxvdyB3aGVuIGFyZ3VtZW50IHR5cGUgaXNcXG4tXFx0ICogcG9pbnRlciB0byBzY2FsYXIsIG9yIHN0cnVjdCBjb21wb3NlZCAocmVjdXJzaXZlbHkpIG9mIHNjYWxhcnMuIFdoZW5cXG4tXFx0ICogYXJnX21lbV9zaXplIGlzIHRydWUsIHRoZSBwb2ludGVyIGNhbiBiZSB2b2lkICouXFxuLVxcdCAqL1xcbi1cXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjYgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXFx1MDAzZWJ0ZiwgcmVmX3QsIDApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoYXJnX21lbV9zaXplID8gIWJ0Zl90eXBlX2lzX3ZvaWQocmVmX3QpIDogMSkpIHtcXG4tXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byAlc3NjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksXFxuLVxcdFxcdFxcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gXFxcInZvaWQsIFxcXCIgOiBcXFwiXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcdHJldHVybiBhcmdfbWVtX3NpemUgPyBLRl9BUkdfUFRSX1RPX01FTV9TSVpFIDogS0ZfQVJHX1BUUl9UT19NRU07XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5AQCAtMTIwMDUsMTYgKzEyMTI5LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFxuIFxcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVxcdTAwM2VmdW5jX3Byb3RvICsgMSk7XFxuIFxcdG5hcmdzID0gYnRmX3R5cGVfdmxlbihtZXRhLVxcdTAwM2VmdW5jX3Byb3RvKTtcXG4tXFx0aWYgKG5hcmdzIFxcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpIHtcXG4tXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jdGlvbiAlcyBoYXMgJWQgXFx1MDAzZSAlZCBhcmdzXFxcXG5cXFwiLCBmdW5jX25hbWUsIG5hcmdzLFxcbi1cXHRcXHRcXHRNQVhfQlBGX0ZVTkNfQVJHUyk7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcdGlmIChuYXJncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHtcXG4tXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggJWQgYXJnc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZnVuY19uYW1lLCBuYXJncyk7XFxuLVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLVxcdH1cXG4gXFxuIFxcdHJldCA9IGNoZWNrX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIsIG5hcmdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTIwMzEsOCArMTIxNDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhhcmdubyk7XFxuIFxcdFxcdGJvb2wgYnRmX2lkX2ZpeGVkX29mZl9vayA9IHRydWU7XFxuIFxcdFxcdHUzMiByZWZfaWQsIHR5cGVfc2l6ZTtcXG4tXFx0XFx0Ym9vbCBpc19yZXRfYnVmX3N6ID0gZmFsc2U7XFxuLVxcdFxcdGludCBrZl9hcmdfdHlwZTtcXG4rXFx0XFx0aW50IGtmX2FyZ190eXBlID0gbWV0YS1cXHUwMDNlZm4tXFx1MDAzZWFyZ190eXBlW2ldO1xcbiBcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19wcm9nX2F1eChidGYsIFxcdTAwMjZhcmdzW2ldKSkge1xcbiBcXHRcXHRcXHQvKiBSZWplY3QgcmVwZWF0ZWQgdXNlIGJwZl9wcm9nX2F1eCAqL1xcbkBAIC0xMjA1NSw1MiArMTIxNjgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXG4gXFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcXG4gXFxuLVxcdFxcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcXG4tXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyBub3QgYSBzY2FsYXJcXFxcblxcXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuLVxcdFxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcIm9ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZFxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoIXRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbi1cXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKHJlZ25vIFxcdTAwM2U9IDApXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xcbi1cXHRcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGkpO1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTtcXG4tXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbi1cXHRcXHRcXHR9IGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGJ0ZiwgXFx1MDAyNmFyZ3NbaV0sIFxcXCJyZG9ubHlfYnVmX3NpemVcXFwiKSkge1xcbi1cXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VyMF9yZG9ubHkgPSB0cnVlO1xcbi1cXHRcXHRcXHRcXHRpc19yZXRfYnVmX3N6ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFxcdTAwMjZhcmdzW2ldLCBcXFwicmR3cl9idWZfc2l6ZVxcXCIpKSB7XFxuLVxcdFxcdFxcdFxcdGlzX3JldF9idWZfc3ogPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaXNfcmV0X2J1Zl9zeikge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgXFx1MDAyNm1ldGEtXFx1MDAzZXJldF9tZW0pO1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcXHUwMDI2XFx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbkBAIC0xMjExNyw3NiArMTIxODUsMzYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcXG4gXFx0XFx0XFx0dXBkYXRlX3JlZl9vYmooXFx1MDAyNm1ldGEtXFx1MDAzZXJlZl9vYmosIHJlZyk7XFxuIFxcbi1cXHRcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnJlZl9pZCk7XFxuLVxcdFxcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuK1xcdFxcdGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG4rXFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZyZWZfaWQpO1xcbitcXHRcXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRrZl9hcmdfdHlwZSA9IGdldF9rZnVuY19wdHJfYXJnX3R5cGUoZW52LCBjYWxsZXIsIHJlZ3MsIG1ldGEsIHQsIHJlZl90LCByZWZfdG5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYXJncywgaSwgbmFyZ3MsIGFyZ25vLCByZWcpO1xcbi1cXHRcXHRpZiAoa2ZfYXJnX3R5cGUgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4ga2ZfYXJnX3R5cGU7XFxuIFxcbi1cXHRcXHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxcbitcXHRcXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcXHUwMDI2XFx1MDAyNiB0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XFxuLVxcdFxcdFxcdGlmICghcmVnLVxcdTAwM2VtYXBfcHRyKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicG9pbnRlciBpbiAlcyBpc24ndCBtYXAgcG9pbnRlclxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIgXFx1MDAyNlxcdTAwMjYgKHJlZy1cXHUwMDNlbWFwX3B0ci1cXHUwMDNlcmVjb3JkLVxcdTAwM2V3cV9vZmYgXFx1MDAzZT0gMCB8fFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICByZWctXFx1MDAzZW1hcF9wdHItXFx1MDAzZXJlY29yZC1cXHUwMDNldGFza193b3JrX29mZiBcXHUwMDNlPSAwKSkge1xcbi1cXHRcXHRcXHRcXHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0Olxcbi1cXHRcXHRcXHRcXHQgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpXFxuLVxcdFxcdFxcdFxcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcXG4tXFx0XFx0XFx0XFx0ICogaWYgKGlubmVyX21hcDEgXFx1MDAyNlxcdTAwMjYgaW5uZXJfbWFwMikge1xcbi1cXHRcXHRcXHRcXHQgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xcbi1cXHRcXHRcXHRcXHQgKiAgICAgaWYgKHdxKVxcbi1cXHRcXHRcXHRcXHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXFxuLVxcdFxcdFxcdFxcdCAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpO1xcbi1cXHRcXHRcXHRcXHQgKiB9XFxuLVxcdFxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdFxcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlbWFwLnB0ciAhPSByZWctXFx1MDAzZW1hcF9wdHIgfHxcXG4tXFx0XFx0XFx0XFx0ICAgIG1ldGEtXFx1MDAzZW1hcC51aWQgIT0gcmVnLVxcdTAwM2VtYXBfdWlkKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZW1hcF9wdHItXFx1MDAzZXJlY29yZC1cXHUwMDNldGFza193b3JrX29mZiBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwiYnBmX3Rhc2tfd29yayBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMyBtYXBfdWlkPSVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAudWlkLCByZWctXFx1MDAzZW1hcF91aWQpO1xcbi1cXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFxcIndvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAudWlkLCByZWctXFx1MDAzZW1hcF91aWQpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC5wdHIgPSByZWctXFx1MDAzZW1hcF9wdHI7XFxuLVxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQgPSByZWctXFx1MDAzZW1hcF91aWQ7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbitcXG4rXFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19tYXAoYnRmLCBcXHUwMDI2YXJnc1tpXSkpIHtcXG4rXFx0XFx0XFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xcbitcXHRcXHRcXHRyZWZfdCA9IGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCByZWZfaWQpO1xcbitcXHRcXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHtcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQ09OU1Q6XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOlxcbitcXHRcXHRjYXNlIEtGX0FSR19NRU1fU0laRTpcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQU5ZVEhJTkc6XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcXG4tXFx0XFx0XFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOlxcbkBAIC0xMjIxNyw3ICsxMjI0NSwzNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdFxcdHN3aXRjaCAoa2ZfYXJnX3R5cGUpIHtcXG4rXFx0XFx0c3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUOlxcbitcXHRcXHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyBub3QgYSBzY2FsYXJcXFxcblxcXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxcbitcXHRcXHRjYXNlIEtGX0FSR19BTllUSElORzpcXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyBub3QgYSBzY2FsYXJcXFxcblxcXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk86XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbm90IGEgc2NhbGFyXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGJ0ZiwgXFx1MDAyNmFyZ3NbaV0sIFxcXCJyZG9ubHlfYnVmX3NpemVcXFwiKSlcXG4rXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sIFxcdTAwMjZtZXRhLVxcdTAwM2VyZXRfbWVtKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ1RYOlxcbiBcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBleHBlY3RlZCBwb2ludGVyIHRvIGN0eCwgYnV0IGdvdCAlc1xcXFxuXFxcIixcXG5AQCAtMTIzODYsNTEgKzEyNDQ0LDc3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01BUDpcXG4tXFx0XFx0XFx0LyogSWYgYXJndW1lbnQgaGFzICdfX21hcCcgc3VmZml4IGV4cGVjdCAnc3RydWN0IGJwZl9tYXAgKicgKi9cXG4tXFx0XFx0XFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xcbi1cXHRcXHRcXHRyZWZfdCA9IGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCByZWZfaWQpO1xcbi1cXHRcXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi1cXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcXG4tXFx0XFx0XFx0LyogT25seSBiYXNlX3R5cGUgaXMgY2hlY2tlZCwgZnVydGhlciBjaGVja3MgYXJlIGRvbmUgaGVyZSAqL1xcbi1cXHRcXHRcXHRpZiAoKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgfHxcXG4tXFx0XFx0XFx0ICAgICAoYnBmX3R5cGVfaGFzX3Vuc2FmZV9tb2RpZmllcnMocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNiAhaXNfcmN1X3JlZyhyZWcpKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFyZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKV0pIHtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyAlcyBcXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksXFxuLVxcdFxcdFxcdFxcdFxcdHJlZ190eXBlX3N0cihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbi1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImV4cGVjdGVkICVzIG9yIHNvY2tldFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0cmVnX3R5cGVfc3RyKGVudiwgYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkgfFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICh0eXBlX2ZsYWcocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2IEJQRl9SRUdfVFJVU1RFRF9NT0RJRklFUlMpKSk7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XFxuK1xcdFxcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBDT05TVF9QVFJfVE9fTUFQKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicG9pbnRlciBpbiAlcyBpc24ndCBtYXAgcG9pbnRlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XFxuK1xcdFxcdFxcdHJldCA9IHByb2Nlc3NfbWFwX3B0cl9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxcbi1cXHRcXHRcXHRyZXNvbHZlX3JldCA9IGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgXFx1MDAyNnR5cGVfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgcmVmZXJlbmNlIHR5cGUoJyVzICVzJykgc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZDogJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksXFxuLVxcdFxcdFxcdFxcdFxcdHJlZl90bmFtZSwgUFRSX0VSUihyZXNvbHZlX3JldCkpO1xcbitcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxcbitcXHRcXHRcXHQvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovXFxuK1xcdFxcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIHx8XFxuK1xcdFxcdFxcdCAgICByZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKV0pIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0XFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdFxcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmICghX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcXG4rXFx0XFx0XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTtcXG4rXFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgJXMgZXhwZWN0ZWQgJXMgJXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cXHUwMDNldHlwZSksXFxuK1xcdFxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZWcyYnRmX3R5cGUgIT0gTk9UX0lOSVQpXFxuK1xcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiIG9yICVzXFxcIiwgcmVnX3R5cGVfc3RyKGVudiwgcmVnMmJ0Zl90eXBlKSk7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIHR5cGVfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxcbi1cXHRcXHR7XFxuLVxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpidWZmX3JlZyA9IHJlZztcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYnVmZl9hcmcgPSBcXHUwMDI2YXJnc1tpXTtcXG4tXFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGkgKyAxKTtcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc2l6ZV9hcmcgPSBcXHUwMDI2YXJnc1tpICsgMV07XFxuLVxcdFxcdFxcdGFyZ25vX3QgbmV4dF9hcmdubyA9IGFyZ25vX2Zyb21fYXJnKGkgKyAyKTtcXG4tXFxuLVxcdFxcdFxcdGlmICghYnBmX3JlZ2lzdGVyX2lzX251bGwoYnVmZl9yZWcpIHx8ICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cXHUwMDNlYnRmLCBidWZmX2FyZykpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYXJnbm8sIG5leHRfYXJnbm8pO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSWYgdGhlIHJlZ2lzdGVyIGRvZXMgbm90IGNvbnRhaW4gYnRmIGlkIGJ1dCB0aGUgYXJndW1lbnQgdHlwZSBpcyBhIHBvaW50ZXIgdG9cXG4rXFx0XFx0XFx0ICogc2NhbGFyLW9ubHkgc3RydWN0LCBhbGxvdyB2ZXJpZnlpbmcgaXQgYXMgYSBmaXhlZCBzaXplIG1lbW9yeS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGtmX2FyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTtcXG4rXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuK1xcdFxcdFxcdGlmIChrZl9hcmdfdHlwZSBcXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcXHUwMDI2dHlwZV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0aWYgKElTX0VSUihyZXNvbHZlX3JldCkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyByZWZlcmVuY2UgdHlwZSgnJXMgJXMnKSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmVmX3RuYW1lLCBQVFJfRVJSKHJlc29sdmVfcmV0KSk7XFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdHJldCA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCB0eXBlX3NpemUsIEJQRl9SRUFEIHwgQlBGX1dSSVRFLCBtZXRhKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpidWZmX3JlZyA9IHJlZztcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGkgKyAxKTtcXG4rXFx0XFx0XFx0XFx0YXJnbm9fdCBuZXh0X2FyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSArIDIpO1xcbitcXG4rXFx0XFx0XFx0XFx0cmV0ID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLCBhcmdubywgbmV4dF9hcmdubyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IEJQRl9SRUFEIHwgQlBGX1dSSVRFLCB0cnVlLCBtZXRhKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBhbmQgXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4gXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtZW1vcnksIGxlbiBwYWlyIGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc1xcXFxuXFxcIixcXG5AQCAtMTI0MzgsMjUgKzEyNTIyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXFx1MDAzZWJ0Ziwgc2l6ZV9hcmcsIHNpemVfcmVnKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcXFwiKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKCF0bnVtX2lzX2NvbnN0KHNpemVfcmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbi1cXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgbmV4dF9hcmdubykpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xcbi1cXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQudmFsdWUgPSBzaXplX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0LyogU2tpcCBuZXh0ICdfX3N6JyBvciAnX19zemsnIGFyZ3VtZW50ICovXFxuLVxcdFxcdFxcdGkrKztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOlxcbiBcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19GVU5DKSB7XFxuIFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgZXhwZWN0ZWQgcG9pbnRlciB0byBmdW5jXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbkBAIC0xMjUxNCw3ICsxMjU4MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IHByb2Nlc3NfdGltZXJfa2Z1bmMoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4rXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXFx1MDAyNm1ldGEtXFx1MDAzZW1hcCk7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI2NzYsNyArMTI3NDIsNyBAQCBzNjQgYnBmX2hlbHBlcl9zdGFja19hY2Nlc3NfYnl0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuXFxuIFxcdFxcdFxcdHNpemUgPSBmbi1cXHUwMDNlYXJnX3NpemVbYXJnXTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKGFyZyArIDEgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKGFyZyArIDEgXFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGFyZ190eXBlX2lzX21lbV9zaXplKGZuLVxcdTAwM2VhcmdfdHlwZVthcmcgKyAxXSkpIHtcXG4gXFx0XFx0XFx0aW50IHNpemVfcmVnID0gQlBGX1JFR18xICsgYXJnICsgMTtcXG4gXFxuQEAgLTEyOTc1LDYgKzEzMDQxLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcXG4gXFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcXG4rXFx0c3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbiBcXG5AQCAtMTI5OTEsNiArMTMwNTgsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0ZnVuY19uYW1lID0gbWV0YS5mdW5jX25hbWU7XFxuIFxcdGluc25fYXV4ID0gXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF07XFxuIFxcbitcXHRkZXNjID0gZmluZF9rZnVuY19kZXNjKGVudi1cXHUwMDNlcHJvZywgaW5zbi1cXHUwMDNlaW1tLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRpZiAoIWRlc2MpIHtcXG4rXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcImtmdW5jIGRlc2NyaXB0b3Igbm90IGZvdW5kIGZvciBmdW5jX2lkICV1XFxcIiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0bWV0YS5mbiA9IGRlc2MtXFx1MDAzZXByb3RvO1xcbitcXG4gXFx0aW5zbl9hdXgtXFx1MDAzZWlzX2l0ZXJfbmV4dCA9IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpO1xcbiBcXG4gXFx0aWYgKCFpbnNuLVxcdTAwM2VvZmYgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuaW5kZXggNzZhYjUxZGVhYTZiOTUuLjg5MTg5N2Y4YTFiMzU3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbkBAIC0yMjEsNyArMjIxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMjU4LDcgKzI1OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0yNzMsNyArMjczLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0zMDgsNyArMzA4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfY29tcGF0X3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9zdHJfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFICovXFxuQEAgLTM4Myw3ICszODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV93cml0ZV91c2VyX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgTUFYX1RSQUNFX1BSSU5US19WQVJBUkdTXFx0M1xcbkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfcHJpbnRrX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIF9fc2V0X3ByaW50a19jbHJfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbkBAIC00NzQsOSArNDc0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfdnByaW50a19wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF90cmFjZV92cHJpbnRrX3Byb3RvKHZvaWQpXFxuQEAgLTUxOCw5ICs1MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gXFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3NlcV9maWxlX2lkc1swXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9zZXFfd3JpdGUsIHN0cnVjdCBzZXFfZmlsZSAqLCBtLCBjb25zdCB2b2lkICosIGRhdGEsIHUzMiwgbGVuKVxcbkBAIC01MzUsNyArNTM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3dyaXRlX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gXFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3NlcV9maWxlX2lkc1swXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3NlcV9wcmludGZfYnRmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgc3RydWN0IGJ0Zl9wdHIgKiwgcHRyLFxcbkBAIC01NTksNyArNTU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC02MzMsNyArNjMzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmJwZl9nZXRfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvKHZvaWQpXFxuQEAgLTczMCw3ICs3MzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9ldmVudF9vdXRwdXRfbmVzdF9sZXZlbCk7XFxuQEAgLTk5Niw3ICs5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9kX3BhdGhfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZicGZfZF9wYXRoX2J0Zl9pZHNbMF0sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFsbG93ZWRcXHQ9IGJwZl9kX3BhdGhfYWxsb3dlZCxcXG4gfTtcXG4gXFxuQEAgLTEwNTMsOSArMTA1Myw5IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0xMjE4LDcgKzEyMTgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9icmFuY2hfc25hcHNob3RfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzMoZ2V0X2Z1bmNfYXJnLCB2b2lkICosIGN0eCwgdTMyLCBuLCB1NjQgKiwgdmFsdWUpXFxuQEAgLTE0MjEsNyArMTQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3RwID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfdHAsIHZvaWQgKiwgdHBfYnVmZiwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbkBAIC0xNDYyLDcgKzE0NjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fdHAgPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0xNTI0LDEyICsxNTI0LDEyIEBAIEJQRl9DQUxMXzMoYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWVfcHJvdG8gPSB7XFxuLSAgICAgICAgIC5mdW5jICAgICAgICAgICA9IGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSxcXG4tICAgICAgICAgLmdwbF9vbmx5ICAgICAgID0gdHJ1ZSxcXG4tICAgICAgICAgLnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXFxuLSAgICAgICAgIC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbi0gICAgICAgICAuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLSAgICAgICAgIC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsXFxuK1xcdC5ncGxfb25seSAgICAgICA9IHRydWUsXFxuK1xcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLFxcbitcXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcXG4rXFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbitcXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG5AQCAtMTU2Niw3ICsxNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVhZF9icmFuY2hfcmVjb3Jkc19wcm90byA9IHtcXG4gXFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMTY0Niw3ICsxNjQ2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fcmF3X3RwID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90bztcXG5AQCAtMTcwMSw3ICsxNzAxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3Jhd190cCA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAwYjdhZmRkMGFlNDc0OC4uZWIwYjcwNmFmNGIyOTYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xNzQ3LDcgKzE3NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMTc4NCw3ICsxNzg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIGludCBfX2JwZl9za2JfbG9hZF9ieXRlcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0LCB2b2lkICp0bywgdTMyIGxlbilcXG5AQCAtMTgyMyw3ICsxODIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmxvd19kaXNzZWN0b3JfbG9hZF9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmUsIGNvbnN0IHN0cnVjdCBza19idWZmICosIHNrYixcXG5AQCAtMTg2Nyw3ICsxODY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMjA2Myw5ICsyMDYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY3N1bV9kaWZmX3Byb3RvID0ge1xcbiBcXHQucGt0X2FjY2Vzc1xcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTI2MjEsNyArMjYyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNDE5NCw3ICs0MTk0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIGludCBfX2JwZl94ZHBfbG9hZF9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxcbkBAIC00MjI2LDcgKzQyMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc3RvcmVfYnl0ZXNfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIGludCBfX2JwZl94ZHBfc3RvcmVfYnl0ZXMoc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBvZmZzZXQsIHZvaWQgKmJ1ZiwgdTMyIGxlbilcXG5AQCAtNDc4OSw3ICs0Nzg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2V2ZW50X291dHB1dF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJURl9JRF9MSVNUX1NJTkdMRShicGZfc2tiX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHNrX2J1ZmYpXFxuQEAgLTQ4MDMsNyArNDgwMyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpXFxuQEAgLTQ4ODYsNyArNDg4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfdHVubmVsX2tleV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNDkyMSw3ICs0OTIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfb3B0X3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBtZXRhZGF0YV9kc3QgX19wZXJjcHUgKm1kX2RzdDtcXG5AQCAtNTAwMyw3ICs1MDAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90dW5uZWxfa2V5X3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC01MDMxLDcgKzUwMzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG5AQCAtNTIwMyw3ICs1MjAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2V2ZW50X291dHB1dF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJURl9JRF9MSVNUX1NJTkdMRShicGZfeGRwX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHhkcF9idWZmKVxcbkBAIC01MjE3LDcgKzUyMTcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9vdXRwdXRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8xKGJwZl9nZXRfc29ja2V0X2Nvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKVxcbkBAIC01NzY0LDcgKzU3NjQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9za19nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcXG5AQCAtNTc4MSw3ICs1NzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19nZXRzb2Nrb3B0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfc2tfc2V0c29ja29wdF9ub2RlbGF5LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcXG5AQCAtNTgwNSw3ICs1ODA1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXlfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcXG5AQCAtNTgyMiw3ICs1ODIyLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXFxuQEAgLTU4MzksNyArNTgzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcXG5AQCAtNTg1Niw3ICs1ODU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxuQEAgLTU4NzMsNyArNTg3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBza19icGZfc2V0X2dldF9ieXBhc3NfcHJvdF9tZW0oc3RydWN0IHNvY2sgKnNrLFxcbkBAIC01OTE4LDcgKzU5MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9zZXRzb2Nrb3B0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXFxuQEAgLTU5NDQsNyArNTk0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfY3JlYXRlX2dldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX29wc19zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXFxuQEAgLTU5NzAsNyArNTk3MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX3NldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGJwZl9zb2NrX29wc19nZXRfc3luKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqYnBmX3NvY2ssXFxuQEAgLTYwODAsNyArNjA4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2dldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG5AQCAtNjE0Nyw3ICs2MTQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfWEZSTVxcbkBAIC02MjAwLDcgKzYyMDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiAjZW5kaWZcXG5AQCAtNjYwNyw3ICs2NjA3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2ZpYl9sb29rdXBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcXG4tXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNjY2Nyw3ICs2NjY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2ZpYl9sb29rdXBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcXG4tXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNjg2NSw3ICs2ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xcbkBAIC02ODc1LDcgKzY4NzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRVxcbiB9O1xcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxuQEAgLTY5MTksNyArNjkxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRVxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5AQCAtNzAwOCw3ICs3MDA4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRVxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG5AQCAtNzI0OSw3ICs3MjQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTcyNjgsNyArNzI2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03Mjg3LDcgKzcyODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzMxMSw3ICs3MzExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTczMzUsNyArNzMzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03MzU5LDcgKzczNTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzM5Nyw3ICs3Mzk3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzQyMSw3ICs3NDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGUgICAgICAgPSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzQ0NSw3ICs3NDQ1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzQ2NSw3ICs3NDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03NDg0LDcgKzc0ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTc1MDMsNyArNzUwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzgyMyw5ICs3ODIzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2NoZWNrX3N5bmNvb2tpZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbkBAIC03ODkyLDkgKzc4OTIsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxcbkBAIC04MDQ4LDcgKzgwNDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19sb2FkX2hkcl9vcHRfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtODEyNiw3ICs4MTI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc3RvcmVfaGRyX29wdF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtODIyMSw3ICs4MjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjRfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLFxcbiBcXHQuYXJnMV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXFxuQEAgLTgyNTMsNyArODI1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1JET05MWSxcXG4gXFx0LmFyZzFfc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzIoYnBmX3RjcF9yYXdfY2hlY2tfc3luY29va2llX2lwdjQsIHN0cnVjdCBpcGhkciAqLCBpcGgsXFxuQEAgLTExNzI2LDcgKzExNzI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShza19yZXVzZXBvcnRfbG9hZF9ieXRlc19yZWxhdGl2ZSxcXG5AQCAtMTE3NDQsNyArMTE3NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuaW5kZXggYmU5N2Y2ODg3ZjBlN2YuLmE4MWZhYTcwOWRkNWJiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuQEAgLTY3LDYgKzY3LDcgQEBcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX21hc2tpbmcuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbWF5X2dvdG9fMS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9tYXlfZ290b18yLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZlcmlmaWVyX21lbV9zaXplX3JlZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9tZXRhX2FjY2Vzcy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9tb3ZzeC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9tdHUuc2tlbC5oXFxcIlxcbkBAIC0yMjEsNiArMjIyLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX21hcF9yZXRfdmFsKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21hcF9yZXRfdmFsKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWFza2luZyh2b2lkKSAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWFza2luZyk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21heV9nb3RvXzEodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21heV9nb3RvXzEpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tYXlfZ290b18yKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXlfZ290b18yKTsgfVxcbit2b2lkIHRlc3RfdmVyaWZpZXJfbWVtX3NpemVfcmVnKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWVtX3NpemVfcmVnKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWV0YV9hY2Nlc3Modm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWV0YV9hY2Nlc3MpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tb3ZzeCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbW92c3gpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdWwodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tdWwpOyB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xcbmluZGV4IGQwZDY1ZDZkNDUwY2Y1Li5lZmU3YmNhZTcwZjg1YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcXG5AQCAtNjQsNyArNjQsNyBAQCBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX25vX251bGxfY2hlY2ssIHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IGNoYXIgKlxcbiB9XFxuIFxcbiBTRUMoXFxcInRwX2J0Zi9jZ3JvdXBfbWtkaXJcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcIlIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgY2dyb3VwIG11c3QgcG9pbnRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBjZ3JvdXBcXFwiKVxcbiBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCBjaGFyICpwYXRoKVxcbiB7XFxuIFxcdHN0cnVjdCBjZ3JvdXAgKmFjcXVpcmVkLCAqc3RhY2tfY2dycCA9IChzdHJ1Y3QgY2dyb3VwICopXFx1MDAyNnBhdGg7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcXG5pbmRleCA1YjQ0NTM3NDdjMjMwOC4uMDk1MmQxZWJmMGYxN2EgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IGhlbHBlcl9wYXJhbV9ub3Rfb2sodm9pZCAqY3R4KVxcbiBcXG4gXFx0cCA9IGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcXG4gXFx0LypcXG4tXFx0ICogQW55IGhlbHBlciB3aXRoIEFSR19DT05TVF9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLFxcbitcXHQgKiBBbnkgaGVscGVyIHdpdGggQVJHX01FTV9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLFxcbiBcXHQgKiB0aGUgbW9zdCBwZXJtaXNzaXZlIGNvbnN0cmFpbnRcXG4gXFx0ICovXFxuIFxcdGJwZl9jb3B5X2Zyb21fdXNlcihwLCAwLCAodm9pZCAqKTQyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXFxuaW5kZXggODk0MmI1NDc4MTI5MTcuLjVjOTliMWU2NTMyYmZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xcbkBAIC01MCw3ICs1MCw3IEBAIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mXFxuIH1cXG4gXFxuIFNFQyhcXFwidHBfYnRmL3Rhc2tfbmV3dGFza1xcXCIpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgcG9pbnRlciB0eXBlIFNUUlVDVCB0YXNrX3N0cnVjdCBtdXN0IHBvaW50XFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgdGFza19zdHJ1Y3RcXFwiKVxcbiBpbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkLCAqc3RhY2tfdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilcXHUwMDI2Y2xvbmVfZmxhZ3M7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xcbmluZGV4IGJjMDM4YWMyZGY5OGUyLi4xYTI3M2U0MTZmZWRmZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcXG5AQCAtMTE5NSw3ICsxMTk1LDcgQEAgbDBfJT06XFx0cjEgPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHIzICs9IC04O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjUgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LyogVGhlIDR0aCBhcmd1bWVudCBvZiBicGZfc2tiX3N0b3JlX2J5dGVzIGlzIGRlZmluZWQgYXMgXFxcXFxcbi1cXHQgKiBBUkdfQ09OU1RfU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICdyNCAhPSAwJyBcXFxcXFxuK1xcdCAqIEFSR19NRU1fU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICdyNCAhPSAwJyBcXFxcXFxuIFxcdCAqIGlzIHByb3ZpZGluZyB1cyB0aGlzIGV4Y2x1c2lvbiBvZiB6ZXJvIGZyb20gaW5pdGlhbCBcXFxcXFxuIFxcdCAqIFswLCA3XSByYW5nZS5cXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAqL1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXFxuaW5kZXggZjJjNTRlNGQ4OWViZWYuLjM0M2ZjMDhkOTc0Nzk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xcbkBAIC04NSw3ICs4NSw3IEBAIF9fbmFrZWQgdm9pZCBzdGFja19iaXR3aXNlX2FuZF96ZXJvX2luY2x1ZGVkKHZvaWQpXFxuIFxcdHIyICs9IC02NDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHI0ID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxcXFxuLVxcdCAqIEFSR19DT05TVF9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcXFxcbitcXHQgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxcXFxuIFxcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCBcXHUwMDI2ZnBbLTY0XSBpc1xcXFxcXG4gXFx0ICogbm90IGluaXRpYWxpemVkLlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICovXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yNzgsNyArMjc4LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2ptcF9ub19taW5fY2hlY2sodm9pZClcXG4gXFx0cjIgKz0gLTY0O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXFxcXG4tXFx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxcXFxuK1xcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXFxcXG4gXFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IGF0IFxcdTAwMjZmcFstNjRdIGlzXFxcXFxcbiBcXHQgKiBub3QgaW5pdGlhbGl6ZWQuXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTc3OCw3ICs3NzgsNyBAQCBfX25ha2VkIHZvaWQgdmFyaWFibGVfbWVtb3J5XzhfYnl0ZXNfbGVhayh2b2lkKVxcbiBcXHRyMyArPSAxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXFxcXG4tXFx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxcXFxuK1xcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXFxcXG4gXFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IHJlZ2lvbiBbMSwgNjRdXFxcXFxcbiBcXHQgKiBhdCBcXHUwMDI2ZnBbLTY0XSBpcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQuXFx0XFxcXFxcbiBcXHQgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXFxuaW5kZXggNmQyYTM4NTk3YzM0ZjQuLmM2NjAzYTExOGZkYzM5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXFxuQEAgLTkxLDcgKzkxLDcgQEAgbDBfJT06XFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiAvKiBDYWxsIGEgZnVuY3Rpb24gdGFraW5nIGEgcG9pbnRlciBhbmQgYSBzaXplIHdoaWNoIGRvZXNuJ3QgYWxsb3cgdGhlIHNpemUgdG9cXG4gICogYmUgemVybyAoaS5lLiBicGZfdHJhY2VfcHJpbnRrKCkgZGVjbGFyZXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZVxcbi0gKiBBUkdfQ09OU1RfU0laRSwgbm90IEFSR19DT05TVF9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlXFxuKyAqIEFSR19NRU1fU0laRSwgbm90IEFSR19NRU1fU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZVxcbiAgKiBzaXplIGFuZCBleHBlY3QgdG8gZmFpbC5cXG4gICovXFxuIFNFQyhcXFwidHJhY2Vwb2ludFxcXCIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM4ZWVlMTM1MDAyNzBiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xcbkBAIC0wLDAgKzEsNjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfa2Z1bmNzLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3N0cnVjdCBpbm5lcl9tYXAge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBpbnQpO1xcbit9IGlubmVyX21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZX09GX01BUFMpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX2FycmF5KHZhbHVlcywgc3RydWN0IGlubmVyX21hcCk7XFxuK30gb3V0ZXJfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKSA9IHtcXG4rXFx0LnZhbHVlcyA9IHsgWzBdID0gXFx1MDAyNmlubmVyX21hcCB9LFxcbit9O1xcbitcXG4rLyogQW4gdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgbXVzdCBiZSByZWplY3RlZCBhcyBhIF9fbnVsbGFibGUga2Z1bmMgbWVtIGJ1ZmZlciAqL1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwidHlwZT1tYXBfcHRyIGV4cGVjdGVkPWZwXFxcIilcXG4raW50IG1hcG9mbWFwc192YWx1ZV9hc19rZnVuY19tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkcHRyO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHR2b2lkICppbm5lcjtcXG4rXFx0Y2hhciAqcDtcXG4rXFxuK1xcdGlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2b3V0ZXJfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fc2tiKHNrYiwgMCwgXFx1MDAyNmRwdHIpO1xcbitcXHQvKiBwYXNzIHRoZSB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBhcyB0aGUgc2NyYXRjaCBidWZmZXIgKi9cXG4rXFx0cCA9IGJwZl9keW5wdHJfc2xpY2UoXFx1MDAyNmRwdHIsIDAsIGlubmVyLCA0KTtcXG4rXFx0aWYgKHApXFxuK1xcdFxcdHJldHVybiBwWzBdO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQW4gdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgbXVzdCBiZSByZWplY3RlZCBhcyBhIFBUUl9NQVlCRV9OVUxMIGhlbHBlciBtZW0gYnVmZmVyICovXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJ0eXBlPW1hcF9wdHIgZXhwZWN0ZWQ9ZnBcXFwiKVxcbitpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2hlbHBlcl9tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHR2b2lkICppbm5lcjtcXG4rXFxuK1xcdGlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2b3V0ZXJfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXFxuK1xcbitcXHQvKiBAZnJvbSBpcyBhIG51bGxhYmxlIHJlYWQtb25seSBtZW0rc2l6ZSBhcmc7IG91dGVyIHZhbHVlX3NpemUgaXMgNCAqL1xcbitcXHRyZXR1cm4gYnBmX2NzdW1fZGlmZihpbm5lciwgNCwgTlVMTCwgMCwgMCkgKyBza2ItXFx1MDAzZWxlbjtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbmluZGV4IDI4NzA3MzhkOTNmN2VjLi44ZjBjNDU0MjFmODkzOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbkBAIC0yOCw3ICsyOCw3IEBAIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19udWxsKVxcbiB9XFxuIFxcbiBTRUMoXFxcImxzbS5zL2lub2RlX2dldHhhdHRyXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFxcXCIpXFxuIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19mcClcXG4ge1xcbiBcXHR1NjQgeDtcXG5AQCAtOTgsNyArOTgsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbnVsbClcXG4gfVxcbiBcXG4gU0VDKFxcXCJsc20ucy90YXNrX2FsbG9jXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cXFwiKVxcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGF0aCAqcm9vdDtcXG5AQCAtMTEyLDcgKzExMiw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrXFxuIH1cXG4gXFxuIFNFQyhcXFwibHNtLnMvZmlsZV9vcGVuXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cXFwiKVxcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fY3VycmVudClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGF0aCAqcHdkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXFxuaW5kZXggMzAyZDcxMmUwZDdlZDIuLjhjZDYyNmUwNDU1MTU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcXG5AQCAtMzEsNyArMzEsNyBAQFxcbiBcXHR9LFxcbiBcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxuIFxcdC5yZXN1bHQgPSBSRUpFQ1QsXFxuLVxcdC5lcnJzdHIgPSBcXFwiUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDEgbXVzdCBwb2ludCB0byBzY2FsYXJcXFwiLFxcbitcXHQuZXJyc3RyID0gXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDFcXFwiLFxcbiBcXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xcbiBcXHRcXHR7IFxcXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwxXFxcIiwgMiB9LFxcbiBcXHR9LFxcbkBAIC00Niw3ICs0Niw3IEBAXFxuIFxcdH0sXFxuIFxcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG4gXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4tXFx0LmVycnN0ciA9IFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXFxcIixcXG4rXFx0LmVycnN0ciA9IFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDJcXFwiLFxcbiBcXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xcbiBcXHRcXHR7IFxcXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwyXFxcIiwgMiB9LFxcbiBcXHR9LFxcbkBAIC02MSw3ICs2MSw3IEBAXFxuIFxcdH0sXFxuIFxcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG4gXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4tXFx0LmVycnN0ciA9IFxcXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMyBtdXN0IHBvaW50IHRvIHNjYWxhclxcXCIsXFxuK1xcdC5lcnJzdHIgPSBcXFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsM1xcXCIsXFxuIFxcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XFxuIFxcdFxcdHsgXFxcImJwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDNcXFwiLCAyIH0sXFxuIFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjMzOjU5Ljk1NTY2NjE1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0NDk4MDQzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9hZGRfa2Z1bmNfY2FsbFwiLFxuICAgIFwiYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWJcIixcbiAgICBcImNoZWNrX2hlbHBlcl9jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHZlcmlmaWVyIHRvIHVuaWZ5IGtmdW5jIGFuZCBoZWxwZXIgYXJndW1lbnQgdmVyaWZpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMgZm9yIGtmdW5jcywgcmVuYW1lcyBgQVJHX0NPTlNUX1NJWkVgIHRvIGBBUkdfTUVNX1NJWkVgLCBhbmQgbW9kaWZpZXMgaG93IGBicGZfZnVuY19wcm90b2AgaXMgZ2VuZXJhdGVkIGFuZCB1c2VkIGZvciBrZnVuY3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjU1MmM5MWQ3OTVmODllZDAyMTU2OGU3YTI2NWYzN2VlM2Q2OGFiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjMzOjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGM4MDFhMzMwYWVjZTA4Li5jYmRlODZkMDgyY2NlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0yNTAsNiArMjUwLDM0IEBAIE9yOjpcbiAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICB9XG4gXG4rMi4zLjcgX19jb25zdF9tYXAgYW5kIF9fbWFwIEFubm90YXRpb25zXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rVGhlc2UgYW5ub3RhdGlvbnMgYXJlIHVzZWQgZm9yIGBgc3RydWN0IGJwZl9tYXAgKmBgIGFyZ3VtZW50cyBhbmQgZGlzdGluZ3Vpc2ggYVxuK3ZlcmlmaWVyLWtub3duIG1hcCBmcm9tIGFuIG9wYXF1ZSBvbmUuXG4rXG4rYGBfX2NvbnN0X21hcGBgIGluZGljYXRlcyBhIG1hcCBtdXN0IGJlIGtub3duIGF0IHRoZSB2ZXJpZmljYXRpb24gdGltZSwgaS5lLiBhXG4rY29uY3JldGUgbWFwIGZkIHRoZSBCUEYgcHJvZ3JhbSByZWZlcmVuY2VzIGRpcmVjdGx5LlxuK1xuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuK1xuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuKyAgICAgICAge1xuKyAgICAgICAgICAgICAgICAuLi5cbisgICAgICAgIH1cbitcbitgYF9fbWFwYGAgaW5kaWNhdGVzIGFuIG9wYXF1ZSBgYHN0cnVjdCBicGZfbWFwICpgYCB0aGF0IG1heSBiZSByZXNvbHZlZFxuK2F0IHJ1biB0aW1lLiBUaGUgYXJndW1lbnQgbWF5IHRha2UgZWl0aGVyIGEgbWFwIGZkIG9yIGEgYGBQVFJfVE9fQlRGX0lEYGBcbitgYHN0cnVjdCBicGZfbWFwYGAgcG9pbnRlci5cbitcbitBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbitcbisgICAgICAgIF9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIC4uLilcbisgICAgICAgIHtcbisgICAgICAgICAgICAgICAgLi4uXG4rICAgICAgICB9XG4rXG4gLi4gX0JQRl9rZnVuY19ub2RlZjpcbiBcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXG5AQCAtNDExLDcgKzQzOSw3IEBAIEV4YW1wbGUgZGVjbGFyYXRpb246XG4gLi4gY29kZS1ibG9jazo6IGNcbiBcbiBcdF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi1cdFx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XG4gXG4gRXhhbXBsZSB1c2FnZSBpbiBCUEYgcHJvZ3JhbTpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggZTA2NmY0NGE5YzA1ODAuLmVmMTcyMTQzYjljOWE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTc0OCw2ICs3NDgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGJwZl9tYXBfb2ZmbG9hZF9vcHM7XG4gZW51bSBicGZfdHlwZV9mbGFnIHtcbiBcdC8qIFBUUiBtYXkgYmUgTlVMTC4gKi9cbiBcdFBUUl9NQVlCRV9OVUxMXHRcdD0gQklUKDAgKyBCUEZfQkFTRV9UWVBFX0JJVFMpLFxuK1x0U0NBTEFSX01BWUJFX1pFUk9cdD0gUFRSX01BWUJFX05VTEwsXG4gXG4gXHQvKiBNRU0gaXMgcmVhZC1vbmx5LiBXaGVuIGFwcGxpZWQgb24gYnBmX2FyZywgaXQgaW5kaWNhdGVzIHRoZSBhcmcgaXNcbiBcdCAqIGNvbXBhdGlibGUgd2l0aCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZSBtZW1vcnkuXG5AQCAtODg4LDggKzg4OSw3IEBAIGVudW0gYnBmX2FyZ190eXBlIHtcbiBcdEFSR19QVFJfVE9fTUVNLFx0XHQvKiBwb2ludGVyIHRvIHZhbGlkIG1lbW9yeSAoc3RhY2ssIHBhY2tldCwgbWFwIHZhbHVlKSAqL1xuIFx0QVJHX1BUUl9UT19BUkVOQSxcbiBcbi1cdEFSR19DT05TVF9TSVpFLFx0XHQvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi9cbi1cdEFSR19DT05TVF9TSVpFX09SX1pFUk8sXHQvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgb3IgMCAqL1xuK1x0QVJHX01FTV9TSVpFLFx0XHQvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi9cbiBcbiBcdEFSR19QVFJfVE9fQ1RYLFx0XHQvKiBwb2ludGVyIHRvIGNvbnRleHQgKi9cbiBcdEFSR19BTllUSElORyxcdFx0LyogYW55IChpbml0aWFsaXplZCkgYXJndW1lbnQgaXMgb2sgKi9cbkBAIC05MjIsNiArOTIyLDggQEAgZW51bSBicGZfYXJnX3R5cGUge1xuIFx0QVJHX1BUUl9UT19VTklOSVRfTUVNXHRcdD0gTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IEFSR19QVFJfVE9fTUVNLFxuIFx0LyogUG9pbnRlciB0byB2YWxpZCBtZW1vcnkgb2Ygc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUuICovXG4gXHRBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNXHQ9IE1FTV9GSVhFRF9TSVpFIHwgQVJHX1BUUl9UT19NRU0sXG4rXHQvKiBOdW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnksIG9yIDAuICovXG4rXHRBUkdfTUVNX1NJWkVfT1JfWkVST1x0XHQ9IFNDQUxBUl9NQVlCRV9aRVJPIHwgQVJHX01FTV9TSVpFLFxuIFxuIFx0LyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LiBJdHMgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhlIGVudW0gaXNcbiBcdCAqIHdpZGUgZW5vdWdoIHRvIGhvbGQgdGhlIGhpZ2hlciBiaXRzIHJlc2VydmVkIGZvciBicGZfdHlwZV9mbGFnLlxuQEAgLTk2MCw2ICs5NjIsMjEgQEAgZW51bSBicGZfcmV0dXJuX3R5cGUge1xuIH07XG4gc3RhdGljX2Fzc2VydChfX0JQRl9SRVRfVFlQRV9NQVggXHUwMDNjPSBCUEZfQkFTRV9UWVBFX0xJTUlUKTtcbiBcbisvKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLlxuKyAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXG4rICpcbisgKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvblxuKyAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXG4rICogc3RhY2sgYXJnIHNsb3RzLiBUaGUgSklUIG1heSBtYXAgc29tZSBzdGFjayBhcmcgc2xvdHMgdG8gcmVnaXN0ZXJzIGJhc2VkXG4rICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuXG4rICovXG4rI2RlZmluZSBNQVhfQlBGX0ZVTkNfQVJHUyAxMlxuK1xuKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXG4rICogYSBzaW5nbGUgZnVuY3Rpb24gbWF5IGhhdmUuXG4rICovXG4rI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxuK1xuIC8qIGVCUEYgZnVuY3Rpb24gcHJvdG90eXBlIHVzZWQgYnkgdmVyaWZpZXIgdG8gYWxsb3cgQlBGX0NBTExzIGZyb20gZUJQRiBwcm9ncmFtc1xuICAqIHRvIGluLWtlcm5lbCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBmb3IgYWRqdXN0aW5nIGltbTMyIGZpZWxkIGluIEJQRl9DQUxMXG4gICogaW5zdHJ1Y3Rpb25zIGFmdGVyIHZlcmlmeWluZ1xuQEAgLTk4NCw3ICsxMDAxLDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcbiBcdFx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmc0X3R5cGU7XG4gXHRcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnNV90eXBlO1xuIFx0XHR9O1xuLVx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZVs1XTtcbitcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGVbTUFYX0JQRl9GVU5DX0FSR1NdO1xuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbkBAIC05OTQsNyArMTAxMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XG4gXHRcdFx0dTMyICphcmc0X2J0Zl9pZDtcbiBcdFx0XHR1MzIgKmFyZzVfYnRmX2lkO1xuIFx0XHR9O1xuLVx0XHR1MzIgKmFyZ19idGZfaWRbNV07XG4rXHRcdHUzMiAqYXJnX2J0Zl9pZFtNQVhfQlBGX0ZVTkNfQVJHU107XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0c2l6ZV90IGFyZzFfc2l6ZTtcbiBcdFx0XHRzaXplX3QgYXJnMl9zaXplO1xuQEAgLTEwMDIsNyArMTAxOSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XG4gXHRcdFx0c2l6ZV90IGFyZzRfc2l6ZTtcbiBcdFx0XHRzaXplX3QgYXJnNV9zaXplO1xuIFx0XHR9O1xuLVx0XHRzaXplX3QgYXJnX3NpemVbNV07XG4rXHRcdHNpemVfdCBhcmdfc2l6ZVtNQVhfQlBGX0ZVTkNfQVJHU107XG4gXHR9O1xuIFx0aW50ICpyZXRfYnRmX2lkOyAvKiByZXR1cm4gdmFsdWUgYnRmX2lkICovXG4gXHRib29sICgqYWxsb3dlZCkoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbkBAIC0xMTkyLDIxICsxMjA5LDYgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQge1xuIFx0dTMyXHRcdFx0aml0ZWRfbGVuO1xuIH07XG4gXG4tLyogVGhlIGxvbmdlc3QgdHJhY2Vwb2ludCBoYXMgMTIgYXJncy5cbi0gKiBTZWUgaW5jbHVkZS90cmFjZS9icGZfcHJvYmUuaFxuLSAqXG4tICogQWxzbyByZXVzZSB0aGlzIG1hY3JvIGZvciBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgYSBCUEYgZnVuY3Rpb25cbi0gKiBvciBhIGtmdW5jIGNhbiBoYXZlLiBBcmdzIDEtNSBhcmUgcGFzc2VkIGluIHJlZ2lzdGVycywgYXJncyA2LTEyIHZpYVxuLSAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZFxuLSAqIG9uIHRoZSBuYXRpdmUgY2FsbGluZyBjb252ZW50aW9uIChlLmcuLCBhcmcgNiB0byBSOSBvbiB4ODYtNjQpLlxuLSAqL1xuLSNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTJcbi1cbi0vKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVyc1xuLSAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLlxuLSAqL1xuLSNkZWZpbmUgTUFYX0JQRl9GVU5DX1JFR19BUkdTIDVcbi1cbiAvKiBUaGUgYXJndW1lbnQgaXMgYSBzdHJ1Y3R1cmUgb3IgYSB1bmlvbi4gKi9cbiAjZGVmaW5lIEJURl9GTU9ERUxfU1RSVUNUX0FSR1x0XHRCSVQoMClcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggNjgyYzJjZDNiODQ0MzAuLjA2NTUxNjRlNmFmMmViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE1LDcgKzE1LDcgQEBcbiAgKiBlbnN1cmVzIHRoYXQgdW1heF92YWx1ZSArIChpbnQpb2ZmICsgKGludClzaXplIGNhbm5vdCBvdmVyZmxvdyBhIHU2NC5cbiAgKi9cbiAjZGVmaW5lIEJQRl9NQVhfVkFSX09GRlx0KDEgXHUwMDNjXHUwMDNjIDI5KVxuLS8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19DT05TVF9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlc1xuKy8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19NRU1fU0laRVtfT1JfWkVST10uICBUaGlzIGVuc3VyZXNcbiAgKiB0aGF0IGNvbnZlcnRpbmcgdW1heF92YWx1ZSB0byBpbnQgY2Fubm90IG92ZXJmbG93LlxuICAqL1xuICNkZWZpbmUgQlBGX01BWF9WQVJfU0laXHQoMSBcdTAwM2NcdTAwM2MgMjkpXG5AQCAtMTE4OCw2ICsxMTg4LDcgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgIHUzMiBidGZfaWQsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG4gdm9pZCBicGZfZnJlZV9rZnVuY19idGZfdGFiKHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqdGFiKTtcbit2b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYik7XG4gXG4gaW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyk7XG4gXG5AQCAtMTMwNSw4ICsxMzA2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdTMyIHR5cGVfZmxhZyh1MzIgdHlwZSlcbiAvKiBvbmx5IHVzZSBhZnRlciBjaGVja19hdHRhY2hfYnRmX2lkKCkgKi9cbiBzdGF0aWMgaW5saW5lIGVudW0gYnBmX3Byb2dfdHlwZSByZXNvbHZlX3Byb2dfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuLVx0cmV0dXJuIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNlYXV4LVx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGUpID9cbi1cdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSA6IHByb2ctXHUwMDNldHlwZTtcbitcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQpIHtcbitcdFx0LypcbitcdFx0ICogc2F2ZWRfZHN0X3Byb2dfdHlwZSBpcyBvbmx5IHNldCBvbmNlIGNoZWNrX2F0dGFjaF9idGZfaWQoKVxuK1x0XHQgKiBydW5zLiBCZWZvcmUgdGhhdCAtLSBlLmcuIHdoZW4gZ2VuZXJhdGluZyBrZnVuYyBwcm90b3R5cGVzIGF0XG4rXHRcdCAqIGFkZC1jYWxsIHRpbWUgLS0gZmFsbCBiYWNrIHRvIHRoZSBhdHRhY2ggdGFyZ2V0J3MgdHlwZSwgd2hpY2hcbitcdFx0ICogaXMgYXZhaWxhYmxlIGZyb20gbG9hZCB0aW1lIGFuZCBob2xkcyB0aGUgc2FtZSB2YWx1ZS5cbitcdFx0ICovXG4rXHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlKVxuK1x0XHRcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlO1xuK1x0XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlZHN0X3Byb2cpXG4rXHRcdFx0cmV0dXJuIHByb2ctXHUwMDNlYXV4LVx1MDAzZWRzdF9wcm9nLVx1MDAzZXR5cGU7XG4rXHR9XG4rXHRyZXR1cm4gcHJvZy1cdTAwM2V0eXBlO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfY2hlY2tfcmVjdXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuQEAgLTE0NzksMTAgKzE0OTEsMTcgQEAgc3RydWN0IHJldF9tZW1fZGVzYyB7XG4gXHRib29sIGZvdW5kO1xuIH07XG4gXG4rLyogQSBjb25zdGFudCBzY2FsYXIgYXJndW1lbnQ7IFBvcHVsYXRlZCBieSBwcm9jZXNzX2NvbnN0X2FyZygpICovXG4rc3RydWN0IGFyZ19jb25zdGFudF9kZXNjIHtcbitcdHU2NCB2YWx1ZTtcbitcdGJvb2wgZm91bmQ7XG4rfTtcbitcbiBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEge1xuIFx0LyogQ29tbW9uICovXG4gXHRzdHJ1Y3QgYnRmICpidGY7XG4gXHR1MzIgZnVuY19pZDtcbitcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm47XG4gXHR1OCByZWxlYXNlX3JlZ25vO1xuIFx0dTMyIHJldF9idGZfaWQ7XG4gXHR1MzIgc3VicHJvZ25vO1xuQEAgLTE0OTYsMTAgKzE1MTUsNyBAQCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEge1xuIFx0dTMyIGtmdW5jX2ZsYWdzO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvO1xuIFx0Y29uc3QgY2hhciAqZnVuY19uYW1lO1xuLVx0c3RydWN0IHtcbi1cdFx0dTY0IHZhbHVlO1xuLVx0XHRib29sIGZvdW5kO1xuLVx0fSBhcmdfY29uc3RhbnQ7XG4rXHRzdHJ1Y3QgYXJnX2NvbnN0YW50X2Rlc2MgYXJnX2NvbnN0YW50O1xuIFxuIFx0LyogYXJnX3tidGYsYnRmX2lkLG93bmluZ19yZWZ9IGFyZSB1c2VkIGJ5IGtmdW5jLXNwZWNpZmljIGhhbmRsaW5nLFxuIFx0ICogZ2VuZXJhbGx5IHRvIHBhc3MgaW5mbyBhYm91dCB1c2VyLWRlZmluZWQgbG9jYWwga3B0ciB0eXBlcyB0byBsYXRlclxuQEAgLTE2MTQsNiArMTYzMCw3IEBAIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB7XG4gXG4gc3RydWN0IGJwZl9rZnVuY19kZXNjIHtcbiBcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xuK1x0c3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bztcbiBcdHUzMiBmdW5jX2lkO1xuIFx0czMyIGltbTtcbiBcdHUxNiBvZmZzZXQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbmluZGV4IDJlNGFlMGVmMDg2MDlkLi4yZjQ3M2FkNGZkN2MxYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC02MzYsNyArNjM2LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiAgKiByNSArPSAxXG4gICogLi4uXG4gICogY2FsbCBicGZfcGVyZl9ldmVudF9vdXRwdXQjMjVcbi0gKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPXG4rICogICB3aGVyZSAuYXJnNV90eXBlID0gQVJHX01FTV9TSVpFX09SX1pFUk9cbiAgKlxuICAqIGFuZCB0aGlzIGNhc2U6XG4gICogcjYgPSAxXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuaW5kZXggMzk4M2I0Y2U3M2M4MTEuLjgyYzU5ODg0MTdhMGNmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfbHNtLmNcbisrKyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5AQCAtMTg2LDcgKzE4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ltYV9pbm9kZV9oYXNoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfaW1hX2lub2RlX2hhc2hfYnRmX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFsbG93ZWRcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXG4gfTtcbiBcbkBAIC0yMDUsNyArMjA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfaW1hX2ZpbGVfaGFzaF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX2ltYV9maWxlX2hhc2hfYnRmX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFsbG93ZWRcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNGVlZWFlYjY5NzkwYjkuLjVlOGFjNDVjZTU2YWYzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTg3MDksNyArODcwOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzY3Li5mYjkzNTdiNjRjYWRiYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmNcbisrKyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbkBAIC0yMzA1LDcgKzIzMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25hbWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjM0Nyw3ICsyMzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9jdXJyZW50X3ZhbHVlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc3lzY3RsX2dldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LCBjaGFyICosIGJ1ZixcbkBAIC0yMzY3LDcgKzIzNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3N5c2N0bF9zZXRfbmV3X3ZhbHVlLCBzdHJ1Y3QgYnBmX3N5c2N0bF9rZXJuICosIGN0eCxcbkBAIC0yMzkzLDcgKzIzOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfc2V0X25ld192YWx1ZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTE3Li5jZDg4NzcyMDI0YTgzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXG4rKysgYi9rZXJuZWwvYnBmL2NvcmUuY1xuQEAgLTE5OCw3ICsxOTgsOSBAQCB2b2lkIGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRlZF9saW5mbyA9IE5VTEw7XG4gXHR9XG4gXG4tXHRrZnJlZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIpO1xuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbitcdGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4rI2VuZGlmXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIgPSBOVUxMO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBjMThmMWUxNmVkZWU0Yy4uMThiZTVkNmU0ZjljMjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC0yNzgsNyArMjc4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jb21tX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfUVVFVUVEX1NQSU5MT0NLUykgfHwgZGVmaW5lZChDT05GSUdfQlBGX0FSQ0hfU1BJTkxPQ0spXG5AQCAtNTM5LDcgKzUzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG9sX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcbiBcdC5hcmc0X3NpemVcdD0gc2l6ZW9mKHM2NCksXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG91bF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsXG4gXHQuYXJnNF9zaXplXHQ9IHNpemVvZih1NjQpLFxuQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJuY21wX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fQ09OU1RfU1RSLFxuIH07XG4gXG5AQCAtNjI3LDcgKzYyNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfcmF3X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG8gPSB7XG5AQCAtNjUzLDcgKzY1Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG8gPSAge1xuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9jb3B5X2Zyb21fdXNlciwgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSxcbkBAIC02NzUsNyArNjc1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC03MDYsNyArNzA2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuIFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnNF9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG5AQCAtMTA5MywxMCArMTA5MywxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX0NPTlNUX1NUUixcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgKm1hcF9rZXlfZnJvbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTMyICphcnJfaWR4KVxuQEAgLTE4ODgsNyArMTg4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9mcm9tX21lbV9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0RZTlBUUiB8IERZTlBUUl9UWVBFX0xPQ0FMIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSxcbiB9O1xuQEAgLTE5NDMsNyArMTk0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9yZWFkX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX0RZTlBUUixcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG5AQCAtMjAwNCw3ICsyMDA0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX3dyaXRlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0RZTlBUUixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0zNDA0LDEwICszNDA0LDEwIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rocm93KHU2NCBjb29raWUpXG4gXHRXQVJOKDEsIFwiQSBjYWxsIHRvIEJQRiBleGNlcHRpb24gY2FsbGJhY2sgc2hvdWxkIG5ldmVyIHJldHVyblxcblwiKTtcbiB9XG4gXG4tX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19tYXAsIHVuc2lnbmVkIGludCBmbGFncylcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX2NvbnN0X21hcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMgPSAoc3RydWN0IGJwZl9hc3luY19rZXJuICopd3E7XG4tXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fbWFwO1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHBfX2NvbnN0X21hcDtcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJwZl9hc3luY19rZXJuKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBicGZfd3EpKTtcbiBcdEJVSUxEX0JVR19PTihfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfd3EpKTtcbkBAIC00NjQyLDE3ICs0NjQyLDE3IEBAIHN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrXG4gICogbW9kZVxuICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xuLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4rICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxuICAqIEBhdXg6IHBvaW50ZXIgdG8gYnBmX3Byb2dfYXV4IG9mIHRoZSBjYWxsZXIgQlBGIHByb2dyYW0sIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSB2ZXJpZmllclxuICAqXG4gICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi1cdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuIHtcbi1cdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XG4rXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9TSUdOQUwpO1xuIH1cbiBcbiAvKipcbkBAIC00NjYwLDE3ICs0NjYwLDE3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBiXG4gICogbW9kZVxuICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xuLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4rICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxuICAqIEBhdXg6IHBvaW50ZXIgdG8gYnBmX3Byb2dfYXV4IG9mIHRoZSBjYWxsZXIgQlBGIHByb2dyYW0sIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSB2ZXJpZmllclxuICAqXG4gICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi1cdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuIHtcbi1cdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1JFU1VNRSk7XG4rXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1ha2VfZmlsZV9keW5wdHIoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncywgYm9vbCBtYXlfc2xlZXAsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yaW5nYnVmLmMgYi9rZXJuZWwvYnBmL3JpbmdidWYuY1xuaW5kZXggMzVhZTY0YWRlMzZiODMuLmMxYmY3YTE5N2E5NmYzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9yaW5nYnVmLmNcbisrKyBiL2tlcm5lbC9icGYvcmluZ2J1Zi5jXG5AQCAtNjM0LDcgKzYzNCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmluZ2J1Zl9vdXRwdXRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IDQxZmU4N2Q3MzAyZjIyLi40NjNmOTRiYTFjYzQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuKysrIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5AQCAtNzgxLDcgKzc4MSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNzk3LDcgKzc5Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTgzMSw3ICs4MzEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODQ4LDcgKzg0OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtOTExLDcgKzkxMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggMGZmOWUzYWEyOTNkNTcuLjBiNWRjNjc4OGJhMjdmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjQ0NCw3ICsyNDQ0LDcgQEAgc3RhdGljIHZvaWQgX19icGZfcHJvZ19wdXRfbm9yZWYoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBib29sIGRlZmVycmVkKVxuIFx0bW9kdWxlX3B1dChwcm9nLVx1MDAzZWF1eC1cdTAwM2Vtb2QpO1xuIFx0a3ZmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdGVkX2xpbmZvKTtcbiBcdGt2ZnJlZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VsaW5mbyk7XG4tXHRrZnJlZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIpO1xuK1x0YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiKTtcbiBcdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mbyk7XG4gXHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0ZilcbiBcdFx0YnRmX3B1dChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmKTtcbkBAIC02NTQ0LDcgKzY1NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNfYnBmX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqIF9fd2Vha1xuQEAgLTY1OTEsNyArNjU5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2thbGxzeW1zX2xvb2t1cF9uYW1lX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsXG4gXHQuYXJnNF9zaXplXHQ9IHNpemVvZih1NjQpLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTJiZTBhMTE4Y2NlMDcuLjFjYTg3NzlhYjU5YTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yNzE5LDggKzI3MTksMjUgQEAgc3RhdGljIGludCBmZXRjaF9rZnVuY19tZXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90byk7XG4rXG4rdm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpXG4re1xuK1x0dTMyIGk7XG4rXG4rXHRpZiAoIXRhYilcbitcdFx0cmV0dXJuO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFiLVx1MDAzZW5yX2Rlc2NzOyBpKyspXG4rXHRcdGtmcmVlKHRhYi1cdTAwM2VkZXNjc1tpXS5wcm90byk7XG4rXHRrZnJlZSh0YWIpO1xuK31cbitcbiBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuIHtcbitcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xuK1x0c3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bztcbiBcdHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqYnRmX3RhYjtcbiBcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xuIFx0c3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiO1xuQEAgLTI4MDYsMTEgKzI4MjMsMjkgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRwcm90byA9IGt6YWxsb2Nfb2JqKCpwcm90bywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghcHJvdG8pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWVtc2V0KFx1MDAyNm1ldGEsIDAsIHNpemVvZihtZXRhKSk7XG4rXHRtZXRhLmJ0ZiA9IGtmdW5jLmJ0ZjtcbitcdG1ldGEuZnVuY19pZCA9IGtmdW5jLmlkO1xuK1x0bWV0YS5mdW5jX3Byb3RvID0ga2Z1bmMucHJvdG87XG4rXHRtZXRhLmZ1bmNfbmFtZSA9IGtmdW5jLm5hbWU7XG4rXHRtZXRhLmtmdW5jX2ZsYWdzID0ga2Z1bmMuZmxhZ3MgPyAqa2Z1bmMuZmxhZ3MgOiAwO1xuK1xuK1x0ZXJyID0gZ2VuX2tmdW5jX2FyZ19wcm90byhlbnYsIFx1MDAyNm1ldGEsIHByb3RvKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHJvdG8pO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0ZGVzYyA9IFx1MDAyNnRhYi1cdTAwM2VkZXNjc1t0YWItXHUwMDNlbnJfZGVzY3MrK107XG4gXHRkZXNjLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFx0ZGVzYy1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4gXHRkZXNjLVx1MDAzZWFkZHIgPSBhZGRyO1xuIFx0ZGVzYy1cdTAwM2VmdW5jX21vZGVsID0gZnVuY19tb2RlbDtcbitcdGRlc2MtXHUwMDNlcHJvdG8gPSBwcm90bztcbiBcdHNvcnQodGFiLVx1MDAzZWRlc2NzLCB0YWItXHUwMDNlbnJfZGVzY3MsIHNpemVvZih0YWItXHUwMDNlZGVzY3NbMF0pLFxuIFx0ICAgICBrZnVuY19kZXNjX2NtcF9ieV9pZF9vZmYsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDkyNCw2ICs0OTU5LDE5IEBAIHN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XG4gXHRbQ09OU1RfUFRSX1RPX01BUF0gPSBidGZfYnBmX21hcF9pZCxcbiB9O1xuIFxuK3N0YXRpYyBlbnVtIGJwZl9yZWdfdHlwZSBsb29rdXBfcmVnMmJ0Zl9pZHMoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpyZWZfdClcbit7XG4rXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xuK1xuK1x0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgX19CUEZfUkVHX1RZUEVfTUFYOyB0eXBlKyspIHtcbitcdFx0aWYgKHJlZzJidGZfaWRzW3R5cGVdIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsICpyZWcyYnRmX2lkc1t0eXBlXSkgPT0gcmVmX3QpXG4rXHRcdFx0cmV0dXJuIHR5cGU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTk9UX0lOSVQ7XG4rfVxuK1xuIHN0YXRpYyBib29sIGlzX3RydXN0ZWRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuIFx0LyogQSByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIGFsd2F5cyB0cnVzdGVkLiAqL1xuQEAgLTY4NzMsNyArNjkyMSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXG4gXHRcdFx0ICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbi1cdGludCBlcnI7XG4rXHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLVx1MDAzZXR5cGUpO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAobWF5X2JlX251bGwpIHtcbitcdFx0c2F2ZWRfcmVnID0gKm1lbV9yZWc7XG4rXHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTtcbitcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCB0byByZWZpbmUgcjAgcmV0dXJuIHZhbHVlIGJvdW5kcyBmb3IgaGVscGVyc1xuIFx0ICogdGhhdCBlbmZvcmNlIHRoaXMgdmFsdWUgYXMgYW4gdXBwZXIgYm91bmQgb24gcmV0dXJuIHZhbHVlcy5cbkBAIC02OTEwLDggKzY5NjUsMTQgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBzaXplX2FyZ25vKSk7XG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuLVx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcbi1cdFx0XHRcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4rXG4rXHRpZiAoYWNjZXNzX3R5cGUgXHUwMDI2IEJQRl9SRUFEKVxuK1x0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxuK1x0XHRcdFx0XHQgICAgICBCUEZfUkVBRCwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xuK1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfV1JJVEUpXG4rXHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9XUklURSwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xuK1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oc2l6ZV9hcmdubyk7XG4gXG5AQCAtNjkyMCwxNSArNjk4MSwyMiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKHNpemVfYXJnbm8pKTtcbiBcdH1cbitcbitcdGlmIChtYXlfYmVfbnVsbClcbitcdFx0Km1lbV9yZWcgPSBzYXZlZF9yZWc7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi1cdFx0XHQgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplKVxuK1x0XHRcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxuK1x0XHRcdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuK1x0LyogbWV0YS1cdTAwM2VidGYgaXMgc2V0IG9ubHkgZm9yIGtmdW5jczsgYSBOVUxMIG1ldGEgbWVhbnMgYSBnbG9iYWwgc3VicHJvZy4gKi9cbitcdGJvb2wgaGVscGVyID0gbWV0YSBcdTAwMjZcdTAwMjYgIW1ldGEtXHUwMDNlYnRmO1xuIFx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xuLVx0aW50IGVycjtcbitcdGludCBzaXplLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykpXG4gXHRcdHJldHVybiAwO1xuQEAgLTY5NDgsMTAgKzcwMTYsMTIgQEAgc3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdcbiBcdFx0bWFya19wdHJfbm90X251bGxfcmVnKHJlZyk7XG4gXHR9XG4gXG4tXHRpbnQgc2l6ZSA9IGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX1NUQUNLID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTtcbitcdHNpemUgPSAoIWhlbHBlciBcdTAwMjZcdTAwMjYgYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fU1RBQ0spID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTtcbiBcbi1cdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xuLVx0ZXJyID0gZXJyID86IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBOVUxMKTtcbitcdGlmIChhY2Nlc3NfdHlwZSBcdTAwMjYgQlBGX1JFQUQpXG4rXHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIG1ldGEpO1xuK1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IChhY2Nlc3NfdHlwZSBcdTAwMjYgQlBGX1dSSVRFKSlcbitcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIG1ldGEpO1xuIFxuIFx0aWYgKG1heV9iZV9udWxsKVxuIFx0XHQqcmVnID0gc2F2ZWRfcmVnO1xuQEAgLTY5OTMsMjggKzcwNjMsMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbWVtX3JlZyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcsIGFyZ25vX3QgbWVtX2FyZ25vLCBhcmdub190IHNpemVfYXJnbm8pXG4rc3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuK1x0XHRcdCAgICAgYXJnbm9fdCBhcmdubywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbi1cdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctXHUwMDNldHlwZSk7XG4tXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7XG4tXHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbitcdGludCByZWdubyA9IHJlZ19mcm9tX2FyZ25vKGFyZ25vKTtcbiBcdGludCBlcnI7XG4gXG4tXHRtZW1zZXQoXHUwMDI2bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTtcbitcdGlmIChtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCkge1xuK1x0XHR2ZXJpZmllcl9idWcoZW52LCBcIm9ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZFwiKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4gXG4tXHRpZiAobWF5X2JlX251bGwpIHtcbi1cdFx0c2F2ZWRfcmVnID0gKm1lbV9yZWc7XG4tXHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTtcbitcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbitcdFx0dmVyYm9zZShlbnYsIFwiJXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1JFQUQsIHRydWUsIFx1MDAyNm1ldGEpO1xuLVx0ZXJyID0gZXJyID86IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIG1lbV9yZWcsIHNpemVfcmVnLCBtZW1fYXJnbm8sIHNpemVfYXJnbm8sIEJQRl9XUklURSwgdHJ1ZSwgXHUwMDI2bWV0YSk7XG4rXHRpZiAocmVnbm8gXHUwMDNlPSAwKVxuK1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTtcbitcdGVsc2VcbitcdFx0ZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKGFyZ25vKSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKG1heV9iZV9udWxsKVxuLVx0XHQqbWVtX3JlZyA9IHNhdmVkX3JlZztcbitcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTtcbitcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4gXG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIGVudW0ge1xuQEAgLTcyMjQsMTggKzcyOTksNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZVxuIFx0cmV0dXJuIGNoZWNrX21hcF9maWVsZF9wb2ludGVyKGVudiwgcmVnLCBhcmdubywgQlBGX1RJTUVSLCBtYXApO1xuIH1cbiBcbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfaGVscGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tXHRcdFx0XHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4te1xuLVx0cmV0dXJuIHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbi19XG4tXG4tc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi17XG4tXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xuLX1cbi1cbiBzdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbiBcdFx0XHQgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG5AQCAtNzczOCw4ICs3ODAxLDcgQEAgc3RhdGljIGludCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbiBcbiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19tZW1fc2l6ZShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxuIHtcbi1cdHJldHVybiB0eXBlID09IEFSR19DT05TVF9TSVpFIHx8XG4tXHQgICAgICAgdHlwZSA9PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPO1xuK1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBBUkdfTUVNX1NJWkU7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFyZ190eXBlX2lzX3Jhd19tZW0oZW51bSBicGZfYXJnX3R5cGUgdHlwZSlcbkBAIC03ODg1LDggKzc5NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgZHlucHRyX3R5cGVzID0ge1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHtcbiBcdFtBUkdfUFRSX1RPX01BUF9LRVldXHRcdD0gXHUwMDI2bWVtX3R5cGVzLFxuIFx0W0FSR19QVFJfVE9fTUFQX1ZBTFVFXVx0XHQ9IFx1MDAyNm1lbV90eXBlcyxcbi1cdFtBUkdfQ09OU1RfU0laRV1cdFx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4tXHRbQVJHX0NPTlNUX1NJWkVfT1JfWkVST11cdD0gXHUwMDI2c2NhbGFyX3R5cGVzLFxuK1x0W0FSR19NRU1fU0laRV1cdFx0XHQ9IFx1MDAyNnNjYWxhcl90eXBlcyxcbiBcdFtBUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPXVx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4gXHRbQVJHX0NPTlNUX01BUF9QVFJdXHRcdD0gXHUwMDI2Y29uc3RfbWFwX3B0cl90eXBlcyxcbiBcdFtBUkdfUFRSX1RPX0NUWF1cdFx0PSBcdTAwMjZjb250ZXh0X3R5cGVzLFxuQEAgLTgyODYsMTEgKzgzNDcsNDkgQEAgc3RhdGljIGludCBnZXRfY29uc3RhbnRfbWFwX2tleShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFxuIHN0YXRpYyBib29sIGNhbl9lbGlkZV92YWx1ZV9udWxsbmVzcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbiBcbitzdGF0aWMgaW50IHByb2Nlc3NfbWFwX3B0cl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbitcdFx0XHQgICAgICAgYXJnbm9fdCBhcmdubywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuK3tcbitcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4rXHQgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpXG4rXHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXG4rXHQgKiBpZiAoaW5uZXJfbWFwMSBcdTAwMjZcdTAwMjYgaW5uZXJfbWFwMikge1xuK1x0ICogICAgIHRpbWVyID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTtcbitcdCAqICAgICBpZiAodGltZXIpXG4rXHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXG4rXHQgKiAgICAgICAgIGJwZl90aW1lcl9pbml0KHRpbWVyLCBpbm5lcl9tYXAyKTtcbitcdCAqIH1cbitcdCAqXG4rXHQgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLlxuK1x0ICovXG4rXHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHwgbWV0YS1cdTAwM2VtYXAudWlkICE9IHJlZy1cdTAwM2VtYXBfdWlkKSkge1xuK1x0XHRhcmdub190IG9ial9hcmdubyA9IGFyZ25vX2Zyb21fcmVnKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSAtIDEpO1xuK1x0XHRzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjID0gbWV0YS1cdTAwM2VtYXAucHRyLVx1MDAzZXJlY29yZDtcbitcdFx0Y29uc3QgY2hhciAqb2JqX25hbWUgPSBcIndvcmtxdWV1ZVwiO1xuK1xuK1x0XHRpZiAocmVjLVx1MDAzZXRpbWVyX29mZiBcdTAwM2U9IDApXG4rXHRcdFx0b2JqX25hbWUgPSBcInRpbWVyXCI7XG4rXHRcdGVsc2UgaWYgKHJlYy1cdTAwM2V0YXNrX3dvcmtfb2ZmIFx1MDAzZT0gMClcbitcdFx0XHRvYmpfbmFtZSA9IFwiYnBmX3Rhc2tfd29ya1wiO1xuK1xuK1x0XHR2ZXJib3NlKGVudiwgXCIlcyBwb2ludGVyIGluICVzIG1hcF91aWQ9JWQgXCIsXG4rXHRcdFx0b2JqX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIG9ial9hcmdubyksIG1ldGEtXHUwMDNlbWFwLnVpZCk7XG4rXHRcdHZlcmJvc2UoZW52LCBcImRvZXNuJ3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gJXMgbWFwX3VpZD0lZFxcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnLVx1MDAzZW1hcF91aWQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG1ldGEtXHUwMDNlbWFwLnB0ciA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuK1x0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0XHRcdCAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbixcbiBcdFx0XHQgIGludCBpbnNuX2lkeClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuID0gbWV0YS1cdTAwM2VmbjtcbiBcdHUzMiByZWdubyA9IEJQRl9SRUdfMSArIGFyZztcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyk7XG4gXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVx1MDAzZWFyZ190eXBlW2FyZ107XG5AQCAtODM2MSwyOSArODQ2MCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdHN3aXRjaCAoYmFzZV90eXBlKGFyZ190eXBlKSkge1xuIFx0Y2FzZSBBUkdfQ09OU1RfTUFQX1BUUjpcbiBcdFx0LyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovXG4tXHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIpIHtcbi1cdFx0XHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OlxuLVx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXG4tXHRcdFx0ICogaWYgKGlubmVyX21hcDEgXHUwMDI2XHUwMDI2IGlubmVyX21hcDIpIHtcbi1cdFx0XHQgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdCAqICAgICBpZiAodGltZXIpXG4tXHRcdFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxuLVx0XHRcdCAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpO1xuLVx0XHRcdCAqIH1cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1ldGEtXHUwMDNlbWFwLnB0ciAhPSByZWctXHUwMDNlbWFwX3B0ciB8fFxuLVx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcInRpbWVyIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4tXHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuK1x0XHRlcnIgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fTUFQX0tFWTpcbiBcdFx0LyogYnBmX21hcF94eHgoLi4uLCBtYXBfcHRyLCAuLi4sIGtleSkgY2FsbDpcbkBAIC04NDY2LDcgKzg1NDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fVElNRVI6XG4tXHRcdGVyciA9IHByb2Nlc3NfdGltZXJfaGVscGVyKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4rXHRcdGVyciA9IHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRicmVhaztcbkBAIC04NDc0LDMxICs4NTUzLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdFx0bWV0YS1cdTAwM2VzdWJwcm9nbm8gPSByZWctXHUwMDNlc3VicHJvZ25vO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQVJHX1BUUl9UT19NRU06XG4tXHRcdC8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGVcbi1cdFx0ICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy5cbi1cdFx0ICovXG4gXHRcdGlmIChhcmdfdHlwZSBcdTAwMjYgTUVNX0ZJWEVEX1NJWkUpIHtcbi1cdFx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4tXHRcdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBtZXRhKTtcbitcdFx0XHRlcnIgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4rXHRcdFx0XHRcdCAgICBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsIG1ldGEpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGlmIChhcmdfdHlwZSBcdTAwMjYgTUVNX0FMSUdORUQpXG4gXHRcdFx0XHRlcnIgPSBjaGVja19wdHJfYWxpZ25tZW50KGVudiwgcmVnLCAwLCBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddLCB0cnVlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyArIDEpO1xuK1xuK1x0XHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZywgc2l6ZV9yZWcsIGFyZ25vLFxuK1x0XHRcdFx0XHRcdCBhcmdub19mcm9tX3JlZyhyZWdubyArIDEpLFxuK1x0XHRcdFx0XHRcdCBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXG4rXHRcdFx0XHRcdFx0IGZuLVx1MDAzZWFyZ190eXBlW2FyZyArIDFdIFx1MDAyNiBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFOlxuLVx0XHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCByZWdfc3RhdGUoZW52LCByZWdubyAtIDEpLCByZWcsXG4tXHRcdFx0XHRcdCBhcmdub19mcm9tX3JlZyhyZWdubyAtIDEpLCBhcmdubyxcbi1cdFx0XHRcdFx0IGZuLVx1MDAzZWFyZ190eXBlW2FyZyAtIDFdIFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcbi1cdFx0XHRcdFx0IGZhbHNlLCBtZXRhKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFX09SX1pFUk86XG4tXHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcbi1cdFx0XHRcdFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxuLVx0XHRcdFx0XHQgZm4tXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHQgdHJ1ZSwgbWV0YSk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBBUkdfUFRSX1RPX0RZTlBUUjpcbiBcdFx0ZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLFxuIFx0XHRcdFx0XHQgIFx1MDAyNm1ldGEtXHUwMDNlZHlucHRyKTtcbkBAIC04ODIzLDcgKzg4OTMsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcbiBcdFx0aWYgKCFhcmdfdHlwZV9pc19yYXdfbWVtKGZuLVx1MDAzZWFyZ190eXBlW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1ldGEtXHUwMDNlYXJnX3Jhd19tZW0ucmVnbm8pXG5AQCAtODg0MCw3ICs4OTEwLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfYXJnc19wYWlyX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgaW50IGFyZylcbiBcdGJvb2wgaGFzX3NpemUgPSBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddICE9IDA7XG4gXHRib29sIGlzX25leHRfc2l6ZSA9IGZhbHNlO1xuIFxuLVx0aWYgKGFyZyArIDEgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpKVxuK1x0aWYgKGFyZyArIDEgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUylcbiBcdFx0aXNfbmV4dF9zaXplID0gYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnICsgMV0pO1xuIFxuIFx0aWYgKGJhc2VfdHlwZShmbi1cdTAwM2VhcmdfdHlwZVthcmddKSAhPSBBUkdfUFRSX1RPX01FTSlcbkBAIC04ODcxLDcgKzg5NDEsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19idGZfaWRfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbilcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XG4gXHRcdGlmIChiYXNlX3R5cGUoZm4tXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fQlRGX0lEKVxuIFx0XHRcdHJldHVybiAhIWZuLVx1MDAzZWFyZ19idGZfaWRbaV07XG4gXHRcdGlmIChiYXNlX3R5cGUoZm4tXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fU1BJTl9MT0NLKVxuQEAgLTg4OTAsNyArODk2MCw3IEBAIHN0YXRpYyBib29sIGNoZWNrX21lbV9hcmdfcndfZmxhZ19vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcbiBcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbiBcbiBcdFx0aWYgKGJhc2VfdHlwZShhcmdfdHlwZSkgIT0gQVJHX1BUUl9UT19NRU0pXG5AQCAtODkwNiw3ICs4OTc2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHJvdG9fcmVsZWFzZV9yZWcoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgc3RydWN0IGJwZl9cbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XG4gXHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbaV07XG4gXG4gXHRcdGlmIChhcmdfdHlwZV9pc19yZWxlYXNlKGFyZ190eXBlKSkge1xuQEAgLTkyNTIsNyArOTMyMiw3IEBAIHN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuIFx0XHRcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdGlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLVx1MDAzZW1lbV9zaXplKSlcbitcdFx0XHRpZiAoY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIGFyZy1cdTAwM2VtZW1fc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIE5VTEwpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0aWYgKCEoYXJnLVx1MDAzZWFyZ190eXBlIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNldHlwZSBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4gXHRcdFx0XHRicGZfbG9nKGxvZywgXCIlcyBpcyBleHBlY3RlZCB0byBiZSBub24tTlVMTFxcblwiLFxuQEAgLTEwMjk3LDkgKzEwMzY3LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlID0gdHJ1ZTtcbiBcbiBcdG1ldGEuZnVuY19pZCA9IGZ1bmNfaWQ7XG4rXHRtZXRhLmZuID0gZm47XG4gXHQvKiBjaGVjayBhcmdzICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkrKykge1xuLVx0XHRlcnIgPSBjaGVja19mdW5jX2FyZyhlbnYsIGksIFx1MDAyNm1ldGEsIGZuLCBpbnNuX2lkeCk7XG4rXHRcdGVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMTA3NzEsMjYgKzEwODQyLDI0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWVtX3NpemUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXG4tXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4gXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSB8fCByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4rXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19zelwiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuIFxuIFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuK1x0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fc3prXCIpO1xuQEAgLTEwODExLDYgKzEwODgwLDExIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19tYXAoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX21hcFwiKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2NvbnN0X21hcFwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FsbG9jXCIpO1xuQEAgLTExMDUxLDE4ICsxMTEyNSwyMSBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4gXHRLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERSxcbiBcdEtGX0FSR19QVFJfVE9fQlRGX0lELFx0ICAgICAgIC8qIEFsc28gY292ZXJzIHJlZzJidGZfaWRzIGNvbnZlcnNpb25zICovXG4gXHRLRl9BUkdfUFRSX1RPX01FTSxcbi1cdEtGX0FSR19QVFJfVE9fTUVNX1NJWkUsXHQgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqL1xuIFx0S0ZfQVJHX1BUUl9UT19DQUxMQkFDSyxcbiBcdEtGX0FSR19QVFJfVE9fUkJfUk9PVCxcbiBcdEtGX0FSR19QVFJfVE9fUkJfTk9ERSxcbi1cdEtGX0FSR19QVFJfVE9fTlVMTCxcbiBcdEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSLFxuLVx0S0ZfQVJHX1BUUl9UT19NQVAsXG4rXHRLRl9BUkdfQ09OU1RfTUFQX1BUUixcbiBcdEtGX0FSR19QVFJfVE9fVElNRVIsXG4gXHRLRl9BUkdfUFRSX1RPX1dPUktRVUVVRSxcbiBcdEtGX0FSR19QVFJfVE9fSVJRX0ZMQUcsXG4gXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXG4gXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcbitcdEtGX0FSR19DT05TVCxcdFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciAqL1xuK1x0S0ZfQVJHX0NPTlNUX01FTV9TSVpFLFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xuK1x0S0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTywgLyogY29uc3Qgc2NhbGFyIHNpemluZyBhIHJldHVybmVkIGJ1ZmZlciAqL1xuK1x0S0ZfQVJHX01FTV9TSVpFLFx0ICAgICAgIC8qIHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xuK1x0S0ZfQVJHX0FOWVRISU5HLFx0ICAgICAgIC8qIHVuY29uc3RyYWluZWQgc2NhbGFyICovXG4gfTtcbiBcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG5AQCAtMTEzMTgsMTA4ICsxMTM5NSwxNTUgQEAgYm9vbCBicGZfaXNfa2Z1bmNfcGt0X2NoYW5naW5nKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiBcdHJldHVybiBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl94ZHBfcHVsbF9kYXRhXTtcbiB9XG4gXG4tc3RhdGljIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlXG4tZ2V0X2tmdW5jX3B0cl9hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcbi1cdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqcmVmX3QsXG4tXHRcdCAgICAgICBjb25zdCBjaGFyICpyZWZfdG5hbWUsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3MsXG4tXHRcdCAgICAgICBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4rc3RhdGljIGludFxuK2dldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3MsIGludCBhcmcsIGludCBuYXJncylcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpyZWZfdCA9IE5VTEw7XG4rXHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoYXJnICsgMSk7XG4rXHRjb25zdCBjaGFyICpyZWZfdG5hbWUgPSBOVUxMO1xuIFx0Ym9vbCBhcmdfbWVtX3NpemUgPSBmYWxzZTtcbitcdGludCBhcmdfdHlwZTtcbiBcbi1cdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxuLVx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuXSB8fFxuLVx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ1RYO1xuK1x0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXHUwMDNlYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XG4gXG4tXHRpZiAoYXJnICsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgKyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyArIDEpKSB8fFxuLVx0ICAgICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgKyAxKSkpKVxuLVx0XHRhcmdfbWVtX3NpemUgPSB0cnVlO1xuK1x0LyogU2NhbGFyIGFyZ3VtZW50cyBhcmUgY2xhc3NpZmllZCBmcm9tIHRoZWlyIEJURiBzdWZmaXgvbmFtZSBhbG9uZS4gKi9cbitcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcbitcdFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0XHRyZXR1cm4gS0ZfQVJHX0NPTlNUO1xuK1x0XHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRcdHJldHVybiBLRl9BUkdfQ09OU1RfTUVNX1NJWkU7XG4rXHRcdGlmIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdFx0cmV0dXJuIEtGX0FSR19NRU1fU0laRTtcbitcdFx0aWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10sIFwicmRvbmx5X2J1Zl9zaXplXCIpIHx8XG4rXHRcdCAgICBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddLCBcInJkd3JfYnVmX3NpemVcIikpXG4rXHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk87XG4rXHRcdHJldHVybiBLRl9BUkdfQU5ZVEhJTkc7XG4rXHR9XG4rXG4rXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkge1xuK1x0XHR2ZXJib3NlKGVudiwgXCJVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXHUwMDNlYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuK1x0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXHUwMDNlYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4gXG4gXHQvKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSB2ZXJpZnkgdGhlIGtmdW5jJ3MgQlRGIGFzIHBlciB0aGUgYXJndW1lbnQgdHlwZSxcbiBcdCAqIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlIHZlcmlmaWNhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHJlZ2lzdGVyXG4gXHQgKiB0eXBlIHRvIG91ciBjYWxsZXIuIFdoZW4gYSBzZXQgb2YgY29uZGl0aW9ucyBob2xkIGluIHRoZSBCVEYgdHlwZSBvZlxuIFx0ICogYXJndW1lbnRzLCB3ZSByZXNvbHZlIGl0IHRvIGEga25vd24ga2Z1bmNfcHRyX2FyZ190eXBlLlxuIFx0ICovXG4tXHRpZiAoYnRmX2lzX3Byb2dfY3R4X3R5cGUoXHUwMDI2ZW52LVx1MDAzZWxvZywgbWV0YS1cdTAwM2VidGYsIHQsIHJlc29sdmVfcHJvZ190eXBlKGVudi1cdTAwM2Vwcm9nKSwgYXJnKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ1RYO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSBcdTAwMjZcdTAwMjYgYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhYXJnX21lbV9zaXplKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19OVUxMO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19hbGxvY19vYmoobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2R5bnB0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fRFlOUFRSO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19pdGVyKG1ldGEsIGFyZywgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fSVRFUjtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19MSVNUX0hFQUQ7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkJfUk9PVDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JCX05PREU7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSO1xuK1x0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XG4rXHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XG4rXHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xuK1x0ZWxzZSBpZiAoYnRmX2lzX3Byb2dfY3R4X3R5cGUoXHUwMDI2ZW52LVx1MDAzZWxvZywgbWV0YS1cdTAwM2VidGYsIHQsIHJlc29sdmVfcHJvZ190eXBlKGVudi1cdTAwM2Vwcm9nKSwgYXJnKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hbGxvY19vYmoobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2R5bnB0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19pdGVyKG1ldGEsIGFyZywgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0lURVI7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9IRUFEO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERTtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SQl9OT0RFO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tYXAobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX0NPTlNUX01BUF9QVFI7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfbWFwKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fV09SS1FVRVVFO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3RpbWVyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fVElNRVI7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fVEFTS19XT1JLO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLO1xuK1x0ZWxzZSB7XG4rXHRcdGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4rXHRcdCAgICAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpXG4rXHRcdFx0YXJnX21lbV9zaXplID0gdHJ1ZTtcbitcbitcdFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkgXHUwMDI2XHUwMDI2ICFhcmdfbWVtX3NpemUpIHtcbitcdFx0XHQvKiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aG91dCBhIHNpemUgYXJndW1lbnQgaXMgY2xhc3NpZmllZFxuK1x0XHRcdCAqIGFzIEtGX0FSR19QVFJfVE9fQlRGX0lELlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7XG4rXHRcdH0gZWxzZSBpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gJXNzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwiLFxuK1x0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxuK1x0XHRcdFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcInZvaWQsIFwiIDogXCJcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogT3RoZXJ3aXNlIHRoaXMgaXMgYSBtZW1vcnkgYnVmZmVyIHN1cHBvcnRlZCBieVxuK1x0XHRcdCAqIGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKCk6IGEgcG9pbnRlciB0byBhIHNjYWxhciwgb3IgdG8gdm9pZFxuK1x0XHRcdCAqIHdoZW4gcGFpcmVkIHdpdGggYSBzaXplIGFyZ3VtZW50LiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZFxuK1x0XHRcdCAqIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUgdW5sZXNzIGEgc2l6ZSBhcmd1bWVudCBmb2xsb3dzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGFyZ190eXBlID0gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU0gOiBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFO1xuK1x0XHR9XG4rXHR9XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTUFQO1xuK1x0aWYgKGlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgfD0gUFRSX01BWUJFX05VTEw7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7XG4rXHRyZXR1cm4gYXJnX3R5cGU7XG4rfVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fVElNRVI7XG4rc3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmICpidGYgPSBtZXRhLVx1MDAzZWJ0ZjtcbitcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4rXHR1MzIgaSwgbmFyZ3M7XG4rXHRpbnQgYXJnX3R5cGU7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fVEFTS19XT1JLO1xuK1x0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEtXHUwMDNlZnVuY19wcm90byArIDEpO1xuK1x0bmFyZ3MgPSBidGZfdHlwZV92bGVuKG1ldGEtXHUwMDNlZnVuY19wcm90byk7XG4rXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKSB7XG4rXHRcdHZlcmJvc2UoZW52LCBcIkZ1bmN0aW9uICVzIGhhcyAlZCBcdTAwM2UgJWQgYXJnc1xcblwiLCBtZXRhLVx1MDAzZWZ1bmNfbmFtZSxcbitcdFx0XHRuYXJncywgTUFYX0JQRl9GVU5DX0FSR1MpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChuYXJncyBcdTAwM2UgTUFYX0JQRl9GVU5DX1JFR19BUkdTIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHtcbitcdFx0dmVyYm9zZShlbnYsIFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcXG5cIixcbitcdFx0XHRtZXRhLVx1MDAzZWZ1bmNfbmFtZSwgbmFyZ3MpO1xuK1x0XHRyZXR1cm4gLUVOT1RTVVBQO1xuK1x0fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYXJnczsgaSsrKSB7XG4rXHRcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcdTAwMjZhcmdzW2ldKSB8fFxuK1x0XHQgICAgaXNfa2Z1bmNfYXJnX2lnbm9yZShidGYsIFx1MDAyNmFyZ3NbaV0pIHx8XG4rXHRcdCAgICBpc19rZnVuY19hcmdfaW1wbGljaXQobWV0YSwgaSkpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XG4rXHRcdGFyZ190eXBlID0gZ2V0X2tmdW5jX2FyZ190eXBlKGVudiwgbWV0YSwgYXJncywgaSwgbmFyZ3MpO1xuK1x0XHRpZiAoYXJnX3R5cGUgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGFyZ190eXBlO1xuIFxuLVx0aWYgKChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgfHwgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pKSB7XG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHJlZl90KSkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcImtlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuLVx0XHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbi1cdFx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuK1x0XHRwcm90by1cdTAwM2VhcmdfdHlwZVtpXSA9IGFyZ190eXBlO1xuIFx0fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbi1cbi1cdC8qIFRoaXMgaXMgdGhlIGNhdGNoIGFsbCBhcmd1bWVudCB0eXBlIG9mIHJlZ2lzdGVyIHR5cGVzIHN1cHBvcnRlZCBieVxuLVx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXG4tXHQgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlblxuLVx0ICogYXJnX21lbV9zaXplIGlzIHRydWUsIHRoZSBwb2ludGVyIGNhbiBiZSB2b2lkICouXG4tXHQgKi9cbi1cdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSBcdTAwMjZcdTAwMjYgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cIixcbi1cdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksXG4tXHRcdFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcInZvaWQsIFwiIDogXCJcIik7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVx0cmV0dXJuIGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNX1NJWkUgOiBLRl9BUkdfUFRSX1RPX01FTTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0xMjAwNSwxNiArMTIxMjksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEtXHUwMDNlZnVuY19wcm90byArIDEpO1xuIFx0bmFyZ3MgPSBidGZfdHlwZV92bGVuKG1ldGEtXHUwMDNlZnVuY19wcm90byk7XG4tXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIkZ1bmN0aW9uICVzIGhhcyAlZCBcdTAwM2UgJWQgYXJnc1xcblwiLCBmdW5jX25hbWUsIG5hcmdzLFxuLVx0XHRcdE1BWF9CUEZfRlVOQ19BUkdTKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCAlZCBhcmdzXFxuXCIsXG4tXHRcdFx0ZnVuY19uYW1lLCBuYXJncyk7XG4tXHRcdHJldHVybiAtRU5PVFNVUFA7XG4tXHR9XG4gXG4gXHRyZXQgPSBjaGVja19vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY2FsbGVyLCBuYXJncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMDMxLDggKzEyMTQ1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuIFx0XHRib29sIGJ0Zl9pZF9maXhlZF9vZmZfb2sgPSB0cnVlO1xuIFx0XHR1MzIgcmVmX2lkLCB0eXBlX3NpemU7XG4tXHRcdGJvb2wgaXNfcmV0X2J1Zl9zeiA9IGZhbHNlO1xuLVx0XHRpbnQga2ZfYXJnX3R5cGU7XG4rXHRcdGludCBrZl9hcmdfdHlwZSA9IG1ldGEtXHUwMDNlZm4tXHUwMDNlYXJnX3R5cGVbaV07XG4gXG4gXHRcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuIFx0XHRcdC8qIFJlamVjdCByZXBlYXRlZCB1c2UgYnBmX3Byb2dfYXV4ICovXG5AQCAtMTIwNTUsNTIgKzEyMTY4LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcbiBcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbiBcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGlzIG5vdCBhIHNjYWxhclxcblwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RhbnQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4tXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcbi1cdFx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcIik7XG4tXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXG5cIixcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChyZWdubyBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdHJldCA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRyZXQgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBpKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0XHRcdH0gZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcInJkb25seV9idWZfc2l6ZVwiKSkge1xuLVx0XHRcdFx0bWV0YS1cdTAwM2VyMF9yZG9ubHkgPSB0cnVlO1xuLVx0XHRcdFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XG4tXHRcdFx0fSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFx1MDAyNmFyZ3NbaV0sIFwicmR3cl9idWZfc2l6ZVwiKSkge1xuLVx0XHRcdFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19yZXRfYnVmX3N6KSB7XG4tXHRcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VyZXRfbWVtKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwiVW5yZWNvZ25pemVkICVzIHR5cGUgJXNcXG5cIixcbi1cdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpIFx1MDAyNlx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbkBAIC0xMjExNyw3NiArMTIxODUsMzYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHR1cGRhdGVfcmVmX29iaihcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosIHJlZyk7XG4gXG4tXHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4tXHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbitcdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuK1x0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4rXHRcdFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHR9XG4gXG4tXHRcdGtmX2FyZ190eXBlID0gZ2V0X2tmdW5jX3B0cl9hcmdfdHlwZShlbnYsIGNhbGxlciwgcmVncywgbWV0YSwgdCwgcmVmX3QsIHJlZl90bmFtZSxcbi1cdFx0XHRcdFx0XHQgICAgIGFyZ3MsIGksIG5hcmdzLCBhcmdubywgcmVnKTtcbi1cdFx0aWYgKGtmX2FyZ190eXBlIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBrZl9hcmdfdHlwZTtcbiBcbi1cdFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTlVMTDpcbitcdFx0aWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUFQOlxuLVx0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXG5cIixcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXdxX29mZiBcdTAwM2U9IDAgfHxcbi1cdFx0XHRcdFx0ICAgICAgcmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSkge1xuLVx0XHRcdFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcbi1cdFx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5Milcbi1cdFx0XHRcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4tXHRcdFx0XHQgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdFx0ICogICAgIGlmICh3cSlcbi1cdFx0XHRcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbi1cdFx0XHRcdCAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpO1xuLVx0XHRcdFx0ICogfVxuLVx0XHRcdFx0ICpcbi1cdFx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHxcbi1cdFx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdFx0aWYgKHJlZy1cdTAwM2VtYXBfcHRyLVx1MDAzZXJlY29yZC1cdTAwM2V0YXNrX3dvcmtfb2ZmIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFx0XCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCwgcmVnLVx1MDAzZW1hcF91aWQpO1xuLVx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0XHR9XG4tXHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFwid29ya3F1ZXVlIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnB0ciA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuK1xuK1x0XHRpZiAoaXNfa2Z1bmNfYXJnX21hcChidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4rXHRcdFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xuK1x0XHRcdHJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7XG4rXHRcdFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHR9XG4rXG4rXHRcdHN3aXRjaCAoYmFzZV90eXBlKGtmX2FyZ190eXBlKSkge1xuK1x0XHRjYXNlIEtGX0FSR19DT05TVDpcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XG4rXHRcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxuK1x0XHRjYXNlIEtGX0FSR19BTllUSElORzpcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuLVx0XHRcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XG4tXHRcdFx0XHRpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwiLFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxuXCIsXG4tXHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdGZhbGx0aHJvdWdoO1xuK1x0XHRjYXNlIEtGX0FSR19DT05TVF9NQVBfUFRSOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fSVRFUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbkBAIC0xMjIxNyw3ICsxMjI0NSwzNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdHN3aXRjaCAoa2ZfYXJnX3R5cGUpIHtcbitcdFx0c3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7XG4rXHRcdGNhc2UgS0ZfQVJHX0NPTlNUOlxuK1x0XHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcbitcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBzY2FsYXJcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcbitcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19NRU1fU0laRTpcbitcdFx0Y2FzZSBLRl9BUkdfQU5ZVEhJTkc6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgaXMgbm90IGEgc2NhbGFyXFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzpcbitcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBzY2FsYXJcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcbitcdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcInJkb25seV9idWZfc2l6ZVwiKSlcbitcdFx0XHRcdG1ldGEtXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcbitcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VyZXRfbWVtKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbiBcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0NUWCkge1xuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgZXhwZWN0ZWQgcG9pbnRlciB0byBjdHgsIGJ1dCBnb3QgJXNcXG5cIixcbkBAIC0xMjM4Niw1MSArMTI0NDQsNzcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01BUDpcbi1cdFx0XHQvKiBJZiBhcmd1bWVudCBoYXMgJ19fbWFwJyBzdWZmaXggZXhwZWN0ICdzdHJ1Y3QgYnBmX21hcCAqJyAqL1xuLVx0XHRcdHJlZl9pZCA9ICpyZWcyYnRmX2lkc1tDT05TVF9QVFJfVE9fTUFQXTtcbi1cdFx0XHRyZWZfdCA9IGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCByZWZfaWQpO1xuLVx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcbi1cdFx0XHQvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovXG4tXHRcdFx0aWYgKChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgfHxcbi1cdFx0XHQgICAgIChicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFpc19yY3VfcmVnKHJlZykpKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIXJlZzJidGZfaWRzW2Jhc2VfdHlwZShyZWctXHUwMDNldHlwZSldKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyAlcyBcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxuLVx0XHRcdFx0XHRyZWdfdHlwZV9zdHIoZW52LCByZWctXHUwMDNldHlwZSkpO1xuLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwiZXhwZWN0ZWQgJXMgb3Igc29ja2V0XFxuXCIsXG4tXHRcdFx0XHRcdHJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgfFxuLVx0XHRcdFx0XHRcdFx0ICAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgQlBGX1JFR19UUlVTVEVEX01PRElGSUVSUykpKTtcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUFQX1BUUjpcbitcdFx0XHRpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSAhPSBDT05TVF9QVFJfVE9fTUFQKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJwb2ludGVyIGluICVzIGlzbid0IG1hcCBwb2ludGVyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4rXHRcdFx0cmV0ID0gcHJvY2Vzc19tYXBfcHRyX2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuLVx0XHRcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcdTAwMjZ0eXBlX3NpemUpO1xuLVx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyByZWZlcmVuY2UgdHlwZSgnJXMgJXMnKSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcXG5cIixcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxuLVx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcbitcdFx0XHQvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovXG4rXHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fFxuK1x0XHRcdCAgICByZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpXSkge1xuK1x0XHRcdFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykgfHxcbitcdFx0XHRcdCAgICBicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyhyZWctXHUwMDNldHlwZSkpIHtcbitcdFx0XHRcdFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcbitcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwiLFxuK1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRcdFx0fVxuK1x0XHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuK1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcblwiLFxuK1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRcdFx0fVxuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmICghX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90LCAwKSkge1xuK1x0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTtcbitcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGlzICVzIGV4cGVjdGVkICVzICVzXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuK1x0XHRcdFx0aWYgKHJlZzJidGZfdHlwZSAhPSBOT1RfSU5JVClcbitcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiIG9yICVzXCIsIHJlZ190eXBlX3N0cihlbnYsIHJlZzJidGZfdHlwZSkpO1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdHJldCA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCB0eXBlX3NpemUpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4tXHRcdHtcbi1cdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7XG4tXHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYnVmZl9hcmcgPSBcdTAwMjZhcmdzW2ldO1xuLVx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZyA9IGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBpICsgMSk7XG4tXHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc2l6ZV9hcmcgPSBcdTAwMjZhcmdzW2kgKyAxXTtcbi1cdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMik7XG4tXG4tXHRcdFx0aWYgKCFicGZfcmVnaXN0ZXJfaXNfbnVsbChidWZmX3JlZykgfHwgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgYnVmZl9hcmcpKSB7XG4tXHRcdFx0XHRyZXQgPSBjaGVja19rZnVuY19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsXG4tXHRcdFx0XHRcdFx0XHQgICAgICAgYXJnbm8sIG5leHRfYXJnbm8pO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYgdGhlIHJlZ2lzdGVyIGRvZXMgbm90IGNvbnRhaW4gYnRmIGlkIGJ1dCB0aGUgYXJndW1lbnQgdHlwZSBpcyBhIHBvaW50ZXIgdG9cbitcdFx0XHQgKiBzY2FsYXItb25seSBzdHJ1Y3QsIGFsbG93IHZlcmlmeWluZyBpdCBhcyBhIGZpeGVkIHNpemUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGtmX2FyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTtcbitcdFx0XHRmYWxsdGhyb3VnaDtcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbitcdFx0XHRpZiAoa2ZfYXJnX3R5cGUgXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XG4rXHRcdFx0XHRyZXNvbHZlX3JldCA9IGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgXHUwMDI2dHlwZV9zaXplKTtcbitcdFx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4rXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHJlZmVyZW5jZSB0eXBlKCclcyAlcycpIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcblwiLFxuK1x0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSxcbitcdFx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbitcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgbWV0YSk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7XG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSArIDEpO1xuK1x0XHRcdFx0YXJnbm9fdCBuZXh0X2FyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSArIDIpO1xuK1xuK1x0XHRcdFx0cmV0ID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLCBhcmdubywgbmV4dF9hcmdubyxcbitcdFx0XHRcdFx0XHRcdCBCUEZfUkVBRCB8IEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGFuZCBcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgbWVtb3J5LCBsZW4gcGFpciBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NcXG5cIixcbkBAIC0xMjQzOCwyNSArMTI1MjIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBzaXplX2FyZywgc2l6ZV9yZWcpKSB7XG4tXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcbi1cdFx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcIik7XG4tXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCF0bnVtX2lzX2NvbnN0KHNpemVfcmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4tXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcblwiLFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIG5leHRfYXJnbm8pKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHNpemVfcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qIFNraXAgbmV4dCAnX19zeicgb3IgJ19fc3prJyBhcmd1bWVudCAqL1xuLVx0XHRcdGkrKztcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6XG4gXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19GVU5DKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBleHBlY3RlZCBwb2ludGVyIHRvIGZ1bmNcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbkBAIC0xMjUxNCw3ICsxMjU4MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0cmV0ID0gcHJvY2Vzc190aW1lcl9rZnVuYyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuK1x0XHRcdHJldCA9IHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbkBAIC0xMjY3Niw3ICsxMjc0Miw3IEBAIHM2NCBicGZfaGVscGVyX3N0YWNrX2FjY2Vzc19ieXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRzaXplID0gZm4tXHUwMDNlYXJnX3NpemVbYXJnXTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuLVx0XHRpZiAoYXJnICsgMSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdGlmIChhcmcgKyAxIFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhcmdfdHlwZV9pc19tZW1fc2l6ZShmbi1cdTAwM2VhcmdfdHlwZVthcmcgKyAxXSkpIHtcbiBcdFx0XHRpbnQgc2l6ZV9yZWcgPSBCUEZfUkVHXzEgKyBhcmcgKyAxO1xuIFxuQEAgLTEyOTc1LDYgKzEzMDQxLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xuIFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcbitcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuIFxuQEAgLTEyOTkxLDYgKzEzMDU4LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRmdW5jX25hbWUgPSBtZXRhLmZ1bmNfbmFtZTtcbiBcdGluc25fYXV4ID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdO1xuIFxuK1x0ZGVzYyA9IGZpbmRfa2Z1bmNfZGVzYyhlbnYtXHUwMDNlcHJvZywgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbitcdGlmICghZGVzYykge1xuK1x0XHR2ZXJpZmllcl9idWcoZW52LCBcImtmdW5jIGRlc2NyaXB0b3Igbm90IGZvdW5kIGZvciBmdW5jX2lkICV1XCIsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXHRtZXRhLmZuID0gZGVzYy1cdTAwM2Vwcm90bztcbitcbiBcdGluc25fYXV4LVx1MDAzZWlzX2l0ZXJfbmV4dCA9IGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSk7XG4gXG4gXHRpZiAoIWluc24tXHUwMDNlb2ZmIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggNzZhYjUxZGVhYTZiOTUuLjg5MTg5N2Y4YTFiMzU3IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0yMjEsNyArMjIxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjU4LDcgKzI1OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0yNzMsNyArMjczLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0zMDgsNyArMzA4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfY29tcGF0X3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRSAqL1xuQEAgLTM4Myw3ICszODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV93cml0ZV91c2VyX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuICNkZWZpbmUgTUFYX1RSQUNFX1BSSU5US19WQVJBUkdTXHQzXG5AQCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RyYWNlX3ByaW50a19wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX3NldF9wcmludGtfY2xyX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbkBAIC00NzQsOSArNDc0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfdnByaW50a19wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF90cmFjZV92cHJpbnRrX3Byb3RvKHZvaWQpXG5AQCAtNTE4LDkgKzUxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl9zZXFfZmlsZV9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc2VxX3dyaXRlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgY29uc3Qgdm9pZCAqLCBkYXRhLCB1MzIsIGxlbilcbkBAIC01MzUsNyArNTM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3dyaXRlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfNChicGZfc2VxX3ByaW50Zl9idGYsIHN0cnVjdCBzZXFfZmlsZSAqLCBtLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXG5AQCAtNTU5LDcgKzU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfYnRmX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC02MzMsNyArNjMzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmJwZl9nZXRfcGVyZl9ldmVudF9yZWFkX3ZhbHVlX3Byb3RvKHZvaWQpXG5AQCAtNzMwLDcgKzczMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgYnBmX2V2ZW50X291dHB1dF9uZXN0X2xldmVsKTtcbkBAIC05OTYsNyArOTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZF9wYXRoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfZF9wYXRoX2J0Zl9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hbGxvd2VkXHQ9IGJwZl9kX3BhdGhfYWxsb3dlZCxcbiB9O1xuIFxuQEAgLTEwNTMsOSArMTA1Myw5IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0xMjE4LDcgKzEyMTgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9icmFuY2hfc25hcHNob3RfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoZ2V0X2Z1bmNfYXJnLCB2b2lkICosIGN0eCwgdTMyLCBuLCB1NjQgKiwgdmFsdWUpXG5AQCAtMTQyMSw3ICsxNDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fdHAgPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF90cCwgdm9pZCAqLCB0cF9idWZmLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG5AQCAtMTQ2Miw3ICsxNDYyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3RwID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTUyNCwxMiArMTUyNCwxMiBAQCBCUEZfQ0FMTF8zKGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlX3Byb3RvID0ge1xuLSAgICAgICAgIC5mdW5jICAgICAgICAgICA9IGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSxcbi0gICAgICAgICAuZ3BsX29ubHkgICAgICAgPSB0cnVlLFxuLSAgICAgICAgIC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLFxuLSAgICAgICAgIC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuLSAgICAgICAgIC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi0gICAgICAgICAuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbitcdC5mdW5jICAgICAgICAgICA9IGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSxcbitcdC5ncGxfb25seSAgICAgICA9IHRydWUsXG4rXHQucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcbitcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuK1x0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuK1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNChicGZfcmVhZF9icmFuY2hfcmVjb3Jkcywgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG5AQCAtMTU2Niw3ICsxNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVhZF9icmFuY2hfcmVjb3Jkc19wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTV9PUl9OVUxMIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTY0Niw3ICsxNjQ2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fcmF3X3RwID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90bztcbkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcmF3X3RwID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMGI3YWZkZDBhZTQ3NDguLmViMGI3MDZhZjRiMjk2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTc0Nyw3ICsxNzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE3ODQsNyArMTc4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9sb2FkX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBpbnQgX19icGZfc2tiX2xvYWRfYnl0ZXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldCwgdm9pZCAqdG8sIHUzMiBsZW4pXG5AQCAtMTgyMyw3ICsxODIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmxvd19kaXNzZWN0b3JfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmUsIGNvbnN0IHN0cnVjdCBza19idWZmICosIHNrYixcbkBAIC0xODY3LDcgKzE4NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0yMDYzLDkgKzIwNjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jc3VtX2RpZmZfcHJvdG8gPSB7XG4gXHQucGt0X2FjY2Vzc1x0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjYyMSw3ICsyNjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfbmVpZ2hfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC00MTk0LDcgKzQxOTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gaW50IF9fYnBmX3hkcF9sb2FkX2J5dGVzKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgb2Zmc2V0LCB2b2lkICpidWYsIHUzMiBsZW4pXG5AQCAtNDIyNiw3ICs0MjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBpbnQgX19icGZfeGRwX3N0b3JlX2J5dGVzKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgb2Zmc2V0LCB2b2lkICpidWYsIHUzMiBsZW4pXG5AQCAtNDc4OSw3ICs0Nzg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2V2ZW50X291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJURl9JRF9MSVNUX1NJTkdMRShicGZfc2tiX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHNrX2J1ZmYpXG5AQCAtNDgwMyw3ICs0ODAzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gc3RhdGljIHVuc2lnbmVkIHNob3J0IGJwZl90dW5uZWxfa2V5X2FmKHU2NCBmbGFncylcbkBAIC00ODg2LDcgKzQ4ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9rZXlfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTQ5MjEsNyArNDkyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfdHVubmVsX29wdF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbWV0YWRhdGFfZHN0IF9fcGVyY3B1ICptZF9kc3Q7XG5AQCAtNTAwMyw3ICs1MDAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90dW5uZWxfa2V5X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC01MDMxLDcgKzUwMzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbkBAIC01MjAzLDcgKzUyMDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl94ZHBfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgeGRwX2J1ZmYpXG5AQCAtNTIxNyw3ICs1MjE3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMShicGZfZ2V0X3NvY2tldF9jb29raWUsIHN0cnVjdCBza19idWZmICosIHNrYilcbkBAIC01NzY0LDcgKzU3NjQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9za19nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01NzgxLDcgKzU3ODEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2dldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXksIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MDUsNyArNTgwNSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc2V0c29ja29wdF9ub2RlbGF5X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfc2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTgyMiw3ICs1ODIyLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTgzOSw3ICs1ODM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc29ja19hZGRyX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxuQEAgLTU4NTYsNyArNTg1Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc29ja19hZGRyX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxuQEAgLTU4NzMsNyArNTg3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGludCBza19icGZfc2V0X2dldF9ieXBhc3NfcHJvdF9tZW0oc3RydWN0IHNvY2sgKnNrLFxuQEAgLTU5MTgsNyArNTkxOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfY3JlYXRlX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2NyZWF0ZV9nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01OTQ0LDcgKzU5NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc29ja19vcHNfc2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuQEAgLTU5NzAsNyArNTk3MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGJwZl9zb2NrX29wc19nZXRfc3luKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqYnBmX3NvY2ssXG5AQCAtNjA4MCw3ICs2MDgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuQEAgLTYxNDcsNyArNjE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC02MjAwLDcgKzYyMDAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gI2VuZGlmXG5AQCAtNjYwNyw3ICs2NjA3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2ZpYl9sb29rdXBfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTY2NjcsNyArNjY2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9maWJfbG9va3VwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC02ODY1LDcgKzY4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfaW5fcHVzaF9lbmNhcF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG5AQCAtNjg3NSw3ICs2ODc1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxuQEAgLTY5MTksNyArNjkxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC03MDA4LDcgKzcwMDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuQEAgLTcyNDksNyArNzI0OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzI2OCw3ICs3MjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03Mjg3LDcgKzcyODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczMTEsNyArNzMxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzMzNSw3ICs3MzM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03MzU5LDcgKzczNTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczOTcsNyArNzM5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzQyMSw3ICs3NDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NDQ1LDcgKzc0NDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0NjUsNyArNzQ2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0ODQsNyArNzQ4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc1MDMsNyArNzUwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc4MjMsOSArNzgyMyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9jaGVja19zeW5jb29raWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3RjcF9nZW5fc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbkBAIC03ODkyLDkgKzc4OTIsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuQEAgLTgwNDgsNyArODA0OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2xvYWRfaGRyX29wdF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04MTI2LDcgKzgxMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19zdG9yZV9oZHJfb3B0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04MjIxLDcgKzgyMjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9SRE9OTFksXG4gXHQuYXJnMV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcbkBAIC04MjUzLDcgKzgyNTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2Nl9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9SRE9OTFksXG4gXHQuYXJnMV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxuQEAgLTExNzI2LDcgKzExNzI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShza19yZXVzZXBvcnRfbG9hZF9ieXRlc19yZWxhdGl2ZSxcbkBAIC0xMTc0NCw3ICsxMTc0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGJlOTdmNjg4N2YwZTdmLi5hODFmYWE3MDlkZDViYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC02Nyw2ICs2Nyw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9tYXNraW5nLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9tYXlfZ290b18xLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9tYXlfZ290b18yLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ2ZXJpZmllcl9tZW1fc2l6ZV9yZWcuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX21ldGFfYWNjZXNzLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9tb3ZzeC5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfbXR1LnNrZWwuaFwiXG5AQCAtMjIxLDYgKzIyMiw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9tYXBfcmV0X3ZhbCh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXBfcmV0X3ZhbCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWFza2luZyh2b2lkKSAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWFza2luZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMSh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMih2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMik7IH1cbit2b2lkIHRlc3RfdmVyaWZpZXJfbWVtX3NpemVfcmVnKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWVtX3NpemVfcmVnKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tZXRhX2FjY2Vzcyh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tZXRhX2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbW92c3godm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21vdnN4KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdWwodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tdWwpOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jXG5pbmRleCBkMGQ2NWQ2ZDQ1MGNmNS4uZWZlN2JjYWU3MGY4NWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xuQEAgLTY0LDcgKzY0LDcgQEAgaW50IEJQRl9QUk9HKGNncnBfa2Z1bmNfYWNxdWlyZV9ub19udWxsX2NoZWNrLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCBjaGFyICpcbiB9XG4gXG4gU0VDKFwidHBfYnRmL2Nncm91cF9ta2RpclwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgY2dyb3VwIG11c3QgcG9pbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgY2dyb3VwXCIpXG4gaW50IEJQRl9QUk9HKGNncnBfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqcGF0aClcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwICphY3F1aXJlZCwgKnN0YWNrX2NncnAgPSAoc3RydWN0IGNncm91cCAqKVx1MDAyNnBhdGg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xuaW5kZXggNWI0NDUzNzQ3YzIzMDguLjA5NTJkMWViZjBmMTdhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jXG5AQCAtMTM3LDcgKzEzNyw3IEBAIGludCBoZWxwZXJfcGFyYW1fbm90X29rKHZvaWQgKmN0eClcbiBcbiBcdHAgPSBicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG4gXHQvKlxuLVx0ICogQW55IGhlbHBlciB3aXRoIEFSR19DT05TVF9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLFxuK1x0ICogQW55IGhlbHBlciB3aXRoIEFSR19NRU1fU0laRV9PUl9aRVJPIGNvbnN0cmFpbnQgd2lsbCBkbyxcbiBcdCAqIHRoZSBtb3N0IHBlcm1pc3NpdmUgY29uc3RyYWludFxuIFx0ICovXG4gXHRicGZfY29weV9mcm9tX3VzZXIocCwgMCwgKHZvaWQgKik0Mik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXG5pbmRleCA4OTQyYjU0NzgxMjkxNy4uNWM5OWIxZTY1MzJiZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xuQEAgLTUwLDcgKzUwLDcgQEAgaW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZcbiB9XG4gXG4gU0VDKFwidHBfYnRmL3Rhc2tfbmV3dGFza1wiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgdGFza19zdHJ1Y3QgbXVzdCBwb2ludFwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFwiKVxuIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfZnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqYWNxdWlyZWQsICpzdGFja190YXNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKVx1MDAyNmNsb25lX2ZsYWdzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xuaW5kZXggYmMwMzhhYzJkZjk4ZTIuLjFhMjczZTQxNmZlZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBsMF8lPTpcdHIxID0gcjY7XHRcdFx0XHRcdFxcXG4gXHRyMyArPSAtODtcdFx0XHRcdFx0XFxcbiBcdHI1ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogVGhlIDR0aCBhcmd1bWVudCBvZiBicGZfc2tiX3N0b3JlX2J5dGVzIGlzIGRlZmluZWQgYXMgXFxcbi1cdCAqIEFSR19DT05TVF9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJ3I0ICE9IDAnIFxcXG4rXHQgKiBBUkdfTUVNX1NJWkUsIHNvIDAgaXMgbm90IGFsbG93ZWQuIFRoZSAncjQgIT0gMCcgXFxcbiBcdCAqIGlzIHByb3ZpZGluZyB1cyB0aGlzIGV4Y2x1c2lvbiBvZiB6ZXJvIGZyb20gaW5pdGlhbCBcXFxuIFx0ICogWzAsIDddIHJhbmdlLlx0XHRcdFx0XFxcbiBcdCAqL1x0XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXG5pbmRleCBmMmM1NGU0ZDg5ZWJlZi4uMzQzZmMwOGQ5NzQ3OTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xuQEAgLTg1LDcgKzg1LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2JpdHdpc2VfYW5kX3plcm9faW5jbHVkZWQodm9pZClcbiBcdHIyICs9IC02NDtcdFx0XHRcdFx0XFxcbiBcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXG4tXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4rXHQgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuIFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IGF0IFx1MDAyNmZwWy02NF0gaXNcXFxuIFx0ICogbm90IGluaXRpYWxpemVkLlx0XHRcdFx0XFxcbiBcdCAqL1x0XHRcdFx0XHRcdFxcXG5AQCAtMjc4LDcgKzI3OCw3IEBAIF9fbmFrZWQgdm9pZCBzdGFja19qbXBfbm9fbWluX2NoZWNrKHZvaWQpXG4gXHRyMiArPSAtNjQ7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuK1x0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiBcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCBcdTAwMjZmcFstNjRdIGlzXFxcbiBcdCAqIG5vdCBpbml0aWFsaXplZC5cdFx0XHRcdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuQEAgLTc3OCw3ICs3NzgsNyBAQCBfX25ha2VkIHZvaWQgdmFyaWFibGVfbWVtb3J5XzhfYnl0ZXNfbGVhayh2b2lkKVxuIFx0cjMgKz0gMTtcdFx0XHRcdFx0XFxcbiBcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXG4tXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4rXHQgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuIFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IHJlZ2lvbiBbMSwgNjRdXFxcbiBcdCAqIGF0IFx1MDAyNmZwWy02NF0gaXMgbm90IGZ1bGx5IGluaXRpYWxpemVkLlx0XFxcbiBcdCAqL1x0XHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcbmluZGV4IDZkMmEzODU5N2MzNGY0Li5jNjYwM2ExMThmZGMzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcbkBAIC05MSw3ICs5MSw3IEBAIGwwXyU9Olx0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuIFxuIC8qIENhbGwgYSBmdW5jdGlvbiB0YWtpbmcgYSBwb2ludGVyIGFuZCBhIHNpemUgd2hpY2ggZG9lc24ndCBhbGxvdyB0aGUgc2l6ZSB0b1xuICAqIGJlIHplcm8gKGkuZS4gYnBmX3RyYWNlX3ByaW50aygpIGRlY2xhcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmVcbi0gKiBBUkdfQ09OU1RfU0laRSwgbm90IEFSR19DT05TVF9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlXG4rICogQVJHX01FTV9TSVpFLCBub3QgQVJHX01FTV9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlXG4gICogc2l6ZSBhbmQgZXhwZWN0IHRvIGZhaWwuXG4gICovXG4gU0VDKFwidHJhY2Vwb2ludFwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jOGVlZTEzNTAwMjcwYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jXG5AQCAtMCwwICsxLDYwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3QgaW5uZXJfbWFwIHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIGludCk7XG4rfSBpbm5lcl9tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbWFwKTtcbit9IG91dGVyX21hcCBTRUMoXCIubWFwc1wiKSA9IHtcbitcdC52YWx1ZXMgPSB7IFswXSA9IFx1MDAyNmlubmVyX21hcCB9LFxuK307XG4rXG4rLyogQW4gdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgbXVzdCBiZSByZWplY3RlZCBhcyBhIF9fbnVsbGFibGUga2Z1bmMgbWVtIGJ1ZmZlciAqL1xuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcInR5cGU9bWFwX3B0ciBleHBlY3RlZD1mcFwiKVxuK2ludCBtYXBvZm1hcHNfdmFsdWVfYXNfa2Z1bmNfbWVtX2J1ZihzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgZHB0cjtcbitcdF9fdTMyIGtleSA9IDA7XG4rXHR2b2lkICppbm5lcjtcbitcdGNoYXIgKnA7XG4rXG4rXHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2b3V0ZXJfbWFwLCBcdTAwMjZrZXkpO1xuK1x0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKHNrYiwgMCwgXHUwMDI2ZHB0cik7XG4rXHQvKiBwYXNzIHRoZSB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBhcyB0aGUgc2NyYXRjaCBidWZmZXIgKi9cbitcdHAgPSBicGZfZHlucHRyX3NsaWNlKFx1MDAyNmRwdHIsIDAsIGlubmVyLCA0KTtcbitcdGlmIChwKVxuK1x0XHRyZXR1cm4gcFswXTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBBbiB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBtdXN0IGJlIHJlamVjdGVkIGFzIGEgUFRSX01BWUJFX05VTEwgaGVscGVyIG1lbSBidWZmZXIgKi9cbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJ0eXBlPW1hcF9wdHIgZXhwZWN0ZWQ9ZnBcIilcbitpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2hlbHBlcl9tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1x0dm9pZCAqaW5uZXI7XG4rXG4rXHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2b3V0ZXJfbWFwLCBcdTAwMjZrZXkpO1xuK1x0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXG4rXG4rXHQvKiBAZnJvbSBpcyBhIG51bGxhYmxlIHJlYWQtb25seSBtZW0rc2l6ZSBhcmc7IG91dGVyIHZhbHVlX3NpemUgaXMgNCAqL1xuK1x0cmV0dXJuIGJwZl9jc3VtX2RpZmYoaW5uZXIsIDQsIE5VTEwsIDAsIDApICsgc2tiLVx1MDAzZWxlbjtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbmluZGV4IDI4NzA3MzhkOTNmN2VjLi44ZjBjNDU0MjFmODkzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0yOCw3ICsyOCw3IEBAIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19udWxsKVxuIH1cbiBcbiBTRUMoXCJsc20ucy9pbm9kZV9nZXR4YXR0clwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgdGFza19zdHJ1Y3QgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFwiKVxuIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19mcClcbiB7XG4gXHR1NjQgeDtcbkBAIC05OCw3ICs5OCw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19udWxsKVxuIH1cbiBcbiBTRUMoXCJsc20ucy90YXNrX2FsbG9jXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCB1bnRydXN0ZWRfcHRyX1wiKVxuIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIHtcbiBcdHN0cnVjdCBwYXRoICpyb290O1xuQEAgLTExMiw3ICsxMTIsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza1xuIH1cbiBcbiBTRUMoXCJsc20ucy9maWxlX29wZW5cIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImRlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHVudHJ1c3RlZF9wdHJfXCIpXG4gaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2N1cnJlbnQpXG4ge1xuIFx0c3RydWN0IHBhdGggKnB3ZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXG5pbmRleCAzMDJkNzEyZTBkN2VkMi4uOGNkNjI2ZTA0NTUxNTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcbkBAIC0zMSw3ICszMSw3IEBAXG4gXHR9LFxuIFx0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxuIFx0LnJlc3VsdCA9IFJFSkVDVCxcbi1cdC5lcnJzdHIgPSBcIlIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwxIG11c3QgcG9pbnQgdG8gc2NhbGFyXCIsXG4rXHQuZXJyc3RyID0gXCJSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwxXCIsXG4gXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xuIFx0XHR7IFwiYnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsMVwiLCAyIH0sXG4gXHR9LFxuQEAgLTQ2LDcgKzQ2LDcgQEBcbiBcdH0sXG4gXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG4gXHQucmVzdWx0ID0gUkVKRUNULFxuLVx0LmVycnN0ciA9IFwibWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXFxuUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDJcIixcbitcdC5lcnJzdHIgPSBcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDJcIixcbiBcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XG4gXHRcdHsgXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwyXCIsIDIgfSxcbiBcdH0sXG5AQCAtNjEsNyArNjEsNyBAQFxuIFx0fSxcbiBcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbiBcdC5yZXN1bHQgPSBSRUpFQ1QsXG4tXHQuZXJyc3RyID0gXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMyBtdXN0IHBvaW50IHRvIHNjYWxhclwiLFxuK1x0LmVycnN0ciA9IFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsM1wiLFxuIFx0LmZpeHVwX2tmdW5jX2J0Zl9pZCA9IHtcbiBcdFx0eyBcImJwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDNcIiwgMiB9LFxuIFx0fSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjMzOjU5Ljk1NTY2ODgxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3Nzk2MDIyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIHRoZSBCUEYgdmVyaWZpZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgaG93IGtmdW5jIGFyZ3VtZW50cyBhcmUgYmVpbmcgdmVyaWZpZWQsIGVzcGVjaWFsbHkgd2hlbiBgX19jb25zdF9tYXBgIGFuZCBgX19tYXBgIGFubm90YXRpb25zIGFyZSBpbnZvbHZlZCwgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBgQVJHX01FTV9TSVpFYCBhbmQgYEFSR19NRU1fU0laRV9PUl9aRVJPYC4gSW50ZXJlc3RpbmcuIEkgc2VlIHRoZXkncmUgaW50cm9kdWNpbmcgYE1BWF9CUEZfRlVOQ19BUkdTYCBhbmQgYE1BWF9CUEZfRlVOQ19SRUdfQVJHU2AsIHdoaWNoIHN1Z2dlc3RzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFyZ3VtZW50IGhhbmRsaW5nIGFwcHJvYWNoLiBUaGV5J3ZlIGFsc28gcmVmYWN0b3JlZCBgY2hlY2tfZnVuY19hcmdgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AsIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gQWxzbyB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uOiBgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWJgLCB3aGljaCBpbXBsaWVzIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcywgZnJlZWluZyBrZnVuYyBkZXNjcmlwdG9ycy4gUGx1cywgdGhleeKAmXJlIG1vZGlmeWluZyBgZ2VuX2tmdW5jX2FyZ19wcm90b2AgdG8gZ2VuZXJhdGUgYGJwZl9mdW5jX3Byb3RvYCBmb3IgdGhlc2Uga2Z1bmNzLlxuXG5BbHJpZ2h0LCBsZXQncyBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBTaW5jZSB0aGlzIGlzIHRvdWNoaW5nIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlLCBJJ20gY29uZmlkZW50IGl0J3MgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZGlyZWN0bHkgZnVuY3Rpb25hbC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIHB1dHRpbmcgdGhyb3VnaCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGJwZl9hZGRfa2Z1bmNfY2FsbGAsIGBjaGVja19rZnVuY19hcmdzYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfZnVuY19hcmdgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgZ2VuX2tmdW5jX2FyZ19wcm90b2AsIGFuZCBgZ2V0X2tmdW5jX2FyZ190eXBlYC4gVGhleSdyZSB0aGUgY29yZSBvZiB0aGUgbmV3IHZlcmlmaWNhdGlvbiBsb2dpYy5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGBLY29uZmlnYCBvcHRpb25zLiBJIGtub3cgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXMgZW5hYmxlZC5cblxuTGFzdGx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGVhY2ggbW9kaWZpZWQgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk1NywiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjA3LjczNTI3NDgwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5MDM0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sKVxcXFxzKyhicGZfYWRkX2tmdW5jX2NhbGx8Y2hlY2tfa2Z1bmNfYXJnc3xjaGVja19rZnVuY19jYWxsfGNoZWNrX2Z1bmNfYXJnfGNoZWNrX2hlbHBlcl9jYWxsfGdlbl9rZnVuY19hcmdfcHJvdG98Z2V0X2tmdW5jX2FyZ190eXBlKVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyNj12b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNzM3OmludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI3Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzozNDowNy44MzkxODMxNjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODAzMzk2NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkNoZWNraW5nIGBjaGVja19rZnVuY19hcmdzYCBhbmQgUmVsYXRlZCBDb2RlKipcblxuQWxyaWdodCwgdGhlIHRhc2sgYXQgaGFuZCBzZWVtcyB0byBiZSBmb2N1c2VkIGFyb3VuZCBldmFsdWF0aW5nIHNvbWUgZnVuY3Rpb24gYXJndW1lbnRzLCBwb3RlbnRpYWxseSB3aXRoaW4gYSBrZXJuZWwgY29udGV4dCwgZ2l2ZW4gdGhlIG1lbnRpb24gb2YgYGtmdW5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlIGFuZCBwaW5wb2ludCB0aGUgYGNoZWNrX2tmdW5jX2FyZ3NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMsIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIGFyZ3VtZW50cywgYW5kIHdoYXQgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgaXQgaGFuZGxlcy4gQXJlIHRoZXJlIGFueSBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBiZSBtaXNzZWQ/IEknbGwgbmVlZCB0byBsb29rIGF0IGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzIOKAkyBhbnkgZnVuY3Rpb25zIGl0IGNhbGxzLCBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBhbnkgZXJyb3IgY29kZXMgaXQgcmV0dXJucy5cblxuQmV5b25kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24sIEknbGwgbmVlZCB0byBjb25zaWRlciBcIm90aGVyc1wiLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBtb2R1bGVzIGFyZSByZWxhdGVkIHRvIHRoaXMgYXJndW1lbnQgdmFsaWRhdGlvbj8gSXMgdGhlcmUgYSBicm9hZGVyIGZyYW1ld29yayBvciBkZXNpZ24gcGF0dGVybiBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0aGF0IHN0b3JlIG1ldGFkYXRhIGFib3V0IHRoZSBhcmd1bWVudHM/IEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjb25zdW1lIHRoZSBvdXRwdXQgb2YgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBhcmd1bWVudCBoYW5kbGluZywgdmFsaWRhdGlvbiBvciBwYXJzaW5nLiBJIG5lZWQgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgc3lzdGVtLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBBcmUgdGhlcmUgYW55IHdheXMgdG8gYnlwYXNzIHRoZSBjaGVja3MsIGNhdXNlIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWFsaWNpb3VzbHkgY3JhZnRlZCBpbnB1dHM/IE15IG1pbmQgaXMgc3RhcnRpbmcgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzLiBUaGUgbW9yZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUsIHRoZSBtb3JlIHRlc3Qgc2NlbmFyaW9zIEknbGwgbmVlZCB0byBkZWZpbmUgdG8gbWFrZSBzdXJlIGl0IGhhbmRsZXMgZXZlcnl0aGluZyBwcm9wZXJseS4gSSB3aWxsIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIHNlY3VyaXR5IGZsYXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk1OSwiT3V0cHV0VG9rZW5zIjo5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjEyLjY0MjU4MzEzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjIzMTU3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWNcXFxccyspPyhpbnR8dm9pZHxib29sKVxcXFxzKyhicGZfYWRkX2tmdW5jX2NhbGx8Y2hlY2tfa2Z1bmNfYXJnc3xjaGVja19rZnVuY19jYWxsfGNoZWNrX2Z1bmNfYXJnfGNoZWNrX2hlbHBlcl9jYWxsfGdlbl9rZnVuY19hcmdfcHJvdG98Z2V0X2tmdW5jX2FyZ190eXBlKVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjY1OT1zdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzIxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNzIyOnN0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzIzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyNj12b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyNzM3OmludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI3Mzgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgzNTA9c3RhdGljIGludCBwcm9jZXNzX21hcF9wdHJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM4Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM4ODpzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgzODktXFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyODc9c3RhdGljIGludCByZWxlYXNlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzA0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDMwNTpzdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzMDYtXFx0XFx0XFx0ICAgICBpbnQgKmluc25faWR4X3ApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzOTk9Z2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUxMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1MTI6c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MTMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMDI9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTg6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTktXFx0XFx0XFx0ICAgIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzAyOT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzAzMC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMwMzE6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwMzItXFx0XFx0XFx0ICAgIGludCAqaW5zbl9pZHhfcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6MTIuOTY0OTA2NDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNDI5NjgzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUmVmYWN0b3JpbmcgZm9yIEVuaGFuY2VkIEtmdW5jIGFuZCBIZWxwZXIgQXJndW1lbnQgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIEJQRiB2ZXJpZmllciByZWZhY3RvcmluZy4gVGhlIGZ1bmN0aW9ucyBsaXN0ZWQg4oCTIGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgZ2VuX2tmdW5jX2FyZ19wcm90b2AsIGBjaGVja19mdW5jX2FyZ2AsIGBjaGVja19oZWxwZXJfY2FsbGAsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAg4oCTIGFyZSB0aGUgY3J1Y2lhbCBwaWVjZXMsIGFuZCB0aGV5IG5lZWQgYSBjbG9zZSBsb29rLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMsIG9mIGNvdXJzZSwgdGhlIHByaW1hcnkgb25lIHRvIGNvbnNpZGVyLiBOb3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIGFib3V0IHVuaWZpY2F0aW9uLiBJdCdzIGFkZGluZyBhbm5vdGF0aW9ucywgcmVuYW1pbmcgc29tZSBhcmd1bWVudCBzaXplIGNvbnN0YW50cywgYnVtcGluZyBgTUFYX0JQRl9GVU5DX0FSR1NgIHRvIDEyLCBhbmQgZ2VuZXJhbGx5IGFkanVzdGluZyBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYm90aCBrZnVuYyBhbmQgaGVscGVyIGFyZ3VtZW50cy4gSXQgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgYnBmX2FkZF9rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfYXJnYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIGFyZSBjZW50cmFsIHRvIHRoaXMgdW5pZmljYXRpb24uIEl0J3MgZ29vZCB0byBzZWUgYGJwZl9mdW5jX3Byb3RvYCBnZXR0aW5nIHVzZWQuXG5cblRoaXMgaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGNoYW5nZSBzZXQgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbiBzeW1ib2xzIGFyZSBzdGF0aWMsIHNpbmNlIEkgYW0gbG9va2luZyBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbiBzeW1ib2xzLiBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGdlbl9rZnVuY19hcmdfcHJvdG9gLCBgY2hlY2tfZnVuY19hcmdgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgYXJlIGFsbCBzdGF0aWMuIExldCdzIHNlZSBhYm91dCBpbmxpbmluZyBzaW5jZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucyBhcmUgcHJlZmVyYWJsZS5cblxuYGJwZl9hZGRfa2Z1bmNfY2FsbGAgaXMgbm90IHN0YXRpYy4gYGNoZWNrX2hlbHBlcl9jYWxsYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfZnVuY19hcmdgLCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBhbGwgc3RhdGljIGJ1dCBsaWtlbHkgbm90IGlubGluZWQgYmVjYXVzZSBvZiB0aGVpciBzaXplLlxuXG5JJ2xsIGNoZWNrIGBicGZfY2hlY2tgLCB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYnV0IGl0J3MgdG9vIGdlbmVyaWMuIEknbGwgaW5jbHVkZSBgYnBmX2FkZF9rZnVuY19jYWxsYCwgYGNoZWNrX2hlbHBlcl9jYWxsYCwgYW5kIGBjaGVja19rZnVuY19jYWxsYCBhcyBwcm9taXNpbmcgdGFyZ2V0cy5cblxuTm93LCBsZXQncyBmaW5kIHNvbWUgKm5vbiotc3RhdGljIGZ1bmN0aW9ucy4gYGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiYCBpcyBvbmUuIEFoLCBoZXJlIGFyZSBhIGZldyBtb3JlOiBgYnBmX3dxX2luaXRgLCBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxgLCBhbmQgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYC4gVGhvc2UgbG9vayBnb29kIVxuXG5TbywgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBmdXp6aW5nIGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgYnBmX3dxX2luaXRgLCBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxgLCBgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWVgLCBgY2hlY2tfaGVscGVyX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGFzc3VtaW5nIHRoZXkncmUgbm90IGlubGluZWQsIHdoaWNoIGdpdmVuIHRoZWlyIHNpemUsIGlzIGEgc2FmZSBiZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjI1LjAwNzg3NzYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA2MTY2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTMzODg9X19icGZfa2Z1bmMgdm9pZCBicGZfdGhyb3codTY0IGNvb2tpZSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM0MDYtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzQwNzpfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX2NvbnN0X21hcCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM0MDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzozNDoyNS4xNTg1MDA2MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk5NjYzNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGZyYW1ld29yaywgc28gSSdsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gZGlyZWN0bHkgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgYSBCUEYgcHJvZ3JhbSB0cmlnZ2VycyBhIHNpZ25hbCBkZWxpdmVyeSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHRhc2tfd29yayBtZWNoYW5pc20uIFRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gaGVscGVycy5jIHNob3VsZCB0ZWxsIG1lIGlmIGl0IHVzZXMgdGFza193b3JrIHNjaGVkdWxpbmcgaW4ga2VybmVsIHNwYWNlIG9yIGhvdyB0byBkZXRlcm1pbmUgdGhlIHNpZ25hbCdzIHByb2Nlc3MuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgbnVhbmNlcyBpbiB0aGUgc2lnbmFsIGRlbGl2ZXJ5IHByb2Nlc3MsIHBvdGVudGlhbCBsaW1pdGF0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycywgYW5kIG9mIGNvdXJzZSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIGxvY2sgdXNhZ2UsIGFuZCBhbnkgdW51c3VhbCBvcHRpbWl6YXRpb25zLiBJJ2xsIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHJlbGV2YW50IHRhc2tfd29yayBkb2N1bWVudGF0aW9uIGFuZCByZWxhdGVkIEJQRiBoZWxwZXJzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCB0aGlzIHJvdXRpbmUgY2FuIGV4cGxhaW4gd2hlcmUgdGhlIGlzc3VlIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMTE1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6MjguOTU4MTY2NDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5NTQ1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ1OTY9c3RhdGljIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY1MC0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjUxOl9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjUyLVxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjI5LjA2MDEyOTI1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM1MDI4MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lYCBvcGVyYXRlcywgYW5kIHdoZXJlIGl0IHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB0YXNrIHdvcmsgbWVjaGFuaXNtOyB1bmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsaW5nIGFuZCByZXN1bWluZyBsb2dpYyBpcyBrZXkuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhpcyBmdW5jdGlvbj8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlcz8gQW55IGNsZXZlciBsb2NraW5nIG9yIGF0b21pY3MgaW4gcGxheT8gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gcmVzdW1pbmcgQlBGIHByb2dyYW1zIHRocm91Z2ggdGhpcyBwYXRoLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBzcGVjaWZpYyBkZWJ1Z2dpbmcgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTg2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6MzMuMjk1MTYwODcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI5MTM3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ2NTE9X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2OC0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjY5Ol9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjcwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjMzLjQzODA4MTQzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQ4ODM3Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoZXNlIGNvZGUgY2hhbmdlcywgaXQncyBjbGVhciB0aGUgYWRqdXN0bWVudHMgdG8gYGJwZl93cV9pbml0YCwgYGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsYCwgYW5kIGBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZWAgYXJlIHRyaXZpYWwgcmVmYWN0b3JpbmdzLiBSZWFsbHksIGl0J3MganVzdCBhIHJlbmFtZSBvZiB0aG9zZSBtYXAgcG9pbnRlcnMuIFRoZSBjb3JlIGxvZ2ljIG9mIHRob3NlIGZ1bmN0aW9ucyBpcyB1bnRvdWNoZWQuIFRoZXJlZm9yZSwgdGhlIHNpZ25pZmljYW50IHNoaWZ0IGhhcyB0byBiZSBpbiB0aGUgdmVyaWZpZXIuXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aG9zZSB2ZXJpZmllciBmdW5jdGlvbnM6IGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2FyZ2AsIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuXG5cbk5vdywgbGV0IG1lIGNvbmZpcm0gaWYgYGNoZWNrX2hlbHBlcl9jYWxsYCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBZZXAsIHRoZXkgYXJlLiBUaG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIGNhbiBzZWUgdGhhdCB0aGV5IGFyZSBtYXNzaXZlIGZ1bmN0aW9ucy4gTm8gY2hhbmNlIHRoZXkncmUgaW5saW5lZC5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byBpbmNsdWRlIGBicGZfYWRkX2tmdW5jX2NhbGxgIGFzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gQW5kIGFsc28gbGV0J3MgbG9vayBhdCBgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWJgLlxuXG5MZXQncyBkaXZlIGludG8gdGhhdCBgYnBmX2FkZF9rZnVuY19jYWxsYCBmdW5jdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjM4LjY4NjkyMTk3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDU0OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJwZl9hZGRfa2Z1bmNfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTI3MjY9dm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjczNzppbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzM4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6MzguNzc4ODMzOTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTMxNjYwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHN1YnN0YW50aWFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIGNvcmUuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkIGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBEZWZpbml0ZWx5LCBJJ2xsIG5lZWQgdG8gaW5jbHVkZSBgYnBmX2FkZF9rZnVuY19jYWxsYCBhbmQgYGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiYCwgdGhvc2UgYXJlIGNyaXRpY2FsLiBBbHNvLCBJIGhhdmUgdG8gaW5jbHVkZSBgY2hlY2tfaGVscGVyX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAsIHNpbmNlIHRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBnb3QgdGhlIHJlZmFjdG9yaW5nLlxuXG5NeSBleHBlcnQgZXllIHRlbGxzIG1lIHRoaXMgdW5pZmljYXRpb24gb2Yga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24gaGFzIGZhci1yZWFjaGluZyBjb25zZXF1ZW5jZXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fY29uc3RfbWFwYCBhbmQgYF9fbWFwYCBhbm5vdGF0aW9ucywgdGhlIHJlbmFtaW5nIG9mIGBBUkdfQ09OU1RfU0laRWAgdG8gYEFSR19NRU1fU0laRWAsIGFuZCB0aGUgcmV2aXNlZCBgYnBmX2Z1bmNfcHJvdG9gIGdlbmVyYXRpb24gYW5kIHVzYWdlIGZvciBrZnVuY3Mg4oCTIHRoZXNlIGFyZSBhbGwgaW5kaWNhdG9ycyBvZiBhIHNoaWZ0IGluIHRoZSBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMuIEknZCBhcmd1ZSB0aGF0IGdpdmVuIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaCBJIHNob3VsZCBoYXZlIGl0IGZ1enplZCBpbW1lZGlhdGVseSB0byBndWFyYW50ZWUgdGhhdCBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXG5cbkknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoZSBjb25maWdzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBwbGF5IGludG8gdGhpcy4gSXQncyBvYnZpb3VzbHkgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIGJ5IGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyB0aGUgbWFpbiBvbmUgZm9yIHRoZSBCUEYgdmVyaWZpZXIsIG5vIHN1cnByaXNlcyB0aGVyZS4gQnV0LCBJIHdvbmRlciwgaXMgYENPTkZJR19ERUJVR19JTkZPX0JURmAgcmVsZXZhbnQgdG8gdGhlIGtmdW5jIGZ1bmN0aW9uYWxpdHk/IEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6NDQuNzkyMDA0ODE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MTU1NDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjQ0Ljk1NzgyOTU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI1Njc3NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYEJQRl9TWVNDQUxMYCBpcyBjb25maWd1cmVkLiBUaGF0IHN1Z2dlc3RzIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGl0IGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEtjb25maWcgaXMgdGhlIGhlYXJ0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBpZiBzb21ldGhpbmcgaXMgcmVsYXRlZCB0byB0aGUga2VybmVsLCBpdCdzICpnb3R0YSogYmUgZGVzY3JpYmVkIHRoZXJlIHNvbWV3aGVyZS4gSSdsbCBzZWFyY2ggZm9yIFwiQlBGX1NZU0NBTExcIiBkaXJlY3RseS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgb3B0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgbWF5YmUgZXZlbiBhIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHdoYXQgZW5hYmxpbmcgaXQgZW50YWlscy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgYXQgbGVhc3QgdGVsbCBtZSB3aGVyZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpZiBuZWNlc3NhcnkuIExldCdzIHNlZSB3aGF0IEtjb25maWcgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzMzksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzozNDo0OC42ODM1MTE1MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Nzg4MzIwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjM0OjUxLjQ2MjM1MjU1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM5MTc3MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25maWcgVmVyaWZpY2F0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCdzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBNYWtpbmcgc3VyZSB0aGF0J3Mgc2V0IGlzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgc3dlZXAgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eS5cblxuQW5kLCBvZiBjb3Vyc2UsIHdpdGgga2Z1bmNzLCBgREVCVUdfSU5GT19CVEZgIGlzIGFsbW9zdCBhbHdheXMgYSBwcmVyZXF1aXNpdGUsIGlzbid0IGl0PyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGF0J3MgZW5hYmxlZC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQgc2V0dGluZ3MuIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9ucyBoZXJlLCBJIG5lZWQgdG8gaGF2ZSBjb25jcmV0ZSBldmlkZW5jZSBvZiB3aGF0J3MgZ29pbmcgb24uIEkgbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjMzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzQ6NTUuNTAxNTM0MzUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQzNTg5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXFxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzozNDo1OC4yNDUxMjk2MDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3ODI3MTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbGl6aW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgaGVyZSdzIHRoZSBwbGFuLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhlc2UgYXJlIGtleSBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZS5cblxuVGhlIGNvcmUgb2YgdGhpcyBmdXp6aW5nIGVmZm9ydCBpcyB0YXJnZXRlZCBhdCB0aGF0IHJlY2VudCByZWZhY3Rvci4gVGhlIHBhdGNoIHVuaWZpZXMga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24sIGFuZCB0aGF0J3MgYSAqbWFqb3IqIGNoYW5nZS4gR2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBgX19jb25zdF9tYXBgIGFuZCBgX19tYXBgIGFubm90YXRpb25zLCB0aGUgcmVuYW1pbmcgb2YgYEFSR19DT05TVF9TSVpFYCB0byBgQVJHX01FTV9TSVpFYCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGhvdyBgYnBmX2Z1bmNfcHJvdG9gIGlzIGdlbmVyYXRlZCwgSSAqa25vdyogdGhpcyB3YXJyYW50cyBmb2N1c2VkIGF0dGVudGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgYXJndW1lbnQgdmFsaWRhdGlvbiwgYW5kIHRoYXQncyBleGFjdGx5IHdoZXJlIGZ1enppbmcgbmVlZHMgdG8gYmUgc2hhcnAuXG5cblRoZXJlZm9yZSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBicGZfYWRkX2tmdW5jX2NhbGxgLCBgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWJgLCBgY2hlY2tfaGVscGVyX2NhbGxgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBjaGVja19mdW5jX2FyZ2AuIFRob3NlIHN5bWJvbHMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBrZnVuYyBhbmQgaGVscGVyIGFyZ3VtZW50IHZlcmlmaWNhdGlvbi5cblxuQW5kIGZpbmFsbHksIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiBUaGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgcmVzdWx0aW5nIGZyb20gdGhlc2UgY2hhbmdlcyBpcyBoaWdoIGVub3VnaCB0aGF0IGlnbm9yaW5nIHRoaXMgd291bGQgYmUgbmVnbGlnZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA4NCwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MzU6MDQuMzIzNDA0NTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjk2OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfYWRkX2tmdW5jX2NhbGxcIixcbiAgICBcImJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiXCIsXG4gICAgXCJjaGVja19oZWxwZXJfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfZnVuY19hcmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiB2ZXJpZmllciB0byB1bmlmeSBrZnVuYyBhbmQgaGVscGVyIGFyZ3VtZW50IHZlcmlmaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBgX19jb25zdF9tYXBgIGFuZCBgX19tYXBgIGFubm90YXRpb25zIGZvciBrZnVuY3MsIHJlbmFtZXMgYEFSR19DT05TVF9TSVpFYCB0byBgQVJHX01FTV9TSVpFYCwgYW5kIG1vZGlmaWVzIGhvdyBgYnBmX2Z1bmNfcHJvdG9gIGlzIGdlbmVyYXRlZCBhbmQgdXNlZCBmb3Iga2Z1bmNzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FkZF9rZnVuY19jYWxsXCIsXG4gICAgXCJicGZfZnJlZV9rZnVuY19kZXNjX3RhYlwiLFxuICAgIFwiY2hlY2tfaGVscGVyX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2FyZ3NcIixcbiAgICBcImNoZWNrX2Z1bmNfYXJnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdW5pZnkga2Z1bmMgYW5kIGhlbHBlciBhcmd1bWVudCB2ZXJpZmljYXRpb24uIEl0IGludHJvZHVjZXMgYF9fY29uc3RfbWFwYCBhbmQgYF9fbWFwYCBhbm5vdGF0aW9ucyBmb3Iga2Z1bmNzLCByZW5hbWVzIGBBUkdfQ09OU1RfU0laRWAgdG8gYEFSR19NRU1fU0laRWAsIGFuZCBtb2RpZmllcyBob3cgYGJwZl9mdW5jX3Byb3RvYCBpcyBnZW5lcmF0ZWQgYW5kIHVzZWQgZm9yIGtmdW5jcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}