Name: series-workflowhlflj Phase: Succeeded StartedAt: 2026-09-03 20:00:43 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[0] Phase: Succeeded StartedAt: 2026-09-03 20:00:43 +0000 UTC FinishedAt: 2026-09-03 20:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 20:00:43 +0000 UTC FinishedAt: 2026-09-03 20:26:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_bind", "mem_cgroup_css_rstat_flush", "mem_cgroup_stat_aggregate", "flush_nmi_stats" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MTY4MjljNzczYzE5NDhkZGMxYTkzZTAyMzY1ZTk5ZDE4Yjc3OWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY4Nyw2ICYjNDM7Njg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4mIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuJiM0MzsgKiBUaGV5IGFyZSBza2lwcGVkIGlmIHRoZSBjb250cm9sbGVyIHNpdHMgb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5XG4mIzQzOyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3lcbiYjNDM7ICogaGllcmFyY2h5KS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDg0LDcgJiM0Mzs0NTA3LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbiYjNDM7XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuJiM0MztcdCAqL1xuIFx0bG9uZyAqbG9jYWw7XG4gXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG4gXHRsb25nICpwZW5kaW5nO1xuQEAgLTQ1MjMsNyAmIzQzOzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuJiM0MztcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTtcbiBcbiBcdFx0aWYgKGRlbHRhKSB7XG5AQCAtNDUzNyw2ICYjNDM7NDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4mIzQzO1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTQ0LDcgJiM0Mzs0NTcxLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XG4gXG4gXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbiYjNDM7XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0fVxuQEAgLTQ1NjYsNyAmIzQzOzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiYjNDM7XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuJiM0MztcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTc5LDcgJiM0Mzs0NjA4LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuIFx0XHR9XG5AQCAtNDYwNCw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4mIzQzO1x0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbiBcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG5AQCAtNDYxNSw3ICYjNDM7NDY0NSw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbiYjNDM7XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG5AQCAtNTE5OSw2ICYjNDM7NTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbiBcdHsgfVx0LyogdGVybWluYXRlICovXG4gfTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiM0MzsvKlxuJiM0MzsgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2xsZXIgaGFzIG1vdmVkIGJldHdlZW4gaGllcmFyY2hpZXMsIHdpdGggdGhlIG9uX2RmbFxuJiM0MzsgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgY29udHJvbGxlciBpcyBtb3ZpbmcgZnJvbSB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgdG8gdGhlIGxlZ2FjeVxuJiM0MzsgKiBoaWVyYXJjaHksIHZtc3RhdHMmIzM5O3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcbiYjNDM7ICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuXG4mIzQzOyAqIGZyb20gdGhlIHZtc3RhdHMmIzM5O3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG4mIzQzOyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2NzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mocm9vdF9jc3MpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3RcbiYjNDM7XHQgKiBkZXN0cm95ZWQgcmlnaHQgYmVmb3JlIHRoZSByZWJpbmQgdGhhdCBtYXkgaGF2ZSBsZWZ0IGNvdW50cyBpbiB0aGVcbiYjNDM7XHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJiMzOTt0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzXG4mIzQzO1x0ICogYXJyYXlzXG4mIzQzO1x0ICovXG4mIzQzO1x0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVuc1xuJiM0MztcdCAqIG9uIHJvb3RfbWVtX2Nncm91cCB3aXRob3V0IGNncm91cF9tdXRleCBhbmQgYSBmbHVzaCBpbmNyZW1lbnRzIHN0YXRlXG4mIzQzO1x0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcbiYjNDM7XHQgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpc1xuJiM0MztcdCAqIG92ZXJ3cml0dGVuIGFuZCB0aGUgY291bnRlciBzdGF5cyBzaG9ydCwgYnV0IHRoZSBkaWZmZXJlbmNlIHdvdWxkIGJlXG4mIzQzO1x0ICogYSBzaW5nbGUgQ1BVJiMzOTtzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZVxuJiM0MztcdCAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzW2ldO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbiYjNDM7XG4gc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxuIFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5AQCAtNTIxMiw2ICYjNDM7NTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5leGl0ID0gbWVtX2Nncm91cF9leGl0LFxuIFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHQuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCxcbiBcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuICNlbmRpZlxuIFx0LmVhcmx5X2luaXQgPSAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNWI5ZTBlYmQ0MmFlMC4uMzcyYWMxOTNlNzc3YiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjg3LDYgJiM0Mzs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWF0b21pY19sb25nX3QJCXN0YXRzX3VwZGF0ZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5CiYjNDM7ICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuCiYjNDM7ICogVGhleSBhcmUgc2tpcHBlZCBpZiB0aGUgY29udHJvbGxlciBzaXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeQomIzQzOyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3kKJiM0MzsgKiBoaWVyYXJjaHkpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nCiAgKgpAQCAtNDQ4NCw3ICYjNDM7NDUwNywxMCBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHsKIAkvKiBwb2ludGVyIHRvIHRoZSBhZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KIAlsb25nICphZ2dyZWdhdGU7Ci0JLyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqLwomIzQzOwkvKgomIzQzOwkgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0bwomIzQzOwkgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKQomIzQzOwkgKi8KIAlsb25nICpsb2NhbDsKIAkvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovCiAJbG9uZyAqcGVuZGluZzsKQEAgLTQ1MjMsNyAmIzQzOzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpCiAJCX0KIAogCQkvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovCi0JCWlmIChkZWx0YV9jcHUpCiYjNDM7CQlpZiAoZGVsdGFfY3B1ICZhbXA7JmFtcDsgYWMtJmd0O2xvY2FsKQogCQkJYWMtJmd0O2xvY2FsW2ldICYjNDM7PSBkZWx0YV9jcHU7CiAKIAkJaWYgKGRlbHRhKSB7CkBAIC00NTM3LDYgJiM0Mzs0NTYzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQwogc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIHsKJiM0MzsJbG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7CiAJaW50IG5pZDsKIAogCWlmIChhdG9taWNfcmVhZCgmYW1wO21lbWNnLSZndDtrbWVtX3N0YXQpKSB7CkBAIC00NTQ0LDcgJiM0Mzs0NTcxLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJaW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7CiAKIAkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0ga21lbTsKLQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTsKJiM0MzsJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiAJCWlmIChwYXJlbnQpCiAJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtOwogCX0KQEAgLTQ1NjYsNyAmIzQzOzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDU3OSw3ICYjNDM7NDYwOCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCQlpZiAocGxzdGF0cykKIAkJCQlwbHN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7Ci0JCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwomIzQzOwkJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJaWYgKHBhcmVudCkKIAkJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQl9CkBAIC00NjA0LDcgJiM0Mzs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlLAotCQkubG9jYWwgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWwsCiYjNDM7CQkubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcsCiAJCS5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZyA6IE5VTEwsCiAJCS5jc3RhdCA9IHN0YXRjLSZndDtzdGF0ZSwKQEAgLTQ2MTUsNyAmIzQzOzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KQogCiAJYWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7CiAJCS5hZ2dyZWdhdGUgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzLAotCQkubG9jYWwgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSwKIAkJLnBlbmRpbmcgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX3BlbmRpbmcsCiAJCS5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7ZXZlbnRzLApAQCAtNTE5OSw2ICYjNDM7NTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHsKIAl7IH0JLyogdGVybWluYXRlICovCiB9OwogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sbGVyIGhhcyBtb3ZlZCBiZXR3ZWVuIGhpZXJhcmNoaWVzLCB3aXRoIHRoZSBvbl9kZmwKJiM0MzsgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3kKJiM0MzsgKiBoaWVyYXJjaHksIHZtc3RhdHMmIzM5O3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWQKJiM0MzsgKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW4KJiM0MzsgKiBmcm9tIHRoZSB2bXN0YXRzJiMzOTtzIHN0YXRlIGFuZCBldmVudHMgYXJyYXlzIHNpbmNlIHJlYmluZF9zdWJzeXN0ZW1zKCkgb25seQomIzQzOyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3QKJiM0MzsJICogZGVzdHJveWVkIHJpZ2h0IGJlZm9yZSB0aGUgcmViaW5kIHRoYXQgbWF5IGhhdmUgbGVmdCBjb3VudHMgaW4gdGhlCiYjNDM7CSAqIHBlbmRpbmcgYXJyYXlzIHRoYXQgaGF2ZW4mIzM5O3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHMKJiM0MzsJICogYXJyYXlzCiYjNDM7CSAqLwomIzQzOwlfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVucwomIzQzOwkgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZQomIzQzOwkgKiBhbmQgc3RhdGVfbG9jYWwgdG9nZXRoZXIuIElmIHRoZSBmbHVzaCBoYXBwZW5zIGluIGJldHdlZW4gd2hlbiB3ZQomIzQzOwkgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpcwomIzQzOwkgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZQomIzQzOwkgKiBhIHNpbmdsZSBDUFUmIzM5O3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlCiYjNDM7CSAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2ldID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2ldOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNQ0dfRVZFTlRTOyBpJiM0MzsmIzQzOykKJiM0MzsJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfbG9jYWxbaV0gPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzW2ldOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovCiYjNDM7CiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7CiAJLmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLAogCS5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLApAQCAtNTIxMiw2ICYjNDM7NTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHsKIAkuZXhpdCA9IG1lbV9jZ3JvdXBfZXhpdCwKIAkuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiYjNDM7CS5iaW5kID0gbWVtX2Nncm91cF9iaW5kLAogCS5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLAogI2VuZGlmCiAJLmVhcmx5X2luaXQgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IE1lbW9yeSBDZ3JvdXAgU3RhdGlzdGljcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbiBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBzdWJzeXN0ZW1z4oCUdHdvIGNyaXRpY2FsIGFyZWFzIHRoYXQgc2VlIGhlYXZ5IHVzZSBhbmQgYXJlIGtub3duIGF0dGFjayBzdXJmYWNlcy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgdGFyZ2V0aW5nIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljIGFjY291bnRpbmcsIHdoaWNoIGlzIGFsd2F5cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyBhcyBpdCBjYW4gZWFzaWx5IGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRpc3RpY3MsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBvciBldmVuIGRlbmlhbC1vZi1zZXJ2aWNlIGNvbmRpdGlvbnMuCgpJIHNlZSBpdCYjMzk7cyBhZGRlZCBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggZGVhbCB3aXRoIHNraXBwaW5nIHRyYWNraW5nIGxvY2FsIHN0YXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgbGlrZWx5IGNncm91cHMgdjIuIFRoZW4gdGhlcmUgYXJlIGEgZmV3IHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBgZmx1c2hfbm1pX3N0YXRzYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdGhhdCBhcHBlYXIgdG8gY29uZGl0aW9uYWxseSB1c2UgdGhlc2UgbmV3IGFycmF5cy4gVGhpcyBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvcHRpbWl6YXRpb25zIGFuZCBoYW5kbGluZyBsZWdhY3kgdjEgY2dyb3VwcyBhbmQgdjIuCgpGdXJ0aGVybW9yZSwgdGhlIGFkZGl0aW9uIG9mIGBtZW1fY2dyb3VwX2JpbmRgIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzYCB3aGVuIHN3aXRjaGluZyBoaWVyYXJjaGllcyBzY3JlYW0gcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGNvcHlpbmcgb2YgYHN0YXRlYCBhbmQgYGV2ZW50c2AgYmV0d2VlbiBsb2NhbCBhbmQgbm9uLWxvY2FsIHZhcmlhYmxlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIGZ1enppbmcgd2lsbCByZXZvbHZlIGFyb3VuZCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgYG1lbV9jZ3JvdXBfYmluZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQsIHNvIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbnMgZm9yIGJ1Z3MuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb2RlYmFzZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGBNRU1DR2AsIGBNRU1DR19WMWAsIG9yIGBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbGlrZSBoYXZpbmcgbGVnYWN5IGNncm91cHMgZW5hYmxlZCwgd291bGQgdHJpZ2dlciB0aGlzIHBhdGNoIGluIHNwZWNpZmljIHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBgTUVNQ0dgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU2luY2UgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBlZGl0b3IgYW5kIGRvIGEgcXVpY2sgc2VhcmNoLiBIb3BlZnVsbHksIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24sIHBlcmhhcHMgd2l0aCBzb21lIHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIGl0LiBJdCYjMzk7cyBhIGNvbW1vbiBwcmFjdGljZSB0byBoYXZlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBzdWItZmVhdHVyZXMgb2YgdGhlIGNvZGUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg2LVxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg4LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDItXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgaW5pdC9LY29uZmlnYCwgdGhpbmtpbmcgbGlrZSBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBpbml0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwNzAgdG8gMTExMC4gVGltZSB0byBnZXQgYSBmZWVsIGZvciB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZCBoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHJlbGF0ZSB0byBzb21lIGNvcmUgc3lzdGVtIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQm9vdGxvYWRlci1yZWxhdGVkIGNvbmZpZ3M6KiogQXJlIHdlIHNlZWluZyBvcHRpb25zIHRvIHNlbGVjdCBzcGVjaWZpYyBib290bG9hZGVycywgb3IgcGVyaGFwcyBwYXJhbWV0ZXJzIGZvciBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgYm9vdCBwcm9jZXNzPyBLbm93aW5nIHRoaXMgaXMgdml0YWwgaWYgSSB3YW50IHRvIGRlYnVnIGJvb3QgaXNzdWVzIG9yIG1vZGlmeSB0aGUga2VybmVsIGJ1aWxkIGZvciBhIGRpZmZlcmVudCBib290IGVudmlyb25tZW50LgoqICAgKipFYXJseSBLZXJuZWwgU2V0dXA6KiogSSBhbnRpY2lwYXRlIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB2ZXJ5IGVhcmx5IHBhcnRzIG9mIHRoZSBrZXJuZWwuIE1heWJlIG1lbW9yeSBjb25maWd1cmF0aW9uLCBlYXJseSBkZXZpY2UgZHJpdmVycywgdGhpbmdzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIHN5c3RlbSBydW5uaW5nIGJlZm9yZSB3ZSBjYW4gZXZlbiBsb2FkIG1vZHVsZXMuIEFueSBpbml0aWFsIGhhcmR3YXJlIGRpc2NvdmVyeSBvciBjb25maWd1cmF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuCiogICAqKkRlZmF1bHQgQmVoYXZpb3I6KiogQXJlIHRoZXJlIGRlZmF1bHQgc2V0dGluZ3MgYmVpbmcgZGVmaW5lZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSB1c2VyIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgc2VsZWN0IGFueXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDtzYW5lIGRlZmF1bHRzJiMzNDsgaGVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4KKiAgICoqRGVwZW5kZW5jaWVzIGFuZCBJbnRlcmFjdGlvbnM6KiogQXJlIHRoZXJlIGNvbmRpdGlvbmFsIG9wdGlvbnM/IElzIHRoaXMgS2NvbmZpZyBzZWN0aW9uIGRlcGVuZGVudCBvbiBvdGhlciBzZXR0aW5ncyBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpZ3VyZWQ/IEkmIzM5O2xsIGJlIHdhdGNoaW5nIGhvdyB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBlbnRyaWVzIGFyZSB3ZWxsLWRvY3VtZW50ZWQuIEEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbiYjMzk7cyBwdXJwb3NlLCBwb3RlbnRpYWwgdmFsdWVzLCBhbmQgaW1wbGljYXRpb25zIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGZvciBtZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucy4KCkluIGVzc2VuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUgZm91bmRhdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCYjMzk7cyBmaXJzdCBzdGVwcyBkdXJpbmcgc3lzdGVtIHN0YXJ0dXAuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGtleSBwYXJhbWV0ZXJzIHRoYXQgZGljdGF0ZSB0aGUgdmVyeSBlYXJseSBzdGFnZSBvZiB0aGUgYm9vdCBzZXF1ZW5jZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsaXphdGlvbi4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbjExMDU6XHRcdGhlbHBcbjExMDY6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA3Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA4Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwOTpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTA6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTExOlx0XG4xMTEyOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTM6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExNDpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhleSYjMzk7cmUgY2VudHJhbCB0byB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX01FTUNHX1YxYCBkZWZhdWx0cyB0byAmIzM5O24mIzM5OyBhbmQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBzdWdnZXN0cyBpdCYjMzk7cyBhIHNwZWNpZmljIHZlcnNpb24gb3IgY29tcGF0aWJpbGl0eSBzZXR0aW5nLiBBbmQgdGhlcmUgYXJlIGBpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGUgY29kZSB0aGF0IHVzZXMgaXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IG9yIGFkZGVkIGFzIHBhcnQgb2YgdGhpcy4gRnJvbSBteSBpbml0aWFsIG92ZXJ2aWV3LCBpdCBsb29rcyBsaWtlIGBtbS9tZW1jb250cm9sLmNgIGlzIHRoZSBrZXkgZmlsZSB0byBpbnZlc3RpZ2F0ZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9uczoKCiogICBgbWVtX2Nncm91cF9iaW5kYCAtIFRoaXMgaXMgYWRkZWQgYW5kIGFwcGVhcnMgdG8gYmUgYSBjYWxsYmFjayB3aXRoaW4gYGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzIC5iaW5kYCwgd2hpY2ggc291bmRzIGltcG9ydGFudC4KKiAgIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgLSBUaGlzIG9uZSBpcyBtb2RpZmllZCwgYW5kIGlzIGFsc28gYSBjYWxsYmFjayBpbiBgbWVtb3J5X2NncnBfc3Vic3lzIC5jc3NfcnN0YXRfZmx1c2hgLiBUaGlzIGlzIHRoZSBvbmUgdG8gaW5zcGVjdCBmaXJzdC4KKiAgIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCAtIEEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFnZ3JlZ2F0ZSBmdW5jdGlvbiB3b3Jrcy4KKiAgIGBmbHVzaF9ubWlfc3RhdHNgIC0gQWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgdW5kZXIgdGhlIGNvbmRpdGlvbiBgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDYCwgaW5kaWNhdGluZyBpdCYjMzk7cyByZWxhdGVkIHRvIE5NSSBzYWZldHkuIFRoaXMgaXMgcmVsZXZhbnQgdG8gbXkgY29uY2VybnMgYWJvdXQgTk1JIGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgY29kZS4KKiAgIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXlgIC0gQm90aCBhcHBlYXIgdG8gYmUgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb25zLiBUaGVzZSBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB1bmRlcnN0YW5kIGF0IGEgZ2xhbmNlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX2JpbmRgLCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgIGFyZSwgaW5kZWVkLCB0aGUgc3ltYm9scyBJIHRoaW5rIHRoZXkgYXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNDUwMCB0byA0NjYwLCB0byBzZWUgdGhlIGV4YWN0IGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCB0aGVpciB2aXNpYmlsaXR5LCBlbnN1cmluZyB0aGV5IG1hdGNoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTIwOlx0XHRsb25nICpjc3RhdDtcbjQ1MjE6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXG40NTIyOlx0XHRsb25nICpjc3RhdF9wcmV2O1xuNDUyMzpcdFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cbjQ1MjQ6XHRcdGludCBzaXplO1xuNDUyNTpcdH07XG40NTI2Olx0XG40NTI3Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuNDUyODpcdHtcbjQ1Mjk6XHRcdGludCBpO1xuNDUzMDpcdFx0bG9uZyBkZWx0YSwgZGVsdGFfY3B1LCB2O1xuNDUzMTpcdFxuNDUzMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjQ1MzM6XHRcdFx0LypcbjQ1MzQ6XHRcdFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXG40NTM1Olx0XHRcdCAqIGJlbG93IHVzLiBXZSYjMzk7cmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xuNDUzNjpcdFx0XHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cbjQ1Mzc6XHRcdFx0ICovXG40NTM4Olx0XHRcdGRlbHRhID0gYWMtXHUwMDNlcGVuZGluZ1tpXTtcbjQ1Mzk6XHRcdFx0aWYgKGRlbHRhKVxuNDU0MDpcdFx0XHRcdGFjLVx1MDAzZXBlbmRpbmdbaV0gPSAwO1xuNDU0MTpcdFxuNDU0MjpcdFx0XHQvKiBBZGQgQ1BVIGNoYW5nZXMgb24gdGhpcyBsZXZlbCBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuNDU0MzpcdFx0XHRkZWx0YV9jcHUgPSAwO1xuNDU0NDpcdFx0XHR2ID0gUkVBRF9PTkNFKGFjLVx1MDAzZWNzdGF0W2ldKTtcbjQ1NDU6XHRcdFx0aWYgKHYgIT0gYWMtXHUwMDNlY3N0YXRfcHJldltpXSkge1xuNDU0NjpcdFx0XHRcdGRlbHRhX2NwdSA9IHYgLSBhYy1cdTAwM2Vjc3RhdF9wcmV2W2ldO1xuNDU0NzpcdFx0XHRcdGRlbHRhICYjNDM7PSBkZWx0YV9jcHU7XG40NTQ4Olx0XHRcdFx0YWMtXHUwMDNlY3N0YXRfcHJldltpXSA9IHY7XG40NTQ5Olx0XHRcdH1cbjQ1NTA6XHRcbjQ1NTE6XHRcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuNDU1MjpcdFx0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbjQ1NTM6XHRcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1O1xuNDU1NDpcdFxuNDU1NTpcdFx0XHRpZiAoZGVsdGEpIHtcbjQ1NTY6XHRcdFx0XHRhYy1cdTAwM2VhZ2dyZWdhdGVbaV0gJiM0Mzs9IGRlbHRhO1xuNDU1NzpcdFx0XHRcdGlmIChhYy1cdTAwM2VwcGVuZGluZylcbjQ1NTg6XHRcdFx0XHRcdGFjLVx1MDAzZXBwZW5kaW5nW2ldICYjNDM7PSBkZWx0YTtcbjQ1NTk6XHRcdFx0fVxuNDU2MDpcdFx0fVxuNDU2MTpcdH1cbjQ1NjI6XHRcbjQ1NjM6XHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG40NTY0Olx0c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQ1NjU6XHR7XG40NTY2Olx0XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbjQ1Njc6XHRcdGludCBuaWQ7XG40NTY4Olx0XG40NTY5Olx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuNDU3MDpcdFx0XHRpbnQga21lbSA9IGF0b21pY194Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCwgMCk7XG40NTcxOlx0XHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuNDU3MjpcdFxuNDU3MzpcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1NzQ6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuNDU3NTpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1NzY6XHRcdFx0aWYgKHBhcmVudClcbjQ1Nzc6XHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1Nzg6XHRcdH1cbjQ1Nzk6XHRcbjQ1ODA6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNDU4MTpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuNDU4MjpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NTgzOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xuNDU4NDpcdFxuNDU4NTpcdFx0XHRpZiAocGFyZW50KVxuNDU4NjpcdFx0XHRcdHBsc3RhdHMgPSBwYXJlbnQtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NTg3Olx0XG40NTg4Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZwbi1cdTAwM2VzbGFiX3JlY2xhaW1hYmxlKSkge1xuNDU4OTpcdFx0XHRcdGludCBzbGFiID0gYXRvbWljX3hjaGcoXHUwMDI2cG4tXHUwMDNlc2xhYl9yZWNsYWltYWJsZSwgMCk7XG40NTkwOlx0XHRcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTtcbjQ1OTE6XHRcbjQ1OTI6XHRcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5MzpcdFx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG40NTk0Olx0XHRcdFx0aWYgKHBsc3RhdHMpXG40NTk1Olx0XHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5NjpcdFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5NzpcdFx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbjQ1OTg6XHRcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbjQ1OTk6XHRcdFx0XHRpZiAocGFyZW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbW0vbWVtY29udHJvbC5jYDoKCioqRGVlcCBEaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2Ag4oCTIExpbmVzIDQ2MzAtNDY3MCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lcyA0NjMwIHRvIDQ2NzAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sIGNvZGUsIHNvIEkgYW50aWNpcGF0ZSBkZWFsaW5nIHdpdGggdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgbWVtb3J5IHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gY2dyb3VwcyBvciB0aGUgc2xhYiBhbGxvY2F0b3IsIHJpZ2h0PyBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgZmFpcmx5IGludHJpY2F0ZTsgbGlrZWx5LCB0aGlzIHNlY3Rpb24gcmVwcmVzZW50cyBhIGNyaXRpY2FsIGZ1bmN0aW9uIG9yIG1hY3JvIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgb3IgZW5mb3JjZW1lbnQuIEl0JiMzOTtzIHByb2JhYmx5IHRpZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIHNwZWNpZmljIGNvbnRyb2wgZ3JvdXAsIGEgY3JpdGljYWwgcGFydCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmluZyBmYWlyIHNoYXJpbmcuCgpJIGJldCBJJiMzOTtsbCBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzdGF0aXN0aWNzIG9mIG1lbW9yeSB1c2FnZSBhbmQgbGltaXQgZW5mb3JjZW1lbnQuIEkmIzM5O20gYWxzbyByZWFkeSBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSBhbGxvY2F0b3Igb3IgdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZXIsIGJlY2F1c2UgdGhlc2Ugd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgaG93IG1lbW9yeSBjb250cm9sIHRydWx5IHdvcmtzLiBJIGFtIHByb2JhYmx5IGxvb2tpbmcgYXQgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uLCBsb2NraW5nIGFuZCB2YXJpb3VzIGNyaXRpY2FsIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgdGhyZWFkLXNhZmUgYW5kIGNvb3JkaW5hdGVkLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgdHlwZSDigJMgaXMgaXQgcGFnZSBjYWNoZSwgYW5vbnltb3VzIG1lbW9yeSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgbWVtb3J5IHJlY2xhaW0gcG9saWNpZXMgb3IgdGhyb3R0bGluZyBtZWNoYW5pc21zIHdpdGhpbiB0aG9zZSBsaW5lcyB0b28uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBlbmZvcmNlIHRoZSBsaW1pdHMgZGVmaW5lZCBpbiBhIGNncm91cCwgZWl0aGVyIGdyYWNlZnVsbHkgb3IgYWdncmVzc2l2ZWx5LiBJIHdpbGwgYmUgc3VyZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHNlY3Rpb25zIHRvIGNoZWNrIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvZGUgb3IsIG1vcmUgaW1wb3J0YW50bHksIGFueSBzcG90cyB3aGVyZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjb3VsZCBiZSBsdXJraW5nLiBUaGF0IGFsd2F5cyBtYXR0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFxuNDYzMTpcdFx0Zmx1c2hfbm1pX3N0YXRzKG1lbWNnLCBwYXJlbnQpO1xuNDYzMjpcdFxuNDYzMzpcdFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcbjQ2MzQ6XHRcbjQ2MzU6XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDYzNjpcdFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbjQ2Mzc6XHRcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuNDYzODpcdFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbjQ2Mzk6XHRcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG40NjQwOlx0XHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuNDY0MTpcdFx0XHQuY3N0YXRfcHJldiA9IHN0YXRjLVx1MDAzZXN0YXRlX3ByZXYsXG40NjQyOlx0XHRcdC5zaXplID0gTUVNQ0dfVk1TVEFUX1NJWkUsXG40NjQzOlx0XHR9O1xuNDY0NDpcdFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcdTAwMjZhYyk7XG40NjQ1Olx0XG40NjQ2Olx0XHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbjQ2NDc6XHRcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuNDY0ODpcdFx0XHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxuNDY0OTpcdFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcsXG40NjUwOlx0XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nIDogTlVMTCxcbjQ2NTE6XHRcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlZXZlbnRzLFxuNDY1MjpcdFx0XHQuY3N0YXRfcHJldiA9IHN0YXRjLVx1MDAzZWV2ZW50c19wcmV2LFxuNDY1MzpcdFx0XHQuc2l6ZSA9IE5SX01FTUNHX0VWRU5UUyxcbjQ2NTQ6XHRcdH07XG40NjU1Olx0XHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFx1MDAyNmFjKTtcbjQ2NTY6XHRcbjQ2NTc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNDY1ODpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuNDY1OTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NjYwOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xuNDY2MTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSAqbHN0YXRjO1xuNDY2MjpcdFxuNDY2MzpcdFx0XHRpZiAocGFyZW50KVxuNDY2NDpcdFx0XHRcdHBsc3RhdHMgPSBwYXJlbnQtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NjY1Olx0XG40NjY2Olx0XHRcdGxzdGF0YyA9IHBlcl9jcHVfcHRyKHBuLVx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUsIGNwdSk7XG40NjY3Olx0XG40NjY4Olx0XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDY2OTpcdFx0XHRcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXHUwMDNlc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnZvY2F0aW9uIG9mIGBtZW1fY2dyb3VwX2JpbmRgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIHN1cnJvdW5kaW5nIGBtZW1fY2dyb3VwX2JpbmRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBmdW5jdGlvbiBjYWxsPyBSaWdodCwgaXQmIzM5O3MgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbWVtb3J5X2NncnBfc3Vic3lzYCBzdHJ1Y3R1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVuIGRvZXMgdGhlIGtlcm5lbCBpbnZva2UgdGhhdCBgLmJpbmRgIG1ldGhvZD8gSSByZWNhbGwgdGhhdCBgLmJpbmRgIGlzIGNhbGxlZCB3aGVuIHN1YnN5c3RlbXMgYXJlIGJlaW5nIHJlYm91bmQgb3IgbW91bnRlZC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgcmViaW5kX3N1YnN5c3RlbXMoKWAgaW4gYGtlcm5lbC9jZ3JvdXAvY2dyb3VwLmNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdHJhY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBtZXRob2QuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBiaW5kIG1ldGhvZCBpcyB1c2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNlYmluZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtjcnlwdG8vYWZfYWxnLmM9MjA0PXN0YXRpYyBpbnQgYWxnX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTIzOS1cbmNyeXB0by9hZl9hbGcuYzoyNDA6XHRwcml2YXRlID0gdHlwZS1cdTAwM2ViaW5kKHNhLVx1MDAzZXNhbGdfbmFtZSk7XG5jcnlwdG8vYWZfYWxnLmMtMjQxLVx0aWYgKElTX0VSUihwcml2YXRlKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9nbHVlLmM9MzUyPXZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2FjcGkvZ2x1ZS5jLTM4OC1cdGlmIChhZGV2LVx1MDAzZWhhbmRsZXIgXHUwMDI2XHUwMDI2IGFkZXYtXHUwMDNlaGFuZGxlci1cdTAwM2ViaW5kKVxuZHJpdmVycy9hY3BpL2dsdWUuYzozODk6XHRcdGFkZXYtXHUwMDNlaGFuZGxlci1cdTAwM2ViaW5kKGRldik7XG5kcml2ZXJzL2FjcGkvZ2x1ZS5jLTM5MC1cbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MjI3PXN0YXRpYyBpbnQgdHJ5X3RvX2JyaW5nX3VwX2FnZ3JlZ2F0ZV9kZXZpY2Uoc3RydWN0IGFnZ3JlZ2F0ZV9kZXZpY2UgKmFkZXYsXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI0OC1cdC8qIEZvdW5kIGFsbCBjb21wb25lbnRzICovXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM6MjQ5Olx0cmV0ID0gYWRldi1cdTAwM2VvcHMtXHUwMDNlYmluZChhZGV2LVx1MDAzZXBhcmVudCk7XG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMjUwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYz02MzM9c3RhdGljIGludCBjb21wb25lbnRfYmluZChzdHJ1Y3QgY29tcG9uZW50ICpjb21wb25lbnQsIHN0cnVjdCBhZ2dyZWdhdGVfZGV2aWNlICphZGV2LFxuLS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy02NTgtXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM6NjU5Olx0cmV0ID0gY29tcG9uZW50LVx1MDAzZW9wcy1cdTAwM2ViaW5kKGNvbXBvbmVudC1cdTAwM2VkZXYsIGFkZXYtXHUwMDNlcGFyZW50LCBkYXRhKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy02NjAtXHRpZiAoIXJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9NDAwPXN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpkcmJkX3RyeV9jb25uZWN0KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy00NTItXHR3aGF0ID0gXCYjMzQ7YmluZCBiZWZvcmUgY29ubmVjdFwmIzM0OztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6NDUzOlx0ZXJyID0gc29jay1cdTAwM2VvcHMtXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKikgXHUwMDI2c3JjX2luNiwgbXlfYWRkcl9sZW4pO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy00NTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9NTA3PXN0YXRpYyBpbnQgcHJlcGFyZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBhY2NlcHRfd2FpdF9kYXRhICphZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTUzOS1cdHdoYXQgPSBcJiMzNDtiaW5kIGJlZm9yZSBsaXN0ZW5cJiMzNDs7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jOjU0MDpcdGVyciA9IHNfbGlzdGVuLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHNfbGlzdGVuLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZteV9hZGRyLCBteV9hZGRyX2xlbik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTU0MS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYz04ND1zdGF0aWMgaW50IGFscGhhX2NvcmVfYWdwX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYy05OC1cbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmM6OTk6XHRzdGF0dXMgPSBhZ3AtXHUwMDNlb3BzLVx1MDAzZWJpbmQoYWdwLCBwZ19zdGFydCwgbWVtKTtcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtMTAwLVx0bWIoKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz0xMDY9c3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJ2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jLTE1My1cdGlmIChncHVfb3BzKVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmM6MTU0Olx0XHRyZXQgPSBncHVfb3BzLVx1MDAzZWJpbmQoZGV2LCBkZXYsIE5VTEwpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtMTU1LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYz0xMzY9bnZrbV9vYmplY3RfYmluZChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdCwgc3RydWN0IG52a21fZ3B1b2JqICpncHVvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jLTEzOS1cdGlmIChvYmplY3QtXHUwMDNlZnVuYy1cdTAwM2ViaW5kKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jOjE0MDpcdFx0cmV0dXJuIG9iamVjdC1cdTAwM2VmdW5jLVx1MDAzZWJpbmQob2JqZWN0LCBncHVvYmosIGFsaWduLCBwZ3B1b2JqKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYy0xNDEtXHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kaXNwL2NoYW4uYz03OT1udmttX2Rpc3BfY2hhbl9jaGlsZF9uZXcoY29uc3Qgc3RydWN0IG52a21fb2NsYXNzICpvY2xhc3MsIHZvaWQgKmFyZ3YsIHUzMiBhcmdjLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTk4LVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmM6OTk6XHRvYmplY3QtXHUwMDNlaGFzaCA9IGNoYW4tXHUwMDNlZnVuYy1cdTAwM2ViaW5kKGNoYW4sIG9iamVjdC1cdTAwM2VvcHJveHkub2JqZWN0LCBvY2xhc3MtXHUwMDNlaGFuZGxlKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTEwMC1cdGlmIChvYmplY3QtXHUwMDNlaGFzaCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jPTQ3PW52a21fZG1hb2JqX2JpbmQoc3RydWN0IG52a21fb2JqZWN0ICpiYXNlLCBzdHJ1Y3QgbnZrbV9ncHVvYmogKmdwdW9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jLTUwLVx0c3RydWN0IG52a21fZG1hb2JqICpkbWFvYmogPSBudmttX2RtYW9iaihiYXNlKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2RtYS91c2VyLmM6NTE6XHRyZXR1cm4gZG1hb2JqLVx1MDAzZWZ1bmMtXHUwMDNlYmluZChkbWFvYmosIGdwdW9iaiwgYWxpZ24sIHBncHVvYmopO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYy01Mi19XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby9jaGFuLmM9NDE9bnZrbV9jaGFuX2NjdHhfYmluZChzdHJ1Y3QgbnZrbV9jaGFuICpjaGFuLCBzdHJ1Y3QgbnZrbV9lbmduICplbmduLCBzdHJ1Y3QgbnZrbV9jY3R4ICpjY3R4KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jLTYxLVx0LyogVXBkYXRlIGNvbnRleHQgcG9pbnRlci4gKi9cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jOjYyOlx0ZW5nbi1cdTAwM2VmdW5jLVx1MDAzZWJpbmQoZW5nbiwgY2N0eCwgY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYy02My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmM9Mjg2PW52a21fdWNoYW5faW5pdChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmMtMjkzLVx0aWYgKGNoYW4tXHUwMDNlZnVuYy1cdTAwM2ViaW5kKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby91Y2hhbi5jOjI5NDpcdFx0Y2hhbi1cdTAwM2VmdW5jLVx1MDAzZWJpbmQoY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmMtMjk1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmM9MzcyPXN0YXRpYyBpbnQgdm13X3Jlc291cmNlX2RvX3ZhbGlkYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM4OC1cdCAgICAgKCFmdW5jLVx1MDAzZW5lZWRzX2d1ZXN0X21lbW9yeSBcdTAwMjZcdTAwMjYgdmFsX2J1Zi1cdTAwM2VibykpKSB7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jOjM4OTpcdFx0cmV0ID0gZnVuYy1cdTAwM2ViaW5kKHJlcywgdmFsX2J1Zik7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM5MC1cdFx0aWYgKHVubGlrZWx5KHJldCAhPSAwKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYz05ODk9c3RhdGljIGludCBrZXJuZWxfYmluZGNvbm5lY3Qoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHNvY2thZGRyICpsYWRkcixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYy05OTUtXHRzb2NrX3NldF9yZXVzZWFkZHIocy1cdTAwM2Vzayk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYzo5OTY6XHRyZXQgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLCBsYWRkcmxlbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYy05OTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jPTEyOTQ9aW50IGVyZG1hX2NyZWF0ZV9saXN0ZW4oc3RydWN0IGl3X2NtX2lkICppZCwgaW50IGJhY2tsb2cpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jOjEzMTY6XHRyZXQgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNy1cdFx0XHQgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYz0xMzc2PXN0YXRpYyBpbnQga2VybmVsX2JpbmRjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBzb2NrYWRkciAqbGFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYy0xMzkzLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxMzk0Olx0cnYgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLCBzaXplKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5NS1cdGlmIChydiBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jPTE4MDk9aW50IHNpd19jcmVhdGVfbGlzdGVuKHN0cnVjdCBpd19jbV9pZCAqaWQsIGludCBiYWNrbG9nKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0My1cdFx0fVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODQ0Olx0XHRydiA9IHMtXHUwMDNlb3BzLVx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jLTE4NDUtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jLTE4NjctXHRcdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmM6MTg2ODpcdFx0cnYgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYy0xODY5LVx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3NwYW4uYz0xNDk5PW1seHN3X3NwX3NwYW5fdHJpZ2dlcl9lbnRyeV9jcmVhdGUoc3RydWN0IG1seHN3X3NwX3NwYW4gKnNwYW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jLTE1MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmM6MTUyMTpcdGVyciA9IHRyaWdnZXJfZW50cnktXHUwMDNlb3BzLVx1MDAzZWJpbmQodHJpZ2dlcl9lbnRyeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmMtMTUyMi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE3MjY9dXNibmV0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTgwNy1cdFx0bmV0LVx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxODA4Olx0XHRzdGF0dXMgPSBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA5LVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jPTU5PWludCBwY2lfZXBmX2JpbmQoc3RydWN0IHBjaV9lcGYgKmVwZilcbi0tXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMjItXHRcdGVwZl92Zi1cdTAwM2VzZWNfZXBjID0gZXBmLVx1MDAzZXNlY19lcGM7XG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjM6XHRcdHJldCA9IGVwZl92Zi1cdTAwM2Vkcml2ZXItXHUwMDNlb3BzLVx1MDAzZWJpbmQoZXBmX3ZmKTtcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jLTEyNC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMjgtXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjk6XHRyZXQgPSBlcGYtXHUwMDNlZHJpdmVyLVx1MDAzZW9wcy1cdTAwM2ViaW5kKGVwZik7XG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMzAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jPTM0Mj1pbnQgcGNpX3RzbV9iaW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qga3ZtICprdm0sIHUzMiB0ZGlfaWQpXG4tLVxuZHJpdmVycy9wY2kvdHNtLmMtMzY3LVxuZHJpdmVycy9wY2kvdHNtLmM6MzY4Olx0dGRpID0gdG9fcGNpX3RzbV9vcHMocGRldi1cdTAwM2V0c20pLVx1MDAzZWJpbmQocGRldiwga3ZtLCB0ZGlfaWQpO1xuZHJpdmVycy9wY2kvdHNtLmMtMzY5LVx0aWYgKElTX0VSUih0ZGkpKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMDA4PWludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEwNTctIGJpbmQ6XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6MTA1ODpcdGlmIChkcml2ZXItXHUwMDNlYmluZCBcdTAwMjZcdTAwMjYgKGVycm9yID0gZHJpdmVyLVx1MDAzZWJpbmQoaW5zdGFuY2UsIGludGYsIGlkKSkgXHUwMDNjIDApIHtcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU5LVx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogYmluZCBmYWlsZWQ6ICVkIVxcblwmIzM0OywgX19mdW5jX18sIGVycm9yKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MzEwPWludCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYy0zMzItXHRpZiAoZnVuY3Rpb24tXHUwMDNlYmluZCkge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jOjMzMzpcdFx0dmFsdWUgPSBmdW5jdGlvbi1cdTAwM2ViaW5kKGNvbmZpZywgZnVuY3Rpb24pO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzNC1cdFx0aWYgKHZhbHVlIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jPTI1MzE9c3RhdGljIGludCBjb21wb3NpdGVfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYy0yNTU1LVx0ICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MjU1NjpcdHN0YXR1cyA9IGNvbXBvc2l0ZS1cdTAwM2ViaW5kKGNkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTI1NTctXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jPTE2NDE9c3RhdGljIGludCBnYWRnZXRfYmluZF9kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYzoxNjYyOlx0cmV0ID0gZHJpdmVyLVx1MDAzZWJpbmQodWRjLVx1MDAzZWdhZGdldCwgZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjMtXHRpZiAocmV0KVxuLS1cbmZzL2RsbS9sb3djb21tcy5jPTE1NzA9c3RhdGljIGludCBkbG1fY29ubmVjdChzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKVxuLS1cbmZzL2RsbS9sb3djb21tcy5jLTE1OTMtXG5mcy9kbG0vbG93Y29tbXMuYzoxNTk0Olx0cmVzdWx0ID0gZGxtX3Byb3RvX29wcy1cdTAwM2ViaW5kKHNvY2spO1xuZnMvZGxtL2xvd2NvbW1zLmMtMTU5NS1cdGlmIChyZXN1bHQgXHUwMDNjIDApIHtcbi0tXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTE1Nzk9c3RhdGljIHZvaWQgbzJuZXRfc3RhcnRfY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0xNjQ3LVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNjQ4Olx0cmV0ID0gc29jay1cdTAwM2VvcHMtXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZteWFkZHIsXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE2NDktXHRcdFx0ICAgICAgc2l6ZW9mKG15YWRkcikpO1xuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM9MjA0OD1zdGF0aWMgaW50IG8ybmV0X29wZW5fbGlzdGVuaW5nX3NvY2soX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMjA3NC1cdHNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jOjIwNzU6XHRyZXQgPSBzb2NrLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnNpbiwgc2l6ZW9mKHNpbikpO1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0yMDc2LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTgzOD1pbnQgcmViaW5kX3N1YnN5c3RlbXMoc3RydWN0IGNncm91cF9yb290ICpkc3Rfcm9vdCwgdTMyIHNzX21hc2spXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTQ4LVx0XHRpZiAoc3MtXHUwMDNlYmluZClcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTk0OTpcdFx0XHRzcy1cdTAwM2ViaW5kKGNzcyk7XG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5NTAtXHR9IHdoaWxlX2VhY2hfc3Vic3lzX21hc2soKTtcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTY1MTk9aW50IF9faW5pdCBjZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNjU5Ni1cdFx0aWYgKHNzLVx1MDAzZWJpbmQpXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjY1OTc6XHRcdFx0c3MtXHUwMDNlYmluZChpbml0X2Nzc19zZXQuc3Vic3lzW3NzaWRdKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNjU5OC1cbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz05OT1zdGF0aWMgaW50IGllZWU4MDIxNTRfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0xMDQtXHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6MTA1Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMTA2LVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz00NDk9aW50IGluZXRfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy00NTUtXHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKSB7XG5uZXQvaXB2NC9hZl9pbmV0LmM6NDU2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2lwdjQvYWZfaW5ldC5jLTQ1Ny1cdH1cbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM1LVx0aWYgKHByb3QtXHUwMDNlYmluZClcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDM2Olx0XHRyZXR1cm4gcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2lwdjYvYWZfaW5ldDYuYy00MzctXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTgxMT1zdGF0aWMgaW50IGdlbmxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODQxLVx0XHRpZiAoZmFtaWx5LVx1MDAzZWJpbmQpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxODQyOlx0XHRcdGZhbWlseS1cdTAwM2ViaW5kKGkpO1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTg0My1cbi0tXG5uZXQvcGhvbmV0L3NvY2tldC5jPTE1Nj1zdGF0aWMgaW50IHBuX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgbGVuKVxuLS1cbm5ldC9waG9uZXQvc29ja2V0LmMtMTY1LVx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlYmluZClcbm5ldC9waG9uZXQvc29ja2V0LmM6MTY2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCBhZGRyLCBsZW4pO1xubmV0L3Bob25ldC9zb2NrZXQuYy0xNjctXG4tLVxubmV0L3NvY2tldC5jPTE5Mzc9aW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuLS1cbm5ldC9zb2NrZXQuYy0xOTQ0LVx0aWYgKCFlcnIpXG5uZXQvc29ja2V0LmM6MTk0NTpcdFx0ZXJyID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2ViaW5kKHNvY2ssXG5uZXQvc29ja2V0LmMtMTk0Ni1cdFx0XHRcdFx0XHQgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi0tXG5uZXQvc29ja2V0LmM9MzY2OT1pbnQga2VybmVsX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRybGVuKVxuLS1cbm5ldC9zb2NrZXQuYy0zNjc0LVxubmV0L3NvY2tldC5jOjM2NzU6XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHJlc3MsXG5uZXQvc29ja2V0LmMtMzY3Ni1cdFx0XHRcdFx0ICBhZGRybGVuKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYz0yMzgwPXN0YXRpYyBpbnQgdGVzdF94bXNnKHN0cnVjdCBzb2NrX2FkZHJfdGVzdCAqdGVzdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19hZGRyLmM6MjQwNzpcdFx0ZXJyID0gdGVzdC1cdTAwM2VvcHMtXHUwMDNlYmluZChjbGllbnQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzcmNfYWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfYWRkci5jLTI0MDgtXHRcdFx0XHQgICAgICBzcmNfYWRkcl9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFN1YnN5c3RlbSBCaW5kIGFuZCBTdGF0IEZsdXNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgcmViaW5kX3N1YnN5c3RlbXNgLCB3aGljaCBjYWxscyBgc3MtJmd0O2JpbmQoY3NzKWAsIGFuZCBhbHNvIGNhbGxlZCBkdXJpbmcgYGNncm91cF9pbml0KClgLiBUaGUgY3J1Y2lhbCBwYXJ0IGZvciBtZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IHN1YnN5c3RlbSBob29rcyBpbnRvIHRoaXMuCgpJJiMzOTttIGZvY3VzZWQgb24gdGhlc2Ugc3ltYm9sczogYG1lbV9jZ3JvdXBfYmluZGAsIHdoaWNoIGlzIHRoZSBiaW5kIGNhbGxiYWNrOyBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB0aGUgc3RhdCBmbHVzaCBjYWxsYmFjazsgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBhIHN0YXQgYWdncmVnYXRpb24gaGVscGVyOyBgZmx1c2hfbm1pX3N0YXRzYCwgYW4gbm1pIHN0YXQgZmx1c2hpbmcgaGVscGVyOyBhbmQgZmluYWxseSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggYXJlIG5ldyBpbmxpbmUgaGVscGVycy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JyZWN0bHkgaW50ZWdyYXRlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxlciBmdW5jdGlvbnMgYW5kIGlmIHRoZXNlIHN5bWJvbHMgYWxsIGxvb2sgZ29vZC4gU28sIGxldCYjMzk7cyB0cmFjZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIG90aGVyIGZ1bmN0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBzZWUgaG93IHN0YXRzIGludGVyYWN0LiBJIHNlZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGlzIHBhcnQgb2YgdGhlIHJzdGF0IGZsdXNoIGluZnJhc3RydWN0dXJlIOKAkyBiZWluZyBjYWxsZWQgYnkgYGNncm91cF9yc3RhdF9mbHVzaF9sb2NrZWRgIGFuZCBgY2dyb3VwX3JzdGF0X2ZsdXNoYC4gSSBhbHNvIHNlZSBgbWVtX2Nncm91cF9mbHVzaF9zdGF0c2AgYW5kIGBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBtZW1vcnlfc3RhdF9zaG93YCBhbmQgYG1lbWNnX3N0YXRfc2hvd2AsIHdoaWNoIGFwcGVhciB0byByZWFkIGZyb20gYG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZvciBsZWdhY3kgbWVtb3J5LnN0YXQgcmVwb3J0aW5nLgoKVGhpcyBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyB0aGUgbGVnYWN5IGBtZW1vcnkuc3RhdGAgcmVhZHMgc3RhdHMsIHdoaWNoIHNob3VsZCBvZmZlciB2YWx1YWJsZSBpbnNpZ2h0IGludG8gYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGggdGhlIG5ldyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yMzY9c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG5tbS9tZW1jb250cm9sLmMtMjM3LVxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG4tLVxubW0vbWVtY29udHJvbC5jLTI1MS1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xubW0vbWVtY29udHJvbC5jOjI1MjpcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzoyNTM6XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTI1NC1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtMjU5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNy1cbm1tL21lbWNvbnRyb2wuYzozMDg6XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4NjpcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OS1cbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTUxLVx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NC1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6NTY1Olx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTU2Ni0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc2LVxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTc4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NC1cdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vbWVtY29udHJvbC5jOjU4NTpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy01ODYtXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjc4LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xubW0vbWVtY29udHJvbC5jOjY3OTpcdGxvbmdcdFx0XHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XG5tbS9tZW1jb250cm9sLmMtNjgwLVx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjk2LSAqL1xubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTY5OC17XG4tLVxubW0vbWVtY29udHJvbC5jLTcwMS1cbm1tL21lbWNvbnRyb2wuYzo3MDI6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MDMtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz04NTU9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzMtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxubW0vbWVtY29udHJvbC5jOjg3NDogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cbm1tL21lbWNvbnRyb2wuYy04NzUtICovXG4tLVxubW0vbWVtY29udHJvbC5jPTkzOT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUzLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYzo5NTQ6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy05NTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy05NjEtXG5tbS9tZW1jb250cm9sLmM6OTYyOlx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmMtOTY5LVxubW0vbWVtY29udHJvbC5jOjk3MDp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NzEtXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk3Mi17XG5tbS9tZW1jb250cm9sLmM6OTczOlx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtOTc0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzM1PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc0MS0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6MTc0Mjp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG5tbS9tZW1jb250cm9sLmMtMTc0My17XG5tbS9tZW1jb250cm9sLmM6MTc0NDpcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXG5tbS9tZW1jb250cm9sLmMtMTc0NS1cdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDUwNz1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NTExLVx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbm1tL21lbWNvbnRyb2wuYzo0NTEyOlx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcbm1tL21lbWNvbnRyb2wuYy00NTEzLVx0ICovXG4tLVxubW0vbWVtY29udHJvbC5jPTQ1NjQ9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00NTY1LXtcbm1tL21lbWNvbnRyb2wuYzo0NTY2Olx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDU2Ny1cdGludCBuaWQ7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ1NzMtXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xubW0vbWVtY29udHJvbC5jOjQ1NzQ6XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NTc1Olx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbm1tL21lbWNvbnRyb2wuYy00NTc2LVx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTkyLVx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5MzpcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1OTQtXHRcdFx0aWYgKHBsc3RhdHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1OTYtXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NzpcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDU5ODpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk5LVx0XHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MDYtXHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NjA3Olx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYwOC1cdFx0XHRpZiAocGxzdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYxMC1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NjExOlx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NjEyOlx0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ2MTMtXHRcdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM2LVx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjM3Olx0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NjktXHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjcwOlx0XHRcdC5sb2NhbCA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbm1tL21lbWNvbnRyb2wuYy00NjcxLVx0XHRcdC5wZW5kaW5nID0gbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jPTUxNTg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzctICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcbm1tL21lbWNvbnRyb2wuYzo1MjM4OiAqIGhpZXJhcmNoeSwgdm1zdGF0cyYjMzk7cyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxubW0vbWVtY29udHJvbC5jLTUyMzktICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuXG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2MS1cdCAqIG9uIHJvb3RfbWVtX2Nncm91cCB3aXRob3V0IGNncm91cF9tdXRleCBhbmQgYSBmbHVzaCBpbmNyZW1lbnRzIHN0YXRlXG5tbS9tZW1jb250cm9sLmM6NTI2MjpcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXG5tbS9tZW1jb250cm9sLmM6NTI2MzpcdCAqIHJlYWQgc3RhdGUgYW5kIHdyaXRlIHRvIHN0YXRlX2xvY2FsLCBpdHMgc3RhdGVfbG9jYWwgaW5jcmVtZW50IGlzXG5tbS9tZW1jb250cm9sLmMtNTI2NC1cdCAqIG92ZXJ3cml0dGVuIGFuZCB0aGUgY291bnRlciBzdGF5cyBzaG9ydCwgYnV0IHRoZSBkaWZmZXJlbmNlIHdvdWxkIGJlXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19WTVNUQVRfU0laRTsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLmM6NTI2OTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG5tbS9tZW1jb250cm9sLmMtNTI3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNjEKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDZ3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGVzZSBjcml0aWNhbCBgRm9jdXNTeW1ib2xzYDogYG1lbV9jZ3JvdXBfYmluZGAsIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYW5kIGBmbHVzaF9ubWlfc3RhdHNgLiBUaGVzZSBhcmUgdGhlIGtleSBsZXZlcnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4KCk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gTmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IHNldCBhbmQgYWNjb3VudGVkIGZvciBpbiB0aGUgZnV6emluZyBwcm9jZXNzLgoKTm8sIHdhaXQsIHRoZXJlJiMzOTtzIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGFzIGFuIGludGVybmFsIGJvb2wgb3B0aW9uOyBub3QgdXNlci1zZWxlY3RhYmxlLiBJdCYjMzk7cyBhIGRlcGVuZGVuY3ksIGJ1dCBub3Qgc29tZXRoaW5nIHRvIGRpcmVjdGx5IGNvbmZpZ3VyZS4gSXQgaGluZ2VzIG9uIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgTk1JIHNhZmV0eS4gR29vZCB0byBub3RlLCBidXQgSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSBpdCBpbiBteSB0ZXN0LgoKQWxyaWdodCwgc2FuaXR5IGNoZWNrIHRpbWUuIExldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgd2FudCB0byBlbmFibGUgY29uZmlndXJhdGlvbnMgJiMzNDtNRU1DRyYjMzQ7LCAmIzM0O01FTUNHX1YxJiMzNDsuIFRob3NlIG1hdGNoIHdpdGggdGhlIGBGb2N1c1N5bWJvbHNgIEkgc2VsZWN0ZWQgYXQgdGhlIHN0YXJ0LiBUaGF0IGxvb2tzIGdvb2QuCgpGaW5hbGx5LCB3aXRoIGFsbCB0aGF0IGNvbmZpcm1lZCwgSSYjMzk7bSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2JpbmQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZSYjMzQ7LAogICAgJiMzNDtmbHVzaF9ubWlfc3RhdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxNjgyOWM3NzNjMTk0OGRkYzFhOTNlMDIzNjVlOTlkMThiNzc5ZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTY4Nyw2ICYjNDM7Njg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlhdG9taWNfbG9uZ190CQlzdGF0c191cGRhdGVzOwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeQomIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LgomIzQzOyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHkKJiM0MzsgKiAobWVtX2Nncm91cF9iaW5kKCkgcG9wdWxhdGVzIHRoZW0gaWYgaXQgaXMgbGF0ZXIgbW92ZWQgb250byB0aGUgbGVnYWN5CiYjNDM7ICogaGllcmFyY2h5KS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbDsKJiM0Mzt9CiYjNDM7CiAvKgogICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZwogICoKQEAgLTQ0ODQsNyAmIzQzOzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7CiAJLyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiAJbG9uZyAqYWdncmVnYXRlOwotCS8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KJiM0MzsJLyoKJiM0MzsJICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG8KJiM0MzsJICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSkKJiM0MzsJICovCiAJbG9uZyAqbG9jYWw7CiAJLyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcgKnBlbmRpbmc7CkBAIC00NTIzLDcgJiM0Mzs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogCQl9CiAKIAkJLyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqLwotCQlpZiAoZGVsdGFfY3B1KQomIzQzOwkJaWYgKGRlbHRhX2NwdSAmYW1wOyZhbXA7IGFjLSZndDtsb2NhbCkKIAkJCWFjLSZndDtsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1OwogCiAJCWlmIChkZWx0YSkgewpAQCAtNDUzNyw2ICYjNDM7NDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMKIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7CiYjNDM7CWxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpOwogCWludCBuaWQ7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmFtcDttZW1jZy0mZ3Q7a21lbV9zdGF0KSkgewpAQCAtNDU0NCw3ICYjNDM7NDU3MSw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCWludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pOwogCiAJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07Ci0JCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiYjNDM7CQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwogCQlpZiAocGFyZW50KQogCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTsKIAl9CkBAIC00NTY2LDcgJiM0Mzs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1NzksNyAmIzQzOzQ2MDgsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDYwNCw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZSwKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7c3RhdGUsCkBAIC00NjE1LDcgJiM0Mzs0NjQ1LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50cywKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O2V2ZW50cywKQEAgLTUxOTksNiAmIzQzOzUyMjksNTAgQEAgc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7CiAJeyB9CS8qIHRlcm1pbmF0ZSAqLwogfTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsvKgomIzQzOyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsCiYjNDM7ICoga2V5IGFscmVhZHkgaW4gaXRzIG5ldyBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5CiYjNDM7ICogaGllcmFyY2h5LCB2bXN0YXRzJiMzOTtzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkCiYjNDM7ICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuCiYjNDM7ICogZnJvbSB0aGUgdm1zdGF0cyYjMzk7cyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHkKJiM0MzsgKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhyb290X2Nzcyk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZsdXNoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGRlc2NlbmRhbnRzIHRoYXQgZ290CiYjNDM7CSAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZQomIzQzOwkgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJiMzOTt0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzCiYjNDM7CSAqIGFycmF5cwomIzQzOwkgKi8KJiM0MzsJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBhIGNvbmN1cnJlbnQgZmx1c2guIFRoZSBwZXJpb2RpYyBmbHVzaGVyIHJ1bnMKJiM0MzsJICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGUKJiM0MzsJICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2UKJiM0MzsJICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXMKJiM0MzsJICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmUKJiM0MzsJICogYSBzaW5nbGUgQ1BVJiMzOTtzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZQomIzQzOwkgKiBjb3VudGVycyBhcmUgYXBwcm94aW1hdGUgdmFsdWVzLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX1ZNU1RBVF9TSVpFOyBpJiM0MzsmIzQzOykKJiM0MzsJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpXTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspCiYjNDM7CQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsW2ldID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c1tpXTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwomIzQzOwogc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0gewogCS5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYywKIAkuY3NzX29ubGluZSA9IG1lbV9jZ3JvdXBfY3NzX29ubGluZSwKQEAgLTUyMTIsNiAmIzQzOzUyODYsNyBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7CiAJLmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsCiAJLmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLAogI2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOwkuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCwKIAkubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcywKICNlbmRpZgogCS5lYXJseV9pbml0ID0gMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgbXkgbWVudGFsIGNoZWNrbGlzdDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guIEtBU0FOIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgc28gYW55dGhpbmcgaXQgY292ZXJzLCBJIGNhbiBydWxlIG91dC4gTXkgY29uY2VybiBpcyBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IHNsaXAgdGhyb3VnaCB0aGUgY3JhY2tzLgoKVGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBJIHNlZSBpdCBhZGRpbmcgZnVuY3Rpb25zIGxpa2UgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAuIFRoZXNlIGZ1bmN0aW9ucyBjb25kaXRpb25hbGx5IHJldHVybiBlaXRoZXIgYE5VTExgIG9yIHBvaW50ZXJzIHRvIHRoZSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcnJheXMgd2l0aGluIHRoZSBgbWVtY2ctJmd0O3Ztc3RhdHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gQ29uZGl0aW9uYWwgcmV0dXJucyBhcmUgYSBwb3RlbnRpYWwgcmVkIGZsYWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGhhcHBlbnMgaWYgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgYE5VTExgPyBJcyB0aGUgY2FsbGluZyBjb2RlIGhhbmRsaW5nIGl0IGNvcnJlY3RseT8gVGhhdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZSBpZiB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIGl0LCBidXQgY291bGQgbGVhZCB0byBhIGNyYXNoLgoKSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaW52b2x2aW5nIGBkZWx0YV9jcHVgIGFuZCBgYWMtJmd0O2xvY2FsYCB1c2luZyB0aG9zZSBuZXcgZnVuY3Rpb25zLiBJIGFsc28gc2VlIHRoYXQgYHN0YXRlX2xvY2FsYCBpcyBhY3F1aXJlZCB1c2luZyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGluIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgaXQgY2hlY2tzIGlmIGl0JiMzOTtzIG5vbi1OVUxMIGJlZm9yZSBhZGRpbmcgdG8gaXQuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnRseSBoYW5kbGVkLgoKVGhlcmUmIzM5O3Mgc29tZSByZWJpbmRpbmcgb2YgbGVnYWN5IGhpZXJhcmNoaWVzIHdpdGggYG1lbV9jZ3JvdXBfYmluZGAgd2hpY2ggcG9wdWxhdGVzIGBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYC4gTm93LCAqaG93KiBpcyB0aGF0IGBtZW1jZy0mZ3Q7dm1zdGF0c2Agc3RydWN0dXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQ/IFRoYXQmIzM5O3MgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1jZy0mZ3Q7dm1zdGF0c2AgY29tZXMgZnJvbSBhbmQgaG93IGl0IGdldHMgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xpbmcgbGlrZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhY2UgdGhhdC4gSWYgdGhlcmUmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gcHJvYmxlbSwgb3IgaWYgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJiMzOTt0IGZ1bGx5IHplcm9lZCwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEFyZSB0aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyPyBBcmUgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHNhbml0aXphdGlvbj8KCkJhc2VkIG9uIGEgY3Vyc29yeSBnbGFuY2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBhcmVhczoKCjEuICBIb3cgaXMgYG1lbWNnLSZndDt2bXN0YXRzYCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGFycmF5cyBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCjIuICBJZiBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIHJldHVybnMgYE5VTExgLCBpcyB0aGUgY2FsbGluZyBjb2RlICphbHdheXMqIGhhbmRsaW5nIHRoaXMgY29ycmVjdGx5IHRvIHByZXZlbnQgdXNlLWFmdGVyLU5VTEw/CjMuICBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhpcyBwYXRjaCB3aGljaCB3cml0ZSB0aGUgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZmllbGRzPwoKSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgKm5vdCogbmVlZGluZyBLTVNBTiBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgYXMgSSYjMzk7bSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgcG90ZW50aWFsbHkgYE5VTExgIGFycmF5LiBJIHdpbGwsIGhvd2V2ZXIsIG5lZWQgdG8gZnVsbHkgaW52ZXN0aWdhdGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtZW1jZy0mZ3Q7dm1zdGF0c2AuIElmIHRoYXQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBsb29rcyBjbGVhbiwgSSYjMzk7bGwgcmVjb21tZW5kIHRoYXQgS0FTQU4gY292ZXJhZ2UgaXMgbGlrZWx5IHN1ZmZpY2llbnQuIElmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UqLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCAqdGhlbiogS01TQU4gaXMgd2FycmFudGVkLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1zdGF0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NjQ5PXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2V2ZW50c19pbmRleChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NTMtXG5tbS9tZW1jb250cm9sLmM6NjU0OnN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSB7XG5tbS9tZW1jb250cm9sLmMtNjU1LVx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYy02NTgtXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xubW0vbWVtY29udHJvbC5jOjY1OTpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdVx0KnBhcmVudF9wY3B1O1xubW0vbWVtY29udHJvbC5jOjY2MDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzXHRcdFx0KnZtc3RhdHM7XG5tbS9tZW1jb250cm9sLmMtNjYxLVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NzItXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbm1tL21lbWNvbnRyb2wuYy02NzQtXHQvKiBBZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz02OTc9c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzAxLVxubW0vbWVtY29udHJvbC5jOjcwMjpcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsO1xubW0vbWVtY29udHJvbC5jLTcwMy19XG4tLVxubW0vbWVtY29udHJvbC5jPTcwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzA5LVxubW0vbWVtY29udHJvbC5jOjcxMDpcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MTEtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz03MzA9c3RhdGljIHU2NCBmbHVzaF9sYXN0X3RpbWU7XG4tLVxubW0vbWVtY29udHJvbC5jLTczMy1cbm1tL21lbWNvbnRyb2wuYzo3MzQ6c3RhdGljIGJvb2wgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChzdHJ1Y3QgbWVtY2dfdm1zdGF0cyAqdm1zdGF0cylcbm1tL21lbWNvbnRyb2wuYy03MzUte1xubW0vbWVtY29udHJvbC5jOjczNjpcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtc3RhdHMtXHUwMDNlc3RhdHNfdXBkYXRlcykgXHUwMDNlXG5tbS9tZW1jb250cm9sLmMtNzM3LVx0XHRNRU1DR19DSEFSR0VfQkFUQ0ggKiBudW1fb25saW5lX2NwdXMoKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19yc3RhdF91cGRhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbG9uZyB2YWwsXG4tLVxubW0vbWVtY29udHJvbC5jLTc0Mi17XG5tbS9tZW1jb250cm9sLmM6NzQzOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpzdGF0Y19wY3B1O1xubW0vbWVtY29udHJvbC5jOjc0NDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG5tbS9tZW1jb250cm9sLmMtNzQ1LVx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NTAtXHRfX2Nzc19yc3RhdF91cGRhdGVkKFx1MDAyNm1lbWNnLVx1MDAzZWNzcywgY3B1KTtcbm1tL21lbWNvbnRyb2wuYzo3NTE6XHRzdGF0Y19wY3B1ID0gbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHU7XG5tbS9tZW1jb250cm9sLmMtNzUyLVx0Zm9yICg7IHN0YXRjX3BjcHU7IHN0YXRjX3BjcHUgPSBzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSkge1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NTgtXHRcdCAqL1xubW0vbWVtY29udHJvbC5jOjc1OTpcdFx0aWYgKG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goc3RhdGMtXHUwMDNldm1zdGF0cykpXG5tbS9tZW1jb250cm9sLmMtNzYwLVx0XHRcdGJyZWFrO1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NjctXHRcdHN0YXRzX3VwZGF0ZXMgPSB0aGlzX2NwdV94Y2hnKHN0YXRjX3BjcHUtXHUwMDNlc3RhdHNfdXBkYXRlcywgMCk7XG5tbS9tZW1jb250cm9sLmM6NzY4Olx0XHRhdG9taWNfbG9uZ19hZGQoc3RhdHNfdXBkYXRlcywgXHUwMDI2c3RhdGMtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKTtcbm1tL21lbWNvbnRyb2wuYy03NjktXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTc3Mj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKVxubW0vbWVtY29udHJvbC5jLTc3My17XG5tbS9tZW1jb250cm9sLmM6Nzc0Olx0Ym9vbCBuZWVkc19mbHVzaCA9IG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2gobWVtY2ctXHUwMDNldm1zdGF0cyk7XG5tbS9tZW1jb250cm9sLmMtNzc1LVxubW0vbWVtY29udHJvbC5jOjc3NjpcdHRyYWNlX21lbWNnX2ZsdXNoX3N0YXRzKG1lbWNnLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdHNfdXBkYXRlcyksXG5tbS9tZW1jb250cm9sLmMtNzc3LVx0XHRmb3JjZSwgbmVlZHNfZmx1c2gpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTU9c3RhdGljIHZvaWQgZmx1c2hfbWVtY2dfc3RhdHNfZHdvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy04MTctXHQvKlxubW0vbWVtY29udHJvbC5jOjgxODpcdCAqIERlbGliZXJhdGVseSBpZ25vcmUgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaCgpIGhlcmUgc28gdGhhdCBmbHVzaGluZ1xubW0vbWVtY29udHJvbC5jLTgxOS1cdCAqIGluIGxhdGVuY3ktc2Vuc2l0aXZlIHBhdGhzIGlzIGFzIGNoZWFwIGFzIHBvc3NpYmxlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz04MjU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtODMyLVxubW0vbWVtY29udHJvbC5jOjgzMzpcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG5tbS9tZW1jb250cm9sLmMtODM0LSNpZmRlZiBDT05GSUdfU01QXG4tLVxubW0vbWVtY29udHJvbC5jPTkxMz1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTkyMy1cbm1tL21lbWNvbnRyb2wuYzo5MjQ6XHR0aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG5tbS9tZW1jb250cm9sLmMtOTI1LVx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9OTU0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTk2MS1cbm1tL21lbWNvbnRyb2wuYzo5NjI6XHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTk2My0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz05ODA9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtOTkyLVx0LyogVXBkYXRlIG1lbWNnICovXG5tbS9tZW1jb250cm9sLmM6OTkzOlx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xubW0vbWVtY29udHJvbC5jLTk5NC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA2Nj12b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cdCAqIHdoZW4gd2UgZnJlZSB0aGUgc2xhYiBvYmplY3QsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBwZXItbWVtY2dcbm1tL21lbWNvbnRyb2wuYzoxMDc5Olx0ICogdm1zdGF0cyB0byBrZWVwIGl0IGNvcnJlY3QgZm9yIHRoZSByb290IG1lbWNnLlxubW0vbWVtY29udHJvbC5jLTEwODAtXHQgKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA5Nj12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTExMDktXG5tbS9tZW1jb250cm9sLmM6MTExMDpcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VldmVudHNbaV0sIGNvdW50KTtcbm1tL21lbWNvbnRyb2wuYy0xMTExLVx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgY291bnQsIGNwdSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTExMTc9dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMjMtXG5tbS9tZW1jb250cm9sLmM6MTEyNDpcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNbaV0pO1xubW0vbWVtY29udHJvbC5jLTExMjUtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTM2PXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQyLVxubW0vbWVtY29udHJvbC5jOjExNDM6XHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy0xMTQ0LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDE4Nj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTgtXHRtZW1jZzFfZnJlZV9ldmVudHMobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQxOTk6XHRrZnJlZShtZW1jZy1cdTAwM2V2bXN0YXRzKTtcbm1tL21lbWNvbnRyb2wuYzo0MjAwOlx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUpO1xubW0vbWVtY29udHJvbC5jLTQyMDEtXHRrZnJlZShtZW1jZyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDIxMi17XG5tbS9tZW1jb250cm9sLmM6NDIxMzpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG5tbS9tZW1jb250cm9sLmM6NDIxNDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XG5tbS9tZW1jb250cm9sLmMtNDIxNS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyOS1cbm1tL21lbWNvbnRyb2wuYzo0MjMwOlx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xubW0vbWVtY29udHJvbC5jOjQyMzE6XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHMpXG5tbS9tZW1jb250cm9sLmMtNDIzMi1cdFx0Z290byBmYWlsO1xubW0vbWVtY29udHJvbC5jLTQyMzMtXG5tbS9tZW1jb250cm9sLmM6NDIzNDpcdG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXG5tbS9tZW1jb250cm9sLmMtNDIzNS1cdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm1tL21lbWNvbnRyb2wuYzo0MjM2Olx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbm1tL21lbWNvbnRyb2wuYy00MjM3LVx0XHRnb3RvIGZhaWw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNDEtXG5tbS9tZW1jb250cm9sLmM6NDI0MjpcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcbm1tL21lbWNvbnRyb2wuYy00MjQzLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xubW0vbWVtY29udHJvbC5jOjQyNDQ6XHRcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG5tbS9tZW1jb250cm9sLmMtNDI0NS1cdFx0c3RhdGMtXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYzo0MjQ2Olx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbm1tL21lbWNvbnRyb2wuYy00MjQ3LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NTY0PXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1NzItXG5tbS9tZW1jb250cm9sLmM6NDU3MzpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU3NC1cdFx0aWYgKHN0YXRlX2xvY2FsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTc2LVx0XHRpZiAocGFyZW50KVxubW0vbWVtY29udHJvbC5jOjQ1Nzc6XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU3OC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NjpcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk3LVx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5OS1cdFx0XHRpZiAocGFyZW50KVxubW0vbWVtY29udHJvbC5jOjQ2MDA6XHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NjAxLVx0XHR9XG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MDktXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ2MTA6XHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYxMS1cdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MTMtXHRcdFx0aWYgKHBhcmVudClcbm1tL21lbWNvbnRyb2wuYzo0NjE0Olx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYxNS1cdFx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjYtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQ2Mjc6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTQ2MjgtXHRzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgYWM7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MzItXG5tbS9tZW1jb250cm9sLmM6NDYzMzpcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG5tbS9tZW1jb250cm9sLmMtNDYzNC1cbm1tL21lbWNvbnRyb2wuYy00NjM1LVx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG5tbS9tZW1jb250cm9sLmM6NDYzNjpcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmMtNDYzNy1cdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxubW0vbWVtY29udHJvbC5jOjQ2Mzg6XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxubW0vbWVtY29udHJvbC5jOjQ2Mzk6XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxubW0vbWVtY29udHJvbC5jLTQ2NDAtXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQ2LVx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG5tbS9tZW1jb250cm9sLmM6NDY0NzpcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxubW0vbWVtY29udHJvbC5jLTQ2NDgtXHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmM6NDY0OTpcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxubW0vbWVtY29udHJvbC5jOjQ2NTA6XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nIDogTlVMTCxcbm1tL21lbWNvbnRyb2wuYy00NjUxLVx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2ODEtXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cbm1tL21lbWNvbnRyb2wuYzo0NjgyOlx0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKSlcbm1tL21lbWNvbnRyb2wuYzo0NjgzOlx0XHRhdG9taWNfbG9uZ19zZXQoXHUwMDI2bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzLCAwKTtcbm1tL21lbWNvbnRyb2wuYy00Njg0LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1OD1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzNy0gKiBJZiB0aGUgY29udHJvbGxlciBpcyBtb3ZpbmcgZnJvbSB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgdG8gdGhlIGxlZ2FjeVxubW0vbWVtY29udHJvbC5jOjUyMzg6ICogaGllcmFyY2h5LCB2bXN0YXRzJiMzOTtzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkXG5tbS9tZW1jb250cm9sLmMtNTIzOS0gKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cbm1tL21lbWNvbnRyb2wuYzo1MjQwOiAqIGZyb20gdGhlIHZtc3RhdHMmIzM5O3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG5tbS9tZW1jb250cm9sLmMtNTI0MS0gKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI0Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC5jOjUyNjk6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2ldO1xubW0vbWVtY29udHJvbC5jLTUyNzAtXG5tbS9tZW1jb250cm9sLmMtNTI3MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLmM6NTI3MjpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c1tpXTtcbm1tL21lbWNvbnRyb2wuYy01MjczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc5NwoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEFjY291bnRpbmcgT3B0aW1pemF0aW9uIGluIGNncm91cCB2MioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcGVyc3BlY3RpdmUuIEkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTiYjMzk7cyBwcmltYXJ5IGNvbmNlcm4uCgpGaXJzdCwgSSBzZWUgdGhhdCBgbWVtY2ctJmd0O3Ztc3RhdHNgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBvbiBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgYHN0YXRlYCwgYHN0YXRlX2xvY2FsYCwgYGV2ZW50c2AsIGBldmVudHNfbG9jYWxgLCBgc3RhdGVfcGVuZGluZ2AsIGBldmVudHNfcGVuZGluZ2AsIGFuZCBgc3RhdHNfdXBkYXRlc2AuIFRoYXQmIzM5O3MgYSBodWdlIHBvc2l0aXZlLiBXZSYjMzk7cmUgc3RhcnRpbmcgY2xlYW4uCgpUaGUgcGF0Y2ggaXRzZWxmIG9wdGltaXplcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGl0IHNraXBzIHVwZGF0aW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGNvdW50ZXJzIHdoZW4gdGhlIHN5c3RlbSBpcyB1c2luZyB0aGUgZGVmYXVsdCwgbm9uLWhpZXJhcmNoaWNhbCBjZ3JvdXAgdjIgaGllcmFyY2h5LiBUaGVzZSBsb2NhbCBjb3VudGVycyBhcmUgb25seSB1c2VkIGluIGNncm91cCB2MSAobGVnYWN5KS4gSWYgYSBjb250cm9sbGVyIGlzICpyZWJvdW5kKiB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSwgYG1lbV9jZ3JvdXBfYmluZGAgY29waWVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbnRvIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgLgoKVGhlICYjMzQ7cmlzayYjMzQ7IHF1ZXN0aW9uLCB0aGVuLCBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBjYXJlZnVsbHk6CgoqICAgVGhlIGFsbG9jYXRpb24gb2YgYG1lbWNnLSZndDt2bXN0YXRzYCB2aWEgYGt6YWxsb2Nfb2JqYCBydWxlcyBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhhdCBzdHJ1Y3R1cmUuCiogICBgbWVtY2ctJmd0O3Ztc3RhdHNfcGVyY3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3BlcmNwdV9nZnBgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gd2F0Y2ggZm9yIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IGlzc3VlIGhlcmUuCiogICBJbiBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAsIHRoZSBgYWNgIHN0cnVjdCAob2YgdHlwZSBgc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sYCkgaXMgaW5pdGlhbGl6ZWQgYXMgYSBzdHJ1Y3QgbGl0ZXJhbC4gRXZlcnkgbWVtYmVyIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQ6IGBhZ2dyZWdhdGVgLCBgbG9jYWxgLCBgcGVuZGluZ2AsIGBwcGVuZGluZ2AsIGFuZCBgY3N0YXRgLiBUaGVyZSYjMzk7cyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoaXMgcGFydGljdWxhciBjYXNlLgoqICAgSSBzZWUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgaW52b2x2aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3RzLgoqICAgVGhlcmUgYXJlIG5vIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClNvLCBpcyB0aGVyZSAqYW55KiByaXNrPyBUaGUgb25seSBwb3RlbnRpYWwgaXNzdWUgSSBzZWUgaXMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGFjLSZndDtsb2NhbGAgaXMgTlVMTCAod2hpY2ggaXQgY2FuIGJlIGluIHYyKS4gSG93ZXZlciwgdGhhdCB3b3VsZCBiZSBhIHN0YW5kYXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjcmFzaCwgd2hpY2ggd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nLiBJJiMzOTttIGFsc28gbG9va2luZyBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1dCB0aGVzZSBhcmUgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkJhc2VkIG9uIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBzdGFuZGFyZCBLTVNBTiBjcml0ZXJpYToKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBObyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBsYXRlci4gRXZlcnl0aGluZyBpcyBremFsbG9jJiMzOTtkLgo0LiAgTm8gcG90ZW50aWFsIGJvdW5kcyBjaGVjayBpc3N1ZXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpIZXJlJiMzOTtzIHRoZSByZWFzb25pbmcgSSYjMzk7ZCB1c2UgdG8ganVzdGlmeSB0aGlzOgoKKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtb3J5IGFjY291bnRpbmcgYnkgc2tpcHBpbmcgdGhlIHVwZGF0aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgdm1zdGF0cyBvbiB0aGUgZGVmYXVsdCBjZ3JvdXAgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhZGRpbmcgYSBiaW5kIGNhbGxiYWNrIHRvIGZpbGwgdGhlc2UgbG9jYWwgc3RhdHMgaWYgbW92aW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LgoqICAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOgogICAgKiAgIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4KICAgICogICBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIGFjYCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgc3RydWN0IGxpdGVyYWxzLgogICAgKiAgIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgcmVhZHMuCiAgICAqICAgQW55IGJ1Z3MgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaGllcmFyY2h5IHJlYm91bmQgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMsIEtBU0FOLCBvciBMT0NLREVQLgoqICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJIGFtIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICYjMzk7c3RhdGVfbG9jYWwmIzM5OyBhbmQgJiMzOTtldmVudHNfbG9jYWwmIzM5OyBhcnJheXMgd2hlbiBydW5uaW5nIG9uIHRoZSBjZ3JvdXAgZGVmYXVsdCBoaWVyYXJjaHkgKGNncm91cCB2MiksIHJldHVybmluZyBOVUxMIGZyb20gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSBhbmQgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KCksIGFuZCBhZGRpbmcgYSBtZW1fY2dyb3VwX2JpbmQoKSBjYWxsYmFjayB0byBiYWNrZmlsbCB0aGVzZSBhcnJheXMgaWYgcmVib3VuZCB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeS5cblxuQWxsIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbWNnX3Ztc3RhdHMpIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKCkgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gVGhlIGxvY2FsIHN0YWNrIGFnZ3JlZ2F0ZV9jb250cm9sIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgbGl0ZXJhbHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGJ5dGVzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYXJlIGV4cG9zZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlYmluZCBhcmUgaGFuZGxlZCBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDIuNDg2MTk4NTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NDgzNTQwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9iaW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICAgIFwibWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZVwiLFxuICAgIFwiZmx1c2hfbm1pX3N0YXRzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBhZ2dyZWdhdGlvbiBieSBza2lwcGluZyBub24taGllcmFyY2hpY2FsIGxvY2FsIHN0YXRzIHVwZGF0ZXMgd2hlbiBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgKGNncm91cCB2MiksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfYmluZCgpIHRvIGluaXRpYWxpemUgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCB3aGVuIHJlYmluZGluZyB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSAoY2dyb3VwIHYxKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgY29udHJvbGxlciBhY2NvdW50aW5nIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDIuNDg2MjA4MDMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzOTQxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTY4Nyw2ICs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xcbiBcXHRhdG9taWNfbG9uZ190XFx0XFx0c3RhdHNfdXBkYXRlcztcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBub24taGllcmFyY2hpY2FsIG1lbWNnLXdpZGUgY291bnRlcnMgYXJlIHJlYWQgYmFjayBvbmx5IGJ5IHRoZSBsZWdhY3lcXG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXFxuKyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHlcXG4rICogKG1lbV9jZ3JvdXBfYmluZCgpIHBvcHVsYXRlcyB0aGVtIGlmIGl0IGlzIGxhdGVyIG1vdmVkIG9udG8gdGhlIGxlZ2FjeVxcbisgKiBoaWVyYXJjaHkpLlxcbisgKi9cXG4rc3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbDtcXG4rfVxcbitcXG4gLypcXG4gICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZ1xcbiAgKlxcbkBAIC00NDg0LDcgKzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcXG4gXFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXFxuIFxcdGxvbmcgKmFnZ3JlZ2F0ZTtcXG4tXFx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xcbitcXHQvKlxcbitcXHQgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0b1xcbitcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbitcXHQgKi9cXG4gXFx0bG9uZyAqbG9jYWw7XFxuIFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi9cXG4gXFx0bG9uZyAqcGVuZGluZztcXG5AQCAtNDUyMyw3ICs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovXFxuLVxcdFxcdGlmIChkZWx0YV9jcHUpXFxuK1xcdFxcdGlmIChkZWx0YV9jcHUgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZWxvY2FsKVxcbiBcXHRcXHRcXHRhYy1cXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xcbiBcXG4gXFx0XFx0aWYgKGRlbHRhKSB7XFxuQEAgLTQ1MzcsNiArNDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4gI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbiBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiB7XFxuK1xcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4gXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbV9zdGF0KSkge1xcbkBAIC00NTQ0LDcgKzQ1NzEsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiBcXHRcXHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTtcXG4gXFxuIFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG4tXFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbitcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbiBcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XFxuIFxcdH1cXG5AQCAtNDU2Niw3ICs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuIFxcdFxcdFxcdFxcdHBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG4tXFx0XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbitcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdH1cXG5AQCAtNDU3OSw3ICs0NjA4LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuIFxcdFxcdFxcdFxcdHBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG4tXFx0XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbitcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdH1cXG5AQCAtNDYwNCw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcXG4gXFxuIFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbiBcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbi1cXHRcXHQubG9jYWwgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxuK1xcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG4gXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG4gXFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG4gXFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZXN0YXRlLFxcbkBAIC00NjE1LDcgKzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbiBcXG4gXFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuIFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzLFxcbi1cXHRcXHQubG9jYWwgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsLFxcbitcXHRcXHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxcbiBcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4gXFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXFxuIFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VldmVudHMsXFxuQEAgLTUxOTksNiArNTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4gXFx0eyB9XFx0LyogdGVybWluYXRlICovXFxuIH07XFxuIFxcbisjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuKy8qXFxuKyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsXFxuKyAqIGtleSBhbHJlYWR5IGluIGl0cyBuZXcgc3RhdGUuXFxuKyAqXFxuKyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XFxuKyAqIGhpZXJhcmNoeSwgdm1zdGF0cydzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkXFxuKyAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxcbisgKiBmcm9tIHRoZSB2bXN0YXRzJ3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XFxuKyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2NzcylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZsdXNoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGRlc2NlbmRhbnRzIHRoYXQgZ290XFxuK1xcdCAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZVxcbitcXHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHNcXG4rXFx0ICogYXJyYXlzXFxuK1xcdCAqL1xcbitcXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBhIGNvbmN1cnJlbnQgZmx1c2guIFRoZSBwZXJpb2RpYyBmbHVzaGVyIHJ1bnNcXG4rXFx0ICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGVcXG4rXFx0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcXG4rXFx0ICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXNcXG4rXFx0ICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmVcXG4rXFx0ICogYSBzaW5nbGUgQ1BVJ3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlXFxuK1xcdCAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxcbitcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c1tpXTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuK1xcbiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuIFxcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcXG4gXFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXFxuQEAgLTUyMTIsNiArNTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4gXFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXFxuIFxcdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHQuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCxcXG4gXFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXFxuICNlbmRpZlxcbiBcXHQuZWFybHlfaW5pdCA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQzLjg1MTA1MzA3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNzE1MjY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9iaW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICAgIFwibWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZVwiLFxuICAgIFwiZmx1c2hfbm1pX3N0YXRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY4Nyw2ICs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICogVGhleSBhcmUgc2tpcHBlZCBpZiB0aGUgY29udHJvbGxlciBzaXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeVxuKyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3lcbisgKiBoaWVyYXJjaHkpLlxuKyAqL1xuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDg0LDcgKzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTIzLDcgKzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MzcsNiArNDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1NDQsNyArNDU3MSw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTY2LDcgKzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NzksNyArNDYwOCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDYwNCw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ2MTUsNyArNDY0NSw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbkBAIC01MTk5LDYgKzUyMjksNTAgQEAgc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4gXHR7IH1cdC8qIHRlcm1pbmF0ZSAqL1xuIH07XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuKy8qXG4rICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sbGVyIGhhcyBtb3ZlZCBiZXR3ZWVuIGhpZXJhcmNoaWVzLCB3aXRoIHRoZSBvbl9kZmxcbisgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLlxuKyAqXG4rICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcbisgKiBoaWVyYXJjaHksIHZtc3RhdHMncyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxuKyAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxuKyAqIGZyb20gdGhlIHZtc3RhdHMncyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHlcbisgKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cbisgKi9cbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mocm9vdF9jc3MpO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmbHVzaCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBkZXNjZW5kYW50cyB0aGF0IGdvdFxuK1x0ICogZGVzdHJveWVkIHJpZ2h0IGJlZm9yZSB0aGUgcmViaW5kIHRoYXQgbWF5IGhhdmUgbGVmdCBjb3VudHMgaW4gdGhlXG4rXHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHNcbitcdCAqIGFycmF5c1xuK1x0ICovXG4rXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpO1xuK1xuK1x0LypcbitcdCAqIE5vdCBzZXJpYWxpemVkIGFnYWluc3QgYSBjb25jdXJyZW50IGZsdXNoLiBUaGUgcGVyaW9kaWMgZmx1c2hlciBydW5zXG4rXHQgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZVxuK1x0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcbitcdCAqIHJlYWQgc3RhdGUgYW5kIHdyaXRlIHRvIHN0YXRlX2xvY2FsLCBpdHMgc3RhdGVfbG9jYWwgaW5jcmVtZW50IGlzXG4rXHQgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZVxuK1x0ICogYSBzaW5nbGUgQ1BVJ3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlXG4rXHQgKiBjb3VudGVycyBhcmUgYXBwcm94aW1hdGUgdmFsdWVzLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19WTVNUQVRfU0laRTsgaSsrKVxuK1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpXTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxuK1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzW2ldO1xuK31cbisjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4rXG4gc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxuIFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5AQCAtNTIxMiw2ICs1Mjg2LDcgQEAgc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXG4gXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK1x0LmJpbmQgPSBtZW1fY2dyb3VwX2JpbmQsXG4gXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbiAjZW5kaWZcbiBcdC5lYXJseV9pbml0ID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQzLjg1MTA1NDkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTgxMDUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogTWVtb3J5IENncm91cCBTdGF0aXN0aWNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbiBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQncyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHN1YnN5c3RlbXPigJR0d28gY3JpdGljYWwgYXJlYXMgdGhhdCBzZWUgaGVhdnkgdXNlIGFuZCBhcmUga25vd24gYXR0YWNrIHN1cmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB0YXJnZXRpbmcgbWVtb3J5IGNncm91cCBzdGF0aXN0aWMgYWNjb3VudGluZywgd2hpY2ggaXMgYWx3YXlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGl0IGNhbiBlYXNpbHkgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGlzdGljcywgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIG9yIGV2ZW4gZGVuaWFsLW9mLXNlcnZpY2UgY29uZGl0aW9ucy5cblxuSSBzZWUgaXQncyBhZGRlZCBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggZGVhbCB3aXRoIHNraXBwaW5nIHRyYWNraW5nIGxvY2FsIHN0YXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgbGlrZWx5IGNncm91cHMgdjIuIFRoZW4gdGhlcmUgYXJlIGEgZmV3IHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBgZmx1c2hfbm1pX3N0YXRzYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdGhhdCBhcHBlYXIgdG8gY29uZGl0aW9uYWxseSB1c2UgdGhlc2UgbmV3IGFycmF5cy4gVGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG9wdGltaXphdGlvbnMgYW5kIGhhbmRsaW5nIGxlZ2FjeSB2MSBjZ3JvdXBzIGFuZCB2Mi5cblxuRnVydGhlcm1vcmUsIHRoZSBhZGRpdGlvbiBvZiBgbWVtX2Nncm91cF9iaW5kYCBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0c2Agd2hlbiBzd2l0Y2hpbmcgaGllcmFyY2hpZXMgc2NyZWFtIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBjb3B5aW5nIG9mIGBzdGF0ZWAgYW5kIGBldmVudHNgIGJldHdlZW4gbG9jYWwgYW5kIG5vbi1sb2NhbCB2YXJpYWJsZXMuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBhcmVhcyBmb3IgZnV6emluZyB3aWxsIHJldm9sdmUgYXJvdW5kIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCwgYGZsdXNoX25taV9zdGF0c2AsIGFuZCBgbWVtX2Nncm91cF9iaW5kYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCwgc28gdGhleSdyZSB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb25zIGZvciBidWdzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb2RlYmFzZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGBNRU1DR2AsIGBNRU1DR19WMWAsIG9yIGBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0J3MgbGlrZWx5IHRoYXQgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBsaWtlIGhhdmluZyBsZWdhY3kgY2dyb3VwcyBlbmFibGVkLCB3b3VsZCB0cmlnZ2VyIHRoaXMgcGF0Y2ggaW4gc3BlY2lmaWMgd2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQ4LjcwOTE2Mzk2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTY3NjcwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDguNzg4ODQ4NjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjkzODQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgYE1FTUNHYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU2luY2UgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IGVkaXRvciBhbmQgZG8gYSBxdWljayBzZWFyY2guIEhvcGVmdWxseSwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uLCBwZXJoYXBzIHdpdGggc29tZSByZWxldmFudCBjb250ZXh0IGFyb3VuZCBpdC4gSXQncyBhIGNvbW1vbiBwcmFjdGljZSB0byBoYXZlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBzdWItZmVhdHVyZXMgb2YgdGhlIGNvZGUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgdGhlIHJlbGV2YW50IGRpcmVjdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjUwLjkxNTc5MDg3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMxMjA3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc3LVxcbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc5LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODYtXFxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4OC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNTo1My4yNDcwMDQyNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTY4MTUwMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgaW5pdC9LY29uZmlnYCwgdGhpbmtpbmcgbGlrZSBJJ2QgYXBwcm9hY2ggdGhpcyBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTA3MCB0byAxMTEwLiBUaW1lIHRvIGdldCBhIGZlZWwgZm9yIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIGhlcmUuIEknbSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipCb290bG9hZGVyLXJlbGF0ZWQgY29uZmlnczoqKiBBcmUgd2Ugc2VlaW5nIG9wdGlvbnMgdG8gc2VsZWN0IHNwZWNpZmljIGJvb3Rsb2FkZXJzLCBvciBwZXJoYXBzIHBhcmFtZXRlcnMgZm9yIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSBib290IHByb2Nlc3M/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCBpZiBJIHdhbnQgdG8gZGVidWcgYm9vdCBpc3N1ZXMgb3IgbW9kaWZ5IHRoZSBrZXJuZWwgYnVpbGQgZm9yIGEgZGlmZmVyZW50IGJvb3QgZW52aXJvbm1lbnQuXG4qICAgKipFYXJseSBLZXJuZWwgU2V0dXA6KiogSSBhbnRpY2lwYXRlIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB2ZXJ5IGVhcmx5IHBhcnRzIG9mIHRoZSBrZXJuZWwuIE1heWJlIG1lbW9yeSBjb25maWd1cmF0aW9uLCBlYXJseSBkZXZpY2UgZHJpdmVycywgdGhpbmdzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIHN5c3RlbSBydW5uaW5nIGJlZm9yZSB3ZSBjYW4gZXZlbiBsb2FkIG1vZHVsZXMuIEFueSBpbml0aWFsIGhhcmR3YXJlIGRpc2NvdmVyeSBvciBjb25maWd1cmF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipEZWZhdWx0IEJlaGF2aW9yOioqIEFyZSB0aGVyZSBkZWZhdWx0IHNldHRpbmdzIGJlaW5nIGRlZmluZWQ/IFdoYXQgaGFwcGVucyBpZiB0aGUgdXNlciBkb2Vzbid0IGV4cGxpY2l0bHkgc2VsZWN0IGFueXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgXCJzYW5lIGRlZmF1bHRzXCIgaGVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgSW50ZXJhY3Rpb25zOioqIEFyZSB0aGVyZSBjb25kaXRpb25hbCBvcHRpb25zPyBJcyB0aGlzIEtjb25maWcgc2VjdGlvbiBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3MgSSd2ZSBhbHJlYWR5IGNvbmZpZ3VyZWQ/IEknbGwgYmUgd2F0Y2hpbmcgaG93IHRoZXNlIHBhcmFtZXRlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBlbnRyaWVzIGFyZSB3ZWxsLWRvY3VtZW50ZWQuIEEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbidzIHB1cnBvc2UsIHBvdGVudGlhbCB2YWx1ZXMsIGFuZCBpbXBsaWNhdGlvbnMgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIG1lIHRvIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zLlxuXG5JbiBlc3NlbmNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUgZm91bmRhdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCdzIGZpcnN0IHN0ZXBzIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBrZXkgcGFyYW1ldGVycyB0aGF0IGRpY3RhdGUgdGhlIHZlcnkgZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3Qgc2VxdWVuY2UsIGFuZCBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCdzIGluaXRpYWxpemF0aW9uLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNTo1Ni40MTUxNTcwNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTEwNTpcXHRcXHRoZWxwXFxuMTEwNjpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMDc6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMDg6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMDk6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTEwOlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTM6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExNDpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NTYuNDE1MzQ3NTQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzMDgzNTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhleSdyZSBjZW50cmFsIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGUgZmFjdCB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGRlZmF1bHRzIHRvICduJyBhbmQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBzdWdnZXN0cyBpdCdzIGEgc3BlY2lmaWMgdmVyc2lvbiBvciBjb21wYXRpYmlsaXR5IHNldHRpbmcuIEFuZCB0aGVyZSBhcmUgYGlmZGVmYCBibG9ja3MgYXJvdW5kIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYm90aCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGFyZSBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbXBhY3RlZCBieSBvciBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMuIEZyb20gbXkgaW5pdGlhbCBvdmVydmlldywgaXQgbG9va3MgbGlrZSBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUga2V5IGZpbGUgdG8gaW52ZXN0aWdhdGUuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBtZW1fY2dyb3VwX2JpbmRgIC0gVGhpcyBpcyBhZGRlZCBhbmQgYXBwZWFycyB0byBiZSBhIGNhbGxiYWNrIHdpdGhpbiBgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgLmJpbmRgLCB3aGljaCBzb3VuZHMgaW1wb3J0YW50LlxuKiAgIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgLSBUaGlzIG9uZSBpcyBtb2RpZmllZCwgYW5kIGlzIGFsc28gYSBjYWxsYmFjayBpbiBgbWVtb3J5X2NncnBfc3Vic3lzIC5jc3NfcnN0YXRfZmx1c2hgLiBUaGlzIGlzIHRoZSBvbmUgdG8gaW5zcGVjdCBmaXJzdC5cbiogICBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAgLSBBIHN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFnZ3JlZ2F0ZSBmdW5jdGlvbiB3b3Jrcy5cbiogICBgZmx1c2hfbm1pX3N0YXRzYCAtIEFsc28gc3RhdGljLCBhbmQgY2FsbGVkIHVuZGVyIHRoZSBjb25kaXRpb24gYENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AsIGluZGljYXRpbmcgaXQncyByZWxhdGVkIHRvIE5NSSBzYWZldHkuIFRoaXMgaXMgcmVsZXZhbnQgdG8gbXkgY29uY2VybnMgYWJvdXQgTk1JIGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgY29kZS5cbiogICBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCAtIEJvdGggYXBwZWFyIHRvIGJlIHN0YXRpYyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2Ugc2hvdWxkIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQgdG8gdW5kZXJzdGFuZCBhdCBhIGdsYW5jZS5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX2JpbmRgLCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgIGFyZSwgaW5kZWVkLCB0aGUgc3ltYm9scyBJIHRoaW5rIHRoZXkgYXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZ29pbmcgdG8ganVtcCB0byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA0NTAwIHRvIDQ2NjAsIHRvIHNlZSB0aGUgZXhhY3QgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHRoZWlyIHZpc2liaWxpdHksIGVuc3VyaW5nIHRoZXkgbWF0Y2ggd2hhdCBJJ20gZXhwZWN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDAuODQ2MTg1NzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUyMDpcXHRcXHRsb25nICpjc3RhdDtcXG40NTIxOlxcdFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXFxuNDUyMjpcXHRcXHRsb25nICpjc3RhdF9wcmV2O1xcbjQ1MjM6XFx0XFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cXG40NTI0OlxcdFxcdGludCBzaXplO1xcbjQ1MjU6XFx0fTtcXG40NTI2OlxcdFxcbjQ1Mjc6XFx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbjQ1Mjg6XFx0e1xcbjQ1Mjk6XFx0XFx0aW50IGk7XFxuNDUzMDpcXHRcXHRsb25nIGRlbHRhLCBkZWx0YV9jcHUsIHY7XFxuNDUzMTpcXHRcXG40NTMyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlc2l6ZTsgaSsrKSB7XFxuNDUzMzpcXHRcXHRcXHQvKlxcbjQ1MzQ6XFx0XFx0XFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXFxuNDUzNTpcXHRcXHRcXHQgKiBiZWxvdyB1cy4gV2UncmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xcbjQ1MzY6XFx0XFx0XFx0ICogYSBnbG9iYWwgY291bnRlciwgc28gdGhlIGZpcnN0IGN5Y2xlIHdpbGwgZ2V0IHRoZW0uXFxuNDUzNzpcXHRcXHRcXHQgKi9cXG40NTM4OlxcdFxcdFxcdGRlbHRhID0gYWMtXFx1MDAzZXBlbmRpbmdbaV07XFxuNDUzOTpcXHRcXHRcXHRpZiAoZGVsdGEpXFxuNDU0MDpcXHRcXHRcXHRcXHRhYy1cXHUwMDNlcGVuZGluZ1tpXSA9IDA7XFxuNDU0MTpcXHRcXG40NTQyOlxcdFxcdFxcdC8qIEFkZCBDUFUgY2hhbmdlcyBvbiB0aGlzIGxldmVsIHNpbmNlIHRoZSBsYXN0IGZsdXNoICovXFxuNDU0MzpcXHRcXHRcXHRkZWx0YV9jcHUgPSAwO1xcbjQ1NDQ6XFx0XFx0XFx0diA9IFJFQURfT05DRShhYy1cXHUwMDNlY3N0YXRbaV0pO1xcbjQ1NDU6XFx0XFx0XFx0aWYgKHYgIT0gYWMtXFx1MDAzZWNzdGF0X3ByZXZbaV0pIHtcXG40NTQ2OlxcdFxcdFxcdFxcdGRlbHRhX2NwdSA9IHYgLSBhYy1cXHUwMDNlY3N0YXRfcHJldltpXTtcXG40NTQ3OlxcdFxcdFxcdFxcdGRlbHRhICs9IGRlbHRhX2NwdTtcXG40NTQ4OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vjc3RhdF9wcmV2W2ldID0gdjtcXG40NTQ5OlxcdFxcdFxcdH1cXG40NTUwOlxcdFxcbjQ1NTE6XFx0XFx0XFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xcbjQ1NTI6XFx0XFx0XFx0aWYgKGRlbHRhX2NwdSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbG9jYWwpXFxuNDU1MzpcXHRcXHRcXHRcXHRhYy1cXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xcbjQ1NTQ6XFx0XFxuNDU1NTpcXHRcXHRcXHRpZiAoZGVsdGEpIHtcXG40NTU2OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2VhZ2dyZWdhdGVbaV0gKz0gZGVsdGE7XFxuNDU1NzpcXHRcXHRcXHRcXHRpZiAoYWMtXFx1MDAzZXBwZW5kaW5nKVxcbjQ1NTg6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZXBwZW5kaW5nW2ldICs9IGRlbHRhO1xcbjQ1NTk6XFx0XFx0XFx0fVxcbjQ1NjA6XFx0XFx0fVxcbjQ1NjE6XFx0fVxcbjQ1NjI6XFx0XFxuNDU2MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuNDU2NDpcXHRzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQ1NjU6XFx0e1xcbjQ1NjY6XFx0XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxuNDU2NzpcXHRcXHRpbnQgbmlkO1xcbjQ1Njg6XFx0XFxuNDU2OTpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtX3N0YXQpKSB7XFxuNDU3MDpcXHRcXHRcXHRpbnQga21lbSA9IGF0b21pY194Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbV9zdGF0LCAwKTtcXG40NTcxOlxcdFxcdFxcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xcbjQ1NzI6XFx0XFxuNDU3MzpcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxuNDU3NDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuNDU3NTpcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG40NTc2OlxcdFxcdFxcdGlmIChwYXJlbnQpXFxuNDU3NzpcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XFxuNDU3ODpcXHRcXHR9XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbjQ1ODE6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF07XFxuNDU4MjpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ1ODM6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XFxuNDU4NDpcXHRcXG40NTg1OlxcdFxcdFxcdGlmIChwYXJlbnQpXFxuNDU4NjpcXHRcXHRcXHRcXHRwbHN0YXRzID0gcGFyZW50LVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VscnV2ZWNfc3RhdHM7XFxuNDU4NzpcXHRcXG40NTg4OlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2cG4tXFx1MDAzZXNsYWJfcmVjbGFpbWFibGUpKSB7XFxuNDU4OTpcXHRcXHRcXHRcXHRpbnQgc2xhYiA9IGF0b21pY194Y2hnKFxcdTAwMjZwbi1cXHUwMDNlc2xhYl9yZWNsYWltYWJsZSwgMCk7XFxuNDU5MDpcXHRcXHRcXHRcXHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xcbjQ1OTE6XFx0XFxuNDU5MjpcXHRcXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbjQ1OTM6XFx0XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG40NTk0OlxcdFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbjQ1OTU6XFx0XFx0XFx0XFx0XFx0cGxzdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG40NTk2OlxcdFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG40NTk3OlxcdFxcdFxcdFxcdGlmIChzdGF0ZV9sb2NhbClcXG40NTk4OlxcdFxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbjQ1OTk6XFx0XFx0XFx0XFx0aWYgKHBhcmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDAuODQ2NzM0ODM2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTc5MDgzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBtbS9tZW1jb250cm9sLmNgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIOKAkyBMaW5lcyA0NjMwLTQ2NzAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDQ2MzAgdG8gNDY3MCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBrbm93IHRoaXMgaXMgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wgY29kZSwgc28gSSBhbnRpY2lwYXRlIGRlYWxpbmcgd2l0aCB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBtZW1vcnkgcmVzb3VyY2UgbWFuYWdlbWVudCwgcG9zc2libHkgcmVsYXRlZCB0byBjZ3JvdXBzIG9yIHRoZSBzbGFiIGFsbG9jYXRvciwgcmlnaHQ/IEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIGZhaXJseSBpbnRyaWNhdGU7IGxpa2VseSwgdGhpcyBzZWN0aW9uIHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIG9yIGVuZm9yY2VtZW50LiBJdCdzIHByb2JhYmx5IHRpZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIHNwZWNpZmljIGNvbnRyb2wgZ3JvdXAsIGEgY3JpdGljYWwgcGFydCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmluZyBmYWlyIHNoYXJpbmcuXG5cbkkgYmV0IEknbGwgc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBvZiBtZW1vcnkgdXNhZ2UgYW5kIGxpbWl0IGVuZm9yY2VtZW50LiBJJ20gYWxzbyByZWFkeSBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSBhbGxvY2F0b3Igb3IgdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZXIsIGJlY2F1c2UgdGhlc2Ugd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgaG93IG1lbW9yeSBjb250cm9sIHRydWx5IHdvcmtzLiBJIGFtIHByb2JhYmx5IGxvb2tpbmcgYXQgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uLCBsb2NraW5nIGFuZCB2YXJpb3VzIGNyaXRpY2FsIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyB0aHJlYWQtc2FmZSBhbmQgY29vcmRpbmF0ZWQuXG5cbkxldCdzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgdHlwZSDigJMgaXMgaXQgcGFnZSBjYWNoZSwgYW5vbnltb3VzIG1lbW9yeSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtZW1vcnkgcmVjbGFpbSBwb2xpY2llcyBvciB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgd2l0aGluIHRob3NlIGxpbmVzIHRvby4gVGhlIGdvYWwgaXMgbGlrZWx5IHRvIGVuZm9yY2UgdGhlIGxpbWl0cyBkZWZpbmVkIGluIGEgY2dyb3VwLCBlaXRoZXIgZ3JhY2VmdWxseSBvciBhZ2dyZXNzaXZlbHkuIEkgd2lsbCBiZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHJlbGF0ZWQgc2VjdGlvbnMgdG8gY2hlY2sgdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGUgY29kZSBvciwgbW9yZSBpbXBvcnRhbnRseSwgYW55IHNwb3RzIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGNvdWxkIGJlIGx1cmtpbmcuIFRoYXQgYWx3YXlzIG1hdHRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA0LjI2NDY1Mzc3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MzA6XFx0XFxuNDYzMTpcXHRcXHRmbHVzaF9ubWlfc3RhdHMobWVtY2csIHBhcmVudCk7XFxuNDYzMjpcXHRcXG40NjMzOlxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQ2MzQ6XFx0XFxuNDYzNTpcXHRcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG40NjM2OlxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGUsXFxuNDYzNzpcXHRcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxuNDYzODpcXHRcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbjQ2Mzk6XFx0XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG40NjQwOlxcdFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VzdGF0ZSxcXG40NjQxOlxcdFxcdFxcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXFx1MDAzZXN0YXRlX3ByZXYsXFxuNDY0MjpcXHRcXHRcXHQuc2l6ZSA9IE1FTUNHX1ZNU1RBVF9TSVpFLFxcbjQ2NDM6XFx0XFx0fTtcXG40NjQ0OlxcdFxcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXFx1MDAyNmFjKTtcXG40NjQ1OlxcdFxcbjQ2NDY6XFx0XFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuNDY0NzpcXHRcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG40NjQ4OlxcdFxcdFxcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXFxuNDY0OTpcXHRcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG40NjUwOlxcdFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbjQ2NTE6XFx0XFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZWV2ZW50cyxcXG40NjUyOlxcdFxcdFxcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXFx1MDAzZWV2ZW50c19wcmV2LFxcbjQ2NTM6XFx0XFx0XFx0LnNpemUgPSBOUl9NRU1DR19FVkVOVFMsXFxuNDY1NDpcXHRcXHR9O1xcbjQ2NTU6XFx0XFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcXHUwMDI2YWMpO1xcbjQ2NTY6XFx0XFxuNDY1NzpcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG40NjU4OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbjQ2NTk6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqbHN0YXRzID0gcG4tXFx1MDAzZWxydXZlY19zdGF0cztcXG40NjYwOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xcbjQ2NjE6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0c19wZXJjcHUgKmxzdGF0YztcXG40NjYyOlxcdFxcbjQ2NjM6XFx0XFx0XFx0aWYgKHBhcmVudClcXG40NjY0OlxcdFxcdFxcdFxcdHBsc3RhdHMgPSBwYXJlbnQtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlY19zdGF0cztcXG40NjY1OlxcdFxcbjQ2NjY6XFx0XFx0XFx0bHN0YXRjID0gcGVyX2NwdV9wdHIocG4tXFx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDY2NzpcXHRcXG40NjY4OlxcdFxcdFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbjQ2Njk6XFx0XFx0XFx0XFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cXHUwMDNlc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA0LjI2NTE4NTk5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUwNDc3NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW52b2NhdGlvbiBvZiBgbWVtX2Nncm91cF9iaW5kYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igc3Vycm91bmRpbmcgYG1lbV9jZ3JvdXBfYmluZGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoYXQncyBhY3R1YWxseSB0cmlnZ2VyaW5nIHRoaXMgZnVuY3Rpb24gY2FsbD8gUmlnaHQsIGl0J3MgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbWVtb3J5X2NncnBfc3Vic3lzYCBzdHJ1Y3R1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVuIGRvZXMgdGhlIGtlcm5lbCBpbnZva2UgdGhhdCBgLmJpbmRgIG1ldGhvZD8gSSByZWNhbGwgdGhhdCBgLmJpbmRgIGlzIGNhbGxlZCB3aGVuIHN1YnN5c3RlbXMgYXJlIGJlaW5nIHJlYm91bmQgb3IgbW91bnRlZC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgcmViaW5kX3N1YnN5c3RlbXMoKWAgaW4gYGtlcm5lbC9jZ3JvdXAvY2dyb3VwLmNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdHJhY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBtZXRob2QuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBiaW5kIG1ldGhvZCBpcyB1c2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDYuNTE1NjY3Mzc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNTc0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYmluZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImNyeXB0by9hZl9hbGcuYz0yMDQ9c3RhdGljIGludCBhbGdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbmNyeXB0by9hZl9hbGcuYy0yMzktXFxuY3J5cHRvL2FmX2FsZy5jOjI0MDpcXHRwcml2YXRlID0gdHlwZS1cXHUwMDNlYmluZChzYS1cXHUwMDNlc2FsZ19uYW1lKTtcXG5jcnlwdG8vYWZfYWxnLmMtMjQxLVxcdGlmIChJU19FUlIocHJpdmF0ZSkpIHtcXG4tLVxcbmRyaXZlcnMvYWNwaS9nbHVlLmM9MzUyPXZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYWNwaS9nbHVlLmMtMzg4LVxcdGlmIChhZGV2LVxcdTAwM2VoYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGFkZXYtXFx1MDAzZWhhbmRsZXItXFx1MDAzZWJpbmQpXFxuZHJpdmVycy9hY3BpL2dsdWUuYzozODk6XFx0XFx0YWRldi1cXHUwMDNlaGFuZGxlci1cXHUwMDNlYmluZChkZXYpO1xcbmRyaXZlcnMvYWNwaS9nbHVlLmMtMzkwLVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jPTIyNz1zdGF0aWMgaW50IHRyeV90b19icmluZ191cF9hZ2dyZWdhdGVfZGV2aWNlKHN0cnVjdCBhZ2dyZWdhdGVfZGV2aWNlICphZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI0OC1cXHQvKiBGb3VuZCBhbGwgY29tcG9uZW50cyAqL1xcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzoyNDk6XFx0cmV0ID0gYWRldi1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGFkZXYtXFx1MDAzZXBhcmVudCk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI1MC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jPTYzMz1zdGF0aWMgaW50IGNvbXBvbmVudF9iaW5kKHN0cnVjdCBjb21wb25lbnQgKmNvbXBvbmVudCwgc3RydWN0IGFnZ3JlZ2F0ZV9kZXZpY2UgKmFkZXYsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtNjU4LVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzo2NTk6XFx0cmV0ID0gY29tcG9uZW50LVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQoY29tcG9uZW50LVxcdTAwM2VkZXYsIGFkZXYtXFx1MDAzZXBhcmVudCwgZGF0YSk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTY2MC1cXHRpZiAoIXJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz00MDA9c3RhdGljIHN0cnVjdCBzb2NrZXQgKmRyYmRfdHJ5X2Nvbm5lY3Qoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtNDUyLVxcdHdoYXQgPSBcXFwiYmluZCBiZWZvcmUgY29ubmVjdFxcXCI7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzo0NTM6XFx0ZXJyID0gc29jay1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKSBcXHUwMDI2c3JjX2luNiwgbXlfYWRkcl9sZW4pO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtNDU0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz01MDc9c3RhdGljIGludCBwcmVwYXJlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbiwgc3RydWN0IGFjY2VwdF93YWl0X2RhdGEgKmFkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy01MzktXFx0d2hhdCA9IFxcXCJiaW5kIGJlZm9yZSBsaXN0ZW5cXFwiO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6NTQwOlxcdGVyciA9IHNfbGlzdGVuLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQoc19saXN0ZW4sIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVxcdTAwMjZteV9hZGRyLCBteV9hZGRyX2xlbik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy01NDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jPTg0PXN0YXRpYyBpbnQgYWxwaGFfY29yZV9hZ3BfaW5zZXJ0X21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCxcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtOTgtXFxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYzo5OTpcXHRzdGF0dXMgPSBhZ3AtXFx1MDAzZW9wcy1cXHUwMDNlYmluZChhZ3AsIHBnX3N0YXJ0LCBtZW0pO1xcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtMTAwLVxcdG1iKCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz0xMDY9c3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJ2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtMTUzLVxcdGlmIChncHVfb3BzKVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jOjE1NDpcXHRcXHRyZXQgPSBncHVfb3BzLVxcdTAwM2ViaW5kKGRldiwgZGV2LCBOVUxMKTtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYy0xNTUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jPTEzNj1udmttX29iamVjdF9iaW5kKHN0cnVjdCBudmttX29iamVjdCAqb2JqZWN0LCBzdHJ1Y3QgbnZrbV9ncHVvYmogKmdwdW9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYy0xMzktXFx0aWYgKG9iamVjdC1cXHUwMDNlZnVuYy1cXHUwMDNlYmluZClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2NvcmUvb2JqZWN0LmM6MTQwOlxcdFxcdHJldHVybiBvYmplY3QtXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQob2JqZWN0LCBncHVvYmosIGFsaWduLCBwZ3B1b2JqKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2NvcmUvb2JqZWN0LmMtMTQxLVxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmM9Nzk9bnZrbV9kaXNwX2NoYW5fY2hpbGRfbmV3KGNvbnN0IHN0cnVjdCBudmttX29jbGFzcyAqb2NsYXNzLCB2b2lkICphcmd2LCB1MzIgYXJnYyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTk4LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jOjk5OlxcdG9iamVjdC1cXHUwMDNlaGFzaCA9IGNoYW4tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQoY2hhbiwgb2JqZWN0LVxcdTAwM2VvcHJveHkub2JqZWN0LCBvY2xhc3MtXFx1MDAzZWhhbmRsZSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmMtMTAwLVxcdGlmIChvYmplY3QtXFx1MDAzZWhhc2ggXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYz00Nz1udmttX2RtYW9ial9iaW5kKHN0cnVjdCBudmttX29iamVjdCAqYmFzZSwgc3RydWN0IG52a21fZ3B1b2JqICpncHVvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jLTUwLVxcdHN0cnVjdCBudmttX2RtYW9iaiAqZG1hb2JqID0gbnZrbV9kbWFvYmooYmFzZSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYzo1MTpcXHRyZXR1cm4gZG1hb2JqLVxcdTAwM2VmdW5jLVxcdTAwM2ViaW5kKGRtYW9iaiwgZ3B1b2JqLCBhbGlnbiwgcGdwdW9iaik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYy01Mi19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYz00MT1udmttX2NoYW5fY2N0eF9iaW5kKHN0cnVjdCBudmttX2NoYW4gKmNoYW4sIHN0cnVjdCBudmttX2VuZ24gKmVuZ24sIHN0cnVjdCBudmttX2NjdHggKmNjdHgpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYy02MS1cXHQvKiBVcGRhdGUgY29udGV4dCBwb2ludGVyLiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jOjYyOlxcdGVuZ24tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQoZW5nbiwgY2N0eCwgY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby9jaGFuLmMtNjMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmM9Mjg2PW52a21fdWNoYW5faW5pdChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vdWNoYW4uYy0yOTMtXFx0aWYgKGNoYW4tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby91Y2hhbi5jOjI5NDpcXHRcXHRjaGFuLVxcdTAwM2VmdW5jLVxcdTAwM2ViaW5kKGNoYW4pO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vdWNoYW4uYy0yOTUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jPTM3Mj1zdGF0aWMgaW50IHZtd19yZXNvdXJjZV9kb192YWxpZGF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM4OC1cXHQgICAgICghZnVuYy1cXHUwMDNlbmVlZHNfZ3Vlc3RfbWVtb3J5IFxcdTAwMjZcXHUwMDI2IHZhbF9idWYtXFx1MDAzZWJvKSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jOjM4OTpcXHRcXHRyZXQgPSBmdW5jLVxcdTAwM2ViaW5kKHJlcywgdmFsX2J1Zik7XFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYy0zOTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCAhPSAwKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jPTk4OT1zdGF0aWMgaW50IGtlcm5lbF9iaW5kY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzLCBzdHJ1Y3Qgc29ja2FkZHIgKmxhZGRyLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtOTk1LVxcdHNvY2tfc2V0X3JldXNlYWRkcihzLVxcdTAwM2Vzayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM6OTk2OlxcdHJldCA9IHMtXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilsYWRkciwgbGFkZHJsZW4pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jLTk5Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM9MTI5ND1pbnQgZXJkbWFfY3JlYXRlX2xpc3RlbihzdHJ1Y3QgaXdfY21faWQgKmlkLCBpbnQgYmFja2xvZylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jLTEzMTUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM6MTMxNjpcXHRyZXQgPSBzLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNy1cXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jPTEzNzY9c3RhdGljIGludCBrZXJuZWxfYmluZGNvbm5lY3Qoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHNvY2thZGRyICpsYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5My1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jOjEzOTQ6XFx0cnYgPSBzLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsIHNpemUpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5NS1cXHRpZiAocnYgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYz0xODA5PWludCBzaXdfY3JlYXRlX2xpc3RlbihzdHJ1Y3QgaXdfY21faWQgKmlkLCBpbnQgYmFja2xvZylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0My1cXHRcXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODQ0OlxcdFxcdHJ2ID0gcy1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0NS1cXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg2Ny1cXHRcXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODY4OlxcdFxcdHJ2ID0gcy1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg2OS1cXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmM9MTQ5OT1tbHhzd19zcF9zcGFuX3RyaWdnZXJfZW50cnlfY3JlYXRlKHN0cnVjdCBtbHhzd19zcF9zcGFuICpzcGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jLTE1MjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jOjE1MjE6XFx0ZXJyID0gdHJpZ2dlcl9lbnRyeS1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHRyaWdnZXJfZW50cnkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3NwYW4uYy0xNTIyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTcyNj11c2JuZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDctXFx0XFx0bmV0LVxcdTAwM2VtYXhfbXR1ID0gRVRIX01BWF9NVFU7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE4MDg6XFx0XFx0c3RhdHVzID0gaW5mby1cXHUwMDNlYmluZChkZXYsIHVkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA5LVxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmM9NTk9aW50IHBjaV9lcGZfYmluZChzdHJ1Y3QgcGNpX2VwZiAqZXBmKVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTIyLVxcdFxcdGVwZl92Zi1cXHUwMDNlc2VjX2VwYyA9IGVwZi1cXHUwMDNlc2VjX2VwYztcXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjM6XFx0XFx0cmV0ID0gZXBmX3ZmLVxcdTAwM2Vkcml2ZXItXFx1MDAzZW9wcy1cXHUwMDNlYmluZChlcGZfdmYpO1xcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jLTEyNC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTI4LVxcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jOjEyOTpcXHRyZXQgPSBlcGYtXFx1MDAzZWRyaXZlci1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGVwZik7XFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTMwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz0zNDI9aW50IHBjaV90c21fYmluZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGt2bSAqa3ZtLCB1MzIgdGRpX2lkKVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtMzY3LVxcbmRyaXZlcnMvcGNpL3RzbS5jOjM2ODpcXHR0ZGkgPSB0b19wY2lfdHNtX29wcyhwZGV2LVxcdTAwM2V0c20pLVxcdTAwM2ViaW5kKHBkZXYsIGt2bSwgdGRpX2lkKTtcXG5kcml2ZXJzL3BjaS90c20uYy0zNjktXFx0aWYgKElTX0VSUih0ZGkpKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTEwMDg9aW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU3LSBiaW5kOlxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMDU4OlxcdGlmIChkcml2ZXItXFx1MDAzZWJpbmQgXFx1MDAyNlxcdTAwMjYgKGVycm9yID0gZHJpdmVyLVxcdTAwM2ViaW5kKGluc3RhbmNlLCBpbnRmLCBpZCkpIFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU5LVxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IGJpbmQgZmFpbGVkOiAlZCFcXFxcblxcXCIsIF9fZnVuY19fLCBlcnJvcik7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MzEwPWludCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzMi1cXHRpZiAoZnVuY3Rpb24tXFx1MDAzZWJpbmQpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MzMzOlxcdFxcdHZhbHVlID0gZnVuY3Rpb24tXFx1MDAzZWJpbmQoY29uZmlnLCBmdW5jdGlvbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzNC1cXHRcXHRpZiAodmFsdWUgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MjUzMT1zdGF0aWMgaW50IGNvbXBvc2l0ZV9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMtMjU1NS1cXHQgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MjU1NjpcXHRzdGF0dXMgPSBjb21wb3NpdGUtXFx1MDAzZWJpbmQoY2Rldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTI1NTctXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYz0xNjQxPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmRfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM6MTY2MjpcXHRyZXQgPSBkcml2ZXItXFx1MDAzZWJpbmQodWRjLVxcdTAwM2VnYWRnZXQsIGRyaXZlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTY2My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZGxtL2xvd2NvbW1zLmM9MTU3MD1zdGF0aWMgaW50IGRsbV9jb25uZWN0KHN0cnVjdCBjb25uZWN0aW9uICpjb24pXFxuLS1cXG5mcy9kbG0vbG93Y29tbXMuYy0xNTkzLVxcbmZzL2RsbS9sb3djb21tcy5jOjE1OTQ6XFx0cmVzdWx0ID0gZGxtX3Byb3RvX29wcy1cXHUwMDNlYmluZChzb2NrKTtcXG5mcy9kbG0vbG93Y29tbXMuYy0xNTk1LVxcdGlmIChyZXN1bHQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTE1Nzk9c3RhdGljIHZvaWQgbzJuZXRfc3RhcnRfY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE2NDctXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNjQ4OlxcdHJldCA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2bXlhZGRyLFxcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTY0OS1cXHRcXHRcXHQgICAgICBzaXplb2YobXlhZGRyKSk7XFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTIwNDg9c3RhdGljIGludCBvMm5ldF9vcGVuX2xpc3RlbmluZ19zb2NrKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydClcXG4tLVxcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMjA3NC1cXHRzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoyMDc1OlxcdHJldCA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2c2luLCBzaXplb2Yoc2luKSk7XFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0yMDc2LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE4Mzg9aW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBfcm9vdCAqZHN0X3Jvb3QsIHUzMiBzc19tYXNrKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTQ4LVxcdFxcdGlmIChzcy1cXHUwMDNlYmluZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE5NDk6XFx0XFx0XFx0c3MtXFx1MDAzZWJpbmQoY3NzKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5NTAtXFx0fSB3aGlsZV9lYWNoX3N1YnN5c19tYXNrKCk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTY1MTk9aW50IF9faW5pdCBjZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02NTk2LVxcdFxcdGlmIChzcy1cXHUwMDNlYmluZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjY1OTc6XFx0XFx0XFx0c3MtXFx1MDAzZWJpbmQoaW5pdF9jc3Nfc2V0LnN1YnN5c1tzc2lkXSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02NTk4LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM9OTk9c3RhdGljIGludCBpZWVlODAyMTU0X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0xMDQtXFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2ViaW5kKVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjEwNTpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWJpbmQoc2ssIHVhZGRyLCBhZGRyX2xlbik7XFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMTA2LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTQ0OT1pbnQgaW5ldF9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtNDU1LVxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmluZCkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzo0NTY6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9pcHY0L2FmX2luZXQuYy00NTctXFx0fVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz00MjY9aW50IGluZXQ2X2JpbmRfc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM1LVxcdGlmIChwcm90LVxcdTAwM2ViaW5kKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDM2OlxcdFxcdHJldHVybiBwcm90LVxcdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM3LVxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTgxMT1zdGF0aWMgaW50IGdlbmxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE4NDEtXFx0XFx0aWYgKGZhbWlseS1cXHUwMDNlYmluZClcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxODQyOlxcdFxcdFxcdGZhbWlseS1cXHUwMDNlYmluZChpKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODQzLVxcbi0tXFxubmV0L3Bob25ldC9zb2NrZXQuYz0xNTY9c3RhdGljIGludCBwbl9zb2NrZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGxlbilcXG4tLVxcbm5ldC9waG9uZXQvc29ja2V0LmMtMTY1LVxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmluZClcXG5uZXQvcGhvbmV0L3NvY2tldC5jOjE2NjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWJpbmQoc2ssIGFkZHIsIGxlbik7XFxubmV0L3Bob25ldC9zb2NrZXQuYy0xNjctXFxuLS1cXG5uZXQvc29ja2V0LmM9MTkzNz1pbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuLS1cXG5uZXQvc29ja2V0LmMtMTk0NC1cXHRpZiAoIWVycilcXG5uZXQvc29ja2V0LmM6MTk0NTpcXHRcXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlYmluZChzb2NrLFxcbm5ldC9zb2NrZXQuYy0xOTQ2LVxcdFxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi0tXFxubmV0L3NvY2tldC5jPTM2Njk9aW50IGtlcm5lbF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcmxlbilcXG4tLVxcbm5ldC9zb2NrZXQuYy0zNjc0LVxcbm5ldC9zb2NrZXQuYzozNjc1OlxcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2YWRkcmVzcyxcXG5uZXQvc29ja2V0LmMtMzY3Ni1cXHRcXHRcXHRcXHRcXHQgIGFkZHJsZW4pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19hZGRyLmM9MjM4MD1zdGF0aWMgaW50IHRlc3RfeG1zZyhzdHJ1Y3Qgc29ja19hZGRyX3Rlc3QgKnRlc3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfYWRkci5jOjI0MDc6XFx0XFx0ZXJyID0gdGVzdC1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGNsaWVudCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzcmNfYWRkcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA4LVxcdFxcdFxcdFxcdCAgICAgIHNyY19hZGRyX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA4Ljk0NzI1MDE3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ3Mjk4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgU3Vic3lzdGVtIEJpbmQgYW5kIFN0YXQgRmx1c2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgcmViaW5kX3N1YnN5c3RlbXNgLCB3aGljaCBjYWxscyBgc3MtXHUwMDNlYmluZChjc3MpYCwgYW5kIGFsc28gY2FsbGVkIGR1cmluZyBgY2dyb3VwX2luaXQoKWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGhvb2tzIGludG8gdGhpcy5cblxuSSdtIGZvY3VzZWQgb24gdGhlc2Ugc3ltYm9sczogYG1lbV9jZ3JvdXBfYmluZGAsIHdoaWNoIGlzIHRoZSBiaW5kIGNhbGxiYWNrOyBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB0aGUgc3RhdCBmbHVzaCBjYWxsYmFjazsgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBhIHN0YXQgYWdncmVnYXRpb24gaGVscGVyOyBgZmx1c2hfbm1pX3N0YXRzYCwgYW4gbm1pIHN0YXQgZmx1c2hpbmcgaGVscGVyOyBhbmQgZmluYWxseSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggYXJlIG5ldyBpbmxpbmUgaGVscGVycy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxlciBmdW5jdGlvbnMgYW5kIGlmIHRoZXNlIHN5bWJvbHMgYWxsIGxvb2sgZ29vZC4gU28sIGxldCdzIHRyYWNlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGhvdyBzdGF0cyBpbnRlcmFjdC4gSSBzZWUgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBpcyBwYXJ0IG9mIHRoZSByc3RhdCBmbHVzaCBpbmZyYXN0cnVjdHVyZSDigJMgYmVpbmcgY2FsbGVkIGJ5IGBjZ3JvdXBfcnN0YXRfZmx1c2hfbG9ja2VkYCBhbmQgYGNncm91cF9yc3RhdF9mbHVzaGAuIEkgYWxzbyBzZWUgYG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNgIGFuZCBgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzYC4gQWRkaXRpb25hbGx5LCBJIHNlZSBgbWVtb3J5X3N0YXRfc2hvd2AgYW5kIGBtZW1jZ19zdGF0X3Nob3dgLCB3aGljaCBhcHBlYXIgdG8gcmVhZCBmcm9tIGBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZm9yIGxlZ2FjeSBtZW1vcnkuc3RhdCByZXBvcnRpbmcuXG5cblRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBob3cgdGhlIGxlZ2FjeSBgbWVtb3J5LnN0YXRgIHJlYWRzIHN0YXRzLCB3aGljaCBzaG91bGQgb2ZmZXIgdmFsdWFibGUgaW5zaWdodCBpbnRvIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGNvbmZsaWN0cyB3aXRoIHRoZSBuZXcgc3RhdCBjb2xsZWN0aW9uIGFuZCBmbHVzaGluZyBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxMy43OTQ1NTA0MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjcxMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjM2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbm1tL21lbWNvbnRyb2wuYy0yMzctXFxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1MS1cXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cXG5tbS9tZW1jb250cm9sLmM6MjUyOlxcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLmM6MjUzOlxcdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTI1NC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTctI2Vsc2VcXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTI1OS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3LVxcbm1tL21lbWNvbnRyb2wuYzozMDg6XFx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTMwOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDgxPXN0cnVjdCBscnV2ZWNfc3RhdHMge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4NS1cXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgc3RhdGUgKi9cXG5tbS9tZW1jb250cm9sLmM6NDg2OlxcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcXG5tbS9tZW1jb250cm9sLmMtNDg3LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5LVxcbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vbWVtY29udHJvbC5jLTU1MS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjQtXFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG5tbS9tZW1jb250cm9sLmM6NTY1OlxcdHggPSBSRUFEX09OQ0UocG4tXFx1MDAzZWxydXZlY19zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy01NjYtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzYtXFxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTU3OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODQtXFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL21lbWNvbnRyb2wuYzo1ODU6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcXG5tbS9tZW1jb250cm9sLmMtNTg2LVxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02NzM9c3RydWN0IG1lbWNnX3Ztc3RhdHMge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3OC1cXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo2Nzk6XFx0bG9uZ1xcdFxcdFxcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmMtNjgwLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtICovXFxubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy02OTgte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMy19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODU1PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzMtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxcbm1tL21lbWNvbnRyb2wuYzo4NzQ6ICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXFxubW0vbWVtY29udHJvbC5jLTg3NS0gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05Mzk9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTUzLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG5tbS9tZW1jb250cm9sLmM6OTU0OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxubW0vbWVtY29udHJvbC5jLTk1NS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTYxLVxcbm1tL21lbWNvbnRyb2wuYzo5NjI6XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjktXFxubW0vbWVtY29udHJvbC5jOjk3MDp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTcxLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxubW0vbWVtY29udHJvbC5jLTk3Mi17XFxubW0vbWVtY29udHJvbC5jOjk3MzpcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG5tbS9tZW1jb250cm9sLmMtOTc0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MzU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NDEtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzoxNzQyOnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG5tbS9tZW1jb250cm9sLmMtMTc0My17XFxubW0vbWVtY29udHJvbC5jOjE3NDQ6XFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGl0ZW0pICpcXG5tbS9tZW1jb250cm9sLmMtMTc0NS1cXHRcXHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1MDc9c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTExLVxcdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXFxubW0vbWVtY29udHJvbC5jOjQ1MTI6XFx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcXG5tbS9tZW1jb250cm9sLmMtNDUxMy1cXHQgKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NTY0PXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQ1NjUte1xcbm1tL21lbWNvbnRyb2wuYzo0NTY2OlxcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00NTY3LVxcdGludCBuaWQ7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU3My1cXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jOjQ1NzQ6XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NTc1OlxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbm1tL21lbWNvbnRyb2wuYy00NTc2LVxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5Mi1cXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NTkzOlxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1OTQtXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5Ni1cXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTc6XFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NTk4OlxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwNi1cXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NjA3OlxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDgtXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxMC1cXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ2MTE6XFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NjEyOlxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYy00NjEzLVxcdFxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG5tbS9tZW1jb250cm9sLmM6NDYzNzpcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxubW0vbWVtY29udHJvbC5jLTQ2MzgtXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjY5LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjcwOlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NzEtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1OD1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjM3LSAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XFxubW0vbWVtY29udHJvbC5jOjUyMzg6ICogaGllcmFyY2h5LCB2bXN0YXRzJ3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcXG5tbS9tZW1jb250cm9sLmMtNTIzOS0gKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2MS1cXHQgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZVxcbm1tL21lbWNvbnRyb2wuYzo1MjYyOlxcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXFxubW0vbWVtY29udHJvbC5jOjUyNjM6XFx0ICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXNcXG5tbS9tZW1jb250cm9sLmMtNTI2NC1cXHQgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX1ZNU1RBVF9TSVpFOyBpKyspXFxubW0vbWVtY29udHJvbC5jOjUyNjk6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldO1xcbm1tL21lbWNvbnRyb2wuYy01MjcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxMy44ODYyMjgxOTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNjE1MjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSdtIHplcm9pbmcgaW4gb24gdGhlc2UgY3JpdGljYWwgYEZvY3VzU3ltYm9sc2A6IGBtZW1fY2dyb3VwX2JpbmRgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGFuZCBgZmx1c2hfbm1pX3N0YXRzYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEknbSBmb2N1c2luZyBvbiBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IGFuZCBhY2NvdW50ZWQgZm9yIGluIHRoZSBmdXp6aW5nIHByb2Nlc3MuXG5cbk5vLCB3YWl0LCB0aGVyZSdzIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGFzIGFuIGludGVybmFsIGJvb2wgb3B0aW9uOyBub3QgdXNlci1zZWxlY3RhYmxlLiBJdCdzIGEgZGVwZW5kZW5jeSwgYnV0IG5vdCBzb21ldGhpbmcgdG8gZGlyZWN0bHkgY29uZmlndXJlLiBJdCBoaW5nZXMgb24gdGhlIGFyY2hpdGVjdHVyZSdzIE5NSSBzYWZldHkuIEdvb2QgdG8gbm90ZSwgYnV0IEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSBpdCBpbiBteSB0ZXN0LlxuXG5BbHJpZ2h0LCBzYW5pdHkgY2hlY2sgdGltZS4gTGV0J3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cC4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBhbmQgSSB3YW50IHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyBcIk1FTUNHXCIsIFwiTUVNQ0dfVjFcIi4gVGhvc2UgbWF0Y2ggd2l0aCB0aGUgYEZvY3VzU3ltYm9sc2AgSSBzZWxlY3RlZCBhdCB0aGUgc3RhcnQuIFRoYXQgbG9va3MgZ29vZC5cblxuRmluYWxseSwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcHBsaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2MSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguMTAyMzgzNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxOTA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfYmluZFwiLFxuICAgIFwibWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVcIixcbiAgICBcImZsdXNoX25taV9zdGF0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfYmluZFwiLFxuICAgIFwibWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVcIixcbiAgICBcImZsdXNoX25taV9zdGF0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxOC4yMjI1ODQ0NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODExOTU0NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguMjIzNDg2OTI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU4MTEwNDU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGZsdXNoaW5nIGJ5IHNraXBwaW5nIHVwZGF0ZXMgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgJ3N0YXRlX2xvY2FsJyBhbmQgJ2V2ZW50c19sb2NhbCcgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXFxuXFxuQWxsIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbWNnX3Ztc3RhdHMpIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKCkgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gVGhlIGxvY2FsIHN0YWNrIGFnZ3JlZ2F0ZV9jb250cm9sIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgbGl0ZXJhbHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGJ5dGVzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYXJlIGV4cG9zZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlYmluZCBhcmUgaGFuZGxlZCBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxNjgyOWM3NzNjMTk0OGRkYzFhOTNlMDIzNjVlOTlkMThiNzc5ZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA1YjllMGViZDQyYWUwLi4zNzJhYzE5M2U3NzdiIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC02ODcsNiArNjg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuKy8qXG4rICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeVxuKyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuKyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHlcbisgKiAobWVtX2Nncm91cF9iaW5kKCkgcG9wdWxhdGVzIHRoZW0gaWYgaXQgaXMgbGF0ZXIgbW92ZWQgb250byB0aGUgbGVnYWN5XG4rICogaGllcmFyY2h5KS5cbisgKi9cbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG4rfVxuK1xuIC8qXG4gICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZ1xuICAqXG5AQCAtNDQ4NCw3ICs0NTA3LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuK1x0LypcbitcdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXG4rXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuK1x0ICovXG4gXHRsb25nICpsb2NhbDtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi9cbiBcdGxvbmcgKnBlbmRpbmc7XG5AQCAtNDUyMyw3ICs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuIFx0XHR9XG4gXG4gXHRcdC8qIEFnZ3JlZ2F0ZSBjb3VudHMgb24gdGhpcyBsZXZlbCBhbmQgcHJvcGFnYXRlIHVwd2FyZHMgKi9cbi1cdFx0aWYgKGRlbHRhX2NwdSlcbitcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xuIFxuIFx0XHRpZiAoZGVsdGEpIHtcbkBAIC00NTM3LDYgKzQ1NjMsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4ge1xuK1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTQ0LDcgKzQ1NzEsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTtcbiBcbiBcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcbi1cdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcbitcdFx0aWYgKHN0YXRlX2xvY2FsKVxuK1x0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XG4gXHR9XG5AQCAtNDU2Niw3ICs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xuLVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XG4rXHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuK1x0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTc5LDcgKzQ2MDgsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ2MDQsNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4rXHRcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4gXHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VzdGF0ZSxcbkBAIC00NjE1LDcgKzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuIFxuIFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG4gXHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50cyxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWwsXG4rXHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG5AQCAtNTE5OSw2ICs1MjI5LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuIFx0eyB9XHQvKiB0ZXJtaW5hdGUgKi9cbiB9O1xuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbisvKlxuKyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsXG4rICoga2V5IGFscmVhZHkgaW4gaXRzIG5ldyBzdGF0ZS5cbisgKlxuKyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XG4rICogaGllcmFyY2h5LCB2bXN0YXRzJ3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcbisgKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cbisgKiBmcm9tIHRoZSB2bXN0YXRzJ3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG4rICogYWxsb3dzIHRoZSBtb3ZlIHdoZW4gdGhlIHJvb3QgaXMgdGhlIG9ubHkgbWVtY2cuXG4rICovXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2Nzcylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3RcbitcdCAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZVxuK1x0ICogcGVuZGluZyBhcnJheXMgdGhhdCBoYXZlbid0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzXG4rXHQgKiBhcnJheXNcbitcdCAqL1xuK1x0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbitcbitcdC8qXG4rXHQgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVuc1xuK1x0ICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGVcbitcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXG4rXHQgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpc1xuK1x0ICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmVcbitcdCAqIGEgc2luZ2xlIENQVSdzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZVxuK1x0ICogY291bnRlcnMgYXJlIGFwcHJveGltYXRlIHZhbHVlcy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcbitcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1DR19FVkVOVFM7IGkrKylcbitcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c1tpXTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuK1xuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbiBcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxuQEAgLTUyMTIsNiArNTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5leGl0ID0gbWVtX2Nncm91cF9leGl0LFxuIFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdC5iaW5kID0gbWVtX2Nncm91cF9iaW5kLFxuIFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4gI2VuZGlmXG4gXHQuZWFybHlfaW5pdCA9IDAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxOC4yMjM0ODg0MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NzQxMjU4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEknbSBnb2luZyB0byBmb2xsb3cgbXkgbWVudGFsIGNoZWNrbGlzdDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guIEtBU0FOIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgc28gYW55dGhpbmcgaXQgY292ZXJzLCBJIGNhbiBydWxlIG91dC4gTXkgY29uY2VybiBpcyBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IHNsaXAgdGhyb3VnaCB0aGUgY3JhY2tzLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCwgYW5kIEkgc2VlIGl0IGFkZGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YC4gVGhlc2UgZnVuY3Rpb25zIGNvbmRpdGlvbmFsbHkgcmV0dXJuIGVpdGhlciBgTlVMTGAgb3IgcG9pbnRlcnMgdG8gdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGFycmF5cyB3aXRoaW4gdGhlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIENvbmRpdGlvbmFsIHJldHVybnMgYXJlIGEgcG90ZW50aWFsIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIGBOVUxMYD8gSXMgdGhlIGNhbGxpbmcgY29kZSBoYW5kbGluZyBpdCBjb3JyZWN0bHk/IFRoYXQncyBub3QgYSBLTVNBTiBpc3N1ZSBpZiB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIGl0LCBidXQgY291bGQgbGVhZCB0byBhIGNyYXNoLlxuXG5JJ20gc2VlaW5nIGEgbG90IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGludm9sdmluZyBgZGVsdGFfY3B1YCBhbmQgYGFjLVx1MDAzZWxvY2FsYCB1c2luZyB0aG9zZSBuZXcgZnVuY3Rpb25zLiBJIGFsc28gc2VlIHRoYXQgYHN0YXRlX2xvY2FsYCBpcyBhY3F1aXJlZCB1c2luZyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGluIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgaXQgY2hlY2tzIGlmIGl0J3Mgbm9uLU5VTEwgYmVmb3JlIGFkZGluZyB0byBpdC4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGF0IGNvbmRpdGlvbiBpcyBjb25zaXN0ZW50bHkgaGFuZGxlZC5cblxuVGhlcmUncyBzb21lIHJlYmluZGluZyBvZiBsZWdhY3kgaGllcmFyY2hpZXMgd2l0aCBgbWVtX2Nncm91cF9iaW5kYCB3aGljaCBwb3B1bGF0ZXMgYG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYC4gTm93LCAqaG93KiBpcyB0aGF0IGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZD8gVGhhdCdzIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBjb21lcyBmcm9tIGFuZCBob3cgaXQgZ2V0cyBpbml0aWFsaXplZC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29saW5nIGxpa2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IHRyYWNlIHRoYXQuIElmIHRoZXJlJ3MgYW4gaW5pdGlhbGl6YXRpb24gcHJvYmxlbSwgb3IgaWYgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJ3QgZnVsbHkgemVyb2VkLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gQXJlIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugd2l0aG91dCBzYW5pdGl6YXRpb24/XG5cbkJhc2VkIG9uIGEgY3Vyc29yeSBnbGFuY2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBhcmVhczpcblxuMS4gIEhvdyBpcyBgbWVtY2ctXHUwMDNldm1zdGF0c2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcnJheXMgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5LlxuMi4gIElmIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgcmV0dXJucyBgTlVMTGAsIGlzIHRoZSBjYWxsaW5nIGNvZGUgKmFsd2F5cyogaGFuZGxpbmcgdGhpcyBjb3JyZWN0bHkgdG8gcHJldmVudCB1c2UtYWZ0ZXItTlVMTD9cbjMuICBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhpcyBwYXRjaCB3aGljaCB3cml0ZSB0aGUgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZmllbGRzP1xuXG5JJ20gbGVhbmluZyB0b3dhcmRzICpub3QqIG5lZWRpbmcgS01TQU4gYmFzZWQgb24gdGhpcyBpbml0aWFsIHBhc3MsIGFzIEknbSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgcG90ZW50aWFsbHkgYE5VTExgIGFycmF5LiBJIHdpbGwsIGhvd2V2ZXIsIG5lZWQgdG8gZnVsbHkgaW52ZXN0aWdhdGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtZW1jZy1cdTAwM2V2bXN0YXRzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGxvb2tzIGNsZWFuLCBJJ2xsIHJlY29tbWVuZCB0aGF0IEtBU0FOIGNvdmVyYWdlIGlzIGxpa2VseSBzdWZmaWNpZW50LiBJZiB0aGVyZSdzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UqLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCAqdGhlbiogS01TQU4gaXMgd2FycmFudGVkLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjM1Ljc5NzYxNzAxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMDMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTY0OT1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19ldmVudHNfaW5kZXgoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NTMtXFxubW0vbWVtY29udHJvbC5jOjY1NDpzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbm1tL21lbWNvbnRyb2wuYy02NTUtXFx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY1OC1cXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NTk6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XFx0KnBhcmVudF9wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo2NjA6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcXHRcXHRcXHQqdm1zdGF0cztcXG5tbS9tZW1jb250cm9sLmMtNjYxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3Mi1cXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTY5Nz1zdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMy19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzA1PXN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwOS1cXG5tbS9tZW1jb250cm9sLmM6NzEwOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsO1xcbm1tL21lbWNvbnRyb2wuYy03MTEtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTczMD1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MzMtXFxubW0vbWVtY29udHJvbC5jOjczNDpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbm1tL21lbWNvbnRyb2wuYy03MzUte1xcbm1tL21lbWNvbnRyb2wuYzo3MzY6XFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMpIFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmMtNzM3LVxcdFxcdE1FTUNHX0NIQVJHRV9CQVRDSCAqIG51bV9vbmxpbmVfY3B1cygpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTc0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc0Mi17XFxubW0vbWVtY29udHJvbC5jOjc0MzpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnN0YXRjX3BjcHU7XFxubW0vbWVtY29udHJvbC5jOjc0NDpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy03NDUtXFx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTc1MC1cXHRfX2Nzc19yc3RhdF91cGRhdGVkKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzLCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYzo3NTE6XFx0c3RhdGNfcGNwdSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdTtcXG5tbS9tZW1jb250cm9sLmMtNzUyLVxcdGZvciAoOyBzdGF0Y19wY3B1OyBzdGF0Y19wY3B1ID0gc3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzU4LVxcdFxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzo3NTk6XFx0XFx0aWYgKG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goc3RhdGMtXFx1MDAzZXZtc3RhdHMpKVxcbm1tL21lbWNvbnRyb2wuYy03NjAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzY3LVxcdFxcdHN0YXRzX3VwZGF0ZXMgPSB0aGlzX2NwdV94Y2hnKHN0YXRjX3BjcHUtXFx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xcbm1tL21lbWNvbnRyb2wuYzo3Njg6XFx0XFx0YXRvbWljX2xvbmdfYWRkKHN0YXRzX3VwZGF0ZXMsIFxcdTAwMjZzdGF0Yy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcyk7XFxubW0vbWVtY29udHJvbC5jLTc2OS1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzcyPXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpXFxubW0vbWVtY29udHJvbC5jLTc3My17XFxubW0vbWVtY29udHJvbC5jOjc3NDpcXHRib29sIG5lZWRzX2ZsdXNoID0gbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChtZW1jZy1cXHUwMDNldm1zdGF0cyk7XFxubW0vbWVtY29udHJvbC5jLTc3NS1cXG5tbS9tZW1jb250cm9sLmM6Nzc2OlxcdHRyYWNlX21lbWNnX2ZsdXNoX3N0YXRzKG1lbWNnLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcyksXFxubW0vbWVtY29udHJvbC5jLTc3Ny1cXHRcXHRmb3JjZSwgbmVlZHNfZmx1c2gpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTgxNT1zdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODE3LVxcdC8qXFxubW0vbWVtY29udHJvbC5jOjgxODpcXHQgKiBEZWxpYmVyYXRlbHkgaWdub3JlIG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goKSBoZXJlIHNvIHRoYXQgZmx1c2hpbmdcXG5tbS9tZW1jb250cm9sLmMtODE5LVxcdCAqIGluIGxhdGVuY3ktc2Vuc2l0aXZlIHBhdGhzIGlzIGFzIGNoZWFwIGFzIHBvc3NpYmxlLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTgyNT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTgzMi1cXG5tbS9tZW1jb250cm9sLmM6ODMzOlxcdHggPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtODM0LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTEzPXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjMtXFxubW0vbWVtY29udHJvbC5jOjkyNDpcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTI1LVxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTU0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTYxLVxcbm1tL21lbWNvbnRyb2wuYzo5NjI6XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05ODA9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05OTItXFx0LyogVXBkYXRlIG1lbWNnICovXFxubW0vbWVtY29udHJvbC5jOjk5MzpcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTk0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwNjY9dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cXHQgKiB3aGVuIHdlIGZyZWUgdGhlIHNsYWIgb2JqZWN0LCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcGVyLW1lbWNnXFxubW0vbWVtY29udHJvbC5jOjEwNzk6XFx0ICogdm1zdGF0cyB0byBrZWVwIGl0IGNvcnJlY3QgZm9yIHRoZSByb290IG1lbWNnLlxcbm1tL21lbWNvbnRyb2wuYy0xMDgwLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwOTY9dm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMDktXFxubW0vbWVtY29udHJvbC5jOjExMTA6XFx0dGhpc19jcHVfYWRkKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdS1cXHUwMDNlZXZlbnRzW2ldLCBjb3VudCk7XFxubW0vbWVtY29udHJvbC5jLTExMTEtXFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgY291bnQsIGNwdSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTExNz11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTIzLVxcbm1tL21lbWNvbnRyb2wuYzoxMTI0OlxcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c1tpXSk7XFxubW0vbWVtY29udHJvbC5jLTExMjUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTExMzY9dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Mi1cXG5tbS9tZW1jb250cm9sLmM6MTE0MzpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTg2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTk4LVxcdG1lbWNnMV9mcmVlX2V2ZW50cyhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQxOTk6XFx0a2ZyZWUobWVtY2ctXFx1MDAzZXZtc3RhdHMpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjAwOlxcdGZyZWVfcGVyY3B1KG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSk7XFxubW0vbWVtY29udHJvbC5jLTQyMDEtXFx0a2ZyZWUobWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQyMTIte1xcbm1tL21lbWNvbnRyb2wuYzo0MjEzOlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jOjQyMTQ6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG5tbS9tZW1jb250cm9sLmMtNDIxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyOS1cXG5tbS9tZW1jb250cm9sLmM6NDIzMDpcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjMxOlxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0Z290byBmYWlsO1xcbm1tL21lbWNvbnRyb2wuYy00MjMzLVxcbm1tL21lbWNvbnRyb2wuYzo0MjM0OlxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbm1tL21lbWNvbnRyb2wuYy00MjM1LVxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjM2OlxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1KVxcbm1tL21lbWNvbnRyb2wuYy00MjM3LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjQxLVxcbm1tL21lbWNvbnRyb2wuYzo0MjQyOlxcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XFxubW0vbWVtY29udHJvbC5jLTQyNDMtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbm1tL21lbWNvbnRyb2wuYzo0MjQ0OlxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYy00MjQ1LVxcdFxcdHN0YXRjLVxcdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo0MjQ2OlxcdFxcdHN0YXRjLVxcdTAwM2V2bXN0YXRzID0gbWVtY2ctXFx1MDAzZXZtc3RhdHM7XFxubW0vbWVtY29udHJvbC5jLTQyNDctXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NjQ9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTcyLVxcbm1tL21lbWNvbnRyb2wuYzo0NTczOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmMtNDU3NC1cXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU3Ni1cXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NTc3OlxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmMtNDU3OC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NTk2OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5OS1cXHRcXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NjAwOlxcdFxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYwMS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwOS1cXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NjEwOlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYxMS1cXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxMy1cXHRcXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NjE0OlxcdFxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYxNS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MjYtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmM6NDYyNzpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy00NjI4LVxcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjMyLVxcbm1tL21lbWNvbnRyb2wuYzo0NjMzOlxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYy00NjM0LVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbm1tL21lbWNvbnRyb2wuYzo0NjM2OlxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGUsXFxubW0vbWVtY29udHJvbC5jLTQ2MzctXFx0XFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxcbm1tL21lbWNvbnRyb2wuYzo0NjM4OlxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzk6XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG5tbS9tZW1jb250cm9sLmMtNDY0MC1cXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlc3RhdGUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY0Ni1cXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG5tbS9tZW1jb250cm9sLmM6NDY0NzpcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG5tbS9tZW1jb250cm9sLmMtNDY0OC1cXHRcXHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxcbm1tL21lbWNvbnRyb2wuYzo0NjQ5OlxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19wZW5kaW5nLFxcbm1tL21lbWNvbnRyb2wuYzo0NjUwOlxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbm1tL21lbWNvbnRyb2wuYy00NjUxLVxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VldmVudHMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY4MS1cXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cXG5tbS9tZW1jb250cm9sLmM6NDY4MjpcXHRpZiAoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMpKVxcbm1tL21lbWNvbnRyb2wuYzo0NjgzOlxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xcbm1tL21lbWNvbnRyb2wuYy00Njg0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTU4PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzctICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcXG5tbS9tZW1jb250cm9sLmM6NTIzODogKiBoaWVyYXJjaHksIHZtc3RhdHMncyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxcbm1tL21lbWNvbnRyb2wuYy01MjM5LSAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxcbm1tL21lbWNvbnRyb2wuYzo1MjQwOiAqIGZyb20gdGhlIHZtc3RhdHMncyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHlcXG5tbS9tZW1jb250cm9sLmMtNTI0MS0gKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcXG5tbS9tZW1jb250cm9sLmM6NTI2OTpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0gPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaV07XFxubW0vbWVtY29udHJvbC5jLTUyNzAtXFxubW0vbWVtY29udHJvbC5jLTUyNzEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wuYzo1MjcyOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzW2ldO1xcbm1tL21lbWNvbnRyb2wuYy01MjczLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzUuODc2OTI1MjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTc1Nzg1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEFjY291bnRpbmcgT3B0aW1pemF0aW9uIGluIGNncm91cCB2MioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTidzIHByaW1hcnkgY29uY2Vybi5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnLVx1MDAzZXZtc3RhdHNgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBvbiBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgYHN0YXRlYCwgYHN0YXRlX2xvY2FsYCwgYGV2ZW50c2AsIGBldmVudHNfbG9jYWxgLCBgc3RhdGVfcGVuZGluZ2AsIGBldmVudHNfcGVuZGluZ2AsIGFuZCBgc3RhdHNfdXBkYXRlc2AuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuIFdlJ3JlIHN0YXJ0aW5nIGNsZWFuLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIG9wdGltaXplcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGl0IHNraXBzIHVwZGF0aW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGNvdW50ZXJzIHdoZW4gdGhlIHN5c3RlbSBpcyB1c2luZyB0aGUgZGVmYXVsdCwgbm9uLWhpZXJhcmNoaWNhbCBjZ3JvdXAgdjIgaGllcmFyY2h5LiBUaGVzZSBsb2NhbCBjb3VudGVycyBhcmUgb25seSB1c2VkIGluIGNncm91cCB2MSAobGVnYWN5KS4gSWYgYSBjb250cm9sbGVyIGlzICpyZWJvdW5kKiB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSwgYG1lbV9jZ3JvdXBfYmluZGAgY29waWVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbnRvIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgLlxuXG5UaGUgXCJyaXNrXCIgcXVlc3Rpb24sIHRoZW4sIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJJ3ZlIGV4YW1pbmVkIHRoaXMgY2FyZWZ1bGx5OlxuXG4qICAgVGhlIGFsbG9jYXRpb24gb2YgYG1lbWNnLVx1MDAzZXZtc3RhdHNgIHZpYSBga3phbGxvY19vYmpgIHJ1bGVzIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGF0IHN0cnVjdHVyZS5cbiogICBgbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byB3YXRjaCBmb3IgYnV0IEkgZG9uJ3Qgc2VlIGFueSBpc3N1ZSBoZXJlLlxuKiAgIEluIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCgpYCwgdGhlIGBhY2Agc3RydWN0IChvZiB0eXBlIGBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2xgKSBpcyBpbml0aWFsaXplZCBhcyBhIHN0cnVjdCBsaXRlcmFsLiBFdmVyeSBtZW1iZXIgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGFnZ3JlZ2F0ZWAsIGBsb2NhbGAsIGBwZW5kaW5nYCwgYHBwZW5kaW5nYCwgYW5kIGBjc3RhdGAuIFRoZXJlJ3Mgbm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZS5cbiogICBJIHNlZSBubyBgY29weV90b191c2VyYCBjYWxscyBpbnZvbHZpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIHN0cnVjdHMuXG4qICAgVGhlcmUgYXJlIG5vIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIFRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblNvLCBpcyB0aGVyZSAqYW55KiByaXNrPyBUaGUgb25seSBwb3RlbnRpYWwgaXNzdWUgSSBzZWUgaXMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGFjLVx1MDAzZWxvY2FsYCBpcyBOVUxMICh3aGljaCBpdCBjYW4gYmUgaW4gdjIpLiBIb3dldmVyLCB0aGF0IHdvdWxkIGJlIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNyYXNoLCB3aGljaCB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcuIEknbSBhbHNvIGxvb2tpbmcgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2UgYXJlIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJJ3ZlIGNoZWNrZWQgdGhlIHN0YW5kYXJkIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBObyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBsYXRlci4gRXZlcnl0aGluZyBpcyBremFsbG9jJ2QuXG40LiAgTm8gcG90ZW50aWFsIGJvdW5kcyBjaGVjayBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSGVyZSdzIHRoZSByZWFzb25pbmcgSSdkIHVzZSB0byBqdXN0aWZ5IHRoaXM6XG5cbiogICBUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbW9yeSBhY2NvdW50aW5nIGJ5IHNraXBwaW5nIHRoZSB1cGRhdGluZyBvZiBub24taGllcmFyY2hpY2FsIGxvY2FsIHZtc3RhdHMgb24gdGhlIGRlZmF1bHQgY2dyb3VwIGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYWRkaW5nIGEgYmluZCBjYWxsYmFjayB0byBmaWxsIHRoZXNlIGxvY2FsIHN0YXRzIGlmIG1vdmluZyB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeS5cbiogICBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4gICAgKiAgIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC5cbiAgICAqICAgU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhY2AgYXJlIGluaXRpYWxpemVkIHVzaW5nIHN0cnVjdCBsaXRlcmFscy5cbiAgICAqICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHJlYWRzLlxuICAgICogICBBbnkgYnVncyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBoaWVyYXJjaHkgcmVib3VuZCBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycywgS0FTQU4sIG9yIExPQ0tERVAuXG4qICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkkgYW0gY29tZm9ydGFibGUgd2l0aCB0aGlzIGFzc2Vzc21lbnQuIExldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5NywiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDQuMDM0NTA4MDQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 20:00:43 +0000 UTC FinishedAt: 2026-09-03 20:26:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_bind", "mem_cgroup_css_rstat_flush", "mem_cgroup_stat_aggregate", "flush_nmi_stats" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MTY4MjljNzczYzE5NDhkZGMxYTkzZTAyMzY1ZTk5ZDE4Yjc3OWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDoyNTo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY4Nyw2ICYjNDM7Njg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4mIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuJiM0MzsgKiBUaGV5IGFyZSBza2lwcGVkIGlmIHRoZSBjb250cm9sbGVyIHNpdHMgb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5XG4mIzQzOyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3lcbiYjNDM7ICogaGllcmFyY2h5KS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDg0LDcgJiM0Mzs0NTA3LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbiYjNDM7XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuJiM0MztcdCAqL1xuIFx0bG9uZyAqbG9jYWw7XG4gXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG4gXHRsb25nICpwZW5kaW5nO1xuQEAgLTQ1MjMsNyAmIzQzOzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuJiM0MztcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTtcbiBcbiBcdFx0aWYgKGRlbHRhKSB7XG5AQCAtNDUzNyw2ICYjNDM7NDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4mIzQzO1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTQ0LDcgJiM0Mzs0NTcxLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XG4gXG4gXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbiYjNDM7XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0fVxuQEAgLTQ1NjYsNyAmIzQzOzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiYjNDM7XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuJiM0MztcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTc5LDcgJiM0Mzs0NjA4LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuIFx0XHR9XG5AQCAtNDYwNCw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4mIzQzO1x0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbiBcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG5AQCAtNDYxNSw3ICYjNDM7NDY0NSw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbiYjNDM7XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG5AQCAtNTE5OSw2ICYjNDM7NTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbiBcdHsgfVx0LyogdGVybWluYXRlICovXG4gfTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiM0MzsvKlxuJiM0MzsgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2xsZXIgaGFzIG1vdmVkIGJldHdlZW4gaGllcmFyY2hpZXMsIHdpdGggdGhlIG9uX2RmbFxuJiM0MzsgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgY29udHJvbGxlciBpcyBtb3ZpbmcgZnJvbSB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgdG8gdGhlIGxlZ2FjeVxuJiM0MzsgKiBoaWVyYXJjaHksIHZtc3RhdHMmIzM5O3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcbiYjNDM7ICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuXG4mIzQzOyAqIGZyb20gdGhlIHZtc3RhdHMmIzM5O3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG4mIzQzOyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2NzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mocm9vdF9jc3MpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3RcbiYjNDM7XHQgKiBkZXN0cm95ZWQgcmlnaHQgYmVmb3JlIHRoZSByZWJpbmQgdGhhdCBtYXkgaGF2ZSBsZWZ0IGNvdW50cyBpbiB0aGVcbiYjNDM7XHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJiMzOTt0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzXG4mIzQzO1x0ICogYXJyYXlzXG4mIzQzO1x0ICovXG4mIzQzO1x0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVuc1xuJiM0MztcdCAqIG9uIHJvb3RfbWVtX2Nncm91cCB3aXRob3V0IGNncm91cF9tdXRleCBhbmQgYSBmbHVzaCBpbmNyZW1lbnRzIHN0YXRlXG4mIzQzO1x0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcbiYjNDM7XHQgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpc1xuJiM0MztcdCAqIG92ZXJ3cml0dGVuIGFuZCB0aGUgY291bnRlciBzdGF5cyBzaG9ydCwgYnV0IHRoZSBkaWZmZXJlbmNlIHdvdWxkIGJlXG4mIzQzO1x0ICogYSBzaW5nbGUgQ1BVJiMzOTtzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZVxuJiM0MztcdCAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzW2ldO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbiYjNDM7XG4gc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxuIFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5AQCAtNTIxMiw2ICYjNDM7NTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5leGl0ID0gbWVtX2Nncm91cF9leGl0LFxuIFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHQuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCxcbiBcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuICNlbmRpZlxuIFx0LmVhcmx5X2luaXQgPSAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNWI5ZTBlYmQ0MmFlMC4uMzcyYWMxOTNlNzc3YiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjg3LDYgJiM0Mzs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWF0b21pY19sb25nX3QJCXN0YXRzX3VwZGF0ZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5CiYjNDM7ICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuCiYjNDM7ICogVGhleSBhcmUgc2tpcHBlZCBpZiB0aGUgY29udHJvbGxlciBzaXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeQomIzQzOyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3kKJiM0MzsgKiBoaWVyYXJjaHkpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nCiAgKgpAQCAtNDQ4NCw3ICYjNDM7NDUwNywxMCBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHsKIAkvKiBwb2ludGVyIHRvIHRoZSBhZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KIAlsb25nICphZ2dyZWdhdGU7Ci0JLyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqLwomIzQzOwkvKgomIzQzOwkgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0bwomIzQzOwkgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKQomIzQzOwkgKi8KIAlsb25nICpsb2NhbDsKIAkvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovCiAJbG9uZyAqcGVuZGluZzsKQEAgLTQ1MjMsNyAmIzQzOzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpCiAJCX0KIAogCQkvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovCi0JCWlmIChkZWx0YV9jcHUpCiYjNDM7CQlpZiAoZGVsdGFfY3B1ICZhbXA7JmFtcDsgYWMtJmd0O2xvY2FsKQogCQkJYWMtJmd0O2xvY2FsW2ldICYjNDM7PSBkZWx0YV9jcHU7CiAKIAkJaWYgKGRlbHRhKSB7CkBAIC00NTM3LDYgJiM0Mzs0NTYzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQwogc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIHsKJiM0MzsJbG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7CiAJaW50IG5pZDsKIAogCWlmIChhdG9taWNfcmVhZCgmYW1wO21lbWNnLSZndDtrbWVtX3N0YXQpKSB7CkBAIC00NTQ0LDcgJiM0Mzs0NTcxLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJaW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7CiAKIAkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0ga21lbTsKLQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTsKJiM0MzsJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiAJCWlmIChwYXJlbnQpCiAJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtOwogCX0KQEAgLTQ1NjYsNyAmIzQzOzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDU3OSw3ICYjNDM7NDYwOCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCQlpZiAocGxzdGF0cykKIAkJCQlwbHN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7Ci0JCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwomIzQzOwkJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJaWYgKHBhcmVudCkKIAkJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQl9CkBAIC00NjA0LDcgJiM0Mzs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlLAotCQkubG9jYWwgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWwsCiYjNDM7CQkubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcsCiAJCS5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZyA6IE5VTEwsCiAJCS5jc3RhdCA9IHN0YXRjLSZndDtzdGF0ZSwKQEAgLTQ2MTUsNyAmIzQzOzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KQogCiAJYWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7CiAJCS5hZ2dyZWdhdGUgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzLAotCQkubG9jYWwgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSwKIAkJLnBlbmRpbmcgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX3BlbmRpbmcsCiAJCS5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7ZXZlbnRzLApAQCAtNTE5OSw2ICYjNDM7NTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHsKIAl7IH0JLyogdGVybWluYXRlICovCiB9OwogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sbGVyIGhhcyBtb3ZlZCBiZXR3ZWVuIGhpZXJhcmNoaWVzLCB3aXRoIHRoZSBvbl9kZmwKJiM0MzsgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3kKJiM0MzsgKiBoaWVyYXJjaHksIHZtc3RhdHMmIzM5O3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWQKJiM0MzsgKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW4KJiM0MzsgKiBmcm9tIHRoZSB2bXN0YXRzJiMzOTtzIHN0YXRlIGFuZCBldmVudHMgYXJyYXlzIHNpbmNlIHJlYmluZF9zdWJzeXN0ZW1zKCkgb25seQomIzQzOyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3QKJiM0MzsJICogZGVzdHJveWVkIHJpZ2h0IGJlZm9yZSB0aGUgcmViaW5kIHRoYXQgbWF5IGhhdmUgbGVmdCBjb3VudHMgaW4gdGhlCiYjNDM7CSAqIHBlbmRpbmcgYXJyYXlzIHRoYXQgaGF2ZW4mIzM5O3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHMKJiM0MzsJICogYXJyYXlzCiYjNDM7CSAqLwomIzQzOwlfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVucwomIzQzOwkgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZQomIzQzOwkgKiBhbmQgc3RhdGVfbG9jYWwgdG9nZXRoZXIuIElmIHRoZSBmbHVzaCBoYXBwZW5zIGluIGJldHdlZW4gd2hlbiB3ZQomIzQzOwkgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpcwomIzQzOwkgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZQomIzQzOwkgKiBhIHNpbmdsZSBDUFUmIzM5O3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlCiYjNDM7CSAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2ldID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2ldOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNQ0dfRVZFTlRTOyBpJiM0MzsmIzQzOykKJiM0MzsJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfbG9jYWxbaV0gPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzW2ldOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovCiYjNDM7CiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7CiAJLmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLAogCS5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLApAQCAtNTIxMiw2ICYjNDM7NTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHsKIAkuZXhpdCA9IG1lbV9jZ3JvdXBfZXhpdCwKIAkuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiYjNDM7CS5iaW5kID0gbWVtX2Nncm91cF9iaW5kLAogCS5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLAogI2VuZGlmCiAJLmVhcmx5X2luaXQgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IE1lbW9yeSBDZ3JvdXAgU3RhdGlzdGljcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbiBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBzdWJzeXN0ZW1z4oCUdHdvIGNyaXRpY2FsIGFyZWFzIHRoYXQgc2VlIGhlYXZ5IHVzZSBhbmQgYXJlIGtub3duIGF0dGFjayBzdXJmYWNlcy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgdGFyZ2V0aW5nIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljIGFjY291bnRpbmcsIHdoaWNoIGlzIGFsd2F5cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyBhcyBpdCBjYW4gZWFzaWx5IGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRpc3RpY3MsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBvciBldmVuIGRlbmlhbC1vZi1zZXJ2aWNlIGNvbmRpdGlvbnMuCgpJIHNlZSBpdCYjMzk7cyBhZGRlZCBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggZGVhbCB3aXRoIHNraXBwaW5nIHRyYWNraW5nIGxvY2FsIHN0YXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgbGlrZWx5IGNncm91cHMgdjIuIFRoZW4gdGhlcmUgYXJlIGEgZmV3IHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBgZmx1c2hfbm1pX3N0YXRzYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdGhhdCBhcHBlYXIgdG8gY29uZGl0aW9uYWxseSB1c2UgdGhlc2UgbmV3IGFycmF5cy4gVGhpcyBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBvcHRpbWl6YXRpb25zIGFuZCBoYW5kbGluZyBsZWdhY3kgdjEgY2dyb3VwcyBhbmQgdjIuCgpGdXJ0aGVybW9yZSwgdGhlIGFkZGl0aW9uIG9mIGBtZW1fY2dyb3VwX2JpbmRgIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzYCB3aGVuIHN3aXRjaGluZyBoaWVyYXJjaGllcyBzY3JlYW0gcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGNvcHlpbmcgb2YgYHN0YXRlYCBhbmQgYGV2ZW50c2AgYmV0d2VlbiBsb2NhbCBhbmQgbm9uLWxvY2FsIHZhcmlhYmxlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIGZ1enppbmcgd2lsbCByZXZvbHZlIGFyb3VuZCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgYG1lbV9jZ3JvdXBfYmluZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQsIHNvIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbnMgZm9yIGJ1Z3MuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb2RlYmFzZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGBNRU1DR2AsIGBNRU1DR19WMWAsIG9yIGBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbGlrZSBoYXZpbmcgbGVnYWN5IGNncm91cHMgZW5hYmxlZCwgd291bGQgdHJpZ2dlciB0aGlzIHBhdGNoIGluIHNwZWNpZmljIHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBgTUVNQ0dgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU2luY2UgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBlZGl0b3IgYW5kIGRvIGEgcXVpY2sgc2VhcmNoLiBIb3BlZnVsbHksIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24sIHBlcmhhcHMgd2l0aCBzb21lIHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIGl0LiBJdCYjMzk7cyBhIGNvbW1vbiBwcmFjdGljZSB0byBoYXZlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBzdWItZmVhdHVyZXMgb2YgdGhlIGNvZGUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg2LVxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg4LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDItXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgaW5pdC9LY29uZmlnYCwgdGhpbmtpbmcgbGlrZSBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBpbml0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwNzAgdG8gMTExMC4gVGltZSB0byBnZXQgYSBmZWVsIGZvciB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZCBoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHJlbGF0ZSB0byBzb21lIGNvcmUgc3lzdGVtIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQm9vdGxvYWRlci1yZWxhdGVkIGNvbmZpZ3M6KiogQXJlIHdlIHNlZWluZyBvcHRpb25zIHRvIHNlbGVjdCBzcGVjaWZpYyBib290bG9hZGVycywgb3IgcGVyaGFwcyBwYXJhbWV0ZXJzIGZvciBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgYm9vdCBwcm9jZXNzPyBLbm93aW5nIHRoaXMgaXMgdml0YWwgaWYgSSB3YW50IHRvIGRlYnVnIGJvb3QgaXNzdWVzIG9yIG1vZGlmeSB0aGUga2VybmVsIGJ1aWxkIGZvciBhIGRpZmZlcmVudCBib290IGVudmlyb25tZW50LgoqICAgKipFYXJseSBLZXJuZWwgU2V0dXA6KiogSSBhbnRpY2lwYXRlIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB2ZXJ5IGVhcmx5IHBhcnRzIG9mIHRoZSBrZXJuZWwuIE1heWJlIG1lbW9yeSBjb25maWd1cmF0aW9uLCBlYXJseSBkZXZpY2UgZHJpdmVycywgdGhpbmdzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIHN5c3RlbSBydW5uaW5nIGJlZm9yZSB3ZSBjYW4gZXZlbiBsb2FkIG1vZHVsZXMuIEFueSBpbml0aWFsIGhhcmR3YXJlIGRpc2NvdmVyeSBvciBjb25maWd1cmF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuCiogICAqKkRlZmF1bHQgQmVoYXZpb3I6KiogQXJlIHRoZXJlIGRlZmF1bHQgc2V0dGluZ3MgYmVpbmcgZGVmaW5lZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSB1c2VyIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgc2VsZWN0IGFueXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDtzYW5lIGRlZmF1bHRzJiMzNDsgaGVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4KKiAgICoqRGVwZW5kZW5jaWVzIGFuZCBJbnRlcmFjdGlvbnM6KiogQXJlIHRoZXJlIGNvbmRpdGlvbmFsIG9wdGlvbnM/IElzIHRoaXMgS2NvbmZpZyBzZWN0aW9uIGRlcGVuZGVudCBvbiBvdGhlciBzZXR0aW5ncyBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpZ3VyZWQ/IEkmIzM5O2xsIGJlIHdhdGNoaW5nIGhvdyB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBlbnRyaWVzIGFyZSB3ZWxsLWRvY3VtZW50ZWQuIEEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbiYjMzk7cyBwdXJwb3NlLCBwb3RlbnRpYWwgdmFsdWVzLCBhbmQgaW1wbGljYXRpb25zIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGZvciBtZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucy4KCkluIGVzc2VuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUgZm91bmRhdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCYjMzk7cyBmaXJzdCBzdGVwcyBkdXJpbmcgc3lzdGVtIHN0YXJ0dXAuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGtleSBwYXJhbWV0ZXJzIHRoYXQgZGljdGF0ZSB0aGUgdmVyeSBlYXJseSBzdGFnZSBvZiB0aGUgYm9vdCBzZXF1ZW5jZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsaXphdGlvbi4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbjExMDU6XHRcdGhlbHBcbjExMDY6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA3Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA4Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwOTpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTA6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTExOlx0XG4xMTEyOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTM6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExNDpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhleSYjMzk7cmUgY2VudHJhbCB0byB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX01FTUNHX1YxYCBkZWZhdWx0cyB0byAmIzM5O24mIzM5OyBhbmQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBzdWdnZXN0cyBpdCYjMzk7cyBhIHNwZWNpZmljIHZlcnNpb24gb3IgY29tcGF0aWJpbGl0eSBzZXR0aW5nLiBBbmQgdGhlcmUgYXJlIGBpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGUgY29kZSB0aGF0IHVzZXMgaXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IG9yIGFkZGVkIGFzIHBhcnQgb2YgdGhpcy4gRnJvbSBteSBpbml0aWFsIG92ZXJ2aWV3LCBpdCBsb29rcyBsaWtlIGBtbS9tZW1jb250cm9sLmNgIGlzIHRoZSBrZXkgZmlsZSB0byBpbnZlc3RpZ2F0ZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9uczoKCiogICBgbWVtX2Nncm91cF9iaW5kYCAtIFRoaXMgaXMgYWRkZWQgYW5kIGFwcGVhcnMgdG8gYmUgYSBjYWxsYmFjayB3aXRoaW4gYGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzIC5iaW5kYCwgd2hpY2ggc291bmRzIGltcG9ydGFudC4KKiAgIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgLSBUaGlzIG9uZSBpcyBtb2RpZmllZCwgYW5kIGlzIGFsc28gYSBjYWxsYmFjayBpbiBgbWVtb3J5X2NncnBfc3Vic3lzIC5jc3NfcnN0YXRfZmx1c2hgLiBUaGlzIGlzIHRoZSBvbmUgdG8gaW5zcGVjdCBmaXJzdC4KKiAgIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCAtIEEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFnZ3JlZ2F0ZSBmdW5jdGlvbiB3b3Jrcy4KKiAgIGBmbHVzaF9ubWlfc3RhdHNgIC0gQWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgdW5kZXIgdGhlIGNvbmRpdGlvbiBgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDYCwgaW5kaWNhdGluZyBpdCYjMzk7cyByZWxhdGVkIHRvIE5NSSBzYWZldHkuIFRoaXMgaXMgcmVsZXZhbnQgdG8gbXkgY29uY2VybnMgYWJvdXQgTk1JIGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgY29kZS4KKiAgIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXlgIC0gQm90aCBhcHBlYXIgdG8gYmUgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb25zLiBUaGVzZSBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB1bmRlcnN0YW5kIGF0IGEgZ2xhbmNlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX2JpbmRgLCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgIGFyZSwgaW5kZWVkLCB0aGUgc3ltYm9scyBJIHRoaW5rIHRoZXkgYXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNDUwMCB0byA0NjYwLCB0byBzZWUgdGhlIGV4YWN0IGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCB0aGVpciB2aXNpYmlsaXR5LCBlbnN1cmluZyB0aGV5IG1hdGNoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTIwOlx0XHRsb25nICpjc3RhdDtcbjQ1MjE6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXG40NTIyOlx0XHRsb25nICpjc3RhdF9wcmV2O1xuNDUyMzpcdFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cbjQ1MjQ6XHRcdGludCBzaXplO1xuNDUyNTpcdH07XG40NTI2Olx0XG40NTI3Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuNDUyODpcdHtcbjQ1Mjk6XHRcdGludCBpO1xuNDUzMDpcdFx0bG9uZyBkZWx0YSwgZGVsdGFfY3B1LCB2O1xuNDUzMTpcdFxuNDUzMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjQ1MzM6XHRcdFx0LypcbjQ1MzQ6XHRcdFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXG40NTM1Olx0XHRcdCAqIGJlbG93IHVzLiBXZSYjMzk7cmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xuNDUzNjpcdFx0XHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cbjQ1Mzc6XHRcdFx0ICovXG40NTM4Olx0XHRcdGRlbHRhID0gYWMtXHUwMDNlcGVuZGluZ1tpXTtcbjQ1Mzk6XHRcdFx0aWYgKGRlbHRhKVxuNDU0MDpcdFx0XHRcdGFjLVx1MDAzZXBlbmRpbmdbaV0gPSAwO1xuNDU0MTpcdFxuNDU0MjpcdFx0XHQvKiBBZGQgQ1BVIGNoYW5nZXMgb24gdGhpcyBsZXZlbCBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuNDU0MzpcdFx0XHRkZWx0YV9jcHUgPSAwO1xuNDU0NDpcdFx0XHR2ID0gUkVBRF9PTkNFKGFjLVx1MDAzZWNzdGF0W2ldKTtcbjQ1NDU6XHRcdFx0aWYgKHYgIT0gYWMtXHUwMDNlY3N0YXRfcHJldltpXSkge1xuNDU0NjpcdFx0XHRcdGRlbHRhX2NwdSA9IHYgLSBhYy1cdTAwM2Vjc3RhdF9wcmV2W2ldO1xuNDU0NzpcdFx0XHRcdGRlbHRhICYjNDM7PSBkZWx0YV9jcHU7XG40NTQ4Olx0XHRcdFx0YWMtXHUwMDNlY3N0YXRfcHJldltpXSA9IHY7XG40NTQ5Olx0XHRcdH1cbjQ1NTA6XHRcbjQ1NTE6XHRcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuNDU1MjpcdFx0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbjQ1NTM6XHRcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1O1xuNDU1NDpcdFxuNDU1NTpcdFx0XHRpZiAoZGVsdGEpIHtcbjQ1NTY6XHRcdFx0XHRhYy1cdTAwM2VhZ2dyZWdhdGVbaV0gJiM0Mzs9IGRlbHRhO1xuNDU1NzpcdFx0XHRcdGlmIChhYy1cdTAwM2VwcGVuZGluZylcbjQ1NTg6XHRcdFx0XHRcdGFjLVx1MDAzZXBwZW5kaW5nW2ldICYjNDM7PSBkZWx0YTtcbjQ1NTk6XHRcdFx0fVxuNDU2MDpcdFx0fVxuNDU2MTpcdH1cbjQ1NjI6XHRcbjQ1NjM6XHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG40NTY0Olx0c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQ1NjU6XHR7XG40NTY2Olx0XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbjQ1Njc6XHRcdGludCBuaWQ7XG40NTY4Olx0XG40NTY5Olx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuNDU3MDpcdFx0XHRpbnQga21lbSA9IGF0b21pY194Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCwgMCk7XG40NTcxOlx0XHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuNDU3MjpcdFxuNDU3MzpcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1NzQ6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuNDU3NTpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1NzY6XHRcdFx0aWYgKHBhcmVudClcbjQ1Nzc6XHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTtcbjQ1Nzg6XHRcdH1cbjQ1Nzk6XHRcbjQ1ODA6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNDU4MTpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuNDU4MjpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NTgzOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xuNDU4NDpcdFxuNDU4NTpcdFx0XHRpZiAocGFyZW50KVxuNDU4NjpcdFx0XHRcdHBsc3RhdHMgPSBwYXJlbnQtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NTg3Olx0XG40NTg4Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZwbi1cdTAwM2VzbGFiX3JlY2xhaW1hYmxlKSkge1xuNDU4OTpcdFx0XHRcdGludCBzbGFiID0gYXRvbWljX3hjaGcoXHUwMDI2cG4tXHUwMDNlc2xhYl9yZWNsYWltYWJsZSwgMCk7XG40NTkwOlx0XHRcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTtcbjQ1OTE6XHRcbjQ1OTI6XHRcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5MzpcdFx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG40NTk0Olx0XHRcdFx0aWYgKHBsc3RhdHMpXG40NTk1Olx0XHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5NjpcdFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xuNDU5NzpcdFx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbjQ1OTg6XHRcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbjQ1OTk6XHRcdFx0XHRpZiAocGFyZW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbW0vbWVtY29udHJvbC5jYDoKCioqRGVlcCBEaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2Ag4oCTIExpbmVzIDQ2MzAtNDY3MCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lcyA0NjMwIHRvIDQ2NzAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sIGNvZGUsIHNvIEkgYW50aWNpcGF0ZSBkZWFsaW5nIHdpdGggdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgbWVtb3J5IHJlc291cmNlIG1hbmFnZW1lbnQsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gY2dyb3VwcyBvciB0aGUgc2xhYiBhbGxvY2F0b3IsIHJpZ2h0PyBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgZmFpcmx5IGludHJpY2F0ZTsgbGlrZWx5LCB0aGlzIHNlY3Rpb24gcmVwcmVzZW50cyBhIGNyaXRpY2FsIGZ1bmN0aW9uIG9yIG1hY3JvIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgb3IgZW5mb3JjZW1lbnQuIEl0JiMzOTtzIHByb2JhYmx5IHRpZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIHNwZWNpZmljIGNvbnRyb2wgZ3JvdXAsIGEgY3JpdGljYWwgcGFydCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmluZyBmYWlyIHNoYXJpbmcuCgpJIGJldCBJJiMzOTtsbCBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzdGF0aXN0aWNzIG9mIG1lbW9yeSB1c2FnZSBhbmQgbGltaXQgZW5mb3JjZW1lbnQuIEkmIzM5O20gYWxzbyByZWFkeSBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSBhbGxvY2F0b3Igb3IgdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZXIsIGJlY2F1c2UgdGhlc2Ugd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgaG93IG1lbW9yeSBjb250cm9sIHRydWx5IHdvcmtzLiBJIGFtIHByb2JhYmx5IGxvb2tpbmcgYXQgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uLCBsb2NraW5nIGFuZCB2YXJpb3VzIGNyaXRpY2FsIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgdGhyZWFkLXNhZmUgYW5kIGNvb3JkaW5hdGVkLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgdHlwZSDigJMgaXMgaXQgcGFnZSBjYWNoZSwgYW5vbnltb3VzIG1lbW9yeSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgbWVtb3J5IHJlY2xhaW0gcG9saWNpZXMgb3IgdGhyb3R0bGluZyBtZWNoYW5pc21zIHdpdGhpbiB0aG9zZSBsaW5lcyB0b28uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBlbmZvcmNlIHRoZSBsaW1pdHMgZGVmaW5lZCBpbiBhIGNncm91cCwgZWl0aGVyIGdyYWNlZnVsbHkgb3IgYWdncmVzc2l2ZWx5LiBJIHdpbGwgYmUgc3VyZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHNlY3Rpb25zIHRvIGNoZWNrIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvZGUgb3IsIG1vcmUgaW1wb3J0YW50bHksIGFueSBzcG90cyB3aGVyZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjb3VsZCBiZSBsdXJraW5nLiBUaGF0IGFsd2F5cyBtYXR0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFxuNDYzMTpcdFx0Zmx1c2hfbm1pX3N0YXRzKG1lbWNnLCBwYXJlbnQpO1xuNDYzMjpcdFxuNDYzMzpcdFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcbjQ2MzQ6XHRcbjQ2MzU6XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDYzNjpcdFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbjQ2Mzc6XHRcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuNDYzODpcdFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbjQ2Mzk6XHRcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG40NjQwOlx0XHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuNDY0MTpcdFx0XHQuY3N0YXRfcHJldiA9IHN0YXRjLVx1MDAzZXN0YXRlX3ByZXYsXG40NjQyOlx0XHRcdC5zaXplID0gTUVNQ0dfVk1TVEFUX1NJWkUsXG40NjQzOlx0XHR9O1xuNDY0NDpcdFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcdTAwMjZhYyk7XG40NjQ1Olx0XG40NjQ2Olx0XHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbjQ2NDc6XHRcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuNDY0ODpcdFx0XHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxuNDY0OTpcdFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcsXG40NjUwOlx0XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nIDogTlVMTCxcbjQ2NTE6XHRcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlZXZlbnRzLFxuNDY1MjpcdFx0XHQuY3N0YXRfcHJldiA9IHN0YXRjLVx1MDAzZWV2ZW50c19wcmV2LFxuNDY1MzpcdFx0XHQuc2l6ZSA9IE5SX01FTUNHX0VWRU5UUyxcbjQ2NTQ6XHRcdH07XG40NjU1Olx0XHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFx1MDAyNmFjKTtcbjQ2NTY6XHRcbjQ2NTc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNDY1ODpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuNDY1OTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NjYwOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xuNDY2MTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSAqbHN0YXRjO1xuNDY2MjpcdFxuNDY2MzpcdFx0XHRpZiAocGFyZW50KVxuNDY2NDpcdFx0XHRcdHBsc3RhdHMgPSBwYXJlbnQtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VscnV2ZWNfc3RhdHM7XG40NjY1Olx0XG40NjY2Olx0XHRcdGxzdGF0YyA9IHBlcl9jcHVfcHRyKHBuLVx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUsIGNwdSk7XG40NjY3Olx0XG40NjY4Olx0XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDY2OTpcdFx0XHRcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXHUwMDNlc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnZvY2F0aW9uIG9mIGBtZW1fY2dyb3VwX2JpbmRgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIHN1cnJvdW5kaW5nIGBtZW1fY2dyb3VwX2JpbmRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhpcyBmdW5jdGlvbiBjYWxsPyBSaWdodCwgaXQmIzM5O3MgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbWVtb3J5X2NncnBfc3Vic3lzYCBzdHJ1Y3R1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVuIGRvZXMgdGhlIGtlcm5lbCBpbnZva2UgdGhhdCBgLmJpbmRgIG1ldGhvZD8gSSByZWNhbGwgdGhhdCBgLmJpbmRgIGlzIGNhbGxlZCB3aGVuIHN1YnN5c3RlbXMgYXJlIGJlaW5nIHJlYm91bmQgb3IgbW91bnRlZC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgcmViaW5kX3N1YnN5c3RlbXMoKWAgaW4gYGtlcm5lbC9jZ3JvdXAvY2dyb3VwLmNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdHJhY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBtZXRob2QuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBiaW5kIG1ldGhvZCBpcyB1c2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNlYmluZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtjcnlwdG8vYWZfYWxnLmM9MjA0PXN0YXRpYyBpbnQgYWxnX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTIzOS1cbmNyeXB0by9hZl9hbGcuYzoyNDA6XHRwcml2YXRlID0gdHlwZS1cdTAwM2ViaW5kKHNhLVx1MDAzZXNhbGdfbmFtZSk7XG5jcnlwdG8vYWZfYWxnLmMtMjQxLVx0aWYgKElTX0VSUihwcml2YXRlKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9nbHVlLmM9MzUyPXZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2FjcGkvZ2x1ZS5jLTM4OC1cdGlmIChhZGV2LVx1MDAzZWhhbmRsZXIgXHUwMDI2XHUwMDI2IGFkZXYtXHUwMDNlaGFuZGxlci1cdTAwM2ViaW5kKVxuZHJpdmVycy9hY3BpL2dsdWUuYzozODk6XHRcdGFkZXYtXHUwMDNlaGFuZGxlci1cdTAwM2ViaW5kKGRldik7XG5kcml2ZXJzL2FjcGkvZ2x1ZS5jLTM5MC1cbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MjI3PXN0YXRpYyBpbnQgdHJ5X3RvX2JyaW5nX3VwX2FnZ3JlZ2F0ZV9kZXZpY2Uoc3RydWN0IGFnZ3JlZ2F0ZV9kZXZpY2UgKmFkZXYsXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI0OC1cdC8qIEZvdW5kIGFsbCBjb21wb25lbnRzICovXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM6MjQ5Olx0cmV0ID0gYWRldi1cdTAwM2VvcHMtXHUwMDNlYmluZChhZGV2LVx1MDAzZXBhcmVudCk7XG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMjUwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYz02MzM9c3RhdGljIGludCBjb21wb25lbnRfYmluZChzdHJ1Y3QgY29tcG9uZW50ICpjb21wb25lbnQsIHN0cnVjdCBhZ2dyZWdhdGVfZGV2aWNlICphZGV2LFxuLS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy02NTgtXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM6NjU5Olx0cmV0ID0gY29tcG9uZW50LVx1MDAzZW9wcy1cdTAwM2ViaW5kKGNvbXBvbmVudC1cdTAwM2VkZXYsIGFkZXYtXHUwMDNlcGFyZW50LCBkYXRhKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy02NjAtXHRpZiAoIXJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9NDAwPXN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpkcmJkX3RyeV9jb25uZWN0KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy00NTItXHR3aGF0ID0gXCYjMzQ7YmluZCBiZWZvcmUgY29ubmVjdFwmIzM0OztcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6NDUzOlx0ZXJyID0gc29jay1cdTAwM2VvcHMtXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKikgXHUwMDI2c3JjX2luNiwgbXlfYWRkcl9sZW4pO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy00NTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9NTA3PXN0YXRpYyBpbnQgcHJlcGFyZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBhY2NlcHRfd2FpdF9kYXRhICphZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTUzOS1cdHdoYXQgPSBcJiMzNDtiaW5kIGJlZm9yZSBsaXN0ZW5cJiMzNDs7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jOjU0MDpcdGVyciA9IHNfbGlzdGVuLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHNfbGlzdGVuLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZteV9hZGRyLCBteV9hZGRyX2xlbik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTU0MS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYz04ND1zdGF0aWMgaW50IGFscGhhX2NvcmVfYWdwX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYy05OC1cbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmM6OTk6XHRzdGF0dXMgPSBhZ3AtXHUwMDNlb3BzLVx1MDAzZWJpbmQoYWdwLCBwZ19zdGFydCwgbWVtKTtcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtMTAwLVx0bWIoKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz0xMDY9c3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJ2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jLTE1My1cdGlmIChncHVfb3BzKVxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmM6MTU0Olx0XHRyZXQgPSBncHVfb3BzLVx1MDAzZWJpbmQoZGV2LCBkZXYsIE5VTEwpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtMTU1LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYz0xMzY9bnZrbV9vYmplY3RfYmluZChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdCwgc3RydWN0IG52a21fZ3B1b2JqICpncHVvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jLTEzOS1cdGlmIChvYmplY3QtXHUwMDNlZnVuYy1cdTAwM2ViaW5kKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jOjE0MDpcdFx0cmV0dXJuIG9iamVjdC1cdTAwM2VmdW5jLVx1MDAzZWJpbmQob2JqZWN0LCBncHVvYmosIGFsaWduLCBwZ3B1b2JqKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYy0xNDEtXHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kaXNwL2NoYW4uYz03OT1udmttX2Rpc3BfY2hhbl9jaGlsZF9uZXcoY29uc3Qgc3RydWN0IG52a21fb2NsYXNzICpvY2xhc3MsIHZvaWQgKmFyZ3YsIHUzMiBhcmdjLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTk4LVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmM6OTk6XHRvYmplY3QtXHUwMDNlaGFzaCA9IGNoYW4tXHUwMDNlZnVuYy1cdTAwM2ViaW5kKGNoYW4sIG9iamVjdC1cdTAwM2VvcHJveHkub2JqZWN0LCBvY2xhc3MtXHUwMDNlaGFuZGxlKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTEwMC1cdGlmIChvYmplY3QtXHUwMDNlaGFzaCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jPTQ3PW52a21fZG1hb2JqX2JpbmQoc3RydWN0IG52a21fb2JqZWN0ICpiYXNlLCBzdHJ1Y3QgbnZrbV9ncHVvYmogKmdwdW9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jLTUwLVx0c3RydWN0IG52a21fZG1hb2JqICpkbWFvYmogPSBudmttX2RtYW9iaihiYXNlKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2RtYS91c2VyLmM6NTE6XHRyZXR1cm4gZG1hb2JqLVx1MDAzZWZ1bmMtXHUwMDNlYmluZChkbWFvYmosIGdwdW9iaiwgYWxpZ24sIHBncHVvYmopO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYy01Mi19XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby9jaGFuLmM9NDE9bnZrbV9jaGFuX2NjdHhfYmluZChzdHJ1Y3QgbnZrbV9jaGFuICpjaGFuLCBzdHJ1Y3QgbnZrbV9lbmduICplbmduLCBzdHJ1Y3QgbnZrbV9jY3R4ICpjY3R4KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jLTYxLVx0LyogVXBkYXRlIGNvbnRleHQgcG9pbnRlci4gKi9cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jOjYyOlx0ZW5nbi1cdTAwM2VmdW5jLVx1MDAzZWJpbmQoZW5nbiwgY2N0eCwgY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYy02My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmM9Mjg2PW52a21fdWNoYW5faW5pdChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmMtMjkzLVx0aWYgKGNoYW4tXHUwMDNlZnVuYy1cdTAwM2ViaW5kKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby91Y2hhbi5jOjI5NDpcdFx0Y2hhbi1cdTAwM2VmdW5jLVx1MDAzZWJpbmQoY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmMtMjk1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmM9MzcyPXN0YXRpYyBpbnQgdm13X3Jlc291cmNlX2RvX3ZhbGlkYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM4OC1cdCAgICAgKCFmdW5jLVx1MDAzZW5lZWRzX2d1ZXN0X21lbW9yeSBcdTAwMjZcdTAwMjYgdmFsX2J1Zi1cdTAwM2VibykpKSB7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jOjM4OTpcdFx0cmV0ID0gZnVuYy1cdTAwM2ViaW5kKHJlcywgdmFsX2J1Zik7XG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM5MC1cdFx0aWYgKHVubGlrZWx5KHJldCAhPSAwKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYz05ODk9c3RhdGljIGludCBrZXJuZWxfYmluZGNvbm5lY3Qoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHNvY2thZGRyICpsYWRkcixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYy05OTUtXHRzb2NrX3NldF9yZXVzZWFkZHIocy1cdTAwM2Vzayk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYzo5OTY6XHRyZXQgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLCBsYWRkcmxlbik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfY20uYy05OTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jPTEyOTQ9aW50IGVyZG1hX2NyZWF0ZV9saXN0ZW4oc3RydWN0IGl3X2NtX2lkICppZCwgaW50IGJhY2tsb2cpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jOjEzMTY6XHRyZXQgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNy1cdFx0XHQgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYz0xMzc2PXN0YXRpYyBpbnQga2VybmVsX2JpbmRjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnMsIHN0cnVjdCBzb2NrYWRkciAqbGFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYy0xMzkzLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxMzk0Olx0cnYgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLCBzaXplKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5NS1cdGlmIChydiBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jPTE4MDk9aW50IHNpd19jcmVhdGVfbGlzdGVuKHN0cnVjdCBpd19jbV9pZCAqaWQsIGludCBiYWNrbG9nKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0My1cdFx0fVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODQ0Olx0XHRydiA9IHMtXHUwMDNlb3BzLVx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jLTE4NDUtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jLTE4NjctXHRcdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmM6MTg2ODpcdFx0cnYgPSBzLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYy0xODY5LVx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3NwYW4uYz0xNDk5PW1seHN3X3NwX3NwYW5fdHJpZ2dlcl9lbnRyeV9jcmVhdGUoc3RydWN0IG1seHN3X3NwX3NwYW4gKnNwYW4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jLTE1MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmM6MTUyMTpcdGVyciA9IHRyaWdnZXJfZW50cnktXHUwMDNlb3BzLVx1MDAzZWJpbmQodHJpZ2dlcl9lbnRyeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmMtMTUyMi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE3MjY9dXNibmV0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTgwNy1cdFx0bmV0LVx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxODA4Olx0XHRzdGF0dXMgPSBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA5LVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jPTU5PWludCBwY2lfZXBmX2JpbmQoc3RydWN0IHBjaV9lcGYgKmVwZilcbi0tXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMjItXHRcdGVwZl92Zi1cdTAwM2VzZWNfZXBjID0gZXBmLVx1MDAzZXNlY19lcGM7XG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjM6XHRcdHJldCA9IGVwZl92Zi1cdTAwM2Vkcml2ZXItXHUwMDNlb3BzLVx1MDAzZWJpbmQoZXBmX3ZmKTtcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jLTEyNC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMjgtXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjk6XHRyZXQgPSBlcGYtXHUwMDNlZHJpdmVyLVx1MDAzZW9wcy1cdTAwM2ViaW5kKGVwZik7XG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYy0xMzAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jPTM0Mj1pbnQgcGNpX3RzbV9iaW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qga3ZtICprdm0sIHUzMiB0ZGlfaWQpXG4tLVxuZHJpdmVycy9wY2kvdHNtLmMtMzY3LVxuZHJpdmVycy9wY2kvdHNtLmM6MzY4Olx0dGRpID0gdG9fcGNpX3RzbV9vcHMocGRldi1cdTAwM2V0c20pLVx1MDAzZWJpbmQocGRldiwga3ZtLCB0ZGlfaWQpO1xuZHJpdmVycy9wY2kvdHNtLmMtMzY5LVx0aWYgKElTX0VSUih0ZGkpKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMDA4PWludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEwNTctIGJpbmQ6XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6MTA1ODpcdGlmIChkcml2ZXItXHUwMDNlYmluZCBcdTAwMjZcdTAwMjYgKGVycm9yID0gZHJpdmVyLVx1MDAzZWJpbmQoaW5zdGFuY2UsIGludGYsIGlkKSkgXHUwMDNjIDApIHtcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU5LVx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogYmluZCBmYWlsZWQ6ICVkIVxcblwmIzM0OywgX19mdW5jX18sIGVycm9yKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MzEwPWludCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYy0zMzItXHRpZiAoZnVuY3Rpb24tXHUwMDNlYmluZCkge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jOjMzMzpcdFx0dmFsdWUgPSBmdW5jdGlvbi1cdTAwM2ViaW5kKGNvbmZpZywgZnVuY3Rpb24pO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzNC1cdFx0aWYgKHZhbHVlIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jPTI1MzE9c3RhdGljIGludCBjb21wb3NpdGVfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYy0yNTU1LVx0ICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MjU1NjpcdHN0YXR1cyA9IGNvbXBvc2l0ZS1cdTAwM2ViaW5kKGNkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTI1NTctXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jPTE2NDE9c3RhdGljIGludCBnYWRnZXRfYmluZF9kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYzoxNjYyOlx0cmV0ID0gZHJpdmVyLVx1MDAzZWJpbmQodWRjLVx1MDAzZWdhZGdldCwgZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjMtXHRpZiAocmV0KVxuLS1cbmZzL2RsbS9sb3djb21tcy5jPTE1NzA9c3RhdGljIGludCBkbG1fY29ubmVjdChzdHJ1Y3QgY29ubmVjdGlvbiAqY29uKVxuLS1cbmZzL2RsbS9sb3djb21tcy5jLTE1OTMtXG5mcy9kbG0vbG93Y29tbXMuYzoxNTk0Olx0cmVzdWx0ID0gZGxtX3Byb3RvX29wcy1cdTAwM2ViaW5kKHNvY2spO1xuZnMvZGxtL2xvd2NvbW1zLmMtMTU5NS1cdGlmIChyZXN1bHQgXHUwMDNjIDApIHtcbi0tXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTE1Nzk9c3RhdGljIHZvaWQgbzJuZXRfc3RhcnRfY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0xNjQ3LVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNjQ4Olx0cmV0ID0gc29jay1cdTAwM2VvcHMtXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcdTAwMjZteWFkZHIsXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE2NDktXHRcdFx0ICAgICAgc2l6ZW9mKG15YWRkcikpO1xuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM9MjA0OD1zdGF0aWMgaW50IG8ybmV0X29wZW5fbGlzdGVuaW5nX3NvY2soX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMjA3NC1cdHNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jOjIwNzU6XHRyZXQgPSBzb2NrLVx1MDAzZW9wcy1cdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNnNpbiwgc2l6ZW9mKHNpbikpO1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0yMDc2LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTgzOD1pbnQgcmViaW5kX3N1YnN5c3RlbXMoc3RydWN0IGNncm91cF9yb290ICpkc3Rfcm9vdCwgdTMyIHNzX21hc2spXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTQ4LVx0XHRpZiAoc3MtXHUwMDNlYmluZClcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTk0OTpcdFx0XHRzcy1cdTAwM2ViaW5kKGNzcyk7XG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5NTAtXHR9IHdoaWxlX2VhY2hfc3Vic3lzX21hc2soKTtcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTY1MTk9aW50IF9faW5pdCBjZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNjU5Ni1cdFx0aWYgKHNzLVx1MDAzZWJpbmQpXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjY1OTc6XHRcdFx0c3MtXHUwMDNlYmluZChpbml0X2Nzc19zZXQuc3Vic3lzW3NzaWRdKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNjU5OC1cbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYz05OT1zdGF0aWMgaW50IGllZWU4MDIxNTRfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0xMDQtXHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKVxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM6MTA1Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMTA2LVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz00NDk9aW50IGluZXRfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy00NTUtXHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKSB7XG5uZXQvaXB2NC9hZl9pbmV0LmM6NDU2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2lwdjQvYWZfaW5ldC5jLTQ1Ny1cdH1cbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM1LVx0aWYgKHByb3QtXHUwMDNlYmluZClcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDM2Olx0XHRyZXR1cm4gcHJvdC1cdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L2lwdjYvYWZfaW5ldDYuYy00MzctXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTgxMT1zdGF0aWMgaW50IGdlbmxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODQxLVx0XHRpZiAoZmFtaWx5LVx1MDAzZWJpbmQpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxODQyOlx0XHRcdGZhbWlseS1cdTAwM2ViaW5kKGkpO1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTg0My1cbi0tXG5uZXQvcGhvbmV0L3NvY2tldC5jPTE1Nj1zdGF0aWMgaW50IHBuX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgbGVuKVxuLS1cbm5ldC9waG9uZXQvc29ja2V0LmMtMTY1LVx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlYmluZClcbm5ldC9waG9uZXQvc29ja2V0LmM6MTY2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2ViaW5kKHNrLCBhZGRyLCBsZW4pO1xubmV0L3Bob25ldC9zb2NrZXQuYy0xNjctXG4tLVxubmV0L3NvY2tldC5jPTE5Mzc9aW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuLS1cbm5ldC9zb2NrZXQuYy0xOTQ0LVx0aWYgKCFlcnIpXG5uZXQvc29ja2V0LmM6MTk0NTpcdFx0ZXJyID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2ViaW5kKHNvY2ssXG5uZXQvc29ja2V0LmMtMTk0Ni1cdFx0XHRcdFx0XHQgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcbi0tXG5uZXQvc29ja2V0LmM9MzY2OT1pbnQga2VybmVsX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRybGVuKVxuLS1cbm5ldC9zb2NrZXQuYy0zNjc0LVxubmV0L3NvY2tldC5jOjM2NzU6XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHJlc3MsXG5uZXQvc29ja2V0LmMtMzY3Ni1cdFx0XHRcdFx0ICBhZGRybGVuKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYz0yMzgwPXN0YXRpYyBpbnQgdGVzdF94bXNnKHN0cnVjdCBzb2NrX2FkZHJfdGVzdCAqdGVzdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19hZGRyLmM6MjQwNzpcdFx0ZXJyID0gdGVzdC1cdTAwM2VvcHMtXHUwMDNlYmluZChjbGllbnQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzcmNfYWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfYWRkci5jLTI0MDgtXHRcdFx0XHQgICAgICBzcmNfYWRkcl9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFN1YnN5c3RlbSBCaW5kIGFuZCBTdGF0IEZsdXNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgcmViaW5kX3N1YnN5c3RlbXNgLCB3aGljaCBjYWxscyBgc3MtJmd0O2JpbmQoY3NzKWAsIGFuZCBhbHNvIGNhbGxlZCBkdXJpbmcgYGNncm91cF9pbml0KClgLiBUaGUgY3J1Y2lhbCBwYXJ0IGZvciBtZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IHN1YnN5c3RlbSBob29rcyBpbnRvIHRoaXMuCgpJJiMzOTttIGZvY3VzZWQgb24gdGhlc2Ugc3ltYm9sczogYG1lbV9jZ3JvdXBfYmluZGAsIHdoaWNoIGlzIHRoZSBiaW5kIGNhbGxiYWNrOyBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB0aGUgc3RhdCBmbHVzaCBjYWxsYmFjazsgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBhIHN0YXQgYWdncmVnYXRpb24gaGVscGVyOyBgZmx1c2hfbm1pX3N0YXRzYCwgYW4gbm1pIHN0YXQgZmx1c2hpbmcgaGVscGVyOyBhbmQgZmluYWxseSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggYXJlIG5ldyBpbmxpbmUgaGVscGVycy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JyZWN0bHkgaW50ZWdyYXRlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxlciBmdW5jdGlvbnMgYW5kIGlmIHRoZXNlIHN5bWJvbHMgYWxsIGxvb2sgZ29vZC4gU28sIGxldCYjMzk7cyB0cmFjZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIG90aGVyIGZ1bmN0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBzZWUgaG93IHN0YXRzIGludGVyYWN0LiBJIHNlZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGlzIHBhcnQgb2YgdGhlIHJzdGF0IGZsdXNoIGluZnJhc3RydWN0dXJlIOKAkyBiZWluZyBjYWxsZWQgYnkgYGNncm91cF9yc3RhdF9mbHVzaF9sb2NrZWRgIGFuZCBgY2dyb3VwX3JzdGF0X2ZsdXNoYC4gSSBhbHNvIHNlZSBgbWVtX2Nncm91cF9mbHVzaF9zdGF0c2AgYW5kIGBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHNgLiBBZGRpdGlvbmFsbHksIEkgc2VlIGBtZW1vcnlfc3RhdF9zaG93YCBhbmQgYG1lbWNnX3N0YXRfc2hvd2AsIHdoaWNoIGFwcGVhciB0byByZWFkIGZyb20gYG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZvciBsZWdhY3kgbWVtb3J5LnN0YXQgcmVwb3J0aW5nLgoKVGhpcyBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGhvdyB0aGUgbGVnYWN5IGBtZW1vcnkuc3RhdGAgcmVhZHMgc3RhdHMsIHdoaWNoIHNob3VsZCBvZmZlciB2YWx1YWJsZSBpbnNpZ2h0IGludG8gYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGggdGhlIG5ldyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yMzY9c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG5tbS9tZW1jb250cm9sLmMtMjM3LVxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG4tLVxubW0vbWVtY29udHJvbC5jLTI1MS1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xubW0vbWVtY29udHJvbC5jOjI1MjpcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzoyNTM6XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTI1NC1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtMjU5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNy1cbm1tL21lbWNvbnRyb2wuYzozMDg6XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4NjpcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OS1cbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTUxLVx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NC1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6NTY1Olx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTU2Ni0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc2LVxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTc4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NC1cdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vbWVtY29udHJvbC5jOjU4NTpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy01ODYtXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjc4LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xubW0vbWVtY29udHJvbC5jOjY3OTpcdGxvbmdcdFx0XHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XG5tbS9tZW1jb250cm9sLmMtNjgwLVx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjk2LSAqL1xubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTY5OC17XG4tLVxubW0vbWVtY29udHJvbC5jLTcwMS1cbm1tL21lbWNvbnRyb2wuYzo3MDI6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MDMtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz04NTU9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzMtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxubW0vbWVtY29udHJvbC5jOjg3NDogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cbm1tL21lbWNvbnRyb2wuYy04NzUtICovXG4tLVxubW0vbWVtY29udHJvbC5jPTkzOT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUzLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYzo5NTQ6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy05NTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYy05NjEtXG5tbS9tZW1jb250cm9sLmM6OTYyOlx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmMtOTY5LVxubW0vbWVtY29udHJvbC5jOjk3MDp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NzEtXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk3Mi17XG5tbS9tZW1jb250cm9sLmM6OTczOlx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtOTc0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzM1PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc0MS0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6MTc0Mjp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG5tbS9tZW1jb250cm9sLmMtMTc0My17XG5tbS9tZW1jb250cm9sLmM6MTc0NDpcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXG5tbS9tZW1jb250cm9sLmMtMTc0NS1cdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDUwNz1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NTExLVx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbm1tL21lbWNvbnRyb2wuYzo0NTEyOlx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcbm1tL21lbWNvbnRyb2wuYy00NTEzLVx0ICovXG4tLVxubW0vbWVtY29udHJvbC5jPTQ1NjQ9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00NTY1LXtcbm1tL21lbWNvbnRyb2wuYzo0NTY2Olx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDU2Ny1cdGludCBuaWQ7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ1NzMtXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xubW0vbWVtY29udHJvbC5jOjQ1NzQ6XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NTc1Olx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbm1tL21lbWNvbnRyb2wuYy00NTc2LVx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTkyLVx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5MzpcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1OTQtXHRcdFx0aWYgKHBsc3RhdHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1OTYtXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NzpcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDU5ODpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk5LVx0XHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MDYtXHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NjA3Olx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYwOC1cdFx0XHRpZiAocGxzdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYxMC1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NjExOlx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NjEyOlx0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ2MTMtXHRcdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM2LVx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjM3Olx0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NjktXHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjcwOlx0XHRcdC5sb2NhbCA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbm1tL21lbWNvbnRyb2wuYy00NjcxLVx0XHRcdC5wZW5kaW5nID0gbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jPTUxNTg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzctICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcbm1tL21lbWNvbnRyb2wuYzo1MjM4OiAqIGhpZXJhcmNoeSwgdm1zdGF0cyYjMzk7cyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxubW0vbWVtY29udHJvbC5jLTUyMzktICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuXG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2MS1cdCAqIG9uIHJvb3RfbWVtX2Nncm91cCB3aXRob3V0IGNncm91cF9tdXRleCBhbmQgYSBmbHVzaCBpbmNyZW1lbnRzIHN0YXRlXG5tbS9tZW1jb250cm9sLmM6NTI2MjpcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXG5tbS9tZW1jb250cm9sLmM6NTI2MzpcdCAqIHJlYWQgc3RhdGUgYW5kIHdyaXRlIHRvIHN0YXRlX2xvY2FsLCBpdHMgc3RhdGVfbG9jYWwgaW5jcmVtZW50IGlzXG5tbS9tZW1jb250cm9sLmMtNTI2NC1cdCAqIG92ZXJ3cml0dGVuIGFuZCB0aGUgY291bnRlciBzdGF5cyBzaG9ydCwgYnV0IHRoZSBkaWZmZXJlbmNlIHdvdWxkIGJlXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNjgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19WTVNUQVRfU0laRTsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLmM6NTI2OTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG5tbS9tZW1jb250cm9sLmMtNTI3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNjEKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDZ3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGVzZSBjcml0aWNhbCBgRm9jdXNTeW1ib2xzYDogYG1lbV9jZ3JvdXBfYmluZGAsIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYW5kIGBmbHVzaF9ubWlfc3RhdHNgLiBUaGVzZSBhcmUgdGhlIGtleSBsZXZlcnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4KCk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gTmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IHNldCBhbmQgYWNjb3VudGVkIGZvciBpbiB0aGUgZnV6emluZyBwcm9jZXNzLgoKTm8sIHdhaXQsIHRoZXJlJiMzOTtzIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGFzIGFuIGludGVybmFsIGJvb2wgb3B0aW9uOyBub3QgdXNlci1zZWxlY3RhYmxlLiBJdCYjMzk7cyBhIGRlcGVuZGVuY3ksIGJ1dCBub3Qgc29tZXRoaW5nIHRvIGRpcmVjdGx5IGNvbmZpZ3VyZS4gSXQgaGluZ2VzIG9uIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgTk1JIHNhZmV0eS4gR29vZCB0byBub3RlLCBidXQgSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSBpdCBpbiBteSB0ZXN0LgoKQWxyaWdodCwgc2FuaXR5IGNoZWNrIHRpbWUuIExldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgd2FudCB0byBlbmFibGUgY29uZmlndXJhdGlvbnMgJiMzNDtNRU1DRyYjMzQ7LCAmIzM0O01FTUNHX1YxJiMzNDsuIFRob3NlIG1hdGNoIHdpdGggdGhlIGBGb2N1c1N5bWJvbHNgIEkgc2VsZWN0ZWQgYXQgdGhlIHN0YXJ0LiBUaGF0IGxvb2tzIGdvb2QuCgpGaW5hbGx5LCB3aXRoIGFsbCB0aGF0IGNvbmZpcm1lZCwgSSYjMzk7bSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2JpbmQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZSYjMzQ7LAogICAgJiMzNDtmbHVzaF9ubWlfc3RhdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9iaW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUmIzM0OywKICAgICYjMzQ7Zmx1c2hfbm1pX3N0YXRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxNjgyOWM3NzNjMTk0OGRkYzFhOTNlMDIzNjVlOTlkMThiNzc5ZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTY4Nyw2ICYjNDM7Njg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlhdG9taWNfbG9uZ190CQlzdGF0c191cGRhdGVzOwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeQomIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LgomIzQzOyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHkKJiM0MzsgKiAobWVtX2Nncm91cF9iaW5kKCkgcG9wdWxhdGVzIHRoZW0gaWYgaXQgaXMgbGF0ZXIgbW92ZWQgb250byB0aGUgbGVnYWN5CiYjNDM7ICogaGllcmFyY2h5KS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbDsKJiM0Mzt9CiYjNDM7CiAvKgogICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZwogICoKQEAgLTQ0ODQsNyAmIzQzOzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7CiAJLyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiAJbG9uZyAqYWdncmVnYXRlOwotCS8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KJiM0MzsJLyoKJiM0MzsJICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG8KJiM0MzsJICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSkKJiM0MzsJICovCiAJbG9uZyAqbG9jYWw7CiAJLyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcgKnBlbmRpbmc7CkBAIC00NTIzLDcgJiM0Mzs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogCQl9CiAKIAkJLyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqLwotCQlpZiAoZGVsdGFfY3B1KQomIzQzOwkJaWYgKGRlbHRhX2NwdSAmYW1wOyZhbXA7IGFjLSZndDtsb2NhbCkKIAkJCWFjLSZndDtsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1OwogCiAJCWlmIChkZWx0YSkgewpAQCAtNDUzNyw2ICYjNDM7NDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMKIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7CiYjNDM7CWxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpOwogCWludCBuaWQ7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmFtcDttZW1jZy0mZ3Q7a21lbV9zdGF0KSkgewpAQCAtNDU0NCw3ICYjNDM7NDU3MSw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCWludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pOwogCiAJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07Ci0JCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiYjNDM7CQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwogCQlpZiAocGFyZW50KQogCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTsKIAl9CkBAIC00NTY2LDcgJiM0Mzs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1NzksNyAmIzQzOzQ2MDgsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDYwNCw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZSwKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7c3RhdGUsCkBAIC00NjE1LDcgJiM0Mzs0NjQ1LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50cywKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O2V2ZW50cywKQEAgLTUxOTksNiAmIzQzOzUyMjksNTAgQEAgc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7CiAJeyB9CS8qIHRlcm1pbmF0ZSAqLwogfTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsvKgomIzQzOyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsCiYjNDM7ICoga2V5IGFscmVhZHkgaW4gaXRzIG5ldyBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5CiYjNDM7ICogaGllcmFyY2h5LCB2bXN0YXRzJiMzOTtzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkCiYjNDM7ICogc2luY2UgdGhleSBnZXQgcmVhZCBieSB0aGUgbGVnYWN5IGhpZXJhcmNoeS4gVGhvc2UgdmFsdWVzIGNhbiBqdXN0IGJlIHRha2VuCiYjNDM7ICogZnJvbSB0aGUgdm1zdGF0cyYjMzk7cyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHkKJiM0MzsgKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhyb290X2Nzcyk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZsdXNoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGRlc2NlbmRhbnRzIHRoYXQgZ290CiYjNDM7CSAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZQomIzQzOwkgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJiMzOTt0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzCiYjNDM7CSAqIGFycmF5cwomIzQzOwkgKi8KJiM0MzsJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBhIGNvbmN1cnJlbnQgZmx1c2guIFRoZSBwZXJpb2RpYyBmbHVzaGVyIHJ1bnMKJiM0MzsJICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGUKJiM0MzsJICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2UKJiM0MzsJICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXMKJiM0MzsJICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmUKJiM0MzsJICogYSBzaW5nbGUgQ1BVJiMzOTtzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZQomIzQzOwkgKiBjb3VudGVycyBhcmUgYXBwcm94aW1hdGUgdmFsdWVzLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX1ZNU1RBVF9TSVpFOyBpJiM0MzsmIzQzOykKJiM0MzsJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpXTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspCiYjNDM7CQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsW2ldID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c1tpXTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwomIzQzOwogc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0gewogCS5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYywKIAkuY3NzX29ubGluZSA9IG1lbV9jZ3JvdXBfY3NzX29ubGluZSwKQEAgLTUyMTIsNiAmIzQzOzUyODYsNyBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7CiAJLmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsCiAJLmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLAogI2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOwkuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCwKIAkubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcywKICNlbmRpZgogCS5lYXJseV9pbml0ID0gMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgbXkgbWVudGFsIGNoZWNrbGlzdDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guIEtBU0FOIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgc28gYW55dGhpbmcgaXQgY292ZXJzLCBJIGNhbiBydWxlIG91dC4gTXkgY29uY2VybiBpcyBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IHNsaXAgdGhyb3VnaCB0aGUgY3JhY2tzLgoKVGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBJIHNlZSBpdCBhZGRpbmcgZnVuY3Rpb25zIGxpa2UgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAuIFRoZXNlIGZ1bmN0aW9ucyBjb25kaXRpb25hbGx5IHJldHVybiBlaXRoZXIgYE5VTExgIG9yIHBvaW50ZXJzIHRvIHRoZSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcnJheXMgd2l0aGluIHRoZSBgbWVtY2ctJmd0O3Ztc3RhdHNgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gQ29uZGl0aW9uYWwgcmV0dXJucyBhcmUgYSBwb3RlbnRpYWwgcmVkIGZsYWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGhhcHBlbnMgaWYgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgYE5VTExgPyBJcyB0aGUgY2FsbGluZyBjb2RlIGhhbmRsaW5nIGl0IGNvcnJlY3RseT8gVGhhdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZSBpZiB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIGl0LCBidXQgY291bGQgbGVhZCB0byBhIGNyYXNoLgoKSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaW52b2x2aW5nIGBkZWx0YV9jcHVgIGFuZCBgYWMtJmd0O2xvY2FsYCB1c2luZyB0aG9zZSBuZXcgZnVuY3Rpb25zLiBJIGFsc28gc2VlIHRoYXQgYHN0YXRlX2xvY2FsYCBpcyBhY3F1aXJlZCB1c2luZyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGluIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgaXQgY2hlY2tzIGlmIGl0JiMzOTtzIG5vbi1OVUxMIGJlZm9yZSBhZGRpbmcgdG8gaXQuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnRseSBoYW5kbGVkLgoKVGhlcmUmIzM5O3Mgc29tZSByZWJpbmRpbmcgb2YgbGVnYWN5IGhpZXJhcmNoaWVzIHdpdGggYG1lbV9jZ3JvdXBfYmluZGAgd2hpY2ggcG9wdWxhdGVzIGBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYC4gTm93LCAqaG93KiBpcyB0aGF0IGBtZW1jZy0mZ3Q7dm1zdGF0c2Agc3RydWN0dXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQ/IFRoYXQmIzM5O3MgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1jZy0mZ3Q7dm1zdGF0c2AgY29tZXMgZnJvbSBhbmQgaG93IGl0IGdldHMgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xpbmcgbGlrZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhY2UgdGhhdC4gSWYgdGhlcmUmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gcHJvYmxlbSwgb3IgaWYgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJiMzOTt0IGZ1bGx5IHplcm9lZCwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEFyZSB0aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyPyBBcmUgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHNhbml0aXphdGlvbj8KCkJhc2VkIG9uIGEgY3Vyc29yeSBnbGFuY2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBhcmVhczoKCjEuICBIb3cgaXMgYG1lbWNnLSZndDt2bXN0YXRzYCBpbml0aWFsaXplZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGFycmF5cyBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCjIuICBJZiBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIHJldHVybnMgYE5VTExgLCBpcyB0aGUgY2FsbGluZyBjb2RlICphbHdheXMqIGhhbmRsaW5nIHRoaXMgY29ycmVjdGx5IHRvIHByZXZlbnQgdXNlLWFmdGVyLU5VTEw/CjMuICBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhpcyBwYXRjaCB3aGljaCB3cml0ZSB0aGUgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZmllbGRzPwoKSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgKm5vdCogbmVlZGluZyBLTVNBTiBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgYXMgSSYjMzk7bSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgcG90ZW50aWFsbHkgYE5VTExgIGFycmF5LiBJIHdpbGwsIGhvd2V2ZXIsIG5lZWQgdG8gZnVsbHkgaW52ZXN0aWdhdGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtZW1jZy0mZ3Q7dm1zdGF0c2AuIElmIHRoYXQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBsb29rcyBjbGVhbiwgSSYjMzk7bGwgcmVjb21tZW5kIHRoYXQgS0FTQU4gY292ZXJhZ2UgaXMgbGlrZWx5IHN1ZmZpY2llbnQuIElmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UqLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCAqdGhlbiogS01TQU4gaXMgd2FycmFudGVkLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1zdGF0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NjQ5PXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2V2ZW50c19pbmRleChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NTMtXG5tbS9tZW1jb250cm9sLmM6NjU0OnN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSB7XG5tbS9tZW1jb250cm9sLmMtNjU1LVx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYy02NTgtXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xubW0vbWVtY29udHJvbC5jOjY1OTpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdVx0KnBhcmVudF9wY3B1O1xubW0vbWVtY29udHJvbC5jOjY2MDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzXHRcdFx0KnZtc3RhdHM7XG5tbS9tZW1jb250cm9sLmMtNjYxLVxuLS1cbm1tL21lbWNvbnRyb2wuYy02NzItXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbm1tL21lbWNvbnRyb2wuYy02NzQtXHQvKiBBZ2dyZWdhdGVkIChDUFUgYW5kIHN1YnRyZWUpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz02OTc9c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzAxLVxubW0vbWVtY29udHJvbC5jOjcwMjpcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsO1xubW0vbWVtY29udHJvbC5jLTcwMy19XG4tLVxubW0vbWVtY29udHJvbC5jPTcwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzA5LVxubW0vbWVtY29udHJvbC5jOjcxMDpcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MTEtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz03MzA9c3RhdGljIHU2NCBmbHVzaF9sYXN0X3RpbWU7XG4tLVxubW0vbWVtY29udHJvbC5jLTczMy1cbm1tL21lbWNvbnRyb2wuYzo3MzQ6c3RhdGljIGJvb2wgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChzdHJ1Y3QgbWVtY2dfdm1zdGF0cyAqdm1zdGF0cylcbm1tL21lbWNvbnRyb2wuYy03MzUte1xubW0vbWVtY29udHJvbC5jOjczNjpcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtc3RhdHMtXHUwMDNlc3RhdHNfdXBkYXRlcykgXHUwMDNlXG5tbS9tZW1jb250cm9sLmMtNzM3LVx0XHRNRU1DR19DSEFSR0VfQkFUQ0ggKiBudW1fb25saW5lX2NwdXMoKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19yc3RhdF91cGRhdGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbG9uZyB2YWwsXG4tLVxubW0vbWVtY29udHJvbC5jLTc0Mi17XG5tbS9tZW1jb250cm9sLmM6NzQzOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpzdGF0Y19wY3B1O1xubW0vbWVtY29udHJvbC5jOjc0NDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG5tbS9tZW1jb250cm9sLmMtNzQ1LVx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NTAtXHRfX2Nzc19yc3RhdF91cGRhdGVkKFx1MDAyNm1lbWNnLVx1MDAzZWNzcywgY3B1KTtcbm1tL21lbWNvbnRyb2wuYzo3NTE6XHRzdGF0Y19wY3B1ID0gbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHU7XG5tbS9tZW1jb250cm9sLmMtNzUyLVx0Zm9yICg7IHN0YXRjX3BjcHU7IHN0YXRjX3BjcHUgPSBzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSkge1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NTgtXHRcdCAqL1xubW0vbWVtY29udHJvbC5jOjc1OTpcdFx0aWYgKG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goc3RhdGMtXHUwMDNldm1zdGF0cykpXG5tbS9tZW1jb250cm9sLmMtNzYwLVx0XHRcdGJyZWFrO1xuLS1cbm1tL21lbWNvbnRyb2wuYy03NjctXHRcdHN0YXRzX3VwZGF0ZXMgPSB0aGlzX2NwdV94Y2hnKHN0YXRjX3BjcHUtXHUwMDNlc3RhdHNfdXBkYXRlcywgMCk7XG5tbS9tZW1jb250cm9sLmM6NzY4Olx0XHRhdG9taWNfbG9uZ19hZGQoc3RhdHNfdXBkYXRlcywgXHUwMDI2c3RhdGMtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKTtcbm1tL21lbWNvbnRyb2wuYy03NjktXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTc3Mj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKVxubW0vbWVtY29udHJvbC5jLTc3My17XG5tbS9tZW1jb250cm9sLmM6Nzc0Olx0Ym9vbCBuZWVkc19mbHVzaCA9IG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2gobWVtY2ctXHUwMDNldm1zdGF0cyk7XG5tbS9tZW1jb250cm9sLmMtNzc1LVxubW0vbWVtY29udHJvbC5jOjc3NjpcdHRyYWNlX21lbWNnX2ZsdXNoX3N0YXRzKG1lbWNnLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdHNfdXBkYXRlcyksXG5tbS9tZW1jb250cm9sLmMtNzc3LVx0XHRmb3JjZSwgbmVlZHNfZmx1c2gpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTU9c3RhdGljIHZvaWQgZmx1c2hfbWVtY2dfc3RhdHNfZHdvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy04MTctXHQvKlxubW0vbWVtY29udHJvbC5jOjgxODpcdCAqIERlbGliZXJhdGVseSBpZ25vcmUgbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaCgpIGhlcmUgc28gdGhhdCBmbHVzaGluZ1xubW0vbWVtY29udHJvbC5jLTgxOS1cdCAqIGluIGxhdGVuY3ktc2Vuc2l0aXZlIHBhdGhzIGlzIGFzIGNoZWFwIGFzIHBvc3NpYmxlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz04MjU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtODMyLVxubW0vbWVtY29udHJvbC5jOjgzMzpcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG5tbS9tZW1jb250cm9sLmMtODM0LSNpZmRlZiBDT05GSUdfU01QXG4tLVxubW0vbWVtY29udHJvbC5jPTkxMz1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTkyMy1cbm1tL21lbWNvbnRyb2wuYzo5MjQ6XHR0aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG5tbS9tZW1jb250cm9sLmMtOTI1LVx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9OTU0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTk2MS1cbm1tL21lbWNvbnRyb2wuYzo5NjI6XHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTk2My0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz05ODA9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtOTkyLVx0LyogVXBkYXRlIG1lbWNnICovXG5tbS9tZW1jb250cm9sLmM6OTkzOlx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xubW0vbWVtY29udHJvbC5jLTk5NC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA2Nj12b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cdCAqIHdoZW4gd2UgZnJlZSB0aGUgc2xhYiBvYmplY3QsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBwZXItbWVtY2dcbm1tL21lbWNvbnRyb2wuYzoxMDc5Olx0ICogdm1zdGF0cyB0byBrZWVwIGl0IGNvcnJlY3QgZm9yIHRoZSByb290IG1lbWNnLlxubW0vbWVtY29udHJvbC5jLTEwODAtXHQgKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA5Nj12b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTExMDktXG5tbS9tZW1jb250cm9sLmM6MTExMDpcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VldmVudHNbaV0sIGNvdW50KTtcbm1tL21lbWNvbnRyb2wuYy0xMTExLVx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgY291bnQsIGNwdSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTExMTc9dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMjMtXG5tbS9tZW1jb250cm9sLmM6MTEyNDpcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNbaV0pO1xubW0vbWVtY29udHJvbC5jLTExMjUtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTM2PXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQyLVxubW0vbWVtY29udHJvbC5jOjExNDM6XHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy0xMTQ0LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDE4Nj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTgtXHRtZW1jZzFfZnJlZV9ldmVudHMobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQxOTk6XHRrZnJlZShtZW1jZy1cdTAwM2V2bXN0YXRzKTtcbm1tL21lbWNvbnRyb2wuYzo0MjAwOlx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUpO1xubW0vbWVtY29udHJvbC5jLTQyMDEtXHRrZnJlZShtZW1jZyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDIxMi17XG5tbS9tZW1jb250cm9sLmM6NDIxMzpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG5tbS9tZW1jb250cm9sLmM6NDIxNDpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XG5tbS9tZW1jb250cm9sLmMtNDIxNS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyOS1cbm1tL21lbWNvbnRyb2wuYzo0MjMwOlx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xubW0vbWVtY29udHJvbC5jOjQyMzE6XHRpZiAoIW1lbWNnLVx1MDAzZXZtc3RhdHMpXG5tbS9tZW1jb250cm9sLmMtNDIzMi1cdFx0Z290byBmYWlsO1xubW0vbWVtY29udHJvbC5jLTQyMzMtXG5tbS9tZW1jb250cm9sLmM6NDIzNDpcdG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUsXG5tbS9tZW1jb250cm9sLmMtNDIzNS1cdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm1tL21lbWNvbnRyb2wuYzo0MjM2Olx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbm1tL21lbWNvbnRyb2wuYy00MjM3LVx0XHRnb3RvIGZhaWw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNDEtXG5tbS9tZW1jb250cm9sLmM6NDI0MjpcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcbm1tL21lbWNvbnRyb2wuYy00MjQzLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xubW0vbWVtY29udHJvbC5jOjQyNDQ6XHRcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG5tbS9tZW1jb250cm9sLmMtNDI0NS1cdFx0c3RhdGMtXHUwMDNlcGFyZW50X3BjcHUgPSBwc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYzo0MjQ2Olx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbm1tL21lbWNvbnRyb2wuYy00MjQ3LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NTY0PXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1NzItXG5tbS9tZW1jb250cm9sLmM6NDU3MzpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU3NC1cdFx0aWYgKHN0YXRlX2xvY2FsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTc2LVx0XHRpZiAocGFyZW50KVxubW0vbWVtY29udHJvbC5jOjQ1Nzc6XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU3OC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NjpcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk3LVx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5OS1cdFx0XHRpZiAocGFyZW50KVxubW0vbWVtY29udHJvbC5jOjQ2MDA6XHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NjAxLVx0XHR9XG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MDktXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ2MTA6XHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYxMS1cdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MTMtXHRcdFx0aWYgKHBhcmVudClcbm1tL21lbWNvbnRyb2wuYzo0NjE0Olx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYxNS1cdFx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjYtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQ2Mjc6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTQ2MjgtXHRzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgYWM7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MzItXG5tbS9tZW1jb250cm9sLmM6NDYzMzpcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XG5tbS9tZW1jb250cm9sLmMtNDYzNC1cbm1tL21lbWNvbnRyb2wuYy00NjM1LVx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG5tbS9tZW1jb250cm9sLmM6NDYzNjpcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmMtNDYzNy1cdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxubW0vbWVtY29udHJvbC5jOjQ2Mzg6XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxubW0vbWVtY29udHJvbC5jOjQ2Mzk6XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxubW0vbWVtY29udHJvbC5jLTQ2NDAtXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQ2LVx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG5tbS9tZW1jb250cm9sLmM6NDY0NzpcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxubW0vbWVtY29udHJvbC5jLTQ2NDgtXHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmM6NDY0OTpcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxubW0vbWVtY29udHJvbC5jOjQ2NTA6XHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nIDogTlVMTCxcbm1tL21lbWNvbnRyb2wuYy00NjUxLVx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2ODEtXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cbm1tL21lbWNvbnRyb2wuYzo0NjgyOlx0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzKSlcbm1tL21lbWNvbnRyb2wuYzo0NjgzOlx0XHRhdG9taWNfbG9uZ19zZXQoXHUwMDI2bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0c191cGRhdGVzLCAwKTtcbm1tL21lbWNvbnRyb2wuYy00Njg0LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1OD1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzNy0gKiBJZiB0aGUgY29udHJvbGxlciBpcyBtb3ZpbmcgZnJvbSB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgdG8gdGhlIGxlZ2FjeVxubW0vbWVtY29udHJvbC5jOjUyMzg6ICogaGllcmFyY2h5LCB2bXN0YXRzJiMzOTtzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkXG5tbS9tZW1jb250cm9sLmMtNTIzOS0gKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cbm1tL21lbWNvbnRyb2wuYzo1MjQwOiAqIGZyb20gdGhlIHZtc3RhdHMmIzM5O3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG5tbS9tZW1jb250cm9sLmMtNTI0MS0gKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI0Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC5jOjUyNjk6XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2ldO1xubW0vbWVtY29udHJvbC5jLTUyNzAtXG5tbS9tZW1jb250cm9sLmMtNTI3MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLmM6NTI3MjpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c1tpXTtcbm1tL21lbWNvbnRyb2wuYy01MjczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc5NwoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEFjY291bnRpbmcgT3B0aW1pemF0aW9uIGluIGNncm91cCB2MioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcGVyc3BlY3RpdmUuIEkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTiYjMzk7cyBwcmltYXJ5IGNvbmNlcm4uCgpGaXJzdCwgSSBzZWUgdGhhdCBgbWVtY2ctJmd0O3Ztc3RhdHNgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBvbiBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgYHN0YXRlYCwgYHN0YXRlX2xvY2FsYCwgYGV2ZW50c2AsIGBldmVudHNfbG9jYWxgLCBgc3RhdGVfcGVuZGluZ2AsIGBldmVudHNfcGVuZGluZ2AsIGFuZCBgc3RhdHNfdXBkYXRlc2AuIFRoYXQmIzM5O3MgYSBodWdlIHBvc2l0aXZlLiBXZSYjMzk7cmUgc3RhcnRpbmcgY2xlYW4uCgpUaGUgcGF0Y2ggaXRzZWxmIG9wdGltaXplcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGl0IHNraXBzIHVwZGF0aW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGNvdW50ZXJzIHdoZW4gdGhlIHN5c3RlbSBpcyB1c2luZyB0aGUgZGVmYXVsdCwgbm9uLWhpZXJhcmNoaWNhbCBjZ3JvdXAgdjIgaGllcmFyY2h5LiBUaGVzZSBsb2NhbCBjb3VudGVycyBhcmUgb25seSB1c2VkIGluIGNncm91cCB2MSAobGVnYWN5KS4gSWYgYSBjb250cm9sbGVyIGlzICpyZWJvdW5kKiB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSwgYG1lbV9jZ3JvdXBfYmluZGAgY29waWVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbnRvIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgLgoKVGhlICYjMzQ7cmlzayYjMzQ7IHF1ZXN0aW9uLCB0aGVuLCBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBjYXJlZnVsbHk6CgoqICAgVGhlIGFsbG9jYXRpb24gb2YgYG1lbWNnLSZndDt2bXN0YXRzYCB2aWEgYGt6YWxsb2Nfb2JqYCBydWxlcyBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhhdCBzdHJ1Y3R1cmUuCiogICBgbWVtY2ctJmd0O3Ztc3RhdHNfcGVyY3B1YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3BlcmNwdV9nZnBgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gd2F0Y2ggZm9yIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IGlzc3VlIGhlcmUuCiogICBJbiBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAsIHRoZSBgYWNgIHN0cnVjdCAob2YgdHlwZSBgc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sYCkgaXMgaW5pdGlhbGl6ZWQgYXMgYSBzdHJ1Y3QgbGl0ZXJhbC4gRXZlcnkgbWVtYmVyIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQ6IGBhZ2dyZWdhdGVgLCBgbG9jYWxgLCBgcGVuZGluZ2AsIGBwcGVuZGluZ2AsIGFuZCBgY3N0YXRgLiBUaGVyZSYjMzk7cyBubyBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoaXMgcGFydGljdWxhciBjYXNlLgoqICAgSSBzZWUgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgaW52b2x2aW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3RzLgoqICAgVGhlcmUgYXJlIG5vIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClNvLCBpcyB0aGVyZSAqYW55KiByaXNrPyBUaGUgb25seSBwb3RlbnRpYWwgaXNzdWUgSSBzZWUgaXMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGFjLSZndDtsb2NhbGAgaXMgTlVMTCAod2hpY2ggaXQgY2FuIGJlIGluIHYyKS4gSG93ZXZlciwgdGhhdCB3b3VsZCBiZSBhIHN0YW5kYXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjcmFzaCwgd2hpY2ggd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nLiBJJiMzOTttIGFsc28gbG9va2luZyBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1dCB0aGVzZSBhcmUgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkJhc2VkIG9uIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBzdGFuZGFyZCBLTVNBTiBjcml0ZXJpYToKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBObyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBsYXRlci4gRXZlcnl0aGluZyBpcyBremFsbG9jJiMzOTtkLgo0LiAgTm8gcG90ZW50aWFsIGJvdW5kcyBjaGVjayBpc3N1ZXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpIZXJlJiMzOTtzIHRoZSByZWFzb25pbmcgSSYjMzk7ZCB1c2UgdG8ganVzdGlmeSB0aGlzOgoKKiAgIFRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtb3J5IGFjY291bnRpbmcgYnkgc2tpcHBpbmcgdGhlIHVwZGF0aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgdm1zdGF0cyBvbiB0aGUgZGVmYXVsdCBjZ3JvdXAgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhZGRpbmcgYSBiaW5kIGNhbGxiYWNrIHRvIGZpbGwgdGhlc2UgbG9jYWwgc3RhdHMgaWYgbW92aW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LgoqICAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOgogICAgKiAgIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC4KICAgICogICBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIGFjYCBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgc3RydWN0IGxpdGVyYWxzLgogICAgKiAgIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgcmVhZHMuCiAgICAqICAgQW55IGJ1Z3MgKGUuZy4sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgaGllcmFyY2h5IHJlYm91bmQgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgY3Jhc2ggaGFuZGxlcnMsIEtBU0FOLCBvciBMT0NLREVQLgoqICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJIGFtIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICYjMzk7c3RhdGVfbG9jYWwmIzM5OyBhbmQgJiMzOTtldmVudHNfbG9jYWwmIzM5OyBhcnJheXMgd2hlbiBydW5uaW5nIG9uIHRoZSBjZ3JvdXAgZGVmYXVsdCBoaWVyYXJjaHkgKGNncm91cCB2MiksIHJldHVybmluZyBOVUxMIGZyb20gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSBhbmQgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KCksIGFuZCBhZGRpbmcgYSBtZW1fY2dyb3VwX2JpbmQoKSBjYWxsYmFjayB0byBiYWNrZmlsbCB0aGVzZSBhcnJheXMgaWYgcmVib3VuZCB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeS5cblxuQWxsIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbWNnX3Ztc3RhdHMpIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKCkgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gVGhlIGxvY2FsIHN0YWNrIGFnZ3JlZ2F0ZV9jb250cm9sIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgbGl0ZXJhbHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGJ5dGVzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYXJlIGV4cG9zZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlYmluZCBhcmUgaGFuZGxlZCBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgZmx1c2hpbmcgYnkgc2tpcHBpbmcgdXBkYXRlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAmIzM5O3N0YXRlX2xvY2FsJiMzOTsgYW5kICYjMzk7ZXZlbnRzX2xvY2FsJiMzOTsgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXG5cbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDIuNDg2MTk4NTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NDgzNTQwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9iaW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICAgIFwibWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZVwiLFxuICAgIFwiZmx1c2hfbm1pX3N0YXRzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBhZ2dyZWdhdGlvbiBieSBza2lwcGluZyBub24taGllcmFyY2hpY2FsIGxvY2FsIHN0YXRzIHVwZGF0ZXMgd2hlbiBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgKGNncm91cCB2MiksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfYmluZCgpIHRvIGluaXRpYWxpemUgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCB3aGVuIHJlYmluZGluZyB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSAoY2dyb3VwIHYxKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgY29udHJvbGxlciBhY2NvdW50aW5nIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDIuNDg2MjA4MDMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzOTQxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTY4Nyw2ICs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xcbiBcXHRhdG9taWNfbG9uZ190XFx0XFx0c3RhdHNfdXBkYXRlcztcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBub24taGllcmFyY2hpY2FsIG1lbWNnLXdpZGUgY291bnRlcnMgYXJlIHJlYWQgYmFjayBvbmx5IGJ5IHRoZSBsZWdhY3lcXG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXFxuKyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHlcXG4rICogKG1lbV9jZ3JvdXBfYmluZCgpIHBvcHVsYXRlcyB0aGVtIGlmIGl0IGlzIGxhdGVyIG1vdmVkIG9udG8gdGhlIGxlZ2FjeVxcbisgKiBoaWVyYXJjaHkpLlxcbisgKi9cXG4rc3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbDtcXG4rfVxcbitcXG4gLypcXG4gICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZ1xcbiAgKlxcbkBAIC00NDg0LDcgKzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcXG4gXFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXFxuIFxcdGxvbmcgKmFnZ3JlZ2F0ZTtcXG4tXFx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xcbitcXHQvKlxcbitcXHQgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0b1xcbitcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbitcXHQgKi9cXG4gXFx0bG9uZyAqbG9jYWw7XFxuIFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi9cXG4gXFx0bG9uZyAqcGVuZGluZztcXG5AQCAtNDUyMyw3ICs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovXFxuLVxcdFxcdGlmIChkZWx0YV9jcHUpXFxuK1xcdFxcdGlmIChkZWx0YV9jcHUgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZWxvY2FsKVxcbiBcXHRcXHRcXHRhYy1cXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xcbiBcXG4gXFx0XFx0aWYgKGRlbHRhKSB7XFxuQEAgLTQ1MzcsNiArNDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4gI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbiBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiB7XFxuK1xcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4gXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbV9zdGF0KSkge1xcbkBAIC00NTQ0LDcgKzQ1NzEsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiBcXHRcXHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTtcXG4gXFxuIFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG4tXFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbitcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbiBcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XFxuIFxcdH1cXG5AQCAtNDU2Niw3ICs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuIFxcdFxcdFxcdFxcdHBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG4tXFx0XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbitcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdH1cXG5AQCAtNDU3OSw3ICs0NjA4LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuIFxcdFxcdFxcdFxcdHBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG4tXFx0XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbitcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuK1xcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRpZiAocGFyZW50KVxcbiBcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XFxuIFxcdFxcdH1cXG5AQCAtNDYwNCw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcXG4gXFxuIFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbiBcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbi1cXHRcXHQubG9jYWwgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxuK1xcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG4gXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG4gXFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG4gXFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZXN0YXRlLFxcbkBAIC00NjE1LDcgKzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbiBcXG4gXFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuIFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzLFxcbi1cXHRcXHQubG9jYWwgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsLFxcbitcXHRcXHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxcbiBcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4gXFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXFxuIFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VldmVudHMsXFxuQEAgLTUxOTksNiArNTIyOSw1MCBAQCBzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4gXFx0eyB9XFx0LyogdGVybWluYXRlICovXFxuIH07XFxuIFxcbisjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuKy8qXFxuKyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsXFxuKyAqIGtleSBhbHJlYWR5IGluIGl0cyBuZXcgc3RhdGUuXFxuKyAqXFxuKyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XFxuKyAqIGhpZXJhcmNoeSwgdm1zdGF0cydzIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgYXJyYXlzIG5lZWQgdG8gYmUgcG9wdWxhdGVkXFxuKyAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxcbisgKiBmcm9tIHRoZSB2bXN0YXRzJ3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XFxuKyAqIGFsbG93cyB0aGUgbW92ZSB3aGVuIHRoZSByb290IGlzIHRoZSBvbmx5IG1lbWNnLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2NzcylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZsdXNoIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGRlc2NlbmRhbnRzIHRoYXQgZ290XFxuK1xcdCAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZVxcbitcXHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHNcXG4rXFx0ICogYXJyYXlzXFxuK1xcdCAqL1xcbitcXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBhIGNvbmN1cnJlbnQgZmx1c2guIFRoZSBwZXJpb2RpYyBmbHVzaGVyIHJ1bnNcXG4rXFx0ICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGVcXG4rXFx0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcXG4rXFx0ICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXNcXG4rXFx0ICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmVcXG4rXFx0ICogYSBzaW5nbGUgQ1BVJ3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlXFxuK1xcdCAqIGNvdW50ZXJzIGFyZSBhcHByb3hpbWF0ZSB2YWx1ZXMuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxcbitcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c1tpXTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuK1xcbiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuIFxcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcXG4gXFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXFxuQEAgLTUyMTIsNiArNTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4gXFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXFxuIFxcdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHQuYmluZCA9IG1lbV9jZ3JvdXBfYmluZCxcXG4gXFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXFxuICNlbmRpZlxcbiBcXHQuZWFybHlfaW5pdCA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQzLjg1MTA1MzA3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNzE1MjY1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9iaW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICAgIFwibWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZVwiLFxuICAgIFwiZmx1c2hfbm1pX3N0YXRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbWNnIHN0YXRpc3RpY3MgYWdncmVnYXRpb24gYnkgc2tpcHBpbmcgbm9uLWhpZXJhcmNoaWNhbCBsb2NhbCBzdGF0cyB1cGRhdGVzIHdoZW4gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2JpbmQoKSB0byBpbml0aWFsaXplIHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwgd2hlbiByZWJpbmRpbmcgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkgKGNncm91cCB2MSkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYWNjb3VudGluZyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTE2ODI5Yzc3M2MxOTQ4ZGRjMWE5M2UwMjM2NWU5OWQxOGI3NzlmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MjU6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLjM3MmFjMTkzZTc3N2IgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY4Nyw2ICs2ODcsMjkgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICogVGhleSBhcmUgc2tpcHBlZCBpZiB0aGUgY29udHJvbGxlciBzaXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeVxuKyAqIChtZW1fY2dyb3VwX2JpbmQoKSBwb3B1bGF0ZXMgdGhlbSBpZiBpdCBpcyBsYXRlciBtb3ZlZCBvbnRvIHRoZSBsZWdhY3lcbisgKiBoaWVyYXJjaHkpLlxuKyAqL1xuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDg0LDcgKzQ1MDcsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTIzLDcgKzQ1NDksNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MzcsNiArNDU2Myw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1NDQsNyArNDU3MSw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTY2LDcgKzQ1OTQsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NzksNyArNDYwOCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDYwNCw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ2MTUsNyArNDY0NSw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbkBAIC01MTk5LDYgKzUyMjksNTAgQEAgc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4gXHR7IH1cdC8qIHRlcm1pbmF0ZSAqL1xuIH07XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuKy8qXG4rICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sbGVyIGhhcyBtb3ZlZCBiZXR3ZWVuIGhpZXJhcmNoaWVzLCB3aXRoIHRoZSBvbl9kZmxcbisgKiBrZXkgYWxyZWFkeSBpbiBpdHMgbmV3IHN0YXRlLlxuKyAqXG4rICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcbisgKiBoaWVyYXJjaHksIHZtc3RhdHMncyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxuKyAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxuKyAqIGZyb20gdGhlIHZtc3RhdHMncyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHlcbisgKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cbisgKi9cbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2JpbmQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3RfY3NzKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mocm9vdF9jc3MpO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmbHVzaCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBkZXNjZW5kYW50cyB0aGF0IGdvdFxuK1x0ICogZGVzdHJveWVkIHJpZ2h0IGJlZm9yZSB0aGUgcmViaW5kIHRoYXQgbWF5IGhhdmUgbGVmdCBjb3VudHMgaW4gdGhlXG4rXHQgKiBwZW5kaW5nIGFycmF5cyB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZm9sZGVkIGludG8gdGhlIHN0YXRlIGFuZCBldmVudHNcbitcdCAqIGFycmF5c1xuK1x0ICovXG4rXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2csIHRydWUpO1xuK1xuK1x0LypcbitcdCAqIE5vdCBzZXJpYWxpemVkIGFnYWluc3QgYSBjb25jdXJyZW50IGZsdXNoLiBUaGUgcGVyaW9kaWMgZmx1c2hlciBydW5zXG4rXHQgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZVxuK1x0ICogYW5kIHN0YXRlX2xvY2FsIHRvZ2V0aGVyLiBJZiB0aGUgZmx1c2ggaGFwcGVucyBpbiBiZXR3ZWVuIHdoZW4gd2VcbitcdCAqIHJlYWQgc3RhdGUgYW5kIHdyaXRlIHRvIHN0YXRlX2xvY2FsLCBpdHMgc3RhdGVfbG9jYWwgaW5jcmVtZW50IGlzXG4rXHQgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZVxuK1x0ICogYSBzaW5nbGUgQ1BVJ3MgYWNjdW11bGF0ZWQgY2hhcmdlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCBhbmQgdGhlXG4rXHQgKiBjb3VudGVycyBhcmUgYXBwcm94aW1hdGUgdmFsdWVzLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19WTVNUQVRfU0laRTsgaSsrKVxuK1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpXTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxuK1x0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzW2ldO1xuK31cbisjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4rXG4gc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxuIFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5AQCAtNTIxMiw2ICs1Mjg2LDcgQEAgc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuIFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXG4gXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK1x0LmJpbmQgPSBtZW1fY2dyb3VwX2JpbmQsXG4gXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbiAjZW5kaWZcbiBcdC5lYXJseV9pbml0ID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQzLjg1MTA1NDkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTgxMDUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogTWVtb3J5IENncm91cCBTdGF0aXN0aWNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbiBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQncyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHN1YnN5c3RlbXPigJR0d28gY3JpdGljYWwgYXJlYXMgdGhhdCBzZWUgaGVhdnkgdXNlIGFuZCBhcmUga25vd24gYXR0YWNrIHN1cmZhY2VzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSB0YXJnZXRpbmcgbWVtb3J5IGNncm91cCBzdGF0aXN0aWMgYWNjb3VudGluZywgd2hpY2ggaXMgYWx3YXlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGl0IGNhbiBlYXNpbHkgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGlzdGljcywgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIG9yIGV2ZW4gZGVuaWFsLW9mLXNlcnZpY2UgY29uZGl0aW9ucy5cblxuSSBzZWUgaXQncyBhZGRlZCBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggZGVhbCB3aXRoIHNraXBwaW5nIHRyYWNraW5nIGxvY2FsIHN0YXRzIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgbGlrZWx5IGNncm91cHMgdjIuIFRoZW4gdGhlcmUgYXJlIGEgZmV3IHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBgZmx1c2hfbm1pX3N0YXRzYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdGhhdCBhcHBlYXIgdG8gY29uZGl0aW9uYWxseSB1c2UgdGhlc2UgbmV3IGFycmF5cy4gVGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG9wdGltaXphdGlvbnMgYW5kIGhhbmRsaW5nIGxlZ2FjeSB2MSBjZ3JvdXBzIGFuZCB2Mi5cblxuRnVydGhlcm1vcmUsIHRoZSBhZGRpdGlvbiBvZiBgbWVtX2Nncm91cF9iaW5kYCBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0c2Agd2hlbiBzd2l0Y2hpbmcgaGllcmFyY2hpZXMgc2NyZWFtIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBjb3B5aW5nIG9mIGBzdGF0ZWAgYW5kIGBldmVudHNgIGJldHdlZW4gbG9jYWwgYW5kIG5vbi1sb2NhbCB2YXJpYWJsZXMuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBhcmVhcyBmb3IgZnV6emluZyB3aWxsIHJldm9sdmUgYXJvdW5kIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCwgYGZsdXNoX25taV9zdGF0c2AsIGFuZCBgbWVtX2Nncm91cF9iaW5kYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCwgc28gdGhleSdyZSB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb25zIGZvciBidWdzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb2RlYmFzZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGBNRU1DR2AsIGBNRU1DR19WMWAsIG9yIGBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgcmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0J3MgbGlrZWx5IHRoYXQgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBsaWtlIGhhdmluZyBsZWdhY3kgY2dyb3VwcyBlbmFibGVkLCB3b3VsZCB0cmlnZ2VyIHRoaXMgcGF0Y2ggaW4gc3BlY2lmaWMgd2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjQ4LjcwOTE2Mzk2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTY3NjcwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NDguNzg4ODQ4NjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjkzODQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgYE1FTUNHYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU2luY2UgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IGVkaXRvciBhbmQgZG8gYSBxdWljayBzZWFyY2guIEhvcGVmdWxseSwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uLCBwZXJoYXBzIHdpdGggc29tZSByZWxldmFudCBjb250ZXh0IGFyb3VuZCBpdC4gSXQncyBhIGNvbW1vbiBwcmFjdGljZSB0byBoYXZlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBzdWItZmVhdHVyZXMgb2YgdGhlIGNvZGUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgdGhlIHJlbGV2YW50IGRpcmVjdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk2OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI1OjUwLjkxNTc5MDg3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMxMjA3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc3LVxcbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc5LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODYtXFxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4OC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNTo1My4yNDcwMDQyNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTY4MTUwMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgaW5pdC9LY29uZmlnYCwgdGhpbmtpbmcgbGlrZSBJJ2QgYXBwcm9hY2ggdGhpcyBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTA3MCB0byAxMTEwLiBUaW1lIHRvIGdldCBhIGZlZWwgZm9yIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIGhlcmUuIEknbSBleHBlY3RpbmcgdGhpcyB0byByZWxhdGUgdG8gc29tZSBjb3JlIHN5c3RlbSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipCb290bG9hZGVyLXJlbGF0ZWQgY29uZmlnczoqKiBBcmUgd2Ugc2VlaW5nIG9wdGlvbnMgdG8gc2VsZWN0IHNwZWNpZmljIGJvb3Rsb2FkZXJzLCBvciBwZXJoYXBzIHBhcmFtZXRlcnMgZm9yIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSBib290IHByb2Nlc3M/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCBpZiBJIHdhbnQgdG8gZGVidWcgYm9vdCBpc3N1ZXMgb3IgbW9kaWZ5IHRoZSBrZXJuZWwgYnVpbGQgZm9yIGEgZGlmZmVyZW50IGJvb3QgZW52aXJvbm1lbnQuXG4qICAgKipFYXJseSBLZXJuZWwgU2V0dXA6KiogSSBhbnRpY2lwYXRlIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB2ZXJ5IGVhcmx5IHBhcnRzIG9mIHRoZSBrZXJuZWwuIE1heWJlIG1lbW9yeSBjb25maWd1cmF0aW9uLCBlYXJseSBkZXZpY2UgZHJpdmVycywgdGhpbmdzIHRoYXQgYXJlIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIHN5c3RlbSBydW5uaW5nIGJlZm9yZSB3ZSBjYW4gZXZlbiBsb2FkIG1vZHVsZXMuIEFueSBpbml0aWFsIGhhcmR3YXJlIGRpc2NvdmVyeSBvciBjb25maWd1cmF0aW9uIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipEZWZhdWx0IEJlaGF2aW9yOioqIEFyZSB0aGVyZSBkZWZhdWx0IHNldHRpbmdzIGJlaW5nIGRlZmluZWQ/IFdoYXQgaGFwcGVucyBpZiB0aGUgdXNlciBkb2Vzbid0IGV4cGxpY2l0bHkgc2VsZWN0IGFueXRoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgXCJzYW5lIGRlZmF1bHRzXCIgaGVyZSB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgSW50ZXJhY3Rpb25zOioqIEFyZSB0aGVyZSBjb25kaXRpb25hbCBvcHRpb25zPyBJcyB0aGlzIEtjb25maWcgc2VjdGlvbiBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3MgSSd2ZSBhbHJlYWR5IGNvbmZpZ3VyZWQ/IEknbGwgYmUgd2F0Y2hpbmcgaG93IHRoZXNlIHBhcmFtZXRlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiogICAqKkRvY3VtZW50YXRpb246KiogSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBlbnRyaWVzIGFyZSB3ZWxsLWRvY3VtZW50ZWQuIEEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbidzIHB1cnBvc2UsIHBvdGVudGlhbCB2YWx1ZXMsIGFuZCBpbXBsaWNhdGlvbnMgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIG1lIHRvIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zLlxuXG5JbiBlc3NlbmNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUgZm91bmRhdGlvbiBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCdzIGZpcnN0IHN0ZXBzIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBrZXkgcGFyYW1ldGVycyB0aGF0IGRpY3RhdGUgdGhlIHZlcnkgZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3Qgc2VxdWVuY2UsIGFuZCBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBwYXJhbWV0ZXJzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCdzIGluaXRpYWxpemF0aW9uLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNTo1Ni40MTUxNTcwNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTEwNTpcXHRcXHRoZWxwXFxuMTEwNjpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMDc6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMDg6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMDk6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTEwOlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTM6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExNDpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjU6NTYuNDE1MzQ3NTQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQzMDgzNTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhleSdyZSBjZW50cmFsIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGUgZmFjdCB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGRlZmF1bHRzIHRvICduJyBhbmQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBzdWdnZXN0cyBpdCdzIGEgc3BlY2lmaWMgdmVyc2lvbiBvciBjb21wYXRpYmlsaXR5IHNldHRpbmcuIEFuZCB0aGVyZSBhcmUgYGlmZGVmYCBibG9ja3MgYXJvdW5kIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYm90aCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGFyZSBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbXBhY3RlZCBieSBvciBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMuIEZyb20gbXkgaW5pdGlhbCBvdmVydmlldywgaXQgbG9va3MgbGlrZSBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUga2V5IGZpbGUgdG8gaW52ZXN0aWdhdGUuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgdG8gbG9vayBjbG9zZWx5IGF0IHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBtZW1fY2dyb3VwX2JpbmRgIC0gVGhpcyBpcyBhZGRlZCBhbmQgYXBwZWFycyB0byBiZSBhIGNhbGxiYWNrIHdpdGhpbiBgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgLmJpbmRgLCB3aGljaCBzb3VuZHMgaW1wb3J0YW50LlxuKiAgIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgLSBUaGlzIG9uZSBpcyBtb2RpZmllZCwgYW5kIGlzIGFsc28gYSBjYWxsYmFjayBpbiBgbWVtb3J5X2NncnBfc3Vic3lzIC5jc3NfcnN0YXRfZmx1c2hgLiBUaGlzIGlzIHRoZSBvbmUgdG8gaW5zcGVjdCBmaXJzdC5cbiogICBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAgLSBBIHN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFnZ3JlZ2F0ZSBmdW5jdGlvbiB3b3Jrcy5cbiogICBgZmx1c2hfbm1pX3N0YXRzYCAtIEFsc28gc3RhdGljLCBhbmQgY2FsbGVkIHVuZGVyIHRoZSBjb25kaXRpb24gYENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AsIGluZGljYXRpbmcgaXQncyByZWxhdGVkIHRvIE5NSSBzYWZldHkuIFRoaXMgaXMgcmVsZXZhbnQgdG8gbXkgY29uY2VybnMgYWJvdXQgTk1JIGlzc3VlcyBpbiB0aGlzIHBhcnRpY3VsYXIgY29kZS5cbiogICBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCAtIEJvdGggYXBwZWFyIHRvIGJlIHN0YXRpYyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2Ugc2hvdWxkIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQgdG8gdW5kZXJzdGFuZCBhdCBhIGdsYW5jZS5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX2JpbmRgLCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgIGFyZSwgaW5kZWVkLCB0aGUgc3ltYm9scyBJIHRoaW5rIHRoZXkgYXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZ29pbmcgdG8ganVtcCB0byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA0NTAwIHRvIDQ2NjAsIHRvIHNlZSB0aGUgZXhhY3QgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHRoZWlyIHZpc2liaWxpdHksIGVuc3VyaW5nIHRoZXkgbWF0Y2ggd2hhdCBJJ20gZXhwZWN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDAuODQ2MTg1NzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUyMDpcXHRcXHRsb25nICpjc3RhdDtcXG40NTIxOlxcdFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXFxuNDUyMjpcXHRcXHRsb25nICpjc3RhdF9wcmV2O1xcbjQ1MjM6XFx0XFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cXG40NTI0OlxcdFxcdGludCBzaXplO1xcbjQ1MjU6XFx0fTtcXG40NTI2OlxcdFxcbjQ1Mjc6XFx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbjQ1Mjg6XFx0e1xcbjQ1Mjk6XFx0XFx0aW50IGk7XFxuNDUzMDpcXHRcXHRsb25nIGRlbHRhLCBkZWx0YV9jcHUsIHY7XFxuNDUzMTpcXHRcXG40NTMyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYy1cXHUwMDNlc2l6ZTsgaSsrKSB7XFxuNDUzMzpcXHRcXHRcXHQvKlxcbjQ1MzQ6XFx0XFx0XFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXFxuNDUzNTpcXHRcXHRcXHQgKiBiZWxvdyB1cy4gV2UncmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xcbjQ1MzY6XFx0XFx0XFx0ICogYSBnbG9iYWwgY291bnRlciwgc28gdGhlIGZpcnN0IGN5Y2xlIHdpbGwgZ2V0IHRoZW0uXFxuNDUzNzpcXHRcXHRcXHQgKi9cXG40NTM4OlxcdFxcdFxcdGRlbHRhID0gYWMtXFx1MDAzZXBlbmRpbmdbaV07XFxuNDUzOTpcXHRcXHRcXHRpZiAoZGVsdGEpXFxuNDU0MDpcXHRcXHRcXHRcXHRhYy1cXHUwMDNlcGVuZGluZ1tpXSA9IDA7XFxuNDU0MTpcXHRcXG40NTQyOlxcdFxcdFxcdC8qIEFkZCBDUFUgY2hhbmdlcyBvbiB0aGlzIGxldmVsIHNpbmNlIHRoZSBsYXN0IGZsdXNoICovXFxuNDU0MzpcXHRcXHRcXHRkZWx0YV9jcHUgPSAwO1xcbjQ1NDQ6XFx0XFx0XFx0diA9IFJFQURfT05DRShhYy1cXHUwMDNlY3N0YXRbaV0pO1xcbjQ1NDU6XFx0XFx0XFx0aWYgKHYgIT0gYWMtXFx1MDAzZWNzdGF0X3ByZXZbaV0pIHtcXG40NTQ2OlxcdFxcdFxcdFxcdGRlbHRhX2NwdSA9IHYgLSBhYy1cXHUwMDNlY3N0YXRfcHJldltpXTtcXG40NTQ3OlxcdFxcdFxcdFxcdGRlbHRhICs9IGRlbHRhX2NwdTtcXG40NTQ4OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vjc3RhdF9wcmV2W2ldID0gdjtcXG40NTQ5OlxcdFxcdFxcdH1cXG40NTUwOlxcdFxcbjQ1NTE6XFx0XFx0XFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xcbjQ1NTI6XFx0XFx0XFx0aWYgKGRlbHRhX2NwdSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbG9jYWwpXFxuNDU1MzpcXHRcXHRcXHRcXHRhYy1cXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xcbjQ1NTQ6XFx0XFxuNDU1NTpcXHRcXHRcXHRpZiAoZGVsdGEpIHtcXG40NTU2OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2VhZ2dyZWdhdGVbaV0gKz0gZGVsdGE7XFxuNDU1NzpcXHRcXHRcXHRcXHRpZiAoYWMtXFx1MDAzZXBwZW5kaW5nKVxcbjQ1NTg6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZXBwZW5kaW5nW2ldICs9IGRlbHRhO1xcbjQ1NTk6XFx0XFx0XFx0fVxcbjQ1NjA6XFx0XFx0fVxcbjQ1NjE6XFx0fVxcbjQ1NjI6XFx0XFxuNDU2MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuNDU2NDpcXHRzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQ1NjU6XFx0e1xcbjQ1NjY6XFx0XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxuNDU2NzpcXHRcXHRpbnQgbmlkO1xcbjQ1Njg6XFx0XFxuNDU2OTpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtX3N0YXQpKSB7XFxuNDU3MDpcXHRcXHRcXHRpbnQga21lbSA9IGF0b21pY194Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbV9zdGF0LCAwKTtcXG40NTcxOlxcdFxcdFxcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xcbjQ1NzI6XFx0XFxuNDU3MzpcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxuNDU3NDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuNDU3NTpcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG40NTc2OlxcdFxcdFxcdGlmIChwYXJlbnQpXFxuNDU3NzpcXHRcXHRcXHRcXHRwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XFxuNDU3ODpcXHRcXHR9XFxuNDU3OTpcXHRcXG40NTgwOlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbjQ1ODE6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF07XFxuNDU4MjpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ1ODM6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XFxuNDU4NDpcXHRcXG40NTg1OlxcdFxcdFxcdGlmIChwYXJlbnQpXFxuNDU4NjpcXHRcXHRcXHRcXHRwbHN0YXRzID0gcGFyZW50LVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VscnV2ZWNfc3RhdHM7XFxuNDU4NzpcXHRcXG40NTg4OlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2cG4tXFx1MDAzZXNsYWJfcmVjbGFpbWFibGUpKSB7XFxuNDU4OTpcXHRcXHRcXHRcXHRpbnQgc2xhYiA9IGF0b21pY194Y2hnKFxcdTAwMjZwbi1cXHUwMDNlc2xhYl9yZWNsYWltYWJsZSwgMCk7XFxuNDU5MDpcXHRcXHRcXHRcXHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xcbjQ1OTE6XFx0XFxuNDU5MjpcXHRcXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbjQ1OTM6XFx0XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG40NTk0OlxcdFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbjQ1OTU6XFx0XFx0XFx0XFx0XFx0cGxzdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG40NTk2OlxcdFxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG40NTk3OlxcdFxcdFxcdFxcdGlmIChzdGF0ZV9sb2NhbClcXG40NTk4OlxcdFxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbjQ1OTk6XFx0XFx0XFx0XFx0aWYgKHBhcmVudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDAuODQ2NzM0ODM2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTc5MDgzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBtbS9tZW1jb250cm9sLmNgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBtbS9tZW1jb250cm9sLmNgIOKAkyBMaW5lcyA0NjMwLTQ2NzAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDQ2MzAgdG8gNDY3MCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBrbm93IHRoaXMgaXMgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wgY29kZSwgc28gSSBhbnRpY2lwYXRlIGRlYWxpbmcgd2l0aCB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBtZW1vcnkgcmVzb3VyY2UgbWFuYWdlbWVudCwgcG9zc2libHkgcmVsYXRlZCB0byBjZ3JvdXBzIG9yIHRoZSBzbGFiIGFsbG9jYXRvciwgcmlnaHQ/IEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIGZhaXJseSBpbnRyaWNhdGU7IGxpa2VseSwgdGhpcyBzZWN0aW9uIHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIG9yIGVuZm9yY2VtZW50LiBJdCdzIHByb2JhYmx5IHRpZWQgdG8gdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBhIHNwZWNpZmljIGNvbnRyb2wgZ3JvdXAsIGEgY3JpdGljYWwgcGFydCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmluZyBmYWlyIHNoYXJpbmcuXG5cbkkgYmV0IEknbGwgc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBvZiBtZW1vcnkgdXNhZ2UgYW5kIGxpbWl0IGVuZm9yY2VtZW50LiBJJ20gYWxzbyByZWFkeSBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSBhbGxvY2F0b3Igb3IgdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZXIsIGJlY2F1c2UgdGhlc2Ugd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMgb2YgaG93IG1lbW9yeSBjb250cm9sIHRydWx5IHdvcmtzLiBJIGFtIHByb2JhYmx5IGxvb2tpbmcgYXQgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uLCBsb2NraW5nIGFuZCB2YXJpb3VzIGNyaXRpY2FsIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyB0aHJlYWQtc2FmZSBhbmQgY29vcmRpbmF0ZWQuXG5cbkxldCdzIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgdHlwZSDigJMgaXMgaXQgcGFnZSBjYWNoZSwgYW5vbnltb3VzIG1lbW9yeSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtZW1vcnkgcmVjbGFpbSBwb2xpY2llcyBvciB0aHJvdHRsaW5nIG1lY2hhbmlzbXMgd2l0aGluIHRob3NlIGxpbmVzIHRvby4gVGhlIGdvYWwgaXMgbGlrZWx5IHRvIGVuZm9yY2UgdGhlIGxpbWl0cyBkZWZpbmVkIGluIGEgY2dyb3VwLCBlaXRoZXIgZ3JhY2VmdWxseSBvciBhZ2dyZXNzaXZlbHkuIEkgd2lsbCBiZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHJlbGF0ZWQgc2VjdGlvbnMgdG8gY2hlY2sgdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGUgY29kZSBvciwgbW9yZSBpbXBvcnRhbnRseSwgYW55IHNwb3RzIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGNvdWxkIGJlIGx1cmtpbmcuIFRoYXQgYWx3YXlzIG1hdHRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA0LjI2NDY1Mzc3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MzA6XFx0XFxuNDYzMTpcXHRcXHRmbHVzaF9ubWlfc3RhdHMobWVtY2csIHBhcmVudCk7XFxuNDYzMjpcXHRcXG40NjMzOlxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQ2MzQ6XFx0XFxuNDYzNTpcXHRcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG40NjM2OlxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGUsXFxuNDYzNzpcXHRcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxuNDYzODpcXHRcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbjQ2Mzk6XFx0XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG40NjQwOlxcdFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VzdGF0ZSxcXG40NjQxOlxcdFxcdFxcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXFx1MDAzZXN0YXRlX3ByZXYsXFxuNDY0MjpcXHRcXHRcXHQuc2l6ZSA9IE1FTUNHX1ZNU1RBVF9TSVpFLFxcbjQ2NDM6XFx0XFx0fTtcXG40NjQ0OlxcdFxcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXFx1MDAyNmFjKTtcXG40NjQ1OlxcdFxcbjQ2NDY6XFx0XFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuNDY0NzpcXHRcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG40NjQ4OlxcdFxcdFxcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXFxuNDY0OTpcXHRcXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG40NjUwOlxcdFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbjQ2NTE6XFx0XFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZWV2ZW50cyxcXG40NjUyOlxcdFxcdFxcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXFx1MDAzZWV2ZW50c19wcmV2LFxcbjQ2NTM6XFx0XFx0XFx0LnNpemUgPSBOUl9NRU1DR19FVkVOVFMsXFxuNDY1NDpcXHRcXHR9O1xcbjQ2NTU6XFx0XFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcXHUwMDI2YWMpO1xcbjQ2NTY6XFx0XFxuNDY1NzpcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG40NjU4OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbjQ2NTk6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqbHN0YXRzID0gcG4tXFx1MDAzZWxydXZlY19zdGF0cztcXG40NjYwOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKnBsc3RhdHMgPSBOVUxMO1xcbjQ2NjE6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0c19wZXJjcHUgKmxzdGF0YztcXG40NjYyOlxcdFxcbjQ2NjM6XFx0XFx0XFx0aWYgKHBhcmVudClcXG40NjY0OlxcdFxcdFxcdFxcdHBsc3RhdHMgPSBwYXJlbnQtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZWxydXZlY19zdGF0cztcXG40NjY1OlxcdFxcbjQ2NjY6XFx0XFx0XFx0bHN0YXRjID0gcGVyX2NwdV9wdHIocG4tXFx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDY2NzpcXHRcXG40NjY4OlxcdFxcdFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbjQ2Njk6XFx0XFx0XFx0XFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cXHUwMDNlc3RhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA0LjI2NTE4NTk5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUwNDc3NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW52b2NhdGlvbiBvZiBgbWVtX2Nncm91cF9iaW5kYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igc3Vycm91bmRpbmcgYG1lbV9jZ3JvdXBfYmluZGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoYXQncyBhY3R1YWxseSB0cmlnZ2VyaW5nIHRoaXMgZnVuY3Rpb24gY2FsbD8gUmlnaHQsIGl0J3MgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgbWVtb3J5X2NncnBfc3Vic3lzYCBzdHJ1Y3R1cmUuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVuIGRvZXMgdGhlIGtlcm5lbCBpbnZva2UgdGhhdCBgLmJpbmRgIG1ldGhvZD8gSSByZWNhbGwgdGhhdCBgLmJpbmRgIGlzIGNhbGxlZCB3aGVuIHN1YnN5c3RlbXMgYXJlIGJlaW5nIHJlYm91bmQgb3IgbW91bnRlZC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgcmViaW5kX3N1YnN5c3RlbXMoKWAgaW4gYGtlcm5lbC9jZ3JvdXAvY2dyb3VwLmNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gdHJhY2UuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBtZXRob2QuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBiaW5kIG1ldGhvZCBpcyB1c2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MDYuNTE1NjY3Mzc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNTc0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYmluZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImNyeXB0by9hZl9hbGcuYz0yMDQ9c3RhdGljIGludCBhbGdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbmNyeXB0by9hZl9hbGcuYy0yMzktXFxuY3J5cHRvL2FmX2FsZy5jOjI0MDpcXHRwcml2YXRlID0gdHlwZS1cXHUwMDNlYmluZChzYS1cXHUwMDNlc2FsZ19uYW1lKTtcXG5jcnlwdG8vYWZfYWxnLmMtMjQxLVxcdGlmIChJU19FUlIocHJpdmF0ZSkpIHtcXG4tLVxcbmRyaXZlcnMvYWNwaS9nbHVlLmM9MzUyPXZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYWNwaS9nbHVlLmMtMzg4LVxcdGlmIChhZGV2LVxcdTAwM2VoYW5kbGVyIFxcdTAwMjZcXHUwMDI2IGFkZXYtXFx1MDAzZWhhbmRsZXItXFx1MDAzZWJpbmQpXFxuZHJpdmVycy9hY3BpL2dsdWUuYzozODk6XFx0XFx0YWRldi1cXHUwMDNlaGFuZGxlci1cXHUwMDNlYmluZChkZXYpO1xcbmRyaXZlcnMvYWNwaS9nbHVlLmMtMzkwLVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jPTIyNz1zdGF0aWMgaW50IHRyeV90b19icmluZ191cF9hZ2dyZWdhdGVfZGV2aWNlKHN0cnVjdCBhZ2dyZWdhdGVfZGV2aWNlICphZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI0OC1cXHQvKiBGb3VuZCBhbGwgY29tcG9uZW50cyAqL1xcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzoyNDk6XFx0cmV0ID0gYWRldi1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGFkZXYtXFx1MDAzZXBhcmVudCk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTI1MC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jPTYzMz1zdGF0aWMgaW50IGNvbXBvbmVudF9iaW5kKHN0cnVjdCBjb21wb25lbnQgKmNvbXBvbmVudCwgc3RydWN0IGFnZ3JlZ2F0ZV9kZXZpY2UgKmFkZXYsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtNjU4LVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzo2NTk6XFx0cmV0ID0gY29tcG9uZW50LVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQoY29tcG9uZW50LVxcdTAwM2VkZXYsIGFkZXYtXFx1MDAzZXBhcmVudCwgZGF0YSk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTY2MC1cXHRpZiAoIXJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz00MDA9c3RhdGljIHN0cnVjdCBzb2NrZXQgKmRyYmRfdHJ5X2Nvbm5lY3Qoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtNDUyLVxcdHdoYXQgPSBcXFwiYmluZCBiZWZvcmUgY29ubmVjdFxcXCI7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzo0NTM6XFx0ZXJyID0gc29jay1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKSBcXHUwMDI2c3JjX2luNiwgbXlfYWRkcl9sZW4pO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtNDU0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz01MDc9c3RhdGljIGludCBwcmVwYXJlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbiwgc3RydWN0IGFjY2VwdF93YWl0X2RhdGEgKmFkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy01MzktXFx0d2hhdCA9IFxcXCJiaW5kIGJlZm9yZSBsaXN0ZW5cXFwiO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6NTQwOlxcdGVyciA9IHNfbGlzdGVuLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQoc19saXN0ZW4sIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVxcdTAwMjZteV9hZGRyLCBteV9hZGRyX2xlbik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy01NDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jPTg0PXN0YXRpYyBpbnQgYWxwaGFfY29yZV9hZ3BfaW5zZXJ0X21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCxcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtOTgtXFxuZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYzo5OTpcXHRzdGF0dXMgPSBhZ3AtXFx1MDAzZW9wcy1cXHUwMDNlYmluZChhZ3AsIHBnX3N0YXJ0LCBtZW0pO1xcbmRyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMtMTAwLVxcdG1iKCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYz0xMDY9c3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJ2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMtMTUzLVxcdGlmIChncHVfb3BzKVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jOjE1NDpcXHRcXHRyZXQgPSBncHVfb3BzLVxcdTAwM2ViaW5kKGRldiwgZGV2LCBOVUxMKTtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYy0xNTUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9jb3JlL29iamVjdC5jPTEzNj1udmttX29iamVjdF9iaW5kKHN0cnVjdCBudmttX29iamVjdCAqb2JqZWN0LCBzdHJ1Y3QgbnZrbV9ncHVvYmogKmdwdW9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vY29yZS9vYmplY3QuYy0xMzktXFx0aWYgKG9iamVjdC1cXHUwMDNlZnVuYy1cXHUwMDNlYmluZClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2NvcmUvb2JqZWN0LmM6MTQwOlxcdFxcdHJldHVybiBvYmplY3QtXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQob2JqZWN0LCBncHVvYmosIGFsaWduLCBwZ3B1b2JqKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2NvcmUvb2JqZWN0LmMtMTQxLVxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmM9Nzk9bnZrbV9kaXNwX2NoYW5fY2hpbGRfbmV3KGNvbnN0IHN0cnVjdCBudmttX29jbGFzcyAqb2NsYXNzLCB2b2lkICphcmd2LCB1MzIgYXJnYyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jLTk4LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2Rpc3AvY2hhbi5jOjk5OlxcdG9iamVjdC1cXHUwMDNlaGFzaCA9IGNoYW4tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQoY2hhbiwgb2JqZWN0LVxcdTAwM2VvcHJveHkub2JqZWN0LCBvY2xhc3MtXFx1MDAzZWhhbmRsZSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGlzcC9jaGFuLmMtMTAwLVxcdGlmIChvYmplY3QtXFx1MDAzZWhhc2ggXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYz00Nz1udmttX2RtYW9ial9iaW5kKHN0cnVjdCBudmttX29iamVjdCAqYmFzZSwgc3RydWN0IG52a21fZ3B1b2JqICpncHVvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kbWEvdXNlci5jLTUwLVxcdHN0cnVjdCBudmttX2RtYW9iaiAqZG1hb2JqID0gbnZrbV9kbWFvYmooYmFzZSk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYzo1MTpcXHRyZXR1cm4gZG1hb2JqLVxcdTAwM2VmdW5jLVxcdTAwM2ViaW5kKGRtYW9iaiwgZ3B1b2JqLCBhbGlnbiwgcGdwdW9iaik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZG1hL3VzZXIuYy01Mi19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYz00MT1udmttX2NoYW5fY2N0eF9iaW5kKHN0cnVjdCBudmttX2NoYW4gKmNoYW4sIHN0cnVjdCBudmttX2VuZ24gKmVuZ24sIHN0cnVjdCBudmttX2NjdHggKmNjdHgpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL2NoYW4uYy02MS1cXHQvKiBVcGRhdGUgY29udGV4dCBwb2ludGVyLiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vY2hhbi5jOjYyOlxcdGVuZ24tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQoZW5nbiwgY2N0eCwgY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby9jaGFuLmMtNjMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9maWZvL3VjaGFuLmM9Mjg2PW52a21fdWNoYW5faW5pdChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vdWNoYW4uYy0yOTMtXFx0aWYgKGNoYW4tXFx1MDAzZWZ1bmMtXFx1MDAzZWJpbmQpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZmlmby91Y2hhbi5jOjI5NDpcXHRcXHRjaGFuLVxcdTAwM2VmdW5jLVxcdTAwM2ViaW5kKGNoYW4pO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2ZpZm8vdWNoYW4uYy0yOTUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jPTM3Mj1zdGF0aWMgaW50IHZtd19yZXNvdXJjZV9kb192YWxpZGF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jLTM4OC1cXHQgICAgICghZnVuYy1cXHUwMDNlbmVlZHNfZ3Vlc3RfbWVtb3J5IFxcdTAwMjZcXHUwMDI2IHZhbF9idWYtXFx1MDAzZWJvKSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jOjM4OTpcXHRcXHRyZXQgPSBmdW5jLVxcdTAwM2ViaW5kKHJlcywgdmFsX2J1Zik7XFxuZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYy0zOTAtXFx0XFx0aWYgKHVubGlrZWx5KHJldCAhPSAwKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jPTk4OT1zdGF0aWMgaW50IGtlcm5lbF9iaW5kY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzLCBzdHJ1Y3Qgc29ja2FkZHIgKmxhZGRyLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtOTk1LVxcdHNvY2tfc2V0X3JldXNlYWRkcihzLVxcdTAwM2Vzayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM6OTk2OlxcdHJldCA9IHMtXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilsYWRkciwgbGFkZHJsZW4pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jLTk5Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM9MTI5ND1pbnQgZXJkbWFfY3JlYXRlX2xpc3RlbihzdHJ1Y3QgaXdfY21faWQgKmlkLCBpbnQgYmFja2xvZylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9jbS5jLTEzMTUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmM6MTMxNjpcXHRyZXQgPSBzLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2NtLmMtMTMxNy1cXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jPTEzNzY9c3RhdGljIGludCBrZXJuZWxfYmluZGNvbm5lY3Qoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHNvY2thZGRyICpsYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5My1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19jbS5jOjEzOTQ6XFx0cnYgPSBzLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmQocywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopbGFkZHIsIHNpemUpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTM5NS1cXHRpZiAocnYgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYz0xODA5PWludCBzaXdfY3JlYXRlX2xpc3RlbihzdHJ1Y3QgaXdfY21faWQgKmlkLCBpbnQgYmFja2xvZylcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0My1cXHRcXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODQ0OlxcdFxcdHJ2ID0gcy1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg0NS1cXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg2Ny1cXHRcXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfY20uYzoxODY4OlxcdFxcdHJ2ID0gcy1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWxhZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X2NtLmMtMTg2OS1cXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9zcGFuLmM9MTQ5OT1tbHhzd19zcF9zcGFuX3RyaWdnZXJfZW50cnlfY3JlYXRlKHN0cnVjdCBtbHhzd19zcF9zcGFuICpzcGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jLTE1MjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fc3Bhbi5jOjE1MjE6XFx0ZXJyID0gdHJpZ2dlcl9lbnRyeS1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKHRyaWdnZXJfZW50cnkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3NwYW4uYy0xNTIyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTcyNj11c2JuZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDctXFx0XFx0bmV0LVxcdTAwM2VtYXhfbXR1ID0gRVRIX01BWF9NVFU7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE4MDg6XFx0XFx0c3RhdHVzID0gaW5mby1cXHUwMDNlYmluZChkZXYsIHVkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA5LVxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmM9NTk9aW50IHBjaV9lcGZfYmluZChzdHJ1Y3QgcGNpX2VwZiAqZXBmKVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTIyLVxcdFxcdGVwZl92Zi1cXHUwMDNlc2VjX2VwYyA9IGVwZi1cXHUwMDNlc2VjX2VwYztcXG5kcml2ZXJzL3BjaS9lbmRwb2ludC9wY2ktZXBmLWNvcmUuYzoxMjM6XFx0XFx0cmV0ID0gZXBmX3ZmLVxcdTAwM2Vkcml2ZXItXFx1MDAzZW9wcy1cXHUwMDNlYmluZChlcGZfdmYpO1xcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jLTEyNC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTI4LVxcbmRyaXZlcnMvcGNpL2VuZHBvaW50L3BjaS1lcGYtY29yZS5jOjEyOTpcXHRyZXQgPSBlcGYtXFx1MDAzZWRyaXZlci1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGVwZik7XFxuZHJpdmVycy9wY2kvZW5kcG9pbnQvcGNpLWVwZi1jb3JlLmMtMTMwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz0zNDI9aW50IHBjaV90c21fYmluZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGt2bSAqa3ZtLCB1MzIgdGRpX2lkKVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtMzY3LVxcbmRyaXZlcnMvcGNpL3RzbS5jOjM2ODpcXHR0ZGkgPSB0b19wY2lfdHNtX29wcyhwZGV2LVxcdTAwM2V0c20pLVxcdTAwM2ViaW5kKHBkZXYsIGt2bSwgdGRpX2lkKTtcXG5kcml2ZXJzL3BjaS90c20uYy0zNjktXFx0aWYgKElTX0VSUih0ZGkpKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTEwMDg9aW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU3LSBiaW5kOlxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMDU4OlxcdGlmIChkcml2ZXItXFx1MDAzZWJpbmQgXFx1MDAyNlxcdTAwMjYgKGVycm9yID0gZHJpdmVyLVxcdTAwM2ViaW5kKGluc3RhbmNlLCBpbnRmLCBpZCkpIFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDU5LVxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IGJpbmQgZmFpbGVkOiAlZCFcXFxcblxcXCIsIF9fZnVuY19fLCBlcnJvcik7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MzEwPWludCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzMi1cXHRpZiAoZnVuY3Rpb24tXFx1MDAzZWJpbmQpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MzMzOlxcdFxcdHZhbHVlID0gZnVuY3Rpb24tXFx1MDAzZWJpbmQoY29uZmlnLCBmdW5jdGlvbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTMzNC1cXHRcXHRpZiAodmFsdWUgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM9MjUzMT1zdGF0aWMgaW50IGNvbXBvc2l0ZV9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMtMjU1NS1cXHQgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmM6MjU1NjpcXHRzdGF0dXMgPSBjb21wb3NpdGUtXFx1MDAzZWJpbmQoY2Rldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jLTI1NTctXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYz0xNjQxPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmRfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE2NjEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM6MTY2MjpcXHRyZXQgPSBkcml2ZXItXFx1MDAzZWJpbmQodWRjLVxcdTAwM2VnYWRnZXQsIGRyaXZlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTY2My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZGxtL2xvd2NvbW1zLmM9MTU3MD1zdGF0aWMgaW50IGRsbV9jb25uZWN0KHN0cnVjdCBjb25uZWN0aW9uICpjb24pXFxuLS1cXG5mcy9kbG0vbG93Y29tbXMuYy0xNTkzLVxcbmZzL2RsbS9sb3djb21tcy5jOjE1OTQ6XFx0cmVzdWx0ID0gZGxtX3Byb3RvX29wcy1cXHUwMDNlYmluZChzb2NrKTtcXG5mcy9kbG0vbG93Y29tbXMuYy0xNTk1LVxcdGlmIChyZXN1bHQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTE1Nzk9c3RhdGljIHZvaWQgbzJuZXRfc3RhcnRfY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE2NDctXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNjQ4OlxcdHJldCA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2bXlhZGRyLFxcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTY0OS1cXHRcXHRcXHQgICAgICBzaXplb2YobXlhZGRyKSk7XFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jPTIwNDg9c3RhdGljIGludCBvMm5ldF9vcGVuX2xpc3RlbmluZ19zb2NrKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydClcXG4tLVxcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMjA3NC1cXHRzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoyMDc1OlxcdHJldCA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2c2luLCBzaXplb2Yoc2luKSk7XFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0yMDc2LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE4Mzg9aW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBfcm9vdCAqZHN0X3Jvb3QsIHUzMiBzc19tYXNrKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTQ4LVxcdFxcdGlmIChzcy1cXHUwMDNlYmluZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE5NDk6XFx0XFx0XFx0c3MtXFx1MDAzZWJpbmQoY3NzKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5NTAtXFx0fSB3aGlsZV9lYWNoX3N1YnN5c19tYXNrKCk7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTY1MTk9aW50IF9faW5pdCBjZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02NTk2LVxcdFxcdGlmIChzcy1cXHUwMDNlYmluZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjY1OTc6XFx0XFx0XFx0c3MtXFx1MDAzZWJpbmQoaW5pdF9jc3Nfc2V0LnN1YnN5c1tzc2lkXSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy02NTk4LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmM9OTk9c3RhdGljIGludCBpZWVlODAyMTU0X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYy0xMDQtXFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2ViaW5kKVxcbm5ldC9pZWVlODAyMTU0L3NvY2tldC5jOjEwNTpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWJpbmQoc2ssIHVhZGRyLCBhZGRyX2xlbik7XFxubmV0L2llZWU4MDIxNTQvc29ja2V0LmMtMTA2LVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTQ0OT1pbnQgaW5ldF9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtNDU1LVxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmluZCkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzo0NTY6XFx0XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9pcHY0L2FmX2luZXQuYy00NTctXFx0fVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz00MjY9aW50IGluZXQ2X2JpbmRfc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM1LVxcdGlmIChwcm90LVxcdTAwM2ViaW5kKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDM2OlxcdFxcdHJldHVybiBwcm90LVxcdTAwM2ViaW5kKHNrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDM3LVxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTgxMT1zdGF0aWMgaW50IGdlbmxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE4NDEtXFx0XFx0aWYgKGZhbWlseS1cXHUwMDNlYmluZClcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxODQyOlxcdFxcdFxcdGZhbWlseS1cXHUwMDNlYmluZChpKTtcXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xODQzLVxcbi0tXFxubmV0L3Bob25ldC9zb2NrZXQuYz0xNTY9c3RhdGljIGludCBwbl9zb2NrZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGxlbilcXG4tLVxcbm5ldC9waG9uZXQvc29ja2V0LmMtMTY1LVxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmluZClcXG5uZXQvcGhvbmV0L3NvY2tldC5jOjE2NjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWJpbmQoc2ssIGFkZHIsIGxlbik7XFxubmV0L3Bob25ldC9zb2NrZXQuYy0xNjctXFxuLS1cXG5uZXQvc29ja2V0LmM9MTkzNz1pbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuLS1cXG5uZXQvc29ja2V0LmMtMTk0NC1cXHRpZiAoIWVycilcXG5uZXQvc29ja2V0LmM6MTk0NTpcXHRcXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlYmluZChzb2NrLFxcbm5ldC9zb2NrZXQuYy0xOTQ2LVxcdFxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi0tXFxubmV0L3NvY2tldC5jPTM2Njk9aW50IGtlcm5lbF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcmxlbilcXG4tLVxcbm5ldC9zb2NrZXQuYy0zNjc0LVxcbm5ldC9zb2NrZXQuYzozNjc1OlxcdHJldHVybiBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2YWRkcmVzcyxcXG5uZXQvc29ja2V0LmMtMzY3Ni1cXHRcXHRcXHRcXHRcXHQgIGFkZHJsZW4pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19hZGRyLmM9MjM4MD1zdGF0aWMgaW50IHRlc3RfeG1zZyhzdHJ1Y3Qgc29ja19hZGRyX3Rlc3QgKnRlc3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfYWRkci5jOjI0MDc6XFx0XFx0ZXJyID0gdGVzdC1cXHUwMDNlb3BzLVxcdTAwM2ViaW5kKGNsaWVudCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzcmNfYWRkcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2FkZHIuYy0yNDA4LVxcdFxcdFxcdFxcdCAgICAgIHNyY19hZGRyX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjA4Ljk0NzI1MDE3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ3Mjk4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgU3Vic3lzdGVtIEJpbmQgYW5kIFN0YXQgRmx1c2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzdGF0IGNvbGxlY3Rpb24gYW5kIGZsdXNoaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBgcmViaW5kX3N1YnN5c3RlbXNgLCB3aGljaCBjYWxscyBgc3MtXHUwMDNlYmluZChjc3MpYCwgYW5kIGFsc28gY2FsbGVkIGR1cmluZyBgY2dyb3VwX2luaXQoKWAuIFRoZSBjcnVjaWFsIHBhcnQgZm9yIG1lIGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGhvb2tzIGludG8gdGhpcy5cblxuSSdtIGZvY3VzZWQgb24gdGhlc2Ugc3ltYm9sczogYG1lbV9jZ3JvdXBfYmluZGAsIHdoaWNoIGlzIHRoZSBiaW5kIGNhbGxiYWNrOyBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB0aGUgc3RhdCBmbHVzaCBjYWxsYmFjazsgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCBhIHN0YXQgYWdncmVnYXRpb24gaGVscGVyOyBgZmx1c2hfbm1pX3N0YXRzYCwgYW4gbm1pIHN0YXQgZmx1c2hpbmcgaGVscGVyOyBhbmQgZmluYWxseSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCwgd2hpY2ggYXJlIG5ldyBpbmxpbmUgaGVscGVycy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIG90aGVyIGNhbGxlciBmdW5jdGlvbnMgYW5kIGlmIHRoZXNlIHN5bWJvbHMgYWxsIGxvb2sgZ29vZC4gU28sIGxldCdzIHRyYWNlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGhvdyBzdGF0cyBpbnRlcmFjdC4gSSBzZWUgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBpcyBwYXJ0IG9mIHRoZSByc3RhdCBmbHVzaCBpbmZyYXN0cnVjdHVyZSDigJMgYmVpbmcgY2FsbGVkIGJ5IGBjZ3JvdXBfcnN0YXRfZmx1c2hfbG9ja2VkYCBhbmQgYGNncm91cF9yc3RhdF9mbHVzaGAuIEkgYWxzbyBzZWUgYG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNgIGFuZCBgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzYC4gQWRkaXRpb25hbGx5LCBJIHNlZSBgbWVtb3J5X3N0YXRfc2hvd2AgYW5kIGBtZW1jZ19zdGF0X3Nob3dgLCB3aGljaCBhcHBlYXIgdG8gcmVhZCBmcm9tIGBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZm9yIGxlZ2FjeSBtZW1vcnkuc3RhdCByZXBvcnRpbmcuXG5cblRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBob3cgdGhlIGxlZ2FjeSBgbWVtb3J5LnN0YXRgIHJlYWRzIHN0YXRzLCB3aGljaCBzaG91bGQgb2ZmZXIgdmFsdWFibGUgaW5zaWdodCBpbnRvIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGNvbmZsaWN0cyB3aXRoIHRoZSBuZXcgc3RhdCBjb2xsZWN0aW9uIGFuZCBmbHVzaGluZyBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxMy43OTQ1NTA0MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjcxMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjM2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbm1tL21lbWNvbnRyb2wuYy0yMzctXFxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1MS1cXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cXG5tbS9tZW1jb250cm9sLmM6MjUyOlxcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLmM6MjUzOlxcdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTI1NC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTctI2Vsc2VcXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTI1OS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3LVxcbm1tL21lbWNvbnRyb2wuYzozMDg6XFx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTMwOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDgxPXN0cnVjdCBscnV2ZWNfc3RhdHMge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4NS1cXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgc3RhdGUgKi9cXG5tbS9tZW1jb250cm9sLmM6NDg2OlxcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcXG5tbS9tZW1jb250cm9sLmMtNDg3LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5LVxcbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vbWVtY29udHJvbC5jLTU1MS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjQtXFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG5tbS9tZW1jb250cm9sLmM6NTY1OlxcdHggPSBSRUFEX09OQ0UocG4tXFx1MDAzZWxydXZlY19zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy01NjYtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzYtXFxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTU3OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODQtXFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL21lbWNvbnRyb2wuYzo1ODU6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcXG5tbS9tZW1jb250cm9sLmMtNTg2LVxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02NzM9c3RydWN0IG1lbWNnX3Ztc3RhdHMge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3OC1cXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo2Nzk6XFx0bG9uZ1xcdFxcdFxcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5tbS9tZW1jb250cm9sLmMtNjgwLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtICovXFxubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy02OTgte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMy19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODU1PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzMtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxcbm1tL21lbWNvbnRyb2wuYzo4NzQ6ICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXFxubW0vbWVtY29udHJvbC5jLTg3NS0gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05Mzk9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTUzLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG5tbS9tZW1jb250cm9sLmM6OTU0OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxubW0vbWVtY29udHJvbC5jLTk1NS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTYxLVxcbm1tL21lbWNvbnRyb2wuYzo5NjI6XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjktXFxubW0vbWVtY29udHJvbC5jOjk3MDp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTcxLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxubW0vbWVtY29udHJvbC5jLTk3Mi17XFxubW0vbWVtY29udHJvbC5jOjk3MzpcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG5tbS9tZW1jb250cm9sLmMtOTc0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MzU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NDEtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzoxNzQyOnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG5tbS9tZW1jb250cm9sLmMtMTc0My17XFxubW0vbWVtY29udHJvbC5jOjE3NDQ6XFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGl0ZW0pICpcXG5tbS9tZW1jb250cm9sLmMtMTc0NS1cXHRcXHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1MDc9c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTExLVxcdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXFxubW0vbWVtY29udHJvbC5jOjQ1MTI6XFx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcXG5tbS9tZW1jb250cm9sLmMtNDUxMy1cXHQgKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NTY0PXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQ1NjUte1xcbm1tL21lbWNvbnRyb2wuYzo0NTY2OlxcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00NTY3LVxcdGludCBuaWQ7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU3My1cXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jOjQ1NzQ6XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NTc1OlxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xcbm1tL21lbWNvbnRyb2wuYy00NTc2LVxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5Mi1cXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NTkzOlxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1OTQtXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5Ni1cXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTc6XFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NTk4OlxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwNi1cXHRcXHRcXHRsc3RhdHMtXFx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NjA3OlxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDgtXFx0XFx0XFx0aWYgKHBsc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxMC1cXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ2MTE6XFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbm1tL21lbWNvbnRyb2wuYzo0NjEyOlxcdFxcdFxcdFxcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYy00NjEzLVxcdFxcdFxcdGlmIChwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG5tbS9tZW1jb250cm9sLmM6NDYzNzpcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxubW0vbWVtY29udHJvbC5jLTQ2MzgtXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjY5LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjcwOlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NzEtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1OD1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjM3LSAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XFxubW0vbWVtY29udHJvbC5jOjUyMzg6ICogaGllcmFyY2h5LCB2bXN0YXRzJ3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcXG5tbS9tZW1jb250cm9sLmMtNTIzOS0gKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2MS1cXHQgKiBvbiByb290X21lbV9jZ3JvdXAgd2l0aG91dCBjZ3JvdXBfbXV0ZXggYW5kIGEgZmx1c2ggaW5jcmVtZW50cyBzdGF0ZVxcbm1tL21lbWNvbnRyb2wuYzo1MjYyOlxcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXFxubW0vbWVtY29udHJvbC5jOjUyNjM6XFx0ICogcmVhZCBzdGF0ZSBhbmQgd3JpdGUgdG8gc3RhdGVfbG9jYWwsIGl0cyBzdGF0ZV9sb2NhbCBpbmNyZW1lbnQgaXNcXG5tbS9tZW1jb250cm9sLmMtNTI2NC1cXHQgKiBvdmVyd3JpdHRlbiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgc2hvcnQsIGJ1dCB0aGUgZGlmZmVyZW5jZSB3b3VsZCBiZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX1ZNU1RBVF9TSVpFOyBpKyspXFxubW0vbWVtY29udHJvbC5jOjUyNjk6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldO1xcbm1tL21lbWNvbnRyb2wuYy01MjcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxMy44ODYyMjgxOTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNjE1MjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSdtIHplcm9pbmcgaW4gb24gdGhlc2UgY3JpdGljYWwgYEZvY3VzU3ltYm9sc2A6IGBtZW1fY2dyb3VwX2JpbmRgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGFuZCBgZmx1c2hfbm1pX3N0YXRzYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIEknbSBmb2N1c2luZyBvbiBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IGFuZCBhY2NvdW50ZWQgZm9yIGluIHRoZSBmdXp6aW5nIHByb2Nlc3MuXG5cbk5vLCB3YWl0LCB0aGVyZSdzIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGFzIGFuIGludGVybmFsIGJvb2wgb3B0aW9uOyBub3QgdXNlci1zZWxlY3RhYmxlLiBJdCdzIGEgZGVwZW5kZW5jeSwgYnV0IG5vdCBzb21ldGhpbmcgdG8gZGlyZWN0bHkgY29uZmlndXJlLiBJdCBoaW5nZXMgb24gdGhlIGFyY2hpdGVjdHVyZSdzIE5NSSBzYWZldHkuIEdvb2QgdG8gbm90ZSwgYnV0IEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSBpdCBpbiBteSB0ZXN0LlxuXG5BbHJpZ2h0LCBzYW5pdHkgY2hlY2sgdGltZS4gTGV0J3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cC4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBhbmQgSSB3YW50IHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyBcIk1FTUNHXCIsIFwiTUVNQ0dfVjFcIi4gVGhvc2UgbWF0Y2ggd2l0aCB0aGUgYEZvY3VzU3ltYm9sc2AgSSBzZWxlY3RlZCBhdCB0aGUgc3RhcnQuIFRoYXQgbG9va3MgZ29vZC5cblxuRmluYWxseSwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhcHBsaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2MSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguMTAyMzgzNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxOTA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfYmluZFwiLFxuICAgIFwibWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVcIixcbiAgICBcImZsdXNoX25taV9zdGF0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfYmluZFwiLFxuICAgIFwibWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVcIixcbiAgICBcImZsdXNoX25taV9zdGF0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGJ5IHNraXBwaW5nIG5vbi1oaWVyYXJjaGljYWwgbG9jYWwgc3RhdHMgdXBkYXRlcyB3aGVuIG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9iaW5kKCkgdG8gaW5pdGlhbGl6ZSBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIHdoZW4gcmViaW5kaW5nIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IChjZ3JvdXAgdjEpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFjY291bnRpbmcgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxOC4yMjI1ODQ0NjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODExOTU0NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MTguMjIzNDg2OTI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU4MTEwNDU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBtZW1jZyBzdGF0aXN0aWNzIGZsdXNoaW5nIGJ5IHNraXBwaW5nIHVwZGF0ZXMgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgJ3N0YXRlX2xvY2FsJyBhbmQgJ2V2ZW50c19sb2NhbCcgYXJyYXlzIHdoZW4gcnVubmluZyBvbiB0aGUgY2dyb3VwIGRlZmF1bHQgaGllcmFyY2h5IChjZ3JvdXAgdjIpLCByZXR1cm5pbmcgTlVMTCBmcm9tIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkgYW5kIG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheSgpLCBhbmQgYWRkaW5nIGEgbWVtX2Nncm91cF9iaW5kKCkgY2FsbGJhY2sgdG8gYmFja2ZpbGwgdGhlc2UgYXJyYXlzIGlmIHJlYm91bmQgdG8gdGhlIGxlZ2FjeSBoaWVyYXJjaHkuXFxuXFxuQWxsIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbWNnX3Ztc3RhdHMpIGFyZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKCkgYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbi4gVGhlIGxvY2FsIHN0YWNrIGFnZ3JlZ2F0ZV9jb250cm9sIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgbGl0ZXJhbHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGJ5dGVzLCBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYXJlIGV4cG9zZWQgb3IgbW9kaWZpZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBzeW5jaHJvbml6YXRpb24gZHVyaW5nIHJlYmluZCBhcmUgaGFuZGxlZCBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxNjgyOWM3NzNjMTk0OGRkYzFhOTNlMDIzNjVlOTlkMThiNzc5ZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIwOjI1OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA1YjllMGViZDQyYWUwLi4zNzJhYzE5M2U3NzdiIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC02ODcsNiArNjg3LDI5IEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuKy8qXG4rICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeVxuKyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuKyAqIFRoZXkgYXJlIHNraXBwZWQgaWYgdGhlIGNvbnRyb2xsZXIgc2l0cyBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHlcbisgKiAobWVtX2Nncm91cF9iaW5kKCkgcG9wdWxhdGVzIHRoZW0gaWYgaXQgaXMgbGF0ZXIgbW92ZWQgb250byB0aGUgbGVnYWN5XG4rICogaGllcmFyY2h5KS5cbisgKi9cbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG4rfVxuK1xuIC8qXG4gICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZ1xuICAqXG5AQCAtNDQ4NCw3ICs0NTA3LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuK1x0LypcbitcdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXG4rXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuK1x0ICovXG4gXHRsb25nICpsb2NhbDtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi9cbiBcdGxvbmcgKnBlbmRpbmc7XG5AQCAtNDUyMyw3ICs0NTQ5LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuIFx0XHR9XG4gXG4gXHRcdC8qIEFnZ3JlZ2F0ZSBjb3VudHMgb24gdGhpcyBsZXZlbCBhbmQgcHJvcGFnYXRlIHVwd2FyZHMgKi9cbi1cdFx0aWYgKGRlbHRhX2NwdSlcbitcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gKz0gZGVsdGFfY3B1O1xuIFxuIFx0XHRpZiAoZGVsdGEpIHtcbkBAIC00NTM3LDYgKzQ1NjMsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gI2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4ge1xuK1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTQ0LDcgKzQ1NzEsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTtcbiBcbiBcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcbi1cdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcbitcdFx0aWYgKHN0YXRlX2xvY2FsKVxuK1x0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IGttZW07XG4gXHR9XG5AQCAtNDU2Niw3ICs0NTk0LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBzbGFiO1xuLVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XG4rXHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuK1x0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTc5LDcgKzQ2MDgsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ2MDQsNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4rXHRcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4gXHRcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VzdGF0ZSxcbkBAIC00NjE1LDcgKzQ2NDUsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxuIFxuIFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG4gXHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50cyxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWwsXG4rXHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG5AQCAtNTE5OSw2ICs1MjI5LDUwIEBAIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuIFx0eyB9XHQvKiB0ZXJtaW5hdGUgKi9cbiB9O1xuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbisvKlxuKyAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbGxlciBoYXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcywgd2l0aCB0aGUgb25fZGZsXG4rICoga2V5IGFscmVhZHkgaW4gaXRzIG5ldyBzdGF0ZS5cbisgKlxuKyAqIElmIHRoZSBjb250cm9sbGVyIGlzIG1vdmluZyBmcm9tIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSB0byB0aGUgbGVnYWN5XG4rICogaGllcmFyY2h5LCB2bXN0YXRzJ3Mgc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCBhcnJheXMgbmVlZCB0byBiZSBwb3B1bGF0ZWRcbisgKiBzaW5jZSB0aGV5IGdldCByZWFkIGJ5IHRoZSBsZWdhY3kgaGllcmFyY2h5LiBUaG9zZSB2YWx1ZXMgY2FuIGp1c3QgYmUgdGFrZW5cbisgKiBmcm9tIHRoZSB2bXN0YXRzJ3Mgc3RhdGUgYW5kIGV2ZW50cyBhcnJheXMgc2luY2UgcmViaW5kX3N1YnN5c3RlbXMoKSBvbmx5XG4rICogYWxsb3dzIHRoZSBtb3ZlIHdoZW4gdGhlIHJvb3QgaXMgdGhlIG9ubHkgbWVtY2cuXG4rICovXG4rc3RhdGljIHZvaWQgbWVtX2Nncm91cF9iaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290X2Nzcylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmx1c2ggaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgZGVzY2VuZGFudHMgdGhhdCBnb3RcbitcdCAqIGRlc3Ryb3llZCByaWdodCBiZWZvcmUgdGhlIHJlYmluZCB0aGF0IG1heSBoYXZlIGxlZnQgY291bnRzIGluIHRoZVxuK1x0ICogcGVuZGluZyBhcnJheXMgdGhhdCBoYXZlbid0IHlldCBiZWVuIGZvbGRlZCBpbnRvIHRoZSBzdGF0ZSBhbmQgZXZlbnRzXG4rXHQgKiBhcnJheXNcbitcdCAqL1xuK1x0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbitcbitcdC8qXG4rXHQgKiBOb3Qgc2VyaWFsaXplZCBhZ2FpbnN0IGEgY29uY3VycmVudCBmbHVzaC4gVGhlIHBlcmlvZGljIGZsdXNoZXIgcnVuc1xuK1x0ICogb24gcm9vdF9tZW1fY2dyb3VwIHdpdGhvdXQgY2dyb3VwX211dGV4IGFuZCBhIGZsdXNoIGluY3JlbWVudHMgc3RhdGVcbitcdCAqIGFuZCBzdGF0ZV9sb2NhbCB0b2dldGhlci4gSWYgdGhlIGZsdXNoIGhhcHBlbnMgaW4gYmV0d2VlbiB3aGVuIHdlXG4rXHQgKiByZWFkIHN0YXRlIGFuZCB3cml0ZSB0byBzdGF0ZV9sb2NhbCwgaXRzIHN0YXRlX2xvY2FsIGluY3JlbWVudCBpc1xuK1x0ICogb3ZlcndyaXR0ZW4gYW5kIHRoZSBjb3VudGVyIHN0YXlzIHNob3J0LCBidXQgdGhlIGRpZmZlcmVuY2Ugd291bGQgYmVcbitcdCAqIGEgc2luZ2xlIENQVSdzIGFjY3VtdWxhdGVkIGNoYXJnZXMgc2luY2UgdGhlIGxhc3QgZmx1c2ggYW5kIHRoZVxuK1x0ICogY291bnRlcnMgYXJlIGFwcHJveGltYXRlIHZhbHVlcy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcbitcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaV07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1DR19FVkVOVFM7IGkrKylcbitcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c1tpXTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuK1xuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbiBcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxuQEAgLTUyMTIsNiArNTI4Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbiBcdC5leGl0ID0gbWVtX2Nncm91cF9leGl0LFxuIFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdC5iaW5kID0gbWVtX2Nncm91cF9iaW5kLFxuIFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4gI2VuZGlmXG4gXHQuZWFybHlfaW5pdCA9IDAsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoyNjoxOC4yMjM0ODg0MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NzQxMjU4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEknbSBnb2luZyB0byBmb2xsb3cgbXkgbWVudGFsIGNoZWNrbGlzdDogSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guIEtBU0FOIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgc28gYW55dGhpbmcgaXQgY292ZXJzLCBJIGNhbiBydWxlIG91dC4gTXkgY29uY2VybiBpcyBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCByZWFkcyB0aGF0IHNsaXAgdGhyb3VnaCB0aGUgY3JhY2tzLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCwgYW5kIEkgc2VlIGl0IGFkZGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YC4gVGhlc2UgZnVuY3Rpb25zIGNvbmRpdGlvbmFsbHkgcmV0dXJuIGVpdGhlciBgTlVMTGAgb3IgcG9pbnRlcnMgdG8gdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGFycmF5cyB3aXRoaW4gdGhlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIENvbmRpdGlvbmFsIHJldHVybnMgYXJlIGEgcG90ZW50aWFsIHJlZCBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIGBOVUxMYD8gSXMgdGhlIGNhbGxpbmcgY29kZSBoYW5kbGluZyBpdCBjb3JyZWN0bHk/IFRoYXQncyBub3QgYSBLTVNBTiBpc3N1ZSBpZiB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIGl0LCBidXQgY291bGQgbGVhZCB0byBhIGNyYXNoLlxuXG5JJ20gc2VlaW5nIGEgbG90IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGludm9sdmluZyBgZGVsdGFfY3B1YCBhbmQgYGFjLVx1MDAzZWxvY2FsYCB1c2luZyB0aG9zZSBuZXcgZnVuY3Rpb25zLiBJIGFsc28gc2VlIHRoYXQgYHN0YXRlX2xvY2FsYCBpcyBhY3F1aXJlZCB1c2luZyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGluIGBmbHVzaF9ubWlfc3RhdHNgLCBhbmQgaXQgY2hlY2tzIGlmIGl0J3Mgbm9uLU5VTEwgYmVmb3JlIGFkZGluZyB0byBpdC4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGF0IGNvbmRpdGlvbiBpcyBjb25zaXN0ZW50bHkgaGFuZGxlZC5cblxuVGhlcmUncyBzb21lIHJlYmluZGluZyBvZiBsZWdhY3kgaGllcmFyY2hpZXMgd2l0aCBgbWVtX2Nncm91cF9iaW5kYCB3aGljaCBwb3B1bGF0ZXMgYG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYC4gTm93LCAqaG93KiBpcyB0aGF0IGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZD8gVGhhdCdzIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBjb21lcyBmcm9tIGFuZCBob3cgaXQgZ2V0cyBpbml0aWFsaXplZC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29saW5nIGxpa2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IHRyYWNlIHRoYXQuIElmIHRoZXJlJ3MgYW4gaW5pdGlhbGl6YXRpb24gcHJvYmxlbSwgb3IgaWYgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJ3QgZnVsbHkgemVyb2VkLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBBcmUgdGhlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gQXJlIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugd2l0aG91dCBzYW5pdGl6YXRpb24/XG5cbkJhc2VkIG9uIGEgY3Vyc29yeSBnbGFuY2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBhcmVhczpcblxuMS4gIEhvdyBpcyBgbWVtY2ctXHUwMDNldm1zdGF0c2AgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcnJheXMgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5LlxuMi4gIElmIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgcmV0dXJucyBgTlVMTGAsIGlzIHRoZSBjYWxsaW5nIGNvZGUgKmFsd2F5cyogaGFuZGxpbmcgdGhpcyBjb3JyZWN0bHkgdG8gcHJldmVudCB1c2UtYWZ0ZXItTlVMTD9cbjMuICBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhpcyBwYXRjaCB3aGljaCB3cml0ZSB0aGUgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgZmllbGRzP1xuXG5JJ20gbGVhbmluZyB0b3dhcmRzICpub3QqIG5lZWRpbmcgS01TQU4gYmFzZWQgb24gdGhpcyBpbml0aWFsIHBhc3MsIGFzIEknbSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgcG90ZW50aWFsbHkgYE5VTExgIGFycmF5LiBJIHdpbGwsIGhvd2V2ZXIsIG5lZWQgdG8gZnVsbHkgaW52ZXN0aWdhdGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtZW1jZy1cdTAwM2V2bXN0YXRzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGxvb2tzIGNsZWFuLCBJJ2xsIHJlY29tbWVuZCB0aGF0IEtBU0FOIGNvdmVyYWdlIGlzIGxpa2VseSBzdWZmaWNpZW50LiBJZiB0aGVyZSdzIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UqLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCAqdGhlbiogS01TQU4gaXMgd2FycmFudGVkLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjI2OjM1Ljc5NzYxNzAxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMDMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTY0OT1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19ldmVudHNfaW5kZXgoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NTMtXFxubW0vbWVtY29udHJvbC5jOjY1NDpzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbm1tL21lbWNvbnRyb2wuYy02NTUtXFx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY1OC1cXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NTk6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XFx0KnBhcmVudF9wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo2NjA6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcXHRcXHRcXHQqdm1zdGF0cztcXG5tbS9tZW1jb250cm9sLmMtNjYxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3Mi1cXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTY5Nz1zdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMy19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzA1PXN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwOS1cXG5tbS9tZW1jb250cm9sLmM6NzEwOlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX2xvY2FsO1xcbm1tL21lbWNvbnRyb2wuYy03MTEtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTczMD1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MzMtXFxubW0vbWVtY29udHJvbC5jOjczNDpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbm1tL21lbWNvbnRyb2wuYy03MzUte1xcbm1tL21lbWNvbnRyb2wuYzo3MzY6XFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMpIFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmMtNzM3LVxcdFxcdE1FTUNHX0NIQVJHRV9CQVRDSCAqIG51bV9vbmxpbmVfY3B1cygpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTc0MD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc0Mi17XFxubW0vbWVtY29udHJvbC5jOjc0MzpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnN0YXRjX3BjcHU7XFxubW0vbWVtY29udHJvbC5jOjc0NDpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy03NDUtXFx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTc1MC1cXHRfX2Nzc19yc3RhdF91cGRhdGVkKFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzLCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYzo3NTE6XFx0c3RhdGNfcGNwdSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdTtcXG5tbS9tZW1jb250cm9sLmMtNzUyLVxcdGZvciAoOyBzdGF0Y19wY3B1OyBzdGF0Y19wY3B1ID0gc3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzU4LVxcdFxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzo3NTk6XFx0XFx0aWYgKG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goc3RhdGMtXFx1MDAzZXZtc3RhdHMpKVxcbm1tL21lbWNvbnRyb2wuYy03NjAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNzY3LVxcdFxcdHN0YXRzX3VwZGF0ZXMgPSB0aGlzX2NwdV94Y2hnKHN0YXRjX3BjcHUtXFx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xcbm1tL21lbWNvbnRyb2wuYzo3Njg6XFx0XFx0YXRvbWljX2xvbmdfYWRkKHN0YXRzX3VwZGF0ZXMsIFxcdTAwMjZzdGF0Yy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcyk7XFxubW0vbWVtY29udHJvbC5jLTc2OS1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NzcyPXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpXFxubW0vbWVtY29udHJvbC5jLTc3My17XFxubW0vbWVtY29udHJvbC5jOjc3NDpcXHRib29sIG5lZWRzX2ZsdXNoID0gbWVtY2dfdm1zdGF0c19uZWVkc19mbHVzaChtZW1jZy1cXHUwMDNldm1zdGF0cyk7XFxubW0vbWVtY29udHJvbC5jLTc3NS1cXG5tbS9tZW1jb250cm9sLmM6Nzc2OlxcdHRyYWNlX21lbWNnX2ZsdXNoX3N0YXRzKG1lbWNnLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcyksXFxubW0vbWVtY29udHJvbC5jLTc3Ny1cXHRcXHRmb3JjZSwgbmVlZHNfZmx1c2gpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTgxNT1zdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODE3LVxcdC8qXFxubW0vbWVtY29udHJvbC5jOjgxODpcXHQgKiBEZWxpYmVyYXRlbHkgaWdub3JlIG1lbWNnX3Ztc3RhdHNfbmVlZHNfZmx1c2goKSBoZXJlIHNvIHRoYXQgZmx1c2hpbmdcXG5tbS9tZW1jb250cm9sLmMtODE5LVxcdCAqIGluIGxhdGVuY3ktc2Vuc2l0aXZlIHBhdGhzIGlzIGFzIGNoZWFwIGFzIHBvc3NpYmxlLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTgyNT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTgzMi1cXG5tbS9tZW1jb250cm9sLmM6ODMzOlxcdHggPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtODM0LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTEzPXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjMtXFxubW0vbWVtY29udHJvbC5jOjkyNDpcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTI1LVxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTU0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTYxLVxcbm1tL21lbWNvbnRyb2wuYzo5NjI6XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy05NjMtI2lmZGVmIENPTkZJR19TTVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05ODA9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05OTItXFx0LyogVXBkYXRlIG1lbWNnICovXFxubW0vbWVtY29udHJvbC5jOjk5MzpcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTk0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwNjY9dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTA3OC1cXHQgKiB3aGVuIHdlIGZyZWUgdGhlIHNsYWIgb2JqZWN0LCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcGVyLW1lbWNnXFxubW0vbWVtY29udHJvbC5jOjEwNzk6XFx0ICogdm1zdGF0cyB0byBrZWVwIGl0IGNvcnJlY3QgZm9yIHRoZSByb290IG1lbWNnLlxcbm1tL21lbWNvbnRyb2wuYy0xMDgwLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwOTY9dm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMDktXFxubW0vbWVtY29udHJvbC5jOjExMTA6XFx0dGhpc19jcHVfYWRkKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdS1cXHUwMDNlZXZlbnRzW2ldLCBjb3VudCk7XFxubW0vbWVtY29udHJvbC5jLTExMTEtXFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgY291bnQsIGNwdSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTExNz11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTIzLVxcbm1tL21lbWNvbnRyb2wuYzoxMTI0OlxcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c1tpXSk7XFxubW0vbWVtY29udHJvbC5jLTExMjUtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTExMzY9dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Mi1cXG5tbS9tZW1jb250cm9sLmM6MTE0MzpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTg2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTk4LVxcdG1lbWNnMV9mcmVlX2V2ZW50cyhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQxOTk6XFx0a2ZyZWUobWVtY2ctXFx1MDAzZXZtc3RhdHMpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjAwOlxcdGZyZWVfcGVyY3B1KG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSk7XFxubW0vbWVtY29udHJvbC5jLTQyMDEtXFx0a2ZyZWUobWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQyMTIte1xcbm1tL21lbWNvbnRyb2wuYzo0MjEzOlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jOjQyMTQ6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG5tbS9tZW1jb250cm9sLmMtNDIxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyOS1cXG5tbS9tZW1jb250cm9sLmM6NDIzMDpcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjMxOlxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxubW0vbWVtY29udHJvbC5jLTQyMzItXFx0XFx0Z290byBmYWlsO1xcbm1tL21lbWNvbnRyb2wuYy00MjMzLVxcbm1tL21lbWNvbnRyb2wuYzo0MjM0OlxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbm1tL21lbWNvbnRyb2wuYy00MjM1LVxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjM2OlxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1KVxcbm1tL21lbWNvbnRyb2wuYy00MjM3LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjQxLVxcbm1tL21lbWNvbnRyb2wuYzo0MjQyOlxcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XFxubW0vbWVtY29udHJvbC5jLTQyNDMtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbm1tL21lbWNvbnRyb2wuYzo0MjQ0OlxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYy00MjQ1LVxcdFxcdHN0YXRjLVxcdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo0MjQ2OlxcdFxcdHN0YXRjLVxcdTAwM2V2bXN0YXRzID0gbWVtY2ctXFx1MDAzZXZtc3RhdHM7XFxubW0vbWVtY29udHJvbC5jLTQyNDctXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NjQ9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTcyLVxcbm1tL21lbWNvbnRyb2wuYzo0NTczOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmMtNDU3NC1cXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU3Ni1cXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NTc3OlxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmMtNDU3OC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NTk2OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDU5OS1cXHRcXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NjAwOlxcdFxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYwMS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYwOS1cXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbm1tL21lbWNvbnRyb2wuYzo0NjEwOlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYxMS1cXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxMy1cXHRcXHRcXHRpZiAocGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYzo0NjE0OlxcdFxcdFxcdFxcdHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDYxNS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDYyMz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MjYtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmM6NDYyNzpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy00NjI4LVxcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjMyLVxcbm1tL21lbWNvbnRyb2wuYzo0NjMzOlxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbm1tL21lbWNvbnRyb2wuYy00NjM0LVxcbm1tL21lbWNvbnRyb2wuYy00NjM1LVxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbm1tL21lbWNvbnRyb2wuYzo0NjM2OlxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGUsXFxubW0vbWVtY29udHJvbC5jLTQ2MzctXFx0XFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxcbm1tL21lbWNvbnRyb2wuYzo0NjM4OlxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzk6XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG5tbS9tZW1jb250cm9sLmMtNDY0MC1cXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlc3RhdGUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY0Ni1cXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG5tbS9tZW1jb250cm9sLmM6NDY0NzpcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG5tbS9tZW1jb250cm9sLmMtNDY0OC1cXHRcXHQubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLFxcbm1tL21lbWNvbnRyb2wuYzo0NjQ5OlxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19wZW5kaW5nLFxcbm1tL21lbWNvbnRyb2wuYzo0NjUwOlxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbm1tL21lbWNvbnRyb2wuYy00NjUxLVxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VldmVudHMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY4MS1cXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cXG5tbS9tZW1jb250cm9sLmM6NDY4MjpcXHRpZiAoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMpKVxcbm1tL21lbWNvbnRyb2wuYzo0NjgzOlxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xcbm1tL21lbWNvbnRyb2wuYy00Njg0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTU4PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzctICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgbW92aW5nIGZyb20gdGhlIGRlZmF1bHQgaGllcmFyY2h5IHRvIHRoZSBsZWdhY3lcXG5tbS9tZW1jb250cm9sLmM6NTIzODogKiBoaWVyYXJjaHksIHZtc3RhdHMncyBzdGF0ZV9sb2NhbCBhbmQgZXZlbnRzX2xvY2FsIGFycmF5cyBuZWVkIHRvIGJlIHBvcHVsYXRlZFxcbm1tL21lbWNvbnRyb2wuYy01MjM5LSAqIHNpbmNlIHRoZXkgZ2V0IHJlYWQgYnkgdGhlIGxlZ2FjeSBoaWVyYXJjaHkuIFRob3NlIHZhbHVlcyBjYW4ganVzdCBiZSB0YWtlblxcbm1tL21lbWNvbnRyb2wuYzo1MjQwOiAqIGZyb20gdGhlIHZtc3RhdHMncyBzdGF0ZSBhbmQgZXZlbnRzIGFycmF5cyBzaW5jZSByZWJpbmRfc3Vic3lzdGVtcygpIG9ubHlcXG5tbS9tZW1jb250cm9sLmMtNTI0MS0gKiBhbGxvd3MgdGhlIG1vdmUgd2hlbiB0aGUgcm9vdCBpcyB0aGUgb25seSBtZW1jZy5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYmluZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfVk1TVEFUX1NJWkU7IGkrKylcXG5tbS9tZW1jb250cm9sLmM6NTI2OTpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0gPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaV07XFxubW0vbWVtY29udHJvbC5jLTUyNzAtXFxubW0vbWVtY29udHJvbC5jLTUyNzEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTUNHX0VWRU5UUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wuYzo1MjcyOlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0gPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzW2ldO1xcbm1tL21lbWNvbnRyb2wuYy01MjczLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6MzUuODc2OTI1MjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTc1Nzg1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEFjY291bnRpbmcgT3B0aW1pemF0aW9uIGluIGNncm91cCB2MioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTidzIHByaW1hcnkgY29uY2Vybi5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnLVx1MDAzZXZtc3RhdHNgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4gYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBvbiBhbGxvY2F0aW9uLCBpbmNsdWRpbmcgYHN0YXRlYCwgYHN0YXRlX2xvY2FsYCwgYGV2ZW50c2AsIGBldmVudHNfbG9jYWxgLCBgc3RhdGVfcGVuZGluZ2AsIGBldmVudHNfcGVuZGluZ2AsIGFuZCBgc3RhdHNfdXBkYXRlc2AuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuIFdlJ3JlIHN0YXJ0aW5nIGNsZWFuLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIG9wdGltaXplcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGl0IHNraXBzIHVwZGF0aW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGNvdW50ZXJzIHdoZW4gdGhlIHN5c3RlbSBpcyB1c2luZyB0aGUgZGVmYXVsdCwgbm9uLWhpZXJhcmNoaWNhbCBjZ3JvdXAgdjIgaGllcmFyY2h5LiBUaGVzZSBsb2NhbCBjb3VudGVycyBhcmUgb25seSB1c2VkIGluIGNncm91cCB2MSAobGVnYWN5KS4gSWYgYSBjb250cm9sbGVyIGlzICpyZWJvdW5kKiB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeSwgYG1lbV9jZ3JvdXBfYmluZGAgY29waWVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbnRvIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgLlxuXG5UaGUgXCJyaXNrXCIgcXVlc3Rpb24sIHRoZW4sIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBJJ3ZlIGV4YW1pbmVkIHRoaXMgY2FyZWZ1bGx5OlxuXG4qICAgVGhlIGFsbG9jYXRpb24gb2YgYG1lbWNnLVx1MDAzZXZtc3RhdHNgIHZpYSBga3phbGxvY19vYmpgIHJ1bGVzIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGF0IHN0cnVjdHVyZS5cbiogICBgbWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHVgIGlzIGFsbG9jYXRlZCB1c2luZyBgYWxsb2NfcGVyY3B1X2dmcGAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byB3YXRjaCBmb3IgYnV0IEkgZG9uJ3Qgc2VlIGFueSBpc3N1ZSBoZXJlLlxuKiAgIEluIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCgpYCwgdGhlIGBhY2Agc3RydWN0IChvZiB0eXBlIGBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2xgKSBpcyBpbml0aWFsaXplZCBhcyBhIHN0cnVjdCBsaXRlcmFsLiBFdmVyeSBtZW1iZXIgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZDogYGFnZ3JlZ2F0ZWAsIGBsb2NhbGAsIGBwZW5kaW5nYCwgYHBwZW5kaW5nYCwgYW5kIGBjc3RhdGAuIFRoZXJlJ3Mgbm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZS5cbiogICBJIHNlZSBubyBgY29weV90b191c2VyYCBjYWxscyBpbnZvbHZpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIHN0cnVjdHMuXG4qICAgVGhlcmUgYXJlIG5vIHBvaW50ZXJzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIFRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblNvLCBpcyB0aGVyZSAqYW55KiByaXNrPyBUaGUgb25seSBwb3RlbnRpYWwgaXNzdWUgSSBzZWUgaXMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGFjLVx1MDAzZWxvY2FsYCBpcyBOVUxMICh3aGljaCBpdCBjYW4gYmUgaW4gdjIpLiBIb3dldmVyLCB0aGF0IHdvdWxkIGJlIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNyYXNoLCB3aGljaCB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcuIEknbSBhbHNvIGxvb2tpbmcgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2UgYXJlIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJJ3ZlIGNoZWNrZWQgdGhlIHN0YW5kYXJkIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG4yLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBObyBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBsYXRlci4gRXZlcnl0aGluZyBpcyBremFsbG9jJ2QuXG40LiAgTm8gcG90ZW50aWFsIGJvdW5kcyBjaGVjayBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSGVyZSdzIHRoZSByZWFzb25pbmcgSSdkIHVzZSB0byBqdXN0aWZ5IHRoaXM6XG5cbiogICBUaGUgcGF0Y2ggb3B0aW1pemVzIG1lbW9yeSBhY2NvdW50aW5nIGJ5IHNraXBwaW5nIHRoZSB1cGRhdGluZyBvZiBub24taGllcmFyY2hpY2FsIGxvY2FsIHZtc3RhdHMgb24gdGhlIGRlZmF1bHQgY2dyb3VwIGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgYWRkaW5nIGEgYmluZCBjYWxsYmFjayB0byBmaWxsIHRoZXNlIGxvY2FsIHN0YXRzIGlmIG1vdmluZyB0byB0aGUgbGVnYWN5IGhpZXJhcmNoeS5cbiogICBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2U6XG4gICAgKiAgIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcyBhcmUgYWxsIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYC5cbiAgICAqICAgU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhY2AgYXJlIGluaXRpYWxpemVkIHVzaW5nIHN0cnVjdCBsaXRlcmFscy5cbiAgICAqICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHJlYWRzLlxuICAgICogICBBbnkgYnVncyAoZS5nLiwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBoaWVyYXJjaHkgcmVib3VuZCBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBjcmFzaCBoYW5kbGVycywgS0FTQU4sIG9yIExPQ0tERVAuXG4qICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkkgYW0gY29tZm9ydGFibGUgd2l0aCB0aGlzIGFzc2Vzc21lbnQuIExldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5NywiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MjY6NDQuMDM0NTA4MDQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbWVtY2cgc3RhdGlzdGljcyBmbHVzaGluZyBieSBza2lwcGluZyB1cGRhdGVzIHRvIHRoZSBub24taGllcmFyY2hpY2FsICdzdGF0ZV9sb2NhbCcgYW5kICdldmVudHNfbG9jYWwnIGFycmF5cyB3aGVuIHJ1bm5pbmcgb24gdGhlIGNncm91cCBkZWZhdWx0IGhpZXJhcmNoeSAoY2dyb3VwIHYyKSwgcmV0dXJuaW5nIE5VTEwgZnJvbSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpIGFuZCBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKSwgYW5kIGFkZGluZyBhIG1lbV9jZ3JvdXBfYmluZCgpIGNhbGxiYWNrIHRvIGJhY2tmaWxsIHRoZXNlIGFycmF5cyBpZiByZWJvdW5kIHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5LlxcblxcbkFsbCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1jZ192bXN0YXRzKSBhcmUgYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaigpIGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24uIFRoZSBsb2NhbCBzdGFjayBhZ2dyZWdhdGVfY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGxpdGVyYWxzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGFyZSBleHBvc2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc3luY2hyb25pemF0aW9uIGR1cmluZyByZWJpbmQgYXJlIGhhbmRsZWQgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[1] Phase: Succeeded StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-03 20:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-03 20:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2] Phase: Succeeded StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-03 20:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 20:26:55 +0000 UTC FinishedAt: 2026-09-03 20:27:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-124344178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 20:27:05 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 20:27:05 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8753c5cb-0eba-47de-b806-d9980dc3962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-124344178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "93a42651-1f7d-483b-8e3b-fcfa71cd15f0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-2522537712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:27:05 +0000 UTC FinishedAt: 2026-09-03 20:47:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8753c5cb-0eba-47de-b806-d9980dc3962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-124344178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "93a42651-1f7d-483b-8e3b-fcfa71cd15f0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-2522537712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 20:47:19 +0000 UTC FinishedAt: 2026-09-03 20:47:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-2304712845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 20:47:29 +0000 UTC FinishedAt: 2026-09-03 20:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 20:47:29 +0000 UTC FinishedAt: 2026-09-03 20:49:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93a42651-1f7d-483b-8e3b-fcfa71cd15f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-2522537712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 20:49:40 +0000 UTC FinishedAt: 2026-09-03 20:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 20:49:40 +0000 UTC FinishedAt: 2026-09-03 20:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 20:49:40 +0000 UTC FinishedAt: 2026-09-03 21:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 20:49:40 +0000 UTC FinishedAt: 2026-09-03 21:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8753c5cb-0eba-47de-b806-d9980dc3962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-2304712845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5e26f9d0-2f80-410e-a1c3-3893e4188f2d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-462401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:49:40 +0000 UTC FinishedAt: 2026-09-03 21:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8753c5cb-0eba-47de-b806-d9980dc3962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-2304712845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5e26f9d0-2f80-410e-a1c3-3893e4188f2d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-462401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 21:05:43 +0000 UTC FinishedAt: 2026-09-03 21:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 21:05:43 +0000 UTC FinishedAt: 2026-09-03 21:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 21:05:43 +0000 UTC FinishedAt: 2026-09-03 21:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 21:05:43 +0000 UTC FinishedAt: 2026-09-03 21:07:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e26f9d0-2f80-410e-a1c3-3893e4188f2d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-462401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*93a42651-1f7d-483b-8e3b-fcfa71cd15f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e26f9d0-2f80-410e-a1c3-3893e4188f2d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-2522537712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-462401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-03 21:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-03 21:07:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-3425720690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-03 21:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-03 21:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 21:07:39 +0000 UTC FinishedAt: 2026-09-03 21:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 21:07:49 +0000 UTC FinishedAt: 2026-09-04 00:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlflj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_bind","mem_cgroup_css_rstat_flush","mem_cgroup_stat_aggregate","flush_nmi_stats"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"e1c3cbdc-1263-4334-a46f-c0dfc8f5b63d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 21:07:49 +0000 UTC FinishedAt: 2026-09-04 00:15:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93a42651-1f7d-483b-8e3b-fcfa71cd15f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e26f9d0-2f80-410e-a1c3-3893e4188f2d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-2522537712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-build-action-462401129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlflj/series-workflowhlflj-convert-artifact-3425720690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}